21 #ifndef PARENT_H_INCLUDED 22 #define PARENT_H_INCLUDED 30 class ContractionChain;
125 virtual bool isAnAbbreviation()
const {
return false; }
129 std::string
const &getName()
const;
131 std::string
const &getLatexName()
const;
133 virtual std::string
const &getBaseName()
const;
137 bool getCommutable()
const;
143 virtual void setName(std::string t_name);
145 virtual void setLatexName(
const std::string& t_name);
149 void setCommutable(
bool t_commutable);
162 void removeProperty(
Equation* prop);
174 virtual int getDim()
const;
176 virtual void printDefinition(
177 std::ostream &out = std::cout,
182 void printPropDefinition(
189 void enableEvaluation();
192 void disableEvaluation();
195 void toggleEvaluation();
198 std::optional<Expr> evaluate(
200 csl::eval::mode user_mode = csl::eval::base)
const;
203 Expr const &getEncapsulated()
const;
209 void setEncapsulated(
Expr const &);
216 virtual int getDim(
const Space* t_space)
const;
218 virtual std::vector<const Space*> getSpace()
const;
220 virtual const Space* getFieldSpace()
const;
222 virtual void setFieldSpace(
const Space* t_space);
228 virtual bool getFullySymmetric()
const;
234 virtual bool getFullyAntiSymmetric()
const;
242 virtual std::vector<Permutation> getPermutation()
const;
244 virtual bool isValued()
const;
250 virtual Expr getTensor()
const;
257 virtual Expr getTrace()
const;
264 virtual bool dependsOn(
Expr_info expr)
const;
272 virtual bool dependsExplicitlyOn(
Expr_info expr)
const;
276 virtual const std::vector<Equation*>& getProperties()
const;
281 virtual void addSpace(
const Space* t_space);
285 virtual void setFullySymmetric();
289 virtual void setFullyAntiSymmetric();
291 virtual bool isTraceLessIn(
csl::Space const* space)
const;
292 virtual void addTraceLessNess(
csl::Space const* space);
293 virtual void removeTraceLessNess(
csl::Space const* space);
299 virtual void addSymmetry(
int i1,
int i2);
305 virtual void addAntiSymmetry(
int i1,
int i2);
312 virtual void setSymmetry(
const Symmetry& t_symmetry);
317 virtual void setTensor(
const Expr& t_tensor);
319 virtual void setTrace(
const Expr& t_trace);
328 virtual bool hasContractionProperty(
const Abstract*
self,
339 virtual bool hasChainContractionProperty()
const;
341 virtual std::vector<ContractionChain>
342 getContractionProperties()
const;
344 virtual void addContractionProperty(
345 csl::vector_expr
const& leftHandSide,
346 const Expr& rightHandSide);
348 virtual void removeContractionProperty(
349 csl::vector_expr
const& leftHandSide,
350 const Expr& rightHandSide);
358 virtual void addSelfContraction(
363 condition = std::nullopt);
365 virtual void removeSelfContraction(
370 virtual std::optional<Expr> getComplexProperty(
374 virtual std::optional<Expr> getHermitianProperty(
379 virtual std::optional<Expr> getTransposedProperty(
384 virtual void addComplexProperty(
const Expr& init,
387 virtual void addHermitianProperty(
const Space* space,
391 virtual void addTransposedProperty(
const Space* space,
396 std::vector<Parent> getBrokenParts(
const Space* broken)
const;
399 std::vector<Parent> breakSpace(
401 const std::vector<const Space*>& newSpace,
402 const std::vector<size_t>& pieces
419 virtual Expr operator()(std::vector<Index> indices);
421 virtual Expr operator()(
const std::vector<int>& indices);
426 virtual Expr operator()(std::vector<Index> indices,
429 virtual Expr operator()(
const std::vector<int>& indices,
436 friend std::ostream& operator<<(std::ostream& fout,
const AbstractParent&);
445 template<
class ...Args>
447 Expr operator()(Args&& ...args)
449 return (**
this)(args...);
452 template<
class ...Args>
454 Expr operator()(std::vector<Index> indices, Args&& ...args)
456 return (**
this)(indices, args...);
std::string name
Definition: parent.h:87
Namespace for csl library.
Definition: abreviation.h:34
Index object that is used for indicial objects.
Definition: index.h:75
Handles the full symmetry properties of an TensorElement, i.e. a vector of Permutation objects...
Definition: symmetry.h:277
std::string latexName
Definition: parent.h:91
PrimaryType
Definition: parent.h:39
virtual ~AbstractParent()
Destructor.
Definition: parent.h:121
Definition: diagonalization.h:34
ComplexProperty
Contains all possible complex properties of objects. Real, purely imaginary, or complex.
Definition: enum.h:127
Root class of the inheritance tree of abstracts.
Definition: abstract.h:76
Vector space that has a name, a dimension, a delta tensor and possibly a non-trivial metric...
Definition: space.h:64
Base class for all parents (indicial, fields etc). All parents derive from this class.
Definition: parent.h:81
std::vector< Equation * > props
Definition: parent.h:102
Type
Definition: parent.h:47
Base classes for all exprs in the program.
Definition: equation.h:43
bool commutable
Definition: parent.h:96
Definition: indicial.h:675
Expression type/.
Definition: abstract.h:1573