41#ifndef BERTINI_NODE_DIFFERENTIAL_HPP
42#define BERTINI_NODE_DIFFERENTIAL_HPP
61 class Differential :
public virtual NamedSymbol,
public virtual EnableSharedFromThisVirtual<Differential>
64 BERTINI_DEFAULT_VISITABLE()
67 template<
typename... Ts>
69 std::shared_ptr<Differential> Make(Ts&& ...ts){
70 return std::shared_ptr<Differential>(
new Differential(ts...) );
78 Differential(std::shared_ptr<const Variable> diff_variable, std::string var_name);
82 void Reset()
const override;
85 const std::shared_ptr<const Variable>& GetVariable()
const;
88 void print(std::ostream & target)
const override;
95 std::shared_ptr<Node>
Differentiate(std::shared_ptr<Variable>
const& v =
nullptr)
const override;
97 virtual ~Differential() =
default;
105 int Degree(std::shared_ptr<Variable>
const& v =
nullptr)
const override;
107 int Degree(VariableGroup
const& vars)
const override;
109 std::vector<int>
MultiDegree(VariableGroup
const& vars)
const override;
111 void Homogenize(VariableGroup
const& vars, std::shared_ptr<Variable>
const& homvar)
override;
113 bool IsHomogeneous(std::shared_ptr<Variable>
const& v =
nullptr)
const override;
118 bool IsHomogeneous(VariableGroup
const& vars)
const override;
126 void precision(
unsigned int prec)
const override;
131 dbl
FreshEval_d(std::shared_ptr<Variable>
const& diff_variable)
const override;
133 void FreshEval_d(dbl& evaluation_value, std::shared_ptr<Variable>
const& diff_variable)
const override;
136 mpfr_complex
FreshEval_mp(std::shared_ptr<Variable>
const& diff_variable)
const override;
138 void FreshEval_mp(mpfr_complex& evaluation_value, std::shared_ptr<Variable>
const& diff_variable)
const override;
143 Differential() =
default;
144 std::shared_ptr<const Variable> differential_variable_;
147 friend class boost::serialization::access;
149 template<
class Archive>
150 void save(Archive & ar,
const unsigned int version)
const
152 ar & boost::serialization::base_object<NamedSymbol>(*
this);
153 ar & differential_variable_;
157 template<
class Archive>
158 void load(Archive & ar,
const unsigned int version)
160 ar & boost::serialization::base_object<NamedSymbol>(*
this);
161 ar & std::const_pointer_cast<Variable>(differential_variable_);
bool IsHomogeneous(std::shared_ptr< Variable > const &v=nullptr) const override
Definition differential.cpp:84
int Degree(std::shared_ptr< Variable > const &v=nullptr) const override
Definition differential.cpp:64
void precision(unsigned int prec) const override
Definition differential.cpp:103
std::vector< int > MultiDegree(VariableGroup const &vars) const override
Definition differential.cpp:74
mpfr_complex FreshEval_mp(std::shared_ptr< Variable > const &diff_variable) const override
Definition differential.cpp:135
void Homogenize(VariableGroup const &vars, std::shared_ptr< Variable > const &homvar) override
Definition differential.cpp:79
std::shared_ptr< Node > Differentiate(std::shared_ptr< Variable > const &v=nullptr) const override
Definition differential.cpp:55
dbl FreshEval_d(std::shared_ptr< Variable > const &diff_variable) const override
Definition differential.cpp:110
void Reset() const override
Definition differential.cpp:39
void print(std::ostream &target) const override
Definition differential.cpp:49
NamedSymbol(const std::string &new_name)
Definition symbol.cpp:54
Represents variable leaves in the function tree.
Definition variable.hpp:59
Defines the abstract Node base class.
Provides the Number Node types, including Rational, Float, and Integer.
Defines the abstract Symbol and NamedSymbol classes,.