Todo List

Member autotest ()
test fauls for tautotest<unsigned char,short>();, use valgrind!

File basicNumber.h

besseren (sprechenden) Namen einfallen lassen.

rename basicNumber (to what?)?

Member basicNumber::printMultSecure (std::ostream &os) const
wieso hast du den Operator += geschrieben? Das birgt Fehleranfälligkeit!

Class basicNumber< TScalar >

implizite TNum Initialisierung nur über den dazugehörigen Ring - mal sehen

Skalar Datentyp abhängig von der Characteristik wählen - ist prinzipiell moeglich

folgende Frage klaeren:<cstdint>) and use the 'int_fastX_t'

als TScalar nur primitive Datentypen zulassen und dies prüfen. Wieso? ->

Member BlockMatrix::printValue (ostream &os) const
manche Funktionen eine Ebene nach oben ziehen

Member BlockMatrix::unblock ()
diese Funktion testen

Class CFPointFilter

besseren Klassennamen einfallen lassen.

File CompileFunctions.h
Dateiname irreführend -> ändern!

File fast_frommer.h
Optimierung: in fast_frommer nach Möglichkeit alle IF-Abfragen entfernen. The template parameter t is introduced to differ profile statistics (gprof) for the case EPSPRECision=0 (t=0) and EPSPRECision=1 (t=1)

File fast_polynom.h
kann eventuell wegrationalisiert werden, da kaum Geschwindigkeitsvorteil, wenn getCoeffAddr nur selten aufgerufen wird.

File fast_polynom_pair.h

ensure that 'memset()' is correct implemented on a given architecture

drop this code and use 'pair' with fast_polynomXY or polynomXY, if it is fast enough.

Member fast_polynomx::clear (int _degree)
: memset war schneller, aber unsicher. Wieso war denn die folgende memset-Anweisung korrekt? WEIL es sich hier i, polynomX nicht um POLYNOMXY handelt !!

Member fast_polynomXY::clear (short _degree)
verbesserung fuer B->clear(degree): hole mir den hoechsten Index entweder 0,3 oder 3,0 und dann setze bis dahin alles nULL

Class fast_polynomXY< defs, TNum >

maxDegree dynamisch und statisch

output is independent from polynom implementation,

was ist mit getDegree() und getMaxDegree(): soll man das unterscheiden oder nicht? Und wie soll das Umgesetzt werden?

koeff public?? bin ich wahnsinnig??? Bessere Lösung?

Member fast_polynomXY_pair::getCoeffGroupAddr (const short degree)
write testMonomDegree function

Class fast_polynomXY_pair< defs, TNum >
maxDegree dynamisch und statisch

Member fast_Ring::ConvertScalar (const int a) const
TNum::scalarType zurueckgeben oder bei int bleiben?

Member fast_Ring::createAdditiveInverseTable ()
modulo % getCharacteristic() in initAddInv() unnoetig

Member fast_Ring::createMultiplicativeInverseTable ()

in den Initialisierungsfunktionen die Convert-Funktion nutzen!

initInv überarbeiten!

Member fast_Ring::epsilon
Variable umbenenen in epsPrecision.

Member fast_Ring::fast_Ring (unsigned short _characteristic, unsigned short epsPrec)
hier pruefen, ob tNum gross genug ausgelegt ist

Member fast_Ring::getField () const
alternativ Field asls const Membervariable.

Member fast_Ring::getGenerator ()

herausfinden, welchen Datentyp wir nach der -Operation haben und ob es Probleme bei unsigned Datentypen gibt.

vernuenftige Loesung fuer epsPrecision>0.

testen , ob angegebene Charakteristik eine Primzahl ist - Merkt man das nicht spaetestens wenn es keinen Erzeuger gibt?

Member fast_Ring::init ()
warum dieser Init-Kram ? gibt sowieso nur einen Konstruktor, aber nun gut...

Member fast_Ring::initElementsToExponentsTab (TNum erzeuger)
is only correct for epsPrecision==0 and does not really belong in fast_Ring class!

Class fast_Ring< TNum, kdefs >

multiplyOnCPU einfuehren bzw multiplyByHand

Idee: shift index bei generischer Version - hätte vielleicht Vorteile, da schneller addiert werden kann. Hm, warum wird die Optimierte Version ohne Addition nicht schneller? Schliesslich wird der Platz für den Pointer auf die Additionstabelle frei.

ueberpruefen, ob man nicht ohne die funktionen mit parametern 'passed by reference' auskommen kann, d.h. ob dies nicht wesentlich die performance verschlechtert, und wie man bei 'pass by value'-parametern und Rückgabewerten unnötiges Kopieren verhindern kann.

File fastNumber.h

The interfaces of number_eps1 nnumber_eps0 and epsZahl should be identical!

: Fehlertest für die ausreichende Dimensierung der Datentype (insb. TScalar) bereits zur Kompilezeit durchführen

File FFLASMatrix.h

wieso heisst die Datei fflas und die Matrix FFpackMatrix ? /

statt int rows unsigned int rows...u.s.w.

Member FFpackMatrix::FFpackMatrix (int _rows, int _cols, int characteristic, string name="unnamedFFPACKMatrix")
ist hier memset ueberhaupt erlaubt?

Member FFpackMatrix::FFpackMatrix (const TMatrix &mat, int characteristic, bool transpose=false)

.getValue aus dieser FKT rauswerfen.

implement a RowByRow Matrix iterator

do not create new Field F everytime

do not create new Field F everytime

Member fieldScalar::getSingleIndex (const fieldScalar b, const TScalar characteristic)
const Correctness

Member fieldScalar::operator== (const fieldScalar z) const
wo zum Teufel hast du diesen Operator eingesetzt? Todo: testen, ob nicht aus Versehen zwei 'fieldScalar'-Objekte unbedarft addiert werden können.

Member fieldScalar::setValue (TScalar _epsExponent, TScalar coeff)
setValue-Operation nur über den Körper/ Ring laufen lassen?

Member fieldScalar::wellDefined (unsigned int characteristic)

Class fieldScalar< TScalar >

bei zusammengesetzten Typen bei getX() und getEPS keinen primitiven Datentyp zurueckliefern, sondern einen mit Memberfunktionen wie z.B. isZero.

wenn eine Initialisierung von TNum unter Umgehung des Rings geschehen soll, muss das über einen expliziten Konstruktor-Aufruf erfolgen, der Fehlerfreiheit zuliebe!

File groupdefs.h

WICHTIG Dokumentation unter stud.uni-hannover.de stellen, weil es so in der README steht!

Ordner c-program/jobs mit den beispieljobs verschieben

die Datei 'common.mk' im Ordner c-program ist nicht mehr aktiv! - Loeschen!

Class kdefs_zahl_x< CHAR, EPSPREC >
Parametrize with EPSPRECISION ?

Group lift Test

maxLift und liftTrials muss parametrisiert werden können und nicht von cfparams_m abgefragt.

Idee, um den Zugriff nur auf bestimmte Parameter von cfParams zu erlauben ( nicht maxLift und nicht liftTrials): in einer auf den liftTest zugeschnittenen Schnittstelle cfParams kapseln.

Member main (int argc, const char *argv[])
Achtung: charakteristik darf 127 nicht überschreiten, sonst gibt es Ärger (zumindest mit fastNumber::getPairIndex()) - Stimmt das noch?

Member Matrix3D::computeFrontalMatrixBasis () const
option verbesserung: statt getRowAsVector liefere Iterator ueber eine Zeile. Die Matrix soll dann mit dem Iterator konstruiert werden.

Member Matrix3D::getTransversalForm () const
was passiert, wenn die z-Dimension 0 ist ?

Member Matrix3D::setFrontalMatrix (unsigned int index, TMatrix2D *matrix)
set kann auch durch append ersetzt werden

Class Matrix3D< TMatrix2D >
TMatrix, Matrix3D: wenn der Ring-Parameter NULL ist, muss eventuell der gewoehnliche operator* funktionieren (gewoehnliche Multiplikation)

Namespace nCenterFocus
schauen, ob überall der gleiche assert-header eingebunden wird.

Member nCenterFocus::BaseQuadricsStatistic::printValue (std::ostream &os) const
umschreiben in getValueAsString

Class nCenterFocus::BaseRankStatistic

eventuell eine Unterklasse bilden, welche für eine feste Anzahl verschwundener Strudelgrößen die Ränge der Jacobi-Matrizen zählt.

bessere Parameternamen im Konstruktor und diese dokumentieren, sowohl in BaseRankStatistic als auch in RankAndLiftStatistic.

Member nCenterFocus::BaseRankStatistic::BaseRankStatistic (std::string name, int _requestedMinSuccessiveVanishedFocalValues, int _maxFocalValuesToCompute, int _maxRank)

note the max possible value for jacobian rank?

Member nCenterFocus::BaseRankStatistic::operator= (const BaseRankStatistic &)
: operator sicher implementieren..

Member nCenterFocus::centerfocus (int argc, const char *argv[])

is in CheckAllMonoms() something wrong? /

Python Skript schreiben, um Ergebnisse zusammenzuzaehlen - TEILWEISE ERLEDIGT /

Ueberlegen, wie verschiedene Programmdurchlaeufe verwaltet werden sollen. /

command line options parser popt or gengetopt! /

benenne CenterfocusParams um in centerFocusParams? /

eventuell Fortschrittsanzeige (das Programm tut was) /

: hier mit OpenMP parallelisieren, geht an dieser Stelle nur, falls es sich nicht um ein Zufallsexperiment handelt. Strategie: lese mehrere Polynome und starte parallel die Auswertung und gebe die Ergebnisse synchronisiert aus.

Member nCenterFocus::CenterFocusExperiment::CenterFocusExperiment (D_CenterfocusParams const *params, PrintCenterFocusResults *prn)

optional: diese Klasse so entwerfen, dass diese Funktion nur existiert, falls man inFailedLiftNr beobachten will.

ueberall, wo

epsPrecision vom Ring für Quadrikberechnung muss hoechstens 2 sein!

Member nCenterFocus::CenterFocusExperiment::CFRandomExperiment
im Konstruktor pruefen, dass TFrommer1::TPolynomXY gleich TFrommer2::TPolynomXY und dass die Elemente EpsPrecision 1 zulassen!

Member nCenterFocus::CenterFocusExperiment::complementColumns (const Matrix_Type &mat)
prefix computeQuadric_ dem FKTnamen hinzufuegen

Member nCenterFocus::CenterFocusExperiment::computeQuadric (const TPolynomXY_Type &minusPpol, const TPolynomXY_Type &Qpol, const Matrix_Type &jacobiMat, const list< CoeffListEntry > &coeffOrder, CFQuadricsResult< Matrix_Type, Matrix3D< Matrix_Type > > &quadricResult)
eventuel einen Datenty[ fuer Alpha-Koeffizienten anlegen - wegen testAusgaben.

Member nCenterFocus::CenterFocusExperiment::computeQuadric (const TPolynomXY_Type &p, const TPolynomXY_Type &q, const Matrix_Type &jacobiMat, const list< CoeffListEntry > &coeffOrder, CFQuadricsResult< Matrix_Type, Matrix3D< Matrix_Type > > &quadricResult)
eventuel einen Datenty[ fuer Alpha-Koeffizienten anlegen - wegen testAusgaben.

Member nCenterFocus::CenterFocusExperiment::computeQuadric_computeQuadricSmall (const Matrix_Type &jacobiMat, const Matrix3D< Matrix_Type > &lambda)

ist jetzt de Matrix C jacobiCoKernelTransposed oder jacobiCoKernel?

eventuell Funktion in zwei Teile aufteilen - 1. wird R_i berechnet 2. wird eine Basis (R_i ) berechnet.

ist jetzt de Matrix C jacobiCoKernelTransposed oder jacobiCoKernel?

eventuell Funktion in zwei Teile aufteilen - 1. wird R_i berechnet 2. wird eine Basis (R_i ) berechnet.

Member nCenterFocus::CenterFocusExperiment::computeQuadric_getLeftInverse (const Matrix_Type &jacobiKernel)

die Funktion getLeftInverse hier raus und in die zugehoerige Matrix packen

FFPACK parameter Modular<double> irgendwo einmal Zentral definieren

die Funktion getLeftInverse hier raus und in die zugehoerige Matrix packen

FFPACK parameter Modular<double> irgendwo einmal Zentral definieren

Member nCenterFocus::CenterFocusExperiment::createJacobiMatrix (TFrommer &frommer, const TPolynomXY_Type &p, const TPolynomXY_Type &q, int reqVanishedFocalValuesCount, const list< CoeffListEntry > &coeffOrder)

: kopiere mit Genauigkeit 0 oder 1 ? -> mit 0, sonst wird der Lift-Test nicht bestanden !

da die beiden For-schleifen in createJacobiMatrix fast identisch sind, diese als unterfunktion auslagern

da die beiden For-schleifen in createJacobiMatrix fast identisch sind, diese als unterfunktion auslagern

Member nCenterFocus::CenterFocusExperiment::createJacobiMatrix (TFrommer &frommer2, const TPolynomXY_Type &minusPpol, const TPolynomXY_Type &Qpol, int reqVanishedFocalValuesCount, const list< CoeffListEntry > &coeffVariablesOrder)

: kopiere mit Genauigkeit 0 oder 1 ? -> mit 0, sonst wird der Lift-Test nicht bestanden !

da die beiden For-schleifen in createJacobiMatrix fast identisch sind, diese als unterfunktion auslagern

Member nCenterFocus::CenterFocusExperiment::initExperiment (const D_CenterfocusParams *params)

die Konstante 2 (erster Monomgrad oder minPolynomGrad ) nicht ueberall im Quelltext verteilt, sondern fest)

die coeffVariablesOrder_m_initialisierung koennten sogar die Parameter vornehmen...

Member nCenterFocus::CenterFocusExperiment::initSubCoeffVariablesOrder ()

endlich den Iterator ueber PQ-Elemente schreiben!

gehoert diese Funktion nicht eventuell in ReadCenterFocusParams?

Member nCenterFocus::CenterFocusExperiment::internPrintVariableOrder (ostream &os, const list< CoeffListEntry > &coeffVariablesOrder, string comment)
klasse VariableOrder bauen?

Member nCenterFocus::CenterFocusExperiment::isHamiltonianComponent (const PolynomXY_Type &minusP_polynom, const PolynomXY_Type &Q_polynom, const Ring_Type &ring1)

it seems that one check for Hamilton Component is missing - nope, das sind Alle Bedingungen! xPunkt ist gleich H/dy und yPunkt ist gleich -H/dx -> daraus folgen die Bedingungen

Formel ist nur Korrekt für Grad 3. Für allgemeinen Grad muss ginac eingesetzt werden. Momentan nur Korrekt für Grad 2 und Grad 3.

it seems that one check for Hamilton Component is missing - nope, das sind Alle Bedingungen! xPunkt ist gleich H/dy und yPunkt ist gleich -H/dx -> daraus folgen die Bedingungen

Formel ist nur Korrekt für Grad 3. Für allgemeinen Grad muss ginac eingesetzt werden. Momentan nur Korrekt für Grad 2 und Grad 3.

Member nCenterFocus::CenterFocusExperiment::liftTest_invertCoeffVectorInPlace (TVector< typename D_Eps_Frommer::RingType::FieldType > &vector)
so why not to have a Vectorspace class, which implements this function?

Member nCenterFocus::CenterFocusExperiment::liftTest_performSingleTest (int maxLift, TFrommer_Type2 &frommer2, const PolynomXY_Type &minusP_polynom, const PolynomXY_Type &Q_polynom, const Matrix_Type &jacobiKernel, const list< CoeffListEntry > &varCoeffOrder, CFEpsPointType *&liftResultRef, int &lastLiftNr)

TESTS: Test überlegen, ob epsPrecision vom epsRing korrekt ist.

optimierung: copyPolynomWithGivenEpsPrecision muss man nicht immer wieder fuer ein SingleTest durchfuehren

TESTS: Test überlegen, ob epsPrecision vom epsRing korrekt ist.

optimierung: copyPolynomWithGivenEpsPrecision muss man nicht immer wieder fuer ein SingleTest durchfuehren

optimierung: copyPolynomWithGivenEpsPrecision muss man nicht immer wieder fuer ein SingleTest durchfuehren

Member nCenterFocus::CenterFocusExperiment::liftTest_solveLGS (const TMatrix< typename D_Eps_Frommer::RingType::FieldType > &jacobiMatrix, const TVector< typename D_Eps_Frommer::RingType::FieldType > &rightHandSide, TVector< typename D_Eps_Frommer::RingType::FieldType > &result)
return last lifting point.

Member nCenterFocus::CenterFocusExperiment::performExperiment (const D_CenterfocusParams *params, RankStatistic &fullRankStatistic, RankStatistic &subRankStatistic, LiftAndQuadricsStatistic &fullQuadricsStatistic, LiftAndQuadricsStatistic &subQuadricsStatistic, FailedLiftStatistic &liftStatistic)

Unterscheide zwischen PolynomGrad und hoechster moeglicher Exponent? Fuer z.B. kann ein PolynomObjekt monome mit Grad 3 enthalten / (wurde so z.B. in der Eingabe definiert), aber alle Koeffizienten der Monome mit grad 3 sind 0. Strenggenommen ist also Grad dann 2 (was aber in unserem Programm / von keinem Interesse ist) /

eigentlich ist es Quatsch, den Polynomtyp fuer das Zufallsexperiment offen zu lassen. Es sollte halt TFrommer2::TPolynomXY sein und Basta. /

Zeiger auf const oder Referenz uebergeben.

Polynome bekommen eine Initialisierungsfunkton mit epsPrecision als Parameter, oder diese Klasse bekommt die Initialisierungsfuntion

man braucht nicht un

Problem: cfparams_m->getPolynomialDegree() muss nicht unbedingt mit cfparams_m->pPoynim konsistent sein (ergibt Redundanz der Information und somit ein potenzielles Konsistenzproblem)

Frage: wieso wird hier epsFrommer_m uebergeben und nicht ???

Member nCenterFocus::CenterFocusExperiment::performRegularExperiment (TFrommer_Type1 &frommer1, TFrommer_Type2 &frommer2, const PolynomialRing< PolynomXY_Type, typename TFrommer_Type1::RingType > &polynomialRing, const PolynomXY_Type &minusP_polynom, const PolynomXY_Type &Q_polynom, DStatistic &st, RankStatistic &fullRankStatistic, RankStatistic &subRankStatistic, LiftAndQuadricsStatistic &fullQuadricsStatistic, LiftAndQuadricsStatistic &subQuadricsStatistic, FailedLiftStatistic &liftStatistic)

RankStatistic und LiftAndQuadricsStatistic als 'pair'

kann noch etwas optimiert werden, wenn die Jacobi-Matrizen gleichzeitig erzeugt werden.

: Optimierung: hier reicht immer frommer1.getRingRef.setEpsPrecision = 0 ! Die Strudelgroessen werden spaeter noch mal berechnet, und das sollte dann mit der korrekten epsGenauigkeit erfolgen!

Ergebnisse eines Experiments in ein Objekt packen...

kann noch etwas optimiert werden, wenn die Jacobi-Matrizen gleichzeitig erzeugt werden.

: Optimierung: hier reicht immer frommer1.getRingRef.setEpsPrecision = 0 ! Die Strudelgroessen werden spaeter noch mal berechnet, und das sollte dann mit der korrekten epsGenauigkeit erfolgen!

Ergebnisse eines Experiments in ein Objekt packen...

kann noch etwas optimiert werden, wenn die Jacobi-Matrizen gleichzeitig erzeugt werden.

: Optimierung: hier reicht immer frommer1.getRingRef.setEpsPrecision = 0 ! Die Strudelgroessen werden spaeter noch mal berechnet, und das sollte dann mit der korrekten epsGenauigkeit erfolgen!

Ergebnisse eines Experiments in ein Objekt packen...

Member nCenterFocus::CenterFocusExperiment::printVariableOrder (ostream &os)
klasse VariableOrder bauen?

Member nCenterFocus::CenterFocusExperiment::randomExperimentWellDefined ()
falsch - wer sagt dir , dass minusP_polynom_m und Q_polynom_m fuer das Random-Experiment verwendet werden? random Experiment is currently only defined, if given polynom coefficients does not contain eps parts.b

Member nCenterFocus::CenterFocusExperiment::subCoeffVariablesOrder_m
koennte eigentlich auch konst sein, da es bei Zufallsversuchen nur ein Eingabepolynom gibt.

Class nCenterFocus::CenterFocusExperiment< variant >

ueberlegen, wie man die Ausgabe vom Algorithmus besser trennen kann... ueberlegt: Define Class for generated result structure -> and attach output functions (in Output.h) to that class!

NextElement funktion wird in der Zukunft doch gebraucht, gehoert dann aber in diese Klasse und nicht in in TRing.

Member nCenterFocus::CenterfocusParams::areWellDefined ()

bHasVariableCoefficients_m gesondert initialisieren, hier nur prüfen, ob nur ein Zufallsexperiment definiert wurde.

hier ist noch wichtiger, dass wenn es keine '*'-Koeffizienten, sondern ebenfalls nur 'A'-Koeffizienten gibt, ebenfalls getRequestedTrialsNum=0 sein muss.

bHasVariableCoefficients_m gesondert initialisieren, hier nur prüfen, ob nur ein Zufallsexperiment definiert wurde.

hier ist noch wichtiger, dass wenn es keine '*'-Koeffizienten, sondern ebenfalls nur 'A'-Koeffizienten gibt, ebenfalls getRequestedTrialsNum=0 sein muss.

Member nCenterFocus::CenterfocusParams::CenterfocusParams (const int argc, const char *const argv[])

eine fortgeschrittene Methode wäre Semaphore zu nutzen.

Ausgabereihenfolge der Parameter an einer Stelle festlegen.

: Frage: kann der InputFileStream auch vom String als Eingabe in der Form (mehrfach))gelesen werden?

eine fortgeschrittene Methode wäre Semaphore zu nutzen.

Ausgabereihenfolge der Parameter an einer Stelle festlegen.

: Frage: kann der InputFileStream auch vom String als Eingabe in der Form (mehrfach))gelesen werden?

: Frage: kann der InputFileStream auch vom String als Eingabe in der Form (mehrfach))gelesen werden?

eine fortgeschrittene Methode wäre Semaphore zu nutzen.

Ausgabereihenfolge der Parameter an einer Stelle festlegen.

: Frage: kann der InputFileStream auch vom String als Eingabe in der Form (mehrfach))gelesen werden?

Member nCenterFocus::CenterfocusParams::convertStringParamsToOptions ()

NonSmoothPointPassFilter oder NonSmoothPointPassFilter

NonSmoothPointPassFilter oder NonSmoothPointPassFilter

NonSmoothPointPassFilter oder NonSmoothPointPassFilter

Member nCenterFocus::CenterfocusParams::getCoeffTry (const CoeffList &coefflist) const

endlich den Iterator ueber PQ-Elemente schreiben!

endlich den Iterator ueber PQ-Elemente schreiben!

Member nCenterFocus::CenterfocusParams::initCoeffVariablesOrder ()

Schleifenvertauschung darf hier nicht stattfinden!

endlich den Iterator ueber PQ-Elemente schreiben!

Schleifenvertauschung darf hier nicht stattfinden!

endlich den Iterator ueber PQ-Elemente schreiben!

endlich den Iterator ueber PQ-Elemente schreiben!

Schleifenvertauschung darf hier nicht stattfinden!

endlich den Iterator ueber PQ-Elemente schreiben!

Member nCenterFocus::CenterfocusParams::initExperimentTag ()

was passiert mit dem Wert von ExperimentTag hier genau ? Dokumentieren. trims ExperimentTag

was passiert mit dem Wert von ExperimentTag hier genau ? Dokumentieren. trims ExperimentTag

was passiert mit dem Wert von ExperimentTag hier genau ? Dokumentieren. trims ExperimentTag

Member nCenterFocus::CenterfocusParams::initFieldCharacteristic ()

charakteristik kleiner irgendwas festlegen und charakteristik auf irreduzibitität pruefen!

charakteristik kleiner irgendwas festlegen und charakteristik auf irreduzibitität pruefen!

charakteristik kleiner irgendwas festlegen und charakteristik auf irreduzibitität pruefen!

Member nCenterFocus::CenterfocusParams::initNonNegativeIntParameter (string name, TInternParameter &internParameter, int printOrder)

: die assert-Bedingung parametrisieren.

: die assert-Bedingung parametrisieren.

: die assert-Bedingung parametrisieren.

Member nCenterFocus::CenterfocusParams::initRandomSeed ()

: irgendwie hast du diese Funktion vermurkst...

: irgendwie hast du diese Funktion vermurkst...

: irgendwie hast du diese Funktion vermurkst...

Member nCenterFocus::CenterfocusParams::printParameters (ostream &oFile) const

diese Funktion gehoert nicht in die Klasse Parameterlist !

Parameterlist::outputParameter funktion ueberarbeiten...

diese Funktion gehoert nicht in die Klasse Parameterlist !

Parameterlist::outputParameter funktion ueberarbeiten...

Member nCenterFocus::CenterfocusParams::readMonomGroup (TRing *ring1, TPolynomXY &pol, string &monomGroup, int momomGroupDegree, P_or_QPolynom p_or_q)

Wie prueft man die Kompatibilitaetsbedingung TRing::ElementType == PolynomXY_Type::ElementType, welche hier erfuellt sein muss weiss ich jetzt ! mit typeinfo!

Wie prueft man die Kompatibilitaetsbedingung TRing::ElementType == PolynomXY_Type::ElementType, welche hier erfuellt sein muss weiss ich jetzt ! mit typeinfo!

Wie prueft man die Kompatibilitaetsbedingung TRing::ElementType == PolynomXY_Type::ElementType, welche hier erfuellt sein muss weiss ich jetzt ! mit typeinfo!

Member nCenterFocus::CenterfocusParams::readNextPolynoms ()

use parser Generator - this Parser can't check syntax correctness. Implement /

wenn schon, dann sollten die Polynome p,q und die Struktur RandomcoeffList, AllcoeffList hier per Referenz übergeben werden! /

readNextPolynoms sollte einen Stream als Parameter bekommen !

use parser Generator - this Parser can't check syntax correctness. Implement /

wenn schon, dann sollten die Polynome p,q und die Struktur RandomcoeffList, AllcoeffList hier per Referenz übergeben werden! /

readNextPolynoms sollte einen Stream als Parameter bekommen !

use parser Generator - this Parser can't check syntax correctness. Implement /

wenn schon, dann sollten die Polynome p,q und die Struktur RandomcoeffList, AllcoeffList hier per Referenz übergeben werden! /

readNextPolynoms sollte einen Stream als Parameter bekommen !

Member nCenterFocus::CenterfocusParams::setupOutputFile (const int argc, const char *const argv[])

0. Stufe locking nur für einen festen Benutzer. Realisierungsmöglichkeiten: Lockfile fest verdrahtet

1. Stufe locking nur nur Benutzerweit. Realisierungsmöglichkeiten: Lockfile dynamisch ermittelt oder über Umgebungsvariable festgelegt.

2. Stufe locking Dateisystemweit. Voraussetzung: alle Benutzer haben das gleiche Lockfile gesetzt. Frage: Funktioniert locking über sshfs-Grenzen hinweg?

0. Stufe locking nur für einen festen Benutzer. Realisierungsmöglichkeiten: Lockfile fest verdrahtet

1. Stufe locking nur nur Benutzerweit. Realisierungsmöglichkeiten: Lockfile dynamisch ermittelt oder über Umgebungsvariable festgelegt.

2. Stufe locking Dateisystemweit. Voraussetzung: alle Benutzer haben das gleiche Lockfile gesetzt. Frage: Funktioniert locking über sshfs-Grenzen hinweg?

0. Stufe locking nur für einen festen Benutzer. Realisierungsmöglichkeiten: Lockfile fest verdrahtet

1. Stufe locking nur nur Benutzerweit. Realisierungsmöglichkeiten: Lockfile dynamisch ermittelt oder über Umgebungsvariable festgelegt.

2. Stufe locking Dateisystemweit. Voraussetzung: alle Benutzer haben das gleiche Lockfile gesetzt. Frage: Funktioniert locking über sshfs-Grenzen hinweg?

Member nCenterFocus::CenterfocusParams::updatePolynom (TRing *ring1, TPolynomXY &pol, stringstream &polynomStream, P_or_QPolynom p_or_q)

nun, der Name stimmt nicht ganz, es wird nicht nur defined_PolynomXY_Type gesetzt, sondern auch monomsWithRandomCoefficients und monomsWithAllCoefficients

das Einlesen

nun, der Name stimmt nicht ganz, es wird nicht nur defined_PolynomXY_Type gesetzt, sondern auch monomsWithRandomCoefficients und monomsWithAllCoefficients

das Einlesen

nun, der Name stimmt nicht ganz, es wird nicht nur defined_PolynomXY_Type gesetzt, sondern auch monomsWithRandomCoefficients und monomsWithAllCoefficients

das Einlesen

Member nCenterFocus::CenterfocusParams::updatePolynoms (stringstream &polynomData, TRing *ring1)

define a structure like {p,q, monomsWithAllCoefficients, monomsWithRandomCoefficients} - belongs together.

: Problem: infEps_minusP_polynom_m kann eventuell nicht definiert sein.

define a structure like {p,q, monomsWithAllCoefficients, monomsWithRandomCoefficients} - belongs together.

: Problem: infEps_minusP_polynom_m kann eventuell nicht definiert sein.

define a structure like {p,q, monomsWithAllCoefficients, monomsWithRandomCoefficients} - belongs together.

: Problem: infEps_minusP_polynom_m kann eventuell nicht definiert sein.

Class nCenterFocus::CenterfocusParams< TPolynomXY, TRing >

Warnung ausgeben, falls keine Variablen variiert werden und subJacobiMatrixRank>0

separate Parameters and Work Data

wenn es sich um kein Zufallsexperiment handelt, darf useformula2 und useformula23 und useformula1 nicht gesetzt sein!

Elemente von TRing und von TPolynomXY_Type muessen zueinander passen, ueberlegen, wie dies sichergestellt, bzw. geprueft wird. geht eventuell mit typeid( A )==typeid( a ), und hash include <typeinfo>

reengineer this not very well-designed class

RingTyp wird eventuell in jedem Ringelement gespeichert. Problem; charaktteristik wird dadurch nicht festgehalten...

wieso nicht CenterfocusParams mit TFrommer parametrisieren ? das Ding enthaelt doch sowohl TPolynomXY als auch TRing

Member nCenterFocus::CFRandomExperiment::initRandomCoefficients (TPolynomXY &mp, TPolynomXY &q)

RingType und TPolynomXY sollten sich aus tParams ableiten lassen. / Zugriff auf f1_ring_ref_m und cfparams_m.

Optimierung waere nicht nur, wenn man getMonomsWithRandomCoefficients als zwei getrennte Listen anlegt, sondern auch wenn man diese als Feld fester Groesse speichert.

RingType und TPolynomXY sollten sich aus tParams ableiten lassen. / Zugriff auf f1_ring_ref_m und cfparams_m.

Optimierung waere nicht nur, wenn man getMonomsWithRandomCoefficients als zwei getrennte Listen anlegt, sondern auch wenn man diese als Feld fester Groesse speichert.

Optimierung waere nicht nur, wenn man getMonomsWithRandomCoefficients als zwei getrennte Listen anlegt, sondern auch wenn man diese als Feld fester Groesse speichert.

RingType und TPolynomXY sollten sich aus tParams ableiten lassen. / Zugriff auf f1_ring_ref_m und cfparams_m.

Optimierung waere nicht nur, wenn man getMonomsWithRandomCoefficients als zwei getrennte Listen anlegt, sondern auch wenn man diese als Feld fester Groesse speichert.

Member nCenterFocus::CFRandomExperiment::initRandomExperiment ()

unterscheide zwischen PolynomGrad und hoechster moeglicher Exponent? Fuer z.B. kann ein PolynomObjekt monome mit Grad 3 enthalten / (wurde so z.B. in der Eingabe definiert), aber alle Koeffizienten der Monome mit grad 3 sind 0. Strenggenommen ist also Grad dann 2 (was aber in unserem Programm / von keinem Interesse ist) /

eigentlich ist es Quatsch, den Polynomtyp fuer das Zufallsexperiment offen zu lassen. Es sollte halt TFrommer2::TPolynomXY sein und basta. - Jetzt statt TFrommer2::TPolynomXY TFrommer1::TPolynomXY... /

pointer auf const oder Referenz uebergeben. //

halben pfusch getX().getX() beseitigen. Problem: irgedwo gibt es auch Pfusch nur mit 'getX()' - obwohl nicht notwendig.

Problem: cfparams_m->getPolynomialDegree() muss nicht unbedingt mit cfparams_m->pPoynim konsistent sein (gibt redundanz der Information und somit ein potenzielles konsistenzprpb

Polynome bekommen eine Initialisierungsfunkton mit epsPrecision als parameter, oder diese Klasse bekommt die Initialisierungsfuntion

was ist der Sinn dieses Tests?

was ist der Sinn dieses Tests?

unterscheide zwischen PolynomGrad und hoechster moeglicher Exponent? Fuer z.B. kann ein PolynomObjekt monome mit Grad 3 enthalten / (wurde so z.B. in der Eingabe definiert), aber alle Koeffizienten der Monome mit grad 3 sind 0. Strenggenommen ist also Grad dann 2 (was aber in unserem Programm / von keinem Interesse ist) /

eigentlich ist es Quatsch, den Polynomtyp fuer das Zufallsexperiment offen zu lassen. Es sollte halt TFrommer2::TPolynomXY sein und basta. - Jetzt statt TFrommer2::TPolynomXY TFrommer1::TPolynomXY... /

pointer auf const oder Referenz uebergeben. //

halben pfusch getX().getX() beseitigen. Problem: irgedwo gibt es auch Pfusch nur mit 'getX()' - obwohl nicht notwendig.

Problem: cfparams_m->getPolynomialDegree() muss nicht unbedingt mit cfparams_m->pPoynim konsistent sein (gibt redundanz der Information und somit ein potenzielles konsistenzprpb

Polynome bekommen eine Initialisierungsfunkton mit epsPrecision als parameter, oder diese Klasse bekommt die Initialisierungsfuntion

was ist der Sinn dieses Tests?

was ist der Sinn dieses Tests?

was ist der Sinn dieses Tests?

was ist der Sinn dieses Tests?

unterscheide zwischen PolynomGrad und hoechster moeglicher Exponent? Fuer z.B. kann ein PolynomObjekt monome mit Grad 3 enthalten / (wurde so z.B. in der Eingabe definiert), aber alle Koeffizienten der Monome mit grad 3 sind 0. Strenggenommen ist also Grad dann 2 (was aber in unserem Programm / von keinem Interesse ist) /

eigentlich ist es Quatsch, den Polynomtyp fuer das Zufallsexperiment offen zu lassen. Es sollte halt TFrommer2::TPolynomXY sein und basta. - Jetzt statt TFrommer2::TPolynomXY TFrommer1::TPolynomXY... /

pointer auf const oder Referenz uebergeben. //

halben pfusch getX().getX() beseitigen. Problem: irgedwo gibt es auch Pfusch nur mit 'getX()' - obwohl nicht notwendig.

Problem: cfparams_m->getPolynomialDegree() muss nicht unbedingt mit cfparams_m->pPoynim konsistent sein (gibt redundanz der Information und somit ein potenzielles konsistenzprpb

Polynome bekommen eine Initialisierungsfunkton mit epsPrecision als parameter, oder diese Klasse bekommt die Initialisierungsfuntion

was ist der Sinn dieses Tests?

was ist der Sinn dieses Tests?

Member nCenterFocus::CFRandomExperiment::initRandomVariablesOrder ()

endlich den Iterator ueber PQ-Elemente schreiben!

gehoert diese Funktion nicht eventuell in ReadCenterFocusParams?

endlich den Iterator ueber PQ-Elemente schreiben!

gehoert diese Funktion nicht eventuell in ReadCenterFocusParams?

Member nCenterFocus::CFRandomExperiment::performFormula23Step (TPolynomXY &minusP_polynom, TPolynomXY &Q_polynom)

verbesserung: irgendwie ueber aspekte, Dann: eine Liste verwendeter Timer und nicht verwendeter Timer führen, so dass man nicht explizit schreiben muss: Timer 3 etc.

verbesserung: irgendwie ueber aspekte, Dann: eine Liste verwendeter Timer und nicht verwendeter Timer führen, so dass man nicht explizit schreiben muss: Timer 3 etc.

verbesserung: irgendwie ueber aspekte, Dann: eine Liste verwendeter Timer und nicht verwendeter Timer führen, so dass man nicht explizit schreiben muss: Timer 3 etc.

Member nCenterFocus::CFRandomExperiment::performFormula23Step_computePoint (typename TFrommer1::RingType::ScalarType v1coeff, typename TFrommer1::RingType::ScalarType v2coeff, const pair< const TPolynomXY, const TPolynomXY > &PQpolynoms) const

eventuell PQpolynoms und ring_ref nicht uebergeben, da es zumindest fuer PQpolynoms lokale Variablen gibt.

eventuell PQpolynoms und ring_ref nicht uebergeben, da es zumindest fuer PQpolynoms lokale Variablen gibt.

eventuell PQpolynoms und ring_ref nicht uebergeben, da es zumindest fuer PQpolynoms lokale Variablen gibt.

Member nCenterFocus::CFRandomExperiment::performFormula23Step_construct_v1 ()

sollte bei PolynomialDegree=2 nicht durchgeführt werden

sollte bei PolynomialDegree=2 nicht durchgeführt werden

sollte bei PolynomialDegree=2 nicht durchgeführt werden

Member nCenterFocus::CFRandomExperiment::performRandomExperiment ()

performRandomExperiment Name ändern - das ist nicht nur Random sondern auch all All! /

Objekt einführen, welches die Daten für einen Versuch enthält, und nicht alls quer durch die Bank in ReadStrudelParams ablegen. /

In der Ausgabedatei fehlt noch die Information, welcher Zufallsgenerator verwendet wurde - /

TODO ohne at am Anfang heraussuchen und bearbeiten /

Parameter dokumentieren! /

wenn bei der Ausgabe Hamilton-Komponenten herausgefiltert werden, soll dies bei der Ausgabe explizit angezeigt werden. /

fuer isHamiltonComponent reicht auch frommer 1 und Koeffizienten in diesem Typ. vielleicht / kann man dies loesen, indem man eine Zwischenstufe schaltet, welche die Polynome nach bedarf umrechnet, / also fuer compute_p_coeff. fuer createJacobiMatrix muss nicht umgerechnet werden, da die Umrechnung schon intern stattfindet! Welche Polynome sollen denn nun fuer das Zufallsexperiment verwendet werden (jetzt, bzw, spaeter?) Per Definition muss nur fuer die Jacobi-Matrix und fuer compute_p_coeff epsprecision 1 verwendet werden. hoeheres epsPrecision

problem: wenn formel beutzt wird, und alle Zufallskoeffizienten berechnet werden, (die Zufallskoeffizienten sind die berechneten Koeffizienten), kommt immer das gleiche Ergebnis raus

experimentCounter wird nirgendwo ausgegeben, wofuer war er vorgesehen?

performRandomExperiment Name ändern - das ist nicht nur Random sondern auch all All! /

Objekt einführen, welches die Daten für einen Versuch enthält, und nicht alls quer durch die Bank in ReadStrudelParams ablegen. /

In der Ausgabedatei fehlt noch die Information, welcher Zufallsgenerator verwendet wurde - /

TODO ohne at am Anfang heraussuchen und bearbeiten /

Parameter dokumentieren! /

wenn bei der Ausgabe Hamilton-Komponenten herausgefiltert werden, soll dies bei der Ausgabe explizit angezeigt werden. /

fuer isHamiltonComponent reicht auch frommer 1 und Koeffizienten in diesem Typ. vielleicht / kann man dies loesen, indem man eine Zwischenstufe schaltet, welche die Polynome nach bedarf umrechnet, / also fuer compute_p_coeff. fuer createJacobiMatrix muss nicht umgerechnet werden, da die Umrechnung schon intern stattfindet! Welche Polynome sollen denn nun fuer das Zufallsexperiment verwendet werden (jetzt, bzw, spaeter?) Per Definition muss nur fuer die Jacobi-Matrix und fuer compute_p_coeff epsprecision 1 verwendet werden. hoeheres epsPrecision

problem: wenn formel beutzt wird, und alle Zufallskoeffizienten berechnet werden, (die Zufallskoeffizienten sind die berechneten Koeffizienten), kommt immer das gleiche Ergebnis raus

experimentCounter wird nirgendwo ausgegeben, wofuer war er vorgesehen?

Member nCenterFocus::CFRandomExperiment::printTimings (std::ostream &os) const

Formula23Timer-Objekt anlegen und dort diese Funktion reinpacken.

Formula23Timer-Objekt anlegen und dort diese Funktion reinpacken.

Member nCenterFocus::CFRandomExperiment::setNextAllCoefficient (TPolynomXY &allMinusP_polynom, TPolynomXY &allQ_polynom)

einheitlich die Reihenfolge der Parameter regeln...

einheitlich die Reihenfolge der Parameter regeln...

einheitlich die Reihenfolge der Parameter regeln...

Class nCenterFocus::CFRandomExperiment< variant, TPolynomXY, TFrommer1, TFrommer2 >
TPolynomXY sollte RingTyp speichern?

Class nCenterFocus::CFSingleResult< PolynomXY_Type, FocalValuesInfoType, CFJacobianInfoType, CFQuadricsResultType, CPointLiftInfoType >

t_Frommer kennt den RingTyp, der Ring kennt den Elenemttyp.

jacobi_matrix->printValue ist keine saubere Loesung...

der Klassenname TMatrix ist ungluecklich... da T auch fuer TemplateTyp steht.

was soll passieren, wenn subJacobiMatrix gleich fullJacobiMatrix? DONE

Matrix soll Vergleichsoperator implementieren.

Zeiger ider Referenzen speichern?

mit cfParams (pureSmoothnesTest():ja/nein als traits) parametrisieren und damit zwischen 'print' und 'singleResultprintSmoothnessTestResult' wählen

Class nCenterFocus::CoeffList

Redesign CoeffList?

why not use a std::list ? (j.k.)

Class nCenterFocus::CoeffListEntry
Redesign CoeffListEntry?

Member nCenterFocus::CoeffListEntry::CoeffListEntry (P_or_QPolynom p_oder_q, const int yExp, const int currentMonomDegree)
schXXXX Konstuktor, ueberhaut nicht intuitiv.

Member nCenterFocus::CPointLiftInfo::liftPoints_m
liftPunkte löschen.

Member nCenterFocus::CPointLiftInfo::printLiftPoints (ostream &os, const vector< CFLiftPointType * > &liftPoints, const EpsFrommerType &epsFrommerRef) const
was soll das hier mit dem Invertieren des Liftpunkts in der Ausgabe???

Member nCenterFocus::CPointLiftInfo::printPolynomCoefficients (ostream &os, const typename EpsFrommerType::TPolynomXY &P_polynom_ref, const typename EpsFrommerType::TPolynomXY &Q_polynom_ref) const
es muss definitiv etwas geben wie ein Polynompaar als Objekt! Dann kann diese Funktion dem Objekt aus Ausgabe zugeordnet werden.

Class nCenterFocus::ExtendedFailedLiftStatistic

eventuell abhaengig von minlift (und Rang(jacobian)) eine Verteilungsstatistik für failedLiftNr führen.

liftstatistik optional in DB speichern.

Member nCenterFocus::ExtendedFailedLiftStatistic::logFailedLift (FailedLiftStatistic &failedLiftStatistic, int jacobianRank)
wenn es sich um einen erkannten nichtglatten punkt handelt, zählen wie oft diese Tatsache nicht erkannt wurde.

Member nCenterFocus::fast_Frommer::compute_dyA_and_dxA ()
Optimierung in der inneren Schleife lassen sich zwei weitere Additionen eliminieren

Member nCenterFocus::fast_Frommer::createLowATable (int maxDegree, const TRing *_ring)
Aufbau von local_a_table genau beschreiben!

Member nCenterFocus::fast_Frommer::doitxNew (short howManyFocalValues)

Test implementieren, welcher nachweist das perform_first_C_Step und perform_c_step in der ersten Stufe und perform_fast_C_Step immer äquivalent sind für epsPrecision=0

Test implementieren, welcher nachweist das perform_first_C_Step und perform_c_step in der ersten Stufe und perform_fast_C_Step immer äquivalent sind für epsPrecision=0

Member nCenterFocus::fast_Frommer::getFocalValue (int pos) const
code ist doppelt vorhanden...

Member nCenterFocus::fast_Frommer::perform_C_Step ()

optimierung perform_C_Step mit degree parametrisieren - spart switch case! - bringt nur 5 Prozent

Member nCenterFocus::fast_Frommer::perform_fast_C_Step ()
frommer mit degree beim Erzeugen parametrisieren und

Member nCenterFocus::fast_Frommer::perform_fast_inner_C_Step (register typename TMatrixXY_0Type::CoefficientType &b0, register const typename TRing::ElementType &p0, register const typename TRing::ElementType &q0, register const typename TRing::ElementType &da0, short _n)
Optimierung: damit hier sse-Register genutzt werden können, muss man wieder getrennte dXA und dyA einsetzen.

Member nCenterFocus::fast_Frommer::perform_generic_C_Step ()
Test fuer die Allgemeine Implementierung fehlte - Fehler wurde nur gefunden, weil case2 rausgenommen wurde.

Member nCenterFocus::fast_Frommer::perform_inner_C_Step (register typename TRing::ElementType *const b0, register const typename TRing::ElementType *const p0, register const typename TRing::ElementType *const q0, register const typename TRing::ElementType *const da0, short _n)

optimierung Verbesserungsidee: Die Multiplikation durchführen, aber die Addition nur mitm Integar ud Konvertierung nur einmalig zum Schluss! beim nxnxn bringt das eine Verbesserung !!! desweiteren könnte man bei eps=0 die Multiplikation auf der CPU über die Addition der Exponenten bilden !

Member nCenterFocus::fast_Frommer::perform_the_even_A_Step ()

Optimierung: man könnte sich die Inversion von p_a_table_loc[] sparen, wenn man dafür eine Tabelle anlegt. andererseits muss man dann einen Zeiger mehr mit sich rumschleppen und das könnte wieder Performance kosten.

Optimierung: eventuell wäre es doch schlauer, als Körperoperation sub und div zuzulassen und hier auch zu verwenden, da je nach Implementation add (a,addinv(b)) evtl langsamer als sub (a,b) ist.

Class nCenterFocus::fast_Frommer< TFrommerDefs, variant >

eventuell die Pointer auf die Polynome p und Q immer zu Beginn uebergeben -so hat man zum einen nicht mehr das PRoblem mit setPolynoms, und zum anderen kann so der Grad der Polynome nicht plötztlich verändert werden!

Mehrere frommer-Varianten implementieren. - teilweise Umgesetzt

die asserts in perform_C_Step in TESTS umwandeln.

sollte ein Polynom mit dem Ring templatisiert sein , und der Ring enthält dann den Elementtyp ? Normalerweise ja.. noch ausstehend.

Class nCenterFocus::FocalValuesInfo< FocalValueType >

: wenn LiftTest schiefgeht, dann besonders viele Lifts durchführen, um das Minimum und evtl eine zweite Stufe festzustellen.

: Idee: zu in der DB gespeicherten Punkten mit schiefgegangenen Lifts eine ausführliche LiftStatistik erstellen - LiftExperiment

Member nCenterFocus::Frommer::a_table
a_table eventuell Umbenennen

Member nCenterFocus::Frommer::compute_dyA_and_dxA ()

Datenstruktur polynompaar auch hier verwenden?

Datenstruktur polynompaar auch hier verwenden?

Datenstruktur polynompaar auch hier verwenden?

Member nCenterFocus::Frommer::doit (int bComputeAllFocalValues, int jacobi=false)

throw error in catch-case!

throw error in catch-case!

throw error in catch-case!

Member nCenterFocus::Frommer::doitx (short howMany)

: doitx könnte die Funktion doit vollkommen ersetzen - man muss nur angeben, wieviel Strudelgrößen man denn nun berechnen will. die Frage ist, ob der doitx -Aufruf genau so schnell ist, wie doit().

soll man nicht bei MaxFocalValuesToCompute aufhören

soll man nicht bei MaxFocalValuesToCompute aufhören

soll man nicht bei MaxFocalValuesToCompute aufhören

soll man nicht bei MaxFocalValuesToCompute aufhören

Member nCenterFocus::Frommer::getFocalValue (int pos) const

getchar ersetzen durch globalPause, und dann in globalPause getChar aktivieren oder deaktivieren.

getchar ersetzen durch globalPause, und dann in globalPause getChar aktivieren oder deaktivieren.

getchar ersetzen durch globalPause, und dann in globalPause getChar aktivieren oder deaktivieren.

Member nCenterFocus::Frommer::perform_generic_C_Step ()

Test fuer die Allgemeine Implementierung fehlte - Fehler wurde nur gefunden, weil case2 rausgenommen wurde.

Test fuer die Allgemeine Implementierung fehlte - Fehler wurde nur gefunden, weil case2 rausgenommen wurde.

Member nCenterFocus::Frommer::perform_the_odd_A_Step ()

moegliche Optimierung: statt inverse nachzuschlagen und mit (n-j+2) zu multiplizieren könnte man eine extra tabelle fuer skalar mal inverse anlegen. Das gleiche gilt fuer Subtraktion.

moegliche Optimierung: statt inverse nachzuschlagen und mit (n-j+2) zu multiplizieren könnte man eine extra tabelle fuer skalar mal inverse anlegen. Das gleiche gilt fuer Subtraktion.

moegliche Optimierung: statt inverse nachzuschlagen und mit (n-j+2) zu multiplizieren könnte man eine extra tabelle fuer skalar mal inverse anlegen. Das gleiche gilt fuer Subtraktion.

Member nCenterFocus::Frommer::printStageTimings (std::ostream &os) const

s10 symbolisch berechnen

membervariable "Name" vergeben!

nicht nur die Zeit messen, sondern auch die Anzahl der Aufrufe zählen

s10 symbolisch berechnen

membervariable "Name" vergeben!

nicht nur die Zeit messen, sondern auch die Anzahl der Aufrufe zählen

Member nCenterFocus::Frommer::setPolynoms (const TPolynomXY *const minusP_polynom, const TPolynomXY *const Q_polynom)

eventuell setPolynoms() streichen und die Polynome als 'doit'-Parameter aufnehmen.

das Problem ( minusp->getDegree() != qq->getDegree() ); loesen

eventuell setPolynoms() streichen und die Polynome als 'doit'-Parameter aufnehmen.

das Problem ( minusp->getDegree() != qq->getDegree() ); loesen

eventuell setPolynoms() streichen und die Polynome als 'doit'-Parameter aufnehmen.

das Problem ( minusp->getDegree() != qq->getDegree() ); loesen

Class nCenterFocus::Frommer< TFrommerDefs, variant >

add Files to groupdefs

Sicherheitschecks durchführen um falsche Verwendung zu verhindern! was kann man den hier falsch verwenden?

OPTIONAL: IFrommer-Interface definieren (keine Vererbung! ). Du weisst ja, wo du die Technik findest.

Testfunktionen schreiben! Fuer den Testdurchlauf sollte ein Ring und einer Frommer-Objekt definiert werden, welche SAFE-Routinen aufrufen?

Member nCenterFocus::getMacaulayCompilantObjectName (const std::string &strref)
entfernt nur Whitespaces. Sollte aber den Objektname Macaulay-Konform konvertieren.

Member nCenterFocus::gotoLParamValue (_istream &inputStream, bool parameterNameExpected=true)
allgemeiner schreiben - Parametername als Parameter seek to the position of first openBrace in value of Parameter L. N

Member nCenterFocus::lgsSandbox ()

Problem: wenn man Fliesskommazahlen als Parameter an FFPACK übergibt, wird dies von FFPACK nicht überprüft.

: wenn man diese tolle Initialisierung verwendet, sollte die Initialisierung aus Strings auch getestet werden !

: ein optionaler Test wäre ...was?

: Integrationstest: solveLGS mit getRightKernel kombiniert...

ist ein Fehler ohne Tests entdeckt -> ein Test überlegen, welcher den Fehler feststellen würde!

Member nCenterFocus::LiftAndQuadricsStatistic::addLiftAndQuadricsStatistic (int successiveVanishedFocalValues, int jacobianRank, int quadricsRank, bool liftTestPassed=true, int mitFailedLiftNr=-1)
Optimierung: ssmap von boost ist eventuell schneller im vergleich zu std::map .

Class nCenterFocus::PrintCenterFocusResults
mit cfParams (pureSmoothnesTest():ja/nein als traits) parametrisieren

Member nCenterFocus::PrintCenterFocusResults::endPrintingResults ()
wenn endPrintingResults dann gehts erst weiter, nachdem startPrintingResults aufgerufen wurde.

Member nCenterFocus::PrintCenterFocusResults::printHeader (D_CenterfocusParams const &paramReader_ref, bool inputFromStd=false)
nicht nur die Parameterliste ausgeben, sondern auch welche Parameter gueltig waren und welche nicht.

Member nCenterFocus::Statistic::correctHamiltonComponentStatistic (int focalValueNum, int correctedVanishedFocalValuesCount)
nur einmaligen Aufruf erlauben

Member nCenterFocus::Statistic::correctNonHamiltonComponentStatistic (int focalValueNum, int vanishedFocalValuesToSubtract)

nur einmaligen Aufruf erlauben

problem: wenn keine Formel verwendet wird, ist die Statistik ebenfalls falsch.

Class nCenterFocus::Statistic< safe >

Idee: Klasse parametrisieren, ob diese Array-Grenzen überprüfen soll oder nicht.

wenn eine der Formeln in Kombination mit einem Filter verwendet wird, ist die Statistik für die ersten entsprechenden Strudelgrößen nicht mehr korrekt.

Member nCenterFocus::testParameterParser01 ()

wie kann getestet werden, ob die Eingaben auch aus einer Datei und dem input Stream korrekt gelesen werden?

damit man bei den Zahlen sicher ist, muessen diese wieder zurueck in ein String verwandelt werden und dann verglichtn, zumindest bei anzZufall!

Member number_eps0::number_eps0 (int epsPrec, std::string dummy)
Konstruktor fuer eine Zahl mit belibigen EpsPrecision: Problem: eine 0 wird als leerer String interpretiert, bzw. ein char als ein Integer-Wert. Insgesamt noch keine gute Loesung.

Member number_eps0::number_eps0 (TScalar _x)

: es sollte waehrend des Compilevorgangs oder zumindest einmal während des Programmstarts geprueft werden, ob der interne Datentyp groß genug ausgelegt ist.

Member number_eps0::setValue (unsigned short _epsExp, TScalar coeff)
Funktionsbezeichnung ungluecklich, setMonom passt aber auch nicht

Class number_eps0< CHAR, TScalar >

Sicherheitspruefung: maximal zulaessiger Template-Parameter CHAR <=sizeof(datatype)*8!

warnen, wenn als DataType ein unsigned ding verwendet wird

einmalig warnen wenn (bitsize>=sizeof(TScalar)*8) - dann kann nicht im Speicher subtrahiert werden

einmalig warnen wenn (bitsize>=(sizeof(TScalar)-1)*8) - dann kann nicht im Speicher addiert werden (es kommt zum Überlauf)

size_t or NOT size_t as return type for index funtions?

in den Indexfunktionen eventuell bitsize durch needbits<CHAR>::value ersetzen, weil schneller!

Member number_eps1::number_eps1 (const number_eps1 &z_x)

: bereits waehrend des Compilevorgangs prüfen, ob die Datenstrukturen gross genug ausgelegt sind - , es reicht aber auch, vor der ersten Verwendung die Tests Durchzuführen.

Member number_eps1::number_eps1 (scalarType x)
wieso scheitert dieser Test bei der Kombination char/short und Charakteristik =29 ? - nein, scheitert nicht für Charakteristik=29 sondern für Charakteristik=197.

Member number_eps1::number_eps1 (int epsPrec, string dummy)
allgemeiner Konstruktor fuer eine Zahl mit belibigen EpsPrecision: Problem: eine 0 wird als leerer String interpretiert, bzw, ein char als ein Integer-Wert Insgesamt noch keine gute Loesung

Member number_eps1::setValue (unsigned short _epsPrecision, scalarType val)
Funktionsbezeichnung ungluecklich, setMonom passt aber auch nicht.

Member number_eps1::wellDefined ()

Grenzen fuer enums ueberpruefen

Grenzen fuer enums ueberpruefen

Grenzen fuer enums ueberpruefen

Class number_eps1< CHAR, TScalar, TScalarPair >

security check: Template-Parameter CHAR <=sizeof(TScalar) and (CHAR*CHAR)<=sizeof(TScalarPair) !

statt (int getPairIndex) (size_t getPairIndex)?

herausfinden, warum und um wieviel uebergabe per referenz in manchen Fällen schneller ist. basierend auf diesem Wissen könnte man sich die Funktionen getxxxByRef eventzell ersparen!

Member operator<< (std::ostream &out, const xyMonom< ccoeff > &xyMonomObj)

Problem: Klammer kann noch nicht eingelesen werden. sollte auch nicht ausgegeben werden. Nachteil: Ohne Klammerverwendung ist die Lesbarkeit nicht gut.

Herausfinden, wo es ein Problem bei der Ausgabe geben kann, wenn nicht geklammert wird.

Class Parameterlist

partially done: rewrite Parameter class and Parameter parser (Kroeker), especially loadParam function, perform at least error checking

we have here a parameter List, todo: create a class with parameterOptions? - was hattest du damit gemeint?

deleteParameter einfuegen

Member Parameterlist::addParameter (const string &paramName, const string &paramVal, const string &_comment=emptyString)
funktion wellDefined soll schauen, ob nicht ein parameter doppelt vorhanden ist.

Member Parameterlist::setParameterValue (const string &paramName, const string &paramVal)
return false, if failed.

Member parseNumber (RingType *ring1, std::string strNum, int _epsPrecision)
evtl. weitere Verbesserung: ein Element kann sich selbst aus einem String einlesen. Dabei ist aber zu beachten, dass hier eventuell epsPrecision eingeschraenkt werden soll (Parameter _epsPrecision) Eine weitere Moeglichkeit besteht darin, den Ring in dieser Funktion zu erzeugen.

File parseTools.h
die Datei ist bestimmt noch voller Fehler... (fail-test, potenzielle Segfaults, string escaping, Kommentare in der Eingabedatei, etc.)

Class PointFilterKey

Problem: objekt may be unintentionally changed by parsing a string with the rule getConstRuleRef().

Member PointFilterKey::initRule ()
(optional) create or use a rule which matches the (unsigned and smaller than 65536) -condition

Member PointFilterRule::PointFilterRule (std::string str)
(optional) create or use a rule which matches the (unsigned and smaller than 65536) -condition

Member polynomdefs::size_m
wieso nicht (DEGREE <<needbits<DEGREE>::value |degree) +1 ? nextpow2num ist aber nicht falsch (nur zu viel) und belegt eine gerade Anzahl von Plätzen.

Class polynomdefs< DEGREE >

: Ueberpruefung auf DEGREE kleiner 128, wegen "static const short pshift" - wieso, DAS ist kein Problem, aber eine wellDefined-Funktion sollte programmiert werden.

Korrektheit: Polynomdefs alle falsch, nur durch die Tatsache, dass nextpow2num(3)=4 ist (hoffentlich), passen die Größen doch und es gibt keine Speicherschutzverletzung

Vorsicht beim Schiften! muss ich beim Shift die Variablen vorher in ein int konvertieren ja/nein?

Class polynomdefsNew< DEGREE >
zusaetzlich mit einem Datentyp parametrisieren? - nö, Typ ist der Exponent

Member PolynomialRing::addInvReturnPtr (const TPolynomXY &polynom) const
das Durchlaufen der Schleifen wiederholt sich, das kann man doch irgendwie abstrahieren!

Member PolynomialRing::PolynomialRing (const RingType &ring)
hier kann man ganz viel code sparen...

Class polynompairdefs< DEGREE >
Codereduzierung: polynompairdefskoennte wegfallen, wenn pair eingesetzt wird.

Class pow2< NN >

is dangerous, because enum value is limited!

Member printProgramAndEnvironmentInfo (ostream &os, const char *argv[])

print svn source URL /

ueberall pruefen, ob ein 'new' geklappt hat

Member printResultFormatInfo (ostream &os)

bessere Idee: Die Information in einer Datei ablegen und diese dann am Ende der Ausgabe anhaengen. Problem: Dateipfad feststellen.

noch bessere Idee: auf die erstellte Dokumentation verweisen.

File random.h
seed ist fuer die random-Funktion nicht dokumentiert.

Class rationalNumber

replace internal int topy by int32 oder int64

Member rationalNumber::rationalNumber (std::stringstream &number)
ueberlegen, wie verhindert werden soll, dass '-' als '-1' gelesen wird, wenn nicht '-x' oder ä. folgt.

File ReadCenterFocusParams.h

Probleme: readNextPolynoms: polynome sind von TNum abhängig - welche TNum und welche Polynome sollen hier benutzt werden?

überlegen, wie man ein möglichst optionales Programm basteln kann. an eine Experimentalrunde - nur ein PQ-Paar muss p,q von aussen übergeben werden können, mit Optionen, epsprecision und allem piepapo. Dann wirds gehen, sonst nicht. Notfalls parametrisiert man auch die centerFocus-Fkt, um allgemeine Implementierung und optimierte Implementierung zu ermöglichen schliesslich ist der Ring zumindest für das Einlesen fest, warum mehr Freiheiten einführen als notwendig?

überlegen, ob in dieser Klasse überhaupt parametrisiert werden soll

Member readParamName (_istream &inputData)

: maybe using an free parser generator is an optimal and higly portable solution instead of writing unreadable, complex, errneous and unflexible hardcoded parser

Member readParamValue (_istream &inputData, std::string name)

: maybe using an free parser generator is an optimal and higly portable solution instead of writing unreadable, complex, errneous and unflexible hardcoded parser

Member readStringValue (_istream &inputData, std::string paramName)
eskaped anfuehrungszeichen werden von readStringValue nicht erkannt

Member testRandom (int characteristic)
: Abweichungstest einbauen visual random test...

Member testRing (unsigned int characteristic, unsigned short epsPrecision=1)
: test multInv, addRef, multRef and so on

Member TMatrix::printInMacaulayStyle (std::ostream &os, bool assignment=false) const
das ist wohl sowas wie ein decorator. print assignment/declaration in Macaulay style

Member TMatrix::TMatrix (const TemplateMatrix &mat, const TRing *_ring)

was passiert mit einem int nach einer Multiplikation ? / wird dieser bei Bedarf in ein 'long' umgewandelt, oder gibt es ein Überlauf? ->nehme an, es gibt einen Ueberlauf / Ist bei aktuell auftretenden Matrixgroessen aber nicht kritisch.

Member TMATRIX_DECLARACION

Matrixgroesse parametrisieren? short int fuer Zeilen und Spalten reicht ?

printValue besser lösen; teilweise erledigt

eine Zeitmessung protokollieren.

statt outputMatrixInMacaulayStyle outputInMacaulayStyle

Member TVector::createFromStream (_istream &_vectorStream)

implement StreamIn-Operator for TNum !;

nur istream verwenden, und statt <iostream> nur <iosfwd> im header einbinden

auftretende Fehler werden nicht

Member TVector::fillZero ()
die for-Schleifen-Initialisierungen durch std::fill ersetzen...

Member TVector::randomInit (long *_pRandomSeed)
: Bessere Konstruktion: randomInit bekommt ein Objekt, welches eine random()-Funktion besitzt. Dann braucht man hier keinen Ring zu speichern! / Bzw. der Ring bekommt eine Random-Fkt (oder die Zahl eine static Random fkt und einen static Ring-Verweis) / Noch besser, wenn TNum einen Verweis auf den Ring enthält! /

Class TVector< TRing >

add static ring pointer to TNum class?

operator[] implementieren?

File typedefs.h
P_or_QPolynom definition does not belong here!

Member xyMonom::substitute (const typename IMultiplyVariables::ElementType &x, const typename IMultiplyVariables::ElementType &y, const IMultiplyCoeffWithVariable &imultCoeffXVariable, const IMultiplyVariables &imultVariableXVariable) const
strenggenommen müsste das Zwischenergebnis immer wissen, zu welchem Ring es gehört. Dies ist aber nicht optimierungsfreundlich

Member xyMonom::substitute2 (const typename IMultiplyRing::ElementType &x, const typename IMultiplyRing::ElementType &y, const IMultiplyRing &imult) const
merke: was negatives ist meistens größer als ein unsigned int!

Member xyOneFormTerm::xyOneFormTerm (const std::string &str)

'+-' sollte nicht erlaubt sein,

beim Einlesen der Differentialform kann diese theoretisch = 0 sein - dann geht das Einlesen wohl schief.

Generated on Tue Nov 23 13:10:52 2010 for centerfocus by  doxygen 1.6.3