|
73 | 73 |
|
74 | 74 | # Needed for some simplification routines |
75 | 75 | # a total order <ₑ |
76 | | -import SymbolicUtils: <ₑ, isterm, isadd, ismul, issym, cmp_mul_adds, cmp_term_term |
| 76 | +import SymbolicUtils: <ₑ, isterm, isadd, ismul, issym, get_degrees, monomial_lt, _arglen |
77 | 77 | function SymbolicUtils.:<ₑ(a::SymEngine.Basic, b::SymEngine.Basic) |
78 | | - if isterm(a) && !isterm(b) |
79 | | - return false |
80 | | - elseif isterm(b) && !isterm(a) |
81 | | - return true |
82 | | - elseif (isadd(a) || ismul(a)) && (isadd(b) || ismul(b)) |
83 | | - return cmp_mul_adds(a, b) |
84 | | - elseif issym(a) && issym(b) |
85 | | - nameof(a) < nameof(b) |
86 | | - elseif !istree(a) && !istree(b) |
87 | | - T = typeof(a) |
88 | | - S = typeof(b) |
89 | | - if T == S |
90 | | - is_number(a) && is_number(b) && return N(a) < N(b) |
91 | | - return hash(a) < hash(b) |
| 78 | + da, db = get_degrees(a), get_degrees(b) |
| 79 | + fw = monomial_lt(da, db) |
| 80 | + bw = monomial_lt(db, da) |
| 81 | + if fw === bw && !isequal(a, b) |
| 82 | + if _arglen(a) == _arglen(b) |
| 83 | + return (operation(a), arguments(a)...,) <ₑ (operation(b), arguments(b)...,) |
92 | 84 | else |
93 | | - return name(T) < nameof(S) |
| 85 | + return _arglen(a) < _arglen(b) |
94 | 86 | end |
95 | | - #return T===S ? (T <: Number ? isless(a, b) : hash(a) < hash(b)) : nameof(T) < nameof(S) |
96 | | - elseif istree(b) && !istree(a) |
97 | | - return true |
98 | | - elseif istree(a) && istree(b) |
99 | | - return cmp_term_term(a,b) |
100 | 87 | else |
101 | | - return !(b <ₑ a) |
| 88 | + return fw |
102 | 89 | end |
103 | 90 | end |
104 | 91 |
|
|
0 commit comments