Abstract class from which derive all building blocks of exprs, i.e. objects not function of further exprs: the leafs of the recursive tree. More...
#include <buildingBlock.h>

Public Member Functions | |
| bool | isBuildingBlock () const override |
| Tells if the expression is a Building Block or not. More... | |
| virtual bool | commutesWith (Expr_info expr, int sign=-1) const override |
| Tells if the object commutes with expr. More... | |
| std::optional< Expr > | expand (bool full=false, bool inplace=false) const override |
| Develops the Abstract. More... | |
| std::optional< Expr > | factor (bool full=false) const override |
| Factors the Abstract. More... | |
| std::optional< Expr > | factor (Expr_info expr, bool full=false) const override |
| Factors the Abstract wrt a particular Abstract. More... | |
| std::optional< Expr > | getTerm () const override |
| This function returns the same expression as *this but amputated of its numerical factor. Example: (4*cos(x) -> cos(x)). More... | |
| std::optional< Expr > | getRealPart () const override |
| Evaluates the real part of the Abstract and returns it. More... | |
| std::optional< Expr > | getComplexModulus () const override |
| Evaluates the modulus in the complex plane of the Abstract and returns it. More... | |
| std::optional< Expr > | getPolynomialTerm (Expr_info expr, int order) const override |
| Calculates and returns the polynomial term corresponding to *this with the variable t_variable at order order. In particular, this function assumes that the checks have already been made with the function isPolynomial(). More... | |
| std::optional< Expr > | findSubExpression (Expr_info subExpression, const Expr &newExpression) const override |
| Searches a sub-expression and replaces it. More... | |
Public Member Functions inherited from csl::Abstract | |
| Abstract () | |
| Default Constructor. More... | |
| virtual | ~Abstract () |
| Destructor. | |
| Expr | self () |
| virtual void | print (int mode=0, std::ostream &out=std::cout, bool lib=false) const =0 |
| Displays the abstract in standard output. More... | |
| virtual void | printCode (int mode=0, std::ostream &out=std::cout) const |
| virtual void | printProp (std::ostream &fout=std::cout) const |
| void | printExplicit (int mode=0) const |
| Displays explicitely the expression, with types of each component. This function is only used for debug. More... | |
| virtual std::string | printLaTeX (int mode=0) const |
| Creates a LaTeX output for the Abstract. More... | |
| virtual std::vector< Parent > | getSubSymbols () const =0 |
| virtual LibDependency | getLibDependency () const |
| virtual size_t | memoryOverhead () const |
| virtual std::string const & | getName () const |
| Returns the Abstract's name. More... | |
| virtual std::string const & | getLatexName () const |
| virtual bool | getCommutable () const |
| Allows to know if the object commutes with all the others. More... | |
| virtual bool | getElementary () const |
| virtual bool | getAllDependencies () const |
| virtual csl::PrimaryType | getPrimaryType () const =0 |
| Gives the primary type of Abstract. More... | |
| virtual csl::Type | getType () const =0 |
| Gives the type of Abstract. More... | |
| virtual int | getDim () const |
| Gives the dimension of the object. More... | |
| virtual int | getOrderOf (Expr_info expr) const |
| virtual bool | isArbitrary () const |
| virtual bool | isIndexed () const |
| virtual const std::vector< Equation * > & | getProperties () const |
| virtual bool | isReal () const |
| virtual bool | isPurelyImaginary () const |
| virtual bool | isComplexConjugate () const |
| virtual bool | isHermitianConjugate () const |
| virtual csl::ComplexProperty | getComplexProperty () const |
| virtual void | setComplexProperty (csl::ComplexProperty prop) |
| virtual void | setConjugated (bool t_conjugated) |
| virtual bool | isInteger () const |
| Tells if the expression is an integer. Either an Integer object directly, or a Float that has an integer value. More... | |
| virtual bool | getValued () const |
| Tells if the expression is valued, i.e. is a function of numbers and valued literals (a Variable or Constant is not valued by default). More... | |
| virtual long double | getValue () const |
| Returns the value of the expression, if it has one explicitely. In particular, it will work only on Numbers and valued Literals, not on functions. More... | |
| virtual long double | getDeltaPlus () const |
| virtual long double | getDeltaMinus () const |
| virtual long long int | getNum () const |
| virtual long long int | getDenom () const |
| virtual int | getNArgs (int axis=0) const |
| Returns the number of arguments of the expression. If the expression is a building block (AbstractBuildingBlock), this function returns 0. More... | |
| virtual size_t | size () const |
| virtual bool | empty () const |
| virtual csl::vector_expr::iterator | begin () |
| virtual csl::vector_expr::iterator | end () |
| virtual csl::vector_expr::const_iterator | begin () const |
| virtual csl::vector_expr::const_iterator | end () const |
| virtual Expr const & | getArgument (int iArg=0) const |
| virtual Expr & | getArgument (int iArg=0) |
| virtual Expr const & | getArgument (const std::vector< int > &indices) const |
| Allows to get specific arguments of expressions in multiple dimensions, by giving the indices in each dimension. More... | |
| virtual Expr & | getArgument (const std::vector< int > &indices) |
| virtual const csl::vector_expr & | getVectorArgument () const |
| Allows to get the entire std::vector of arguments of the expression. More... | |
| virtual Expr | getVariable () const |
| Accessor to the variable that defines certain types of expressions. More... | |
| virtual int | getOrder () const |
| Accessor to the order (integer) that defines certain types of expressions. More... | |
| virtual int | getSign () const |
| virtual bool | isAnOperator () const |
| Tells if the expression is an operator (like a derivetive operator). More... | |
| virtual bool | isEmpty () const |
| Tells for a Derivative or an Integral if the argument is empty i.e. if the object must apply on the next argument encountered on the right. More... | |
| virtual bool | operatorAppliesOn (Expr_info expr) const |
| virtual Expr | getOperand () const |
| Returns the operand of an Operator. More... | |
| virtual std::vector< int > | getShape () const |
| Accessor to the shape of the tensor in the form of a std::vector of integers. More... | |
| virtual Expr | getInfBoundary () const |
| virtual Expr | getSupBoundary () const |
| virtual void | setSupBoundary (Expr const &t_inf) |
| virtual void | setInfBoundary (Expr const &t_inf) |
| virtual int | getNIndices () const |
| virtual Index | getIndex (int i=0) const |
| virtual void | resetIndexStructure () |
| virtual IndexStructure | getIndexStructure () const |
| IndexStructure | getIndexStructure (csl::Space const *space) const |
| virtual const IndexStructure & | getIndexStructureView () const |
| virtual IndexStructure & | getIndexStructureView () |
| virtual IndexStructure | getFreeIndexStructure () const |
| virtual Parent | getParent () const |
| For indicial expressions this function returns a pointer to the parent object of type TensorParent (not an expression). More... | |
| virtual Parent_info | getParent_info () const |
| virtual Tensor | getPoint () const |
| virtual int | getNContractedPairs () const |
| Returns the number of contracted pairs of indices in an Indicial expression. More... | |
| virtual csl::vector_expr | getPermutations (bool optimize=true) const |
| Returns a std::vector of all possible permutations of an Indicial expression. The possible permutations are determined from the posible symmetries and anti-symmetries of the object. More... | |
| virtual std::set< std::pair< int, int > > | getContractedPair () const |
| Expr | copy () const |
| virtual unique_Expr | copy_unique () const =0 |
| virtual Expr | deepCopy () const |
| virtual Expr | refresh () const |
| virtual Expr | deepRefresh () const |
| virtual void | setName (const std::string &t_name) |
| Change the name of the abstract. More... | |
| virtual void | setCommutable (bool t_commutable) |
| Allows the abstract to commute or not. More... | |
| virtual void | addProperty (Equation *property) |
| Adds a property to the object. More... | |
| virtual void | removeProperty (Equation *property) |
| Removes a property to the object. More... | |
| virtual void | setValue (long double t_value) |
| Sets the value if there is one (for Numerical and Literal valued). | |
| virtual void | setValue (Expr const &t_value) |
| virtual void | setElementary (bool t_elementary) |
| virtual void | setAllDependencies (bool t_allDependencies) |
| virtual void | addDependency (Expr const &expr) |
| virtual void | removeDependency (Expr const &expr) |
| virtual void | setArgument (const Expr &expr, int iArg=0) |
| Sets the argument at position iArg (default=0). More... | |
| virtual void | setArgument (const Expr &expr, const std::vector< int > &indices) |
| Sets the argument at position {i,j,...} for multi-dimensions expressions. More... | |
| virtual void | setEmpty (bool t_empty) |
| virtual void | setOperand (const Expr &operand) |
| Sets the operand of an operator. More... | |
| virtual void | setOperandPrivate (const Expr &operand, bool leaveEmpty) |
| Sets the operand of an operator. More... | |
| virtual void | setVectorArgument (const csl::vector_expr &t_argument) |
| Replaced the entire std::vector of argument. More... | |
| virtual void | setVariable (Expr const &t_variable) |
| virtual void | insert (const Expr &expr, bool side=1) |
| Inserts an expression in a sum or a product. More... | |
| virtual void | setParent (const Parent &t_parent) |
| virtual std::optional< Expr > | replaceIndex (const Index &indexToReplace, const Index &newIndex, bool refresh=true) const |
| For indicial expressions, this function searches indexToContract and replaces it with newIndex. More... | |
| virtual std::optional< Expr > | replaceIndices (std::vector< Index > const &indexToReplace, std::vector< Index > const &newIndex, bool refresh=true, bool flipped=false) const |
| virtual void | replaceIndexInPlace (Index const &oldIndex, Index const &newIndex) |
| std::optional< Expr > | contractIndex (const Index &index) const |
| csl::vector_expr | breakSpace (const Space *brokenSpace, const std::vector< const Space *> &newSpace) const |
| virtual csl::vector_expr | breakSpace (const Space *brokenSpace, const std::vector< const Space *> &newSpace, const std::vector< std::string > &indexNames) const |
| virtual void | setIndexStructure (const IndexStructure &t_index) |
| Replaces the index structure of the object, that must be an Indicial expression. More... | |
| virtual void | setPoint (const Tensor &t_point) |
| virtual void | setFullySymmetric () |
| Sets an Indicial object fully symmetric. Allows to set quickly a frequent property of tensors. This function then erases all properties of symmetry / antisymmetry and sets fullySymmetric to True. | |
| virtual void | setFullyAntiSymmetric () |
| Sets an Indicial object fully anti-symmetric. Allows to set quickly a frequent property of tensors. This function then erases all properties * of symmetry / antisymmetry and sets fullyAntiSymmetric to True. | |
| virtual void | addSymmetry (int i1, int i2) |
| Add a symmetry between the i1^{th} and the i2^{th} indices. If those indices are anti-symmetric, an error is thrown. More... | |
| virtual void | addAntiSymmetry (int i1, int i2) |
| Add an anti-symmetry between the i1^{th} and the i2^{th} indices. If those indices are symmetric, an error is thrown. More... | |
| virtual int | permut (int i1, int i2) |
| Tries to permut indices at place i1 and i2. If those two indices have a symmetry property, indices are swaped and the symmetry is returned. Else the fnuction does nothing and returns 0. More... | |
| virtual Expr | getNumericalFactor () const |
| Returns the numerical factor of the expression, i.e. returns C if the expression if of the form C*x (x having a numerical factor equal to 1), and return 1 else. More... | |
| virtual int | getNFactor () const |
| virtual csl::vector_expr | getFactors () const |
| Allows to get a std::vector of all terms than could factor the expression. More... | |
| virtual void | getExponents (std::vector< Expr > const &factors, std::vector< Expr > &exponents) const |
| Fills in a vector the exponents corresponding to some factors for the expression. More... | |
| virtual bool | checkIndexStructure (const std::vector< Index > &t_index) const |
| Checks the compatibility of the index structure of an Indicial expression with another. In a sum, two terms must have exaclty the same index structure. More... | |
| virtual bool | checkIndexStructure (const std::initializer_list< Index > &index) const |
| Checks the compatibility of the index structure of an Indicial expression with another. In a sum, two terms must have exaclty the same index structure. More... | |
| virtual bool | compareWithDummy (Expr_info expr, std::map< Index, Index > &constraints, bool keepAllCosntraints=false) const |
| Comparison disregarding name of dummy indices, i.e. the two expressions * are equals even if dummy indices have not the same names in *this and * expr. More... | |
| bool | compareWithDummy (Expr_info expr, bool keepAllCosntraints=false) const |
| virtual int | getParity (Expr_info t_variable) const |
| Returns the parity property of the expression with respect to t_variable. More... | |
| virtual bool | askTerm (Expr_info expr, bool exact=false) const |
| Check if expr can factor *this. More... | |
| virtual bool | dependsOn (Expr_info expr) const |
| Check recursively if the expression depends on expr. More... | |
| virtual bool | dependsOn (Parent_info parent) const |
| virtual bool | dependsExplicitlyOn (Expr_info expr) const |
| Check recursively if expr is present in the expression. More... | |
| virtual bool | dependsExplicitlyOn (Parent_info parent) const |
| virtual int | isPolynomial (Expr_info expr) const |
| Determines if the expression is a mononomial term in expr, i.e. a term of the form C*expr^n with C independent of expr, n integer. More... | |
| virtual bool | matchShape (Expr_info expr, bool exact=false) const |
| In the case of a vectorial-type expression, this function checks if the shape of expr matches itself. More... | |
| virtual bool | hasContractionProperty (Expr_info B) const |
| Tells (for an Indicial type) if there is a special contraction property with B. More... | |
| virtual bool | hasChainContractionProperty () const |
| virtual std::vector< ContractionChain > | getContractionProperties () const |
| virtual Expr | contraction (Expr_info B) const |
| Applies a special contraction of indices. Before calling this function we must check that there is indeed a contraction by calling the function hasContractionProperty(). More... | |
| virtual Expr | contraction (const csl::vector_expr &chain) const |
| virtual long double | evaluateScalar () const |
| Evaluates the value of the Abstract. More... | |
| virtual std::optional< Expr > | evaluate (csl::eval::mode user_mode=csl::eval::base) const =0 |
| Evaluates the Abstract. More... | |
| virtual std::optional< Expr > | derive (Expr_info expr) const |
| Calculates the derivative of the Abstract wrt another. More... | |
| virtual std::optional< Expr > | collect (std::vector< Expr > const &factors, bool full=false) const |
| Collects terms in sum according to some factors given by the user. More... | |
| virtual Expr | suppressTerm (Expr_info expr) const |
| Remove a factor from an expr, that must have been determined before. More... | |
| virtual std::optional< Expr > | suppressExponent (Expr const &factor, Expr const &exponent) const |
| Returns the expression where the factor factor^exponent has been suppressed. More... | |
| virtual std::optional< Expr > | expand_if (std::function< bool(Expr const &)> const &f, bool full=false, bool inPlace=false) const |
| Develops the Abstract. More... | |
| virtual Expr | getImaginaryPart () const |
| Evaluates the imaginary part of the Abstract and returns it. More... | |
| virtual std::optional< Expr > | getComplexArgument () const |
| Evaluates the argument in the complex plane of the Abstract and returns it. More... | |
| virtual std::optional< Expr > | getComplexConjugate () const |
| Calculates and returns the complex conjugate of the expression. More... | |
| virtual Expr & | applySelfStructureOn (Expr &expr) const |
| virtual std::optional< Expr > | getTransposed (const Space *space, bool applyProp=true) const |
| virtual std::optional< Expr > | getTransposed (const std::vector< const Space *> &spaces, bool applyProp=true) const |
| virtual std::optional< Expr > | getHermitianConjugate (const Space *space) const |
| virtual std::optional< Expr > | getHermitianConjugate (const std::vector< const Space *> &spaces) const |
| virtual csl::vector_expr | getAlternateForms () const |
| Calculates and returns all possible alternate forms of the expression in terms of simplifications. For example 1-sin^2(x) is one of the alternate forms of cos^2(x). More... | |
| virtual Expr | applyOperator (const Expr &operand, bool leaveEmpty=false) const |
| Apply the operator on an operand, iif the expression is an operator. More... | |
| virtual Expr | addition_own (const Expr &expr) const |
| Contains implementation of special addition for Numerical- and Vectorial-types. More... | |
| virtual Expr | multiplication_own (const Expr &expr, bool side=1) const |
| Contains implementation of special multiplication for Numerical- and Vectorial-types. More... | |
| virtual Expr | division_own (const Expr &expr) const |
| Contains implementation of special division for Numerical- and Polynomial-types. For polynomial, the euclidean division of two polynomials is implemented. More... | |
| virtual Expr | exponentiation_own (const Expr &expr) const |
| Contains implementation of special exponentiation for Numerical- and Vectorial-types. More... | |
| virtual Expr | getRegularExpression () const |
| Returns a regular expression from the polynomial, that is a sum where the different powers of the variable appear explicitely. More... | |
| virtual Expr | tensordot (const Expr &expr) const |
| Returns the tensordot of two Vectorial expressions. More... | |
| virtual Expr | dot (const Expr &expr) const |
| Returns the dot product of two Vectorial expressions. More... | |
| virtual Expr | getSum () const |
| Calculates and returns the sum of all elements in the Vectorial object. More... | |
| virtual Expr | getProduct () const |
| Calculates and returns the product of all elements in the Vectorial object. More... | |
| virtual Expr | getVectorialModulus () const |
| Returns the Vectorial modulus of the Vectorial object, that is defined here as the squared root of the sum of element squared. Example: {A_{11}^2+A_{12}^2+}. More... | |
| virtual Expr | getSubVectorial (int iExcept) const |
| Allows to pick a part of a Vectorial expression, excluding the iExcept^{th} element. More... | |
| virtual Expr | getSubVectorial (int iExcept, int jExcept) const |
| Allows to pick a part of a Vectorial expression, excluding the [iExcept^{th},jExcept^{th}] element (useful for matrices). More... | |
| virtual Expr | getSubVectorial (const std::vector< int > &exceptions) const |
| Allows to pick a part of a Vectorial expression, excluding the iExcept^{th} element. More... | |
| virtual Expr | getSubVectorial (const std::vector< std::vector< int >> &keepIndices) const |
| virtual Expr | getSubVectorial (std::vector< std::vector< int >>::const_iterator begin, std::vector< std::vector< int >>::const_iterator end) const |
| virtual Expr | determinant () const |
| Returns the determinant of the object if it corresponds to a square matrix (or a scalar), 0 else. More... | |
| virtual Expr | trace () const |
| virtual Expr | trace (int axis1, int axis2) const |
| Calculates the trace over the axis axis1 and axis2 of a tensor. axis1 and axis2 can be the same, in which case the trace just corresponds to the sum over this particular axis. More... | |
| virtual Expr | transpose () const |
| Calculates and returns the transpose of a 2D matrix. More... | |
| virtual Expr | hermitian () const |
| virtual Expr | symmetrise () const |
| Calculates and returns the symmetrization of a 2D matrix. More... | |
| virtual Expr | antisymmetrise () const |
| Calculates and returns the anti-symmetrization of a 2D matrix. More... | |
| virtual Expr | inverseMatrix () const |
| Calculates and returns the inverse of a 2D square matrix. The applied method is: A^{-1} = 1/det(A)*Com(A)^T. More... | |
| virtual Expr | getCanonicalPermutation () const |
| virtual Expr | applyDiracDelta (const Expr &, const Expr &) const |
| virtual void | operator= (double t_value) |
| Equivalent to the setValue() function. More... | |
| virtual bool | operator== (int t_value) const |
| virtual bool | operator== (double t_value) const |
| virtual bool | operator!= (int t_value) const |
| virtual bool | operator!= (double t_value) const |
| virtual bool | operator== (Expr_info expr) const =0 |
| Compares the Abstract with another. More... | |
| int | testDummy (Expr_info expr) const |
| bool | operator== (const Expr_c &expr) const |
| bool | operator== (const Expr &expr) const |
| bool | operator== (const Abstract &other) const |
| bool | operator!= (Expr_info expr) const |
| bool | operator!= (const Expr_c &expr) const |
| Compares the Abstract with another. More... | |
| bool | operator!= (const Expr &expr) const |
| bool | operator!= (const Abstract &other) const |
| virtual Expr const & | operator[] (int iArg) const |
| Access operator for multi-argument expressions, equivalent to the function getArgument(). More... | |
| virtual Expr & | operator[] (int iArg) |
| Access operator for multi-argument expressions, returns a reference so this function is not const. More... | |
| virtual bool | operator< (Expr_info expr) const =0 |
| Compares the simplicity of the expression to another. More... | |
| bool | operator< (const Expr_c &expr) const |
| Compares the simplicity of the expression to another. More... | |
| bool | operator> (Expr_info expr) const |
| Compares the simplicity of the expression to another. More... | |
| bool | operator> (const Expr_c &expr) const |
| bool | operator<= (Expr_info expr) const |
| bool | operator>= (Expr_info expr) const |
| Compares the simplicity of the expression to another. More... | |
| bool | operator<= (const Expr_c &expr) const |
| Compares the simplicity of the expression to another. More... | |
| bool | operator>= (const Expr_c &expr) const |
Additional Inherited Members | |
Static Public Member Functions inherited from csl::Abstract | |
| static std::string | regularName (std::string const &name) |
| static std::string | regularName (std::string_view name) |
| static std::string | regularLiteral (std::string const &name) |
| static std::string | regularLiteral (std::string_view name) |
Abstract class from which derive all building blocks of exprs, i.e. objects not function of further exprs: the leafs of the recursive tree.
|
overridevirtual |
Tells if the object commutes with expr.
| expr |
Reimplemented from csl::Abstract.
Reimplemented in csl::Variable, csl::TensorFieldElement, and csl::ScalarField.
|
overridevirtual |
Develops the Abstract.
This function concerns only products (and exponents) that will be flatten to give at the end a sum of independant terms.
| full | If true the expandment is recursive through all the Abstract. |
Reimplemented from csl::Abstract.
Reimplemented in csl::TDerivativeElement.
|
overridevirtual |
Factors the Abstract.
This function tries to factor the Abstract wrt any factor. This will be more involved in calculation than the other factorizing function that takes the factor as a parameter. So this function must be used only if we don't know the factors we want at the end.
| full | If true the factorization is recursive through all the Abstract. |
Reimplemented from csl::Abstract.
Reimplemented in csl::TDerivativeElement.
|
overridevirtual |
Factors the Abstract wrt a particular Abstract.
| factor | Abstract wrt which we try to factor. |
| full | If true the factorization is recursive through all the Abstract. |
Reimplemented from csl::Abstract.
Reimplemented in csl::TDerivativeElement.
|
overridevirtual |
Searches a sub-expression and replaces it.
| subExpression | Expression to search. |
| newExpression | Expression that replaces subExpression if it is found. |
Reimplemented from csl::Abstract.
|
overridevirtual |
Evaluates the modulus in the complex plane of the Abstract and returns it.
Reimplemented from csl::Abstract.
Reimplemented in csl::Complex, and csl::Imaginary.
|
overridevirtual |
Calculates and returns the polynomial term corresponding to *this with the variable t_variable at order order. In particular, this function assumes that the checks have already been made with the function isPolynomial().
| t_variable | Variable of the polynomial. Order of *this in t_variable. |
Reimplemented from csl::Abstract.
Reimplemented in csl::AbstractElement.
|
overridevirtual |
Evaluates the real part of the Abstract and returns it.
Reimplemented from csl::Abstract.
Reimplemented in csl::Complex, csl::Imaginary, and csl::Complexified.
|
overridevirtual |
This function returns the same expression as *this but amputated of its numerical factor. Example: (4*cos(x) -> cos(x)).
Reimplemented from csl::Abstract.
Reimplemented in csl::AbstractNumerical.
|
inlineoverridevirtual |
Tells if the expression is a Building Block or not.
Building blocks are derived classes that cannot contain further expressions, i.e. expressions that are the leafs of the recursive tree reprensent mathematical expressions: numerical or pure literal objects (variable, constant etc).
Reimplemented from csl::Abstract.
1.8.13