@@ -80,6 +80,10 @@ function get_num(x::BasicSymbolic)
8080 x. impl. num
8181end
8282
83+ function get_den (x:: BasicSymbolic )
84+ x. impl. den
85+ end
86+
8387# Same but different error messages
8488@noinline error_on_type () = error (" Internal error: unreachable reached!" )
8589@noinline error_sym () = error (" Sym doesn't have a operation or arguments!" )
@@ -307,7 +311,7 @@ function _isequal(a, b, E)
307311 elseif E === ADD || E === MUL
308312 coeff_isequal (get_coeff (a), get_coeff (b)) && isequal (get_dict (a), get_dict (b))
309313 elseif E === DIV
310- isequal (get_num (a), get_num (b)) && isequal (a . impl . den, b . impl . den )
314+ isequal (get_num (a), get_num (b)) && isequal (get_den (a), get_den (b) )
311315 elseif E === POW
312316 isequal (a. impl. exp, b. impl. exp) && isequal (a. impl. base, b. impl. base)
313317 elseif E === TERM
@@ -353,7 +357,7 @@ function Base.hash(s::BasicSymbolic, salt::UInt)::UInt
353357 s. hash[] = h′
354358 return h′
355359 elseif E === DIV
356- return hash (get_num (s), hash (s . impl . den , salt ⊻ DIV_SALT))
360+ return hash (get_num (s), hash (get_den (s) , salt ⊻ DIV_SALT))
357361 elseif E === POW
358362 hash (s. impl. exp, hash (s. impl. base, salt ⊻ POW_SALT))
359363 elseif E === TERM
@@ -487,11 +491,11 @@ function _Div(::Type{T}, num, den; kwargs...) where {T}
487491 _iszero (num) && return zero (typeof (num))
488492 _isone (den) && return num
489493 if isdiv (num) && isdiv (den)
490- return _Div (T, get_num (num) * den. impl . den, num. impl . den * get_num (den))
494+ return _Div (T, get_num (num) * get_den ( den), get_den ( num) * get_num (den))
491495 elseif isdiv (num)
492- return _Div (T, get_num (num), num. impl . den * den)
496+ return _Div (T, get_num (num), get_den ( num) * den)
493497 elseif isdiv (den)
494- return _Div (T, num * den. impl . den , get_num (den))
498+ return _Div (T, num * get_den ( den) , get_num (den))
495499 end
496500 if den isa Number && _isone (- den)
497501 return - 1 * num
531535 iscall (x) && operation (x) === (* ) ? arguments (x) : Any[x]
532536end
533537
534- @inline denominators (x) = isdiv (x) ? numerators (x . impl . den ) : Any[1 ]
538+ @inline denominators (x) = isdiv (x) ? numerators (get_den (x) ) : Any[1 ]
535539
536540function _Pow (:: Type{T} , base, exp; kwargs... ) where {T}
537541 _iszero (exp) && return 1
@@ -556,7 +560,7 @@ function toterm(t::BasicSymbolic{T}) where {T}
556560 end
557561 _Term (T, operation (t), args)
558562 elseif E === DIV
559- _Term (T, / , [get_num (t), t . impl . den ])
563+ _Term (T, / , [get_num (t), get_den (t) ])
560564 elseif E === POW
561565 _Term (T, ^ , [t. impl. base, t. impl. exp])
562566 else
@@ -1295,11 +1299,11 @@ function *(a::SN, b::SN)
12951299 # Always make sure Div wraps Mul
12961300 ! issafecanon (* , a, b) && return term (* , a, b)
12971301 if isdiv (a) && isdiv (b)
1298- _Div (get_num (a) * get_num (b), a . impl . den * b . impl . den )
1302+ _Div (get_num (a) * get_num (b), get_den (a) * get_den (b) )
12991303 elseif isdiv (a)
1300- _Div (get_num (a) * b, a . impl . den )
1304+ _Div (get_num (a) * b, get_den (a) )
13011305 elseif isdiv (b)
1302- _Div (a * get_num (b), b . impl . den )
1306+ _Div (a * get_num (b), get_den (b) )
13031307 elseif ismul (a) && ismul (b)
13041308 _Mul (mul_t (a, b), get_coeff (a) * get_coeff (b),
13051309 _merge (+ , get_dict (a), get_dict (b), filter = _iszero))
@@ -1329,7 +1333,7 @@ function *(a::Number, b::SN)
13291333 elseif isone (a)
13301334 b
13311335 elseif isdiv (b)
1332- _Div (a * get_num (b), b . impl . den )
1336+ _Div (a * get_num (b), get_den (b) )
13331337 elseif isone (- a) && isadd (b)
13341338 # -1(a+b) -> -a - b
13351339 T = promote_symtype (+ , typeof (a), symtype (b))
0 commit comments