Skip to content

Commit 112ba15

Browse files
committed
Implement symbolic sign function
1 parent 7d28239 commit 112ba15

File tree

4 files changed

+11
-2
lines changed

4 files changed

+11
-2
lines changed

src/libasr/pass/intrinsic_function_registry.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ inline std::string get_intrinsic_name(int x) {
154154
INTRINSIC_NAME_CASE(SymbolicLog)
155155
INTRINSIC_NAME_CASE(SymbolicExp)
156156
INTRINSIC_NAME_CASE(SymbolicAbs)
157+
INTRINSIC_NAME_CASE(SymbolicSign)
157158
INTRINSIC_NAME_CASE(SymbolicHasSymbolQ)
158159
INTRINSIC_NAME_CASE(SymbolicAddQ)
159160
INTRINSIC_NAME_CASE(SymbolicMulQ)
@@ -448,6 +449,8 @@ namespace IntrinsicElementalFunctionRegistry {
448449
{nullptr, &SymbolicExp::verify_args}},
449450
{static_cast<int64_t>(IntrinsicElementalFunctions::SymbolicAbs),
450451
{nullptr, &SymbolicAbs::verify_args}},
452+
{static_cast<int64_t>(IntrinsicElementalFunctions::SymbolicSign),
453+
{nullptr, &SymbolicSign::verify_args}},
451454
{static_cast<int64_t>(IntrinsicElementalFunctions::SymbolicHasSymbolQ),
452455
{nullptr, &SymbolicHasSymbolQ::verify_args}},
453456
{static_cast<int64_t>(IntrinsicElementalFunctions::SymbolicAddQ),
@@ -739,6 +742,8 @@ namespace IntrinsicElementalFunctionRegistry {
739742
"SymbolicExp"},
740743
{static_cast<int64_t>(IntrinsicElementalFunctions::SymbolicAbs),
741744
"SymbolicAbs"},
745+
{static_cast<int64_t>(IntrinsicElementalFunctions::SymbolicSign),
746+
"SymbolicSign"},
742747
{static_cast<int64_t>(IntrinsicElementalFunctions::SymbolicHasSymbolQ),
743748
"SymbolicHasSymbolQ"},
744749
{static_cast<int64_t>(IntrinsicElementalFunctions::SymbolicAddQ),
@@ -900,6 +905,7 @@ namespace IntrinsicElementalFunctionRegistry {
900905
{"SymbolicLog", {&SymbolicLog::create_SymbolicLog, &SymbolicLog::eval_SymbolicLog}},
901906
{"SymbolicExp", {&SymbolicExp::create_SymbolicExp, &SymbolicExp::eval_SymbolicExp}},
902907
{"SymbolicAbs", {&SymbolicAbs::create_SymbolicAbs, &SymbolicAbs::eval_SymbolicAbs}},
908+
{"SymbolicSign", {&SymbolicSign::create_SymbolicSign, &SymbolicSign::eval_SymbolicSign}},
903909
{"has", {&SymbolicHasSymbolQ::create_SymbolicHasSymbolQ, &SymbolicHasSymbolQ::eval_SymbolicHasSymbolQ}},
904910
{"AddQ", {&SymbolicAddQ::create_SymbolicAddQ, &SymbolicAddQ::eval_SymbolicAddQ}},
905911
{"MulQ", {&SymbolicMulQ::create_SymbolicMulQ, &SymbolicMulQ::eval_SymbolicMulQ}},

src/libasr/pass/intrinsic_functions.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ enum class IntrinsicElementalFunctions : int64_t {
155155
SymbolicLog,
156156
SymbolicExp,
157157
SymbolicAbs,
158+
SymbolicSign,
158159
SymbolicHasSymbolQ,
159160
SymbolicAddQ,
160161
SymbolicMulQ,
@@ -5968,6 +5969,7 @@ create_symbolic_unary_macro(SymbolicCos)
59685969
create_symbolic_unary_macro(SymbolicLog)
59695970
create_symbolic_unary_macro(SymbolicExp)
59705971
create_symbolic_unary_macro(SymbolicAbs)
5972+
create_symbolic_unary_macro(SymbolicSign)
59715973
create_symbolic_unary_macro(SymbolicExpand)
59725974

59735975
} // namespace LCompilers::ASRUtils

src/libasr/pass/replace_symbolic.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -477,6 +477,7 @@ class ReplaceSymbolicVisitor : public PassUtils::PassVisitor<ReplaceSymbolicVisi
477477
BASIC_UNARYOP(Log, log)
478478
BASIC_UNARYOP(Exp, exp)
479479
BASIC_UNARYOP(Abs, abs)
480+
BASIC_UNARYOP(Sign, sign)
480481
BASIC_UNARYOP(Expand, expand)
481482
BASIC_TERNARYOP(Subs, subs2)
482483
case LCompilers::ASRUtils::IntrinsicElementalFunctions::SymbolicGetArgument: {

src/lpython/semantics/python_ast_to_asr.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7677,7 +7677,7 @@ we will have to use something else.
76777677
};
76787678
if (symbolic_attributes.find(at->m_attr) != symbolic_attributes.end()){
76797679
std::set<std::string> symbolic_functions = {
7680-
"sin", "cos", "log", "exp", "Abs", "Symbol"
7680+
"sin", "cos", "log", "exp", "Abs", "sign", "Symbol"
76817681
};
76827682
if (AST::is_a<AST::Attribute_t>(*call->m_func)) {
76837683
visit_Call(*call);
@@ -7809,7 +7809,7 @@ we will have to use something else.
78097809
"sum" // For sum called over lists
78107810
};
78117811
std::set<std::string> symbolic_functions = {
7812-
"sin", "cos", "log", "exp", "Abs"
7812+
"sin", "cos", "log", "exp", "Abs", "sign"
78137813
};
78147814
if ((symbolic_functions.find(call_name) != symbolic_functions.end()) &&
78157815
imported_functions[call_name] == "sympy"){

0 commit comments

Comments
 (0)