OASIS
Open Algebra Software
Loading...
Searching...
No Matches
SimplifyVisitor.hpp
Go to the documentation of this file.
1//
2// Created by Andrew Nazareth on 9/23/25.
3//
4
5#ifndef SIMPLIFYVISITOR_HPP
6#define SIMPLIFYVISITOR_HPP
7
8#include <format>
9#include <string>
10
11#include <gsl/gsl-lite.hpp>
12
13#include "Oasis/Visit.hpp"
14
15namespace Oasis {
16
24
25class SimplifyVisitor final : public TypedVisitor<std::expected<gsl::not_null<std::unique_ptr<Expression>>, std::string>> {
26public:
28 explicit SimplifyVisitor(SimplifyOpts& 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
49 [[nodiscard]] SimplifyOpts GetOptions() const;
50
51private:
52 SimplifyOpts options;
53};
54
55} // Oasis
56
57#endif // SIMPLIFYVISITOR_HPP
The Add expression adds two expressions together.
Definition Add.hpp:139
The Derivative class template calculates the derivative of given expressions.
Definition Derivative.hpp:62
The Divide expression divides two expressions.
Definition Divide.hpp:115
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:84
An 'imaginary' number.
Definition Imaginary.hpp:15
The Integral expression integrates the two expressions together.
Definition Integral.hpp:59
The Log expression represents the logarithm of a base and an argument.
Definition Log.hpp:37
Definition Magnitude.hpp:29
A matrix.
Definition Matrix.hpp:16
The Multiply expression multiplies two expressions.
Definition Multiply.hpp:124
Definition Negate.hpp:14
Mathematical Constant Pi.
Definition Pi.hpp:15
A real number.
Definition Real.hpp:15
Definition SimplifyVisitor.hpp:25
auto TypedVisit(const Add< Expression, Expression > &add) -> RetT override
auto TypedVisit(const Log< Expression, Expression > &log) -> RetT override
SimplifyVisitor()
Definition SimplifyVisitor.cpp:33
auto TypedVisit(const Derivative< Expression, Expression > &derivative) -> RetT override
auto TypedVisit(const Divide< Expression, Expression > &divide) -> RetT override
SimplifyOpts GetOptions() const
Definition SimplifyVisitor.cpp:43
auto TypedVisit(const Integral< Expression, Expression > &integral) -> RetT override
auto TypedVisit(const Real &real) -> RetT override
Definition SimplifyVisitor.cpp:48
auto TypedVisit(const Multiply< Expression, Expression > &multiply) -> RetT override
auto TypedVisit(const Subtract< Expression, Expression > &subtract) -> RetT override
auto TypedVisit(const Exponent< Expression, Expression > &exponent) -> RetT override
Definition FwdDecls.hpp:44
The Subtract expression subtracts two expressions.
Definition Subtract.hpp:159
Definition Visit.hpp:38
std::expected< gsl::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 SimplifyVisitor.hpp:17
enum Oasis::SimplifyOpts::AngleUnits angleUnits
AngleUnits
Definition SimplifyVisitor.hpp:18