Skip to content

Commit 445559e

Browse files
authored
Merge pull request #168 from ShikharJ/Logic
Logic Classes and Sets
2 parents 9daa702 + 754e150 commit 445559e

File tree

7 files changed

+772
-9
lines changed

7 files changed

+772
-9
lines changed

symengine/lib/symengine.pxd

Lines changed: 85 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ cdef extern from "<set>" namespace "std":
4141
bint operator!=(iterator) nogil
4242
iterator begin() nogil
4343
iterator end() nogil
44+
iterator insert(T&) nogil
4445

4546
cdef cppclass multiset[T, U]:
4647
cppclass iterator:
@@ -156,6 +157,8 @@ cdef extern from "<symengine/symengine_rcp.h>" namespace "SymEngine":
156157
RCP[const BooleanAtom] rcp_static_cast_BooleanAtom "SymEngine::rcp_static_cast<const SymEngine::BooleanAtom>"(RCP[const Basic] &b) nogil
157158
RCP[const PyNumber] rcp_static_cast_PyNumber "SymEngine::rcp_static_cast<const SymEngine::PyNumber>"(RCP[const Basic] &b) nogil
158159
RCP[const PyFunction] rcp_static_cast_PyFunction "SymEngine::rcp_static_cast<const SymEngine::PyFunction>"(RCP[const Basic] &b) nogil
160+
RCP[const Boolean] rcp_static_cast_Boolean "SymEngine::rcp_static_cast<const SymEngine::Boolean>"(RCP[const Basic] &b) nogil
161+
RCP[const Set] rcp_static_cast_Set "SymEngine::rcp_static_cast<const SymEngine::Set>"(RCP[const Basic] &b) nogil
159162
Ptr[RCP[Basic]] outArg(RCP[const Basic] &arg) nogil
160163
Ptr[RCP[Integer]] outArg_Integer "SymEngine::outArg<SymEngine::RCP<const SymEngine::Integer>>"(RCP[const Integer] &arg) nogil
161164

@@ -292,7 +295,21 @@ cdef extern from "<symengine/basic.h>" namespace "SymEngine":
292295
bool is_a_Floor "SymEngine::is_a<SymEngine::Floor>"(const Basic &b) nogil
293296
bool is_a_Ceiling "SymEngine::is_a<SymEngine::Ceiling>"(const Basic &b) nogil
294297
bool is_a_Conjugate "SymEngine::is_a<SymEngine::Conjugate>"(const Basic &b) nogil
295-
298+
bool is_a_Interval "SymEngine::is_a<SymEngine::Interval>"(const Basic &b) nogil
299+
bool is_a_EmptySet "SymEngine::is_a<SymEngine::EmptySet>"(const Basic &b) nogil
300+
bool is_a_UniversalSet "SymEngine::is_a<SymEngine::UniversalSet>"(const Basic &b) nogil
301+
bool is_a_FiniteSet "SymEngine::is_a<SymEngine::FiniteSet>"(const Basic &b) nogil
302+
bool is_a_Union "SymEngine::is_a<SymEngine::Union>"(const Basic &b) nogil
303+
bool is_a_Complement "SymEngine::is_a<SymEngine::Complement>"(const Basic &b) nogil
304+
bool is_a_ConditionSet "SymEngine::is_a<SymEngine::ConditionSet>"(const Basic &b) nogil
305+
bool is_a_ImageSet "SymEngine::is_a<SymEngine::ImageSet>"(const Basic &b) nogil
306+
307+
bool is_a_Piecewise "SymEngine::is_a<SymEngine::Piecewise>"(const Basic &b) nogil
308+
bool is_a_Contains "SymEngine::is_a<SymEngine::Contains>"(const Basic &b) nogil
309+
bool is_a_And "SymEngine::is_a<SymEngine::And>"(const Basic &b) nogil
310+
bool is_a_Not "SymEngine::is_a<SymEngine::Not>"(const Basic &b) nogil
311+
bool is_a_Or "SymEngine::is_a<SymEngine::Or>"(const Basic &b) nogil
312+
bool is_a_Xor "SymEngine::is_a<SymEngine::Xor>"(const Basic &b) nogil
296313
RCP[const Basic] expand(RCP[const Basic] &o) nogil except +
297314

298315
cdef extern from "<symengine/subs.h>" namespace "SymEngine":
@@ -385,7 +402,7 @@ cdef extern from "<symengine/constants.h>" namespace "SymEngine":
385402
RCP[const Basic] Inf
386403
RCP[const Basic] ComplexInf
387404
RCP[const Basic] Nan
388-
405+
389406
cdef extern from "<symengine/infinity.h>" namespace "SymEngine":
390407
cdef cppclass Infty(Number):
391408
pass
@@ -870,7 +887,7 @@ cdef extern from "<symengine/visitor.h>" namespace "SymEngine":
870887

871888
cdef extern from "<symengine/logic.h>" namespace "SymEngine":
872889
cdef cppclass Boolean(Basic):
873-
pass
890+
RCP[const Boolean] logical_not() nogil except+
874891
cdef cppclass BooleanAtom(Boolean):
875892
bool get_val() nogil
876893
cdef cppclass Relational(Boolean):
@@ -883,6 +900,18 @@ cdef extern from "<symengine/logic.h>" namespace "SymEngine":
883900
pass
884901
cdef cppclass StrictLessThan(Relational):
885902
pass
903+
cdef cppclass Piecewise(Basic):
904+
pass
905+
cdef cppclass Contains(Boolean):
906+
pass
907+
cdef cppclass And(Boolean):
908+
pass
909+
cdef cppclass Or(Boolean):
910+
pass
911+
cdef cppclass Not(Boolean):
912+
pass
913+
cdef cppclass Xor(Boolean):
914+
pass
886915

887916
RCP[const Basic] boolTrue
888917
RCP[const Basic] boolFalse
@@ -894,6 +923,20 @@ cdef extern from "<symengine/logic.h>" namespace "SymEngine":
894923
cdef RCP[const Boolean] Gt(RCP[const Basic] &lhs, RCP[const Basic] &rhs) nogil except+
895924
cdef RCP[const Boolean] Le(RCP[const Basic] &lhs, RCP[const Basic] &rhs) nogil except+
896925
cdef RCP[const Boolean] Lt(RCP[const Basic] &lhs, RCP[const Basic] &rhs) nogil except+
926+
ctypedef Boolean const_Boolean "const SymEngine::Boolean"
927+
ctypedef vector[pair[RCP[const_Basic], RCP[const_Boolean]]] PiecewiseVec;
928+
ctypedef vector[RCP[Boolean]] vec_boolean "SymEngine::vec_boolean"
929+
ctypedef set[RCP[Boolean], RCPBasicKeyLess] set_boolean "SymEngine::set_boolean"
930+
cdef RCP[const Boolean] logical_and(set_boolean &s) nogil except+
931+
cdef RCP[const Boolean] logical_nand(set_boolean &s) nogil except+
932+
cdef RCP[const Boolean] logical_or(set_boolean &s) nogil except+
933+
cdef RCP[const Boolean] logical_not(RCP[const Boolean] &s) nogil except+
934+
cdef RCP[const Boolean] logical_nor(set_boolean &s) nogil except+
935+
cdef RCP[const Boolean] logical_xor(vec_boolean &s) nogil except+
936+
cdef RCP[const Boolean] logical_xnor(vec_boolean &s) nogil except+
937+
cdef RCP[const Basic] piecewise(PiecewiseVec vec) nogil except +
938+
cdef RCP[const Boolean] contains(RCP[const Basic] &expr,
939+
RCP[const Set] &set) nogil
897940

898941
cdef extern from "<utility>" namespace "std":
899942
cdef integer_class std_move_mpz "std::move" (integer_class) nogil
@@ -902,6 +945,7 @@ cdef extern from "<utility>" namespace "std":
902945
IF HAVE_SYMENGINE_MPC:
903946
cdef mpc_class std_move_mpc "std::move" (mpc_class) nogil
904947
cdef map_basic_basic std_move_map_basic_basic "std::move" (map_basic_basic) nogil
948+
cdef PiecewiseVec std_move_PiecewiseVec "std::move" (PiecewiseVec) nogil
905949

906950
cdef extern from "<symengine/eval_double.h>" namespace "SymEngine":
907951
double eval_double(const Basic &b) nogil except +
@@ -944,3 +988,41 @@ cdef extern from "<symengine/parser.h>" namespace "SymEngine":
944988

945989
cdef extern from "<symengine/codegen.h>" namespace "SymEngine":
946990
string ccode(const Basic &x) nogil except +
991+
992+
cdef extern from "<symengine/sets.h>" namespace "SymEngine":
993+
cdef cppclass Set(Basic):
994+
RCP[const Set] set_intersection(RCP[const Set] &o) nogil except +
995+
RCP[const Set] set_union(RCP[const Set] &o) nogil except +
996+
RCP[const Set] set_complement(RCP[const Set] &o) nogil except +
997+
RCP[const Boolean] contains(RCP[const Basic] &a) nogil except +
998+
cdef cppclass Interval(Set):
999+
pass
1000+
cdef cppclass EmptySet(Set):
1001+
pass
1002+
cdef cppclass UniversalSet(Set):
1003+
pass
1004+
cdef cppclass FiniteSet(Set):
1005+
pass
1006+
cdef cppclass Union(Set):
1007+
pass
1008+
cdef cppclass Complement(Set):
1009+
pass
1010+
cdef cppclass ConditionSet(Set):
1011+
pass
1012+
cdef cppclass ImageSet(Set):
1013+
pass
1014+
ctypedef set[RCP[Set], RCPBasicKeyLess] set_set "SymEngine::set_set"
1015+
cdef RCP[const Basic] interval(RCP[const Number] &start, RCP[const Number] &end, bool l, bool r) nogil except +
1016+
cdef RCP[const EmptySet] emptyset() nogil except +
1017+
cdef RCP[const UniversalSet] universalset() nogil except +
1018+
cdef RCP[const Set] finiteset(set_basic &container) nogil except +
1019+
cdef RCP[const Set] set_union(set_set &a) nogil except +
1020+
cdef RCP[const Set] set_intersection(set_set &a) nogil except +
1021+
cdef RCP[const Set] set_complement_helper(RCP[const Set] &container, RCP[const Set] &universe) nogil except +
1022+
cdef RCP[const Set] set_complement(RCP[const Set] &universe, RCP[const Set] &container) nogil except +
1023+
cdef RCP[const Set] conditionset(RCP[const Basic] &sym, RCP[const Boolean] &condition) nogil except +
1024+
cdef RCP[const Set] imageset(RCP[const Basic] &sym, RCP[const Basic] &expr, RCP[const Set] &base) nogil except +
1025+
1026+
cdef extern from "<symengine/solve.h>" namespace "SymEngine":
1027+
cdef RCP[const Set] solve(RCP[const Basic] &f, RCP[const Symbol] &sym) nogil except +
1028+
cdef RCP[const Set] solve(RCP[const Basic] &f, RCP[const Symbol] &sym, RCP[const Set] &domain) nogil except +

0 commit comments

Comments
 (0)