@@ -76,6 +76,10 @@ function get_dict(x::BasicSymbolic)
7676 x. impl. dict
7777end
7878
79+ function get_num (x:: BasicSymbolic )
80+ x. impl. num
81+ end
82+
7983# Same but different error messages
8084@noinline error_on_type () = error (" Internal error: unreachable reached!" )
8185@noinline error_sym () = error (" Sym doesn't have a operation or arguments!" )
@@ -303,7 +307,7 @@ function _isequal(a, b, E)
303307 elseif E === ADD || E === MUL
304308 coeff_isequal (get_coeff (a), get_coeff (b)) && isequal (get_dict (a), get_dict (b))
305309 elseif E === DIV
306- isequal (a . impl . num, b . impl . num ) && isequal (a. impl. den, b. impl. den)
310+ isequal (get_num (a), get_num (b) ) && isequal (a. impl. den, b. impl. den)
307311 elseif E === POW
308312 isequal (a. impl. exp, b. impl. exp) && isequal (a. impl. base, b. impl. base)
309313 elseif E === TERM
@@ -349,7 +353,7 @@ function Base.hash(s::BasicSymbolic, salt::UInt)::UInt
349353 s. hash[] = h′
350354 return h′
351355 elseif E === DIV
352- return hash (s . impl . num , hash (s. impl. den, salt ⊻ DIV_SALT))
356+ return hash (get_num (s) , hash (s. impl. den, salt ⊻ DIV_SALT))
353357 elseif E === POW
354358 hash (s. impl. exp, hash (s. impl. base, salt ⊻ POW_SALT))
355359 elseif E === TERM
@@ -483,11 +487,11 @@ function _Div(::Type{T}, num, den; kwargs...) where {T}
483487 _iszero (num) && return zero (typeof (num))
484488 _isone (den) && return num
485489 if isdiv (num) && isdiv (den)
486- return _Div (T, num. impl . num * den. impl. den, num. impl. den * den. impl . num )
490+ return _Div (T, get_num ( num) * den. impl. den, num. impl. den * get_num ( den) )
487491 elseif isdiv (num)
488- return _Div (T, num. impl . num , num. impl. den * den)
492+ return _Div (T, get_num ( num) , num. impl. den * den)
489493 elseif isdiv (den)
490- return _Div (T, num * den. impl. den, den. impl . num )
494+ return _Div (T, num * den. impl. den, get_num ( den) )
491495 end
492496 if den isa Number && _isone (- den)
493497 return - 1 * num
@@ -523,7 +527,7 @@ function _Div(num, den; kwargs...)
523527end
524528
525529@inline function numerators (x)
526- isdiv (x) && return numerators (x . impl . num )
530+ isdiv (x) && return numerators (get_num (x) )
527531 iscall (x) && operation (x) === (* ) ? arguments (x) : Any[x]
528532end
529533
@@ -552,7 +556,7 @@ function toterm(t::BasicSymbolic{T}) where {T}
552556 end
553557 _Term (T, operation (t), args)
554558 elseif E === DIV
555- _Term (T, / , [t . impl . num , t. impl. den])
559+ _Term (T, / , [get_num (t) , t. impl. den])
556560 elseif E === POW
557561 _Term (T, ^ , [t. impl. base, t. impl. exp])
558562 else
@@ -1291,11 +1295,11 @@ function *(a::SN, b::SN)
12911295 # Always make sure Div wraps Mul
12921296 ! issafecanon (* , a, b) && return term (* , a, b)
12931297 if isdiv (a) && isdiv (b)
1294- _Div (a . impl . num * b . impl . num , a. impl. den * b. impl. den)
1298+ _Div (get_num (a) * get_num (b) , a. impl. den * b. impl. den)
12951299 elseif isdiv (a)
1296- _Div (a . impl . num * b, a. impl. den)
1300+ _Div (get_num (a) * b, a. impl. den)
12971301 elseif isdiv (b)
1298- _Div (a * b . impl . num , b. impl. den)
1302+ _Div (a * get_num (b) , b. impl. den)
12991303 elseif ismul (a) && ismul (b)
13001304 _Mul (mul_t (a, b), get_coeff (a) * get_coeff (b),
13011305 _merge (+ , get_dict (a), get_dict (b), filter = _iszero))
@@ -1325,7 +1329,7 @@ function *(a::Number, b::SN)
13251329 elseif isone (a)
13261330 b
13271331 elseif isdiv (b)
1328- _Div (a * b . impl . num , b. impl. den)
1332+ _Div (a * get_num (b) , b. impl. den)
13291333 elseif isone (- a) && isadd (b)
13301334 # -1(a+b) -> -a - b
13311335 T = promote_symtype (+ , typeof (a), symtype (b))
0 commit comments