54 return mul(minus_one.value(), expression,
context);
84 if (left_dimension.value() != right_dimension.value()) {
return integer(0); }
86 if (!left) {
return left; }
130 (
context).limits().max_ast_nodes,
"transform");
144 auto re_squared = SymbolicExpr::power(re.value(), SymbolicExpr::number(2));
145 auto im_squared = SymbolicExpr::power(im.value(), SymbolicExpr::number(2));
146 auto sum = SymbolicExpr::add(re_squared, im_squared);
150 "complex absolute value construction failed",
154 }
catch (
const std::bad_alloc&) {
156 "complex absolute value allocation failed",
162}
catch (
const CasError& error) {
164}
catch (
const std::bad_alloc&) {
166}
catch (
const std::length_error& error) {
168}
catch (
const std::exception& error) {
static Result failure(CasErrc code, std::string message, std::string operation={})
static Result success(ExprPtr value)
std::shared_ptr<::LMCAS::SymbolicExpr > make_expression_ptr(SymbolicNodePtr root)
const SymbolicNodePtr & node(const ::LMCAS::SymbolicExpr &expression) noexcept
SymbolicNodePtr normalize_node(const SymbolicNodePtr &node, RewriteBudget &budget, const FactsQuery &facts, Domain domain)
constexpr const char * kRealOperation
constexpr const char * kImagOperation
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)
ExprResult comparison_value(const ExprPtr &expression, ComputationContext &context)
constexpr const char * kConjOperation
ExprResult expr_from_complex_result(const ExpressionResult &result, const char *operation)
Result< DimensionSignature > dimension_of(const SymbolicExpr &expression)
ExprResult eq(const ExprPtr &lhs, const ExprPtr &rhs, ComputationContext &context)
const std::vector< Polynomial< BigInt > > const BigInt ComputationContext & context
ExprResult integer(Integer)=delete
ExprResult neg(const ExprPtr &expression, ComputationContext &context)
ExprResult real(const ExprPtr &expression, ComputationContext &context)
ExprResult sub(const ExprPtr &lhs, const ExprPtr &rhs, ComputationContext &context)
ExprResult div(const ExprPtr &numerator, const ExprPtr &denominator, ComputationContext &context)
ExprResult mul(const ExprPtr &lhs, const ExprPtr &rhs, ComputationContext &context)
Result< ExprPtr > ExprResult
ExpressionResult real_part_checked(const std::shared_ptr< SymbolicExpr > &expr, ComputationContext &context)
ExprResult add(const ExprPtr &lhs, const ExprPtr &rhs, ComputationContext &context)
ExprResult conj(const ExprPtr &expression, ComputationContext &context)
QuantityResult quantity_divide(const std::shared_ptr< SymbolicExpr > &lhs, const std::shared_ptr< SymbolicExpr > &rhs, ComputationContext &context)
ExpressionResult conjugate_checked(const std::shared_ptr< SymbolicExpr > &expr, ComputationContext &context)
std::shared_ptr< SymbolicExpr > ExprPtr
ExpressionResult imag_part_checked(const std::shared_ptr< SymbolicExpr > &expr, ComputationContext &context)
QuantityResult quantity_multiply(const std::shared_ptr< SymbolicExpr > &lhs, const std::shared_ptr< SymbolicExpr > &rhs, ComputationContext &context)
const ExprPtr & denominator
QuantityResult quantity_subtract(const std::shared_ptr< SymbolicExpr > &lhs, const std::shared_ptr< SymbolicExpr > &rhs, ComputationContext &context)
ExprResult abs(const ExprPtr &expression, ComputationContext &context)
QuantityResult quantity_add(const std::shared_ptr< SymbolicExpr > &lhs, const std::shared_ptr< SymbolicExpr > &rhs, ComputationContext &context)