OASIS
Open Algebra Software
Loading...
Searching...
No Matches
DifferentiateVisitor.hpp
Go to the documentation of this file.
1//
2// Created by Andrew Nazareth on 9/23/25.
3//
4
5#ifndef DIFFERENTIATEVISITOR_HPP
6#define DIFFERENTIATEVISITOR_HPP
7
8#include <format>
9#include <string>
10
11#include <gsl-lite/gsl-lite.hpp>
12
13#include "Oasis/Visit.hpp"
14
15namespace Oasis {
16
24
25class DifferentiateVisitor final : public TypedVisitor<std::expected<gsl_lite::not_null<std::unique_ptr<Expression>>, std::string>> {
26public:
27 explicit DifferentiateVisitor(const std::unique_ptr<Expression>& differentiationVariable);
28 explicit DifferentiateVisitor(const std::unique_ptr<Expression>& differentiationVariable, const DifferentiationOpts& opts);
29
30 auto TypedVisit(const Real& real) -> RetT override;
31 auto TypedVisit(const Imaginary& imaginary) -> RetT override;
32 auto TypedVisit(const Variable& variable) -> RetT override;
33 auto TypedVisit(const Undefined& undefined) -> RetT override;
34 auto TypedVisit(const Add<Expression, Expression>& add) -> RetT override;
35 auto TypedVisit(const Subtract<Expression, Expression>& subtract) -> RetT override;
36 auto TypedVisit(const Multiply<Expression, Expression>& multiply) -> RetT override;
37 auto TypedVisit(const Divide<Expression, Expression>& divide) -> RetT override;
38 auto TypedVisit(const Exponent<Expression, Expression>& exponent) -> RetT override;
39 auto TypedVisit(const Log<Expression, Expression>& log) -> RetT override;
40 auto TypedVisit(const Negate<Expression>& negate) -> RetT override;
41 auto TypedVisit(const Sine<Expression>& sine) -> RetT override;
42 auto TypedVisit(const Derivative<Expression, Expression>& derivative) -> RetT override;
43 auto TypedVisit(const Integral<Expression, Expression>& integral) -> RetT override;
44 auto TypedVisit(const Matrix& matrix) -> RetT override;
45 auto TypedVisit(const EulerNumber&) -> RetT override;
46 auto TypedVisit(const Pi&) -> RetT override;
47 auto TypedVisit(const Magnitude<Expression>& magnitude) -> RetT override;
48
49private:
50 std::unique_ptr<Expression> differentiationVariable;
52};
53
54} // Oasis
55
56#endif // DIFFERENTIATEVISITOR_HPP
The Add expression adds two expressions together.
Definition Add.hpp:138
The Derivative class template calculates the derivative of given expressions.
Definition Derivative.hpp:60
Definition DifferentiateVisitor.hpp:25
DifferentiateVisitor(const std::unique_ptr< Expression > &differentiationVariable)
Definition DifferentiateVisitor.cpp:35
auto TypedVisit(const Real &real) -> RetT override
Definition DifferentiateVisitor.cpp:45
The Divide expression divides two expressions.
Definition Divide.hpp:113
The EulerNumber class is a representation of the Euler Number.
Definition EulerNumber.hpp:66
The exponent expression creates an exponent two expressions.
Definition Exponent.hpp:82
An 'imaginary' number.
Definition Imaginary.hpp:15
The Integral expression integrates the two expressions together.
Definition Integral.hpp:62
The Log expression represents the logarithm of a base and an argument.
Definition Log.hpp:36
Definition Magnitude.hpp:29
A matrix.
Definition Matrix.hpp:16
The Multiply expression multiplies two expressions.
Definition Multiply.hpp:122
Definition Negate.hpp:14
Mathematical Constant Pi.
Definition Pi.hpp:15
A real number.
Definition Real.hpp:15
Definition FwdDecls.hpp:44
The Subtract expression subtracts two expressions.
Definition Subtract.hpp:157
Definition Visit.hpp:38
std::expected< gsl_lite::not_null< std::unique_ptr< Expression > >, std::string > RetT
Definition Visit.hpp:40
An undefined expression.
Definition Undefined.hpp:15
An algebraic variable.
Definition Variable.hpp:30
Definition Add.hpp:11
Definition DifferentiateVisitor.hpp:17
Multivariate
Definition DifferentiateVisitor.hpp:18
enum Oasis::DifferentiationOpts::Multivariate multivariate