1 
2 #pragma once
3 
4 #include "properties/CommutingAsProduct.hh"
5 #include "properties/NumericalFlat.hh"
6 #include "properties/WeightBase.hh"
7 #include "properties/TableauInherit.hh"
8 #include "properties/Distributable.hh"
9 #include "properties/DependsInherit.hh"
10 #include "properties/IndexInherit.hh"
11 #include "properties/SortOrder.hh"
12 
13 namespace cadabra {
14 
15 	class Derivative :
16 		public IndexInherit,
17 		public TableauInherit,
18 		public DependsInherit,
19 		public Inherit<SortOrder>,
20 		public CommutingAsProduct,
21 		public NumericalFlat,
22 		public WeightBase,
23 //		virtual public TableauBase,
24 		public Distributable, virtual public property {
25 		public :
~Derivative()26 			virtual ~Derivative() {};
27 			virtual std::string name() const override;
28 
29 			virtual unsigned int size(const Properties&, Ex&, Ex::iterator) const override;
30 			virtual tab_t        get_tab(const Properties&, Ex&, Ex::iterator, unsigned int) const override;
31 			virtual multiplier_t value(const Kernel&, Ex::iterator, const std::string& forcedlabel) const override;
32 			virtual bool         parse(Kernel&, std::shared_ptr<Ex>, keyval_t& keyvals) override;
unnamed_argument() const33 			virtual std::string unnamed_argument() const override
34 				{
35 				return "to";
36 				};
37 
38 			Ex with_respect_to;
39 		};
40 
41 	}
42