29 const char* operation);
31 const char* operation);
35 const char* function_name,
40 const char* function_name,
44 const char* operation);
48 const char* function_name);
52template <
typename Factory>
56 const char* function_name,
63 std::string(function_name) +
64 " arguments cannot be null",
68 auto result = std::forward<Factory>(factory)(lhs,
rhs);
71 std::string(function_name) +
72 " expression construction failed",
76 }
catch (
const std::bad_alloc&) {
78 std::string(function_name) +
79 " expression allocation failed",
81 }
catch (
const std::exception& error) {
87template <
typename Factory>
91 const char* operation_name,
98 std::string(operation_name) +
99 " operands cannot be null",
103 auto result = std::forward<Factory>(factory)(lhs,
rhs);
106 std::string(operation_name) +
107 " expression construction failed",
111 }
catch (
const std::bad_alloc&) {
113 std::string(operation_name) +
114 " expression allocation failed",
116 }
catch (
const std::exception& error) {
static Result failure(CasErrc code, std::string message, std::string operation={})
static Result success(ExprPtr value)
const SymbolicNodePtr & node(const ::LMCAS::SymbolicExpr &expression) noexcept
constexpr const char * kRealOperation
constexpr const char * kExprMatchOperation
constexpr const char * kIntegerOperation
constexpr const char * kSymOperation
ExprResult make_unary_function_expr(const ExprPtr &expression, ComputationContext &context, const char *function_name, FunctionNode::FuncType type)
constexpr const char * kApproxOperation
constexpr const char * kComplexOperation
constexpr const char * kRationalOperation
constexpr const char * kSubstituteOperation
constexpr const char * kImagOperation
constexpr const char * kExpandOperation
ExprResult require_dimensionless(const ExprPtr &expression, const char *function_name)
ExprResult make_binary_expr(const ExprPtr &lhs, const ExprPtr &rhs, ComputationContext &context, const char *operation_name, Factory &&factory)
constexpr const char * kExprOperation
constexpr const char * kAbsOperation
ExprResult expression_failure(CasErrc code, std::string message, const char *operation)
ExprMatchResult expr_match_failure(CasErrc code, std::string message, const char *operation)
ExprResult make_unary_math_expr(const ExprPtr &expression, ComputationContext &context, const char *function_name, ExprPtr(*factory)(ExprPtr))
ExprResult make_binary_math_expr(const ExprPtr &lhs, const ExprPtr &rhs, ComputationContext &context, const char *function_name, Factory &&factory)
ExprResult comparison_value(const ExprPtr &expression, ComputationContext &context)
bool is_reserved_symbol_name(const std::string &name)
constexpr const char * kConjOperation
constexpr const char * kDifferentiateOperation
constexpr const char * kMathOperation
ExprResult expr_from_complex_result(const ExpressionResult &result, const char *operation)
const std::vector< Polynomial< BigInt > > const BigInt ComputationContext & context
Result< ExprPtr > ExprResult
Result< std::shared_ptr< SymbolicExpr > > ExpressionResult
Result of an operation that produces a symbolic expression.
std::shared_ptr< SymbolicExpr > ExprPtr
Result< ExprMatch > ExprMatchResult
__attribute__((visibility("default"))) Result< EqvProfile > eqv_profile_from_name(const std const std::string & name