5#ifndef OASIS_MAGNITUDE_HPP
6#define OASIS_MAGNITUDE_HPP
28template <
typename OperandT>
46 if (
auto realCase = RecursiveCast<Real>(*simpOp); realCase !=
nullptr) {
47 double val = realCase->GetValue();
50 if (
auto imgCase = RecursiveCast<Imaginary>(*simpOp); imgCase !=
nullptr) {
55 auto s = e.
Accept(simplifyVisitor);
57 return e.Generalize();
59 return std::move(s).value();
73 if (
auto matrixCase = RecursiveCast<Matrix>(*simpOp); matrixCase !=
nullptr) {
75 for (
size_t i = 0; i < matrixCase->GetRows(); i++) {
76 for (
size_t j = 0; j < matrixCase->GetCols(); j++) {
77 sum += pow(matrixCase->GetMatrix()(i, j), 2);
#define EXPRESSION_CATEGORY(category)
Definition Expression.hpp:231
#define EXPRESSION_TYPE(type)
Definition Expression.hpp:220
The Add expression adds two expressions together.
Definition Add.hpp:141
auto GetLeastSigOp() const -> const LeastSigOpT &
Gets the least significant operand of this expression.
Definition BinaryExpression.hpp:296
auto GetMostSigOp() const -> const MostSigOpT &
Gets the most significant operand of this expression.
Definition BinaryExpression.hpp:286
The exponent expression creates an exponent two expressions.
Definition Exponent.hpp:86
An expression.
Definition Expression.hpp:63
auto Accept(T &visitor) const -> std::expected< typename T::RetT, std::string_view >
Definition Expression.hpp:200
virtual auto Simplify() const -> std::unique_ptr< Expression >
Simplifies this expression.
Definition Expression.cpp:244
Definition Magnitude.hpp:29
Magnitude(const Magnitude &other)
Definition Magnitude.hpp:32
Magnitude(const OperandT &operand)
Definition Magnitude.hpp:37
auto Differentiate(const Expression &var) const -> std::unique_ptr< Expression > override
Tries to differentiate this function.
Definition Magnitude.hpp:86
auto Integrate(const Expression &integrationVar) const -> std::unique_ptr< Expression > override
Attempts to integrate this expression using integration rules.
Definition Magnitude.hpp:98
auto Simplify() const -> std::unique_ptr< Expression > override
Simplifies this expression.
Definition Magnitude.hpp:42
The Multiply expression multiplies two expressions.
Definition Multiply.hpp:126
A real number.
Definition Real.hpp:15
Definition SimplifyVisitor.hpp:25
Definition UnaryExpression.hpp:14
auto Generalize() const -> std::unique_ptr< Expression > final
Definition UnaryExpression.hpp:53
auto GetOperand() const -> const OperandT &
Definition UnaryExpression.hpp:62
auto RecursiveCast(const Expression &other) -> std::unique_ptr< T >
Definition RecursiveCast.hpp:14
@ UnExp
Definition Expression.hpp:53