@@ -56,20 +56,20 @@ Returns a tuple of (solved, unsolved, err) if `detailed == true`, where
5656Returns the resulting integral or nothing if `detailed == false` 
5757""" 
5858function  integrate (eq, x =  nothing ;
59-     abstol =  1e-6 ,
60-     num_steps =  2 ,
61-     num_trials =  10 ,
62-     radius =  5.0 ,
63-     show_basis =  false ,
64-     opt =  STLSQ (exp .(- 10 : 1 : 0 )),
65-     bypass =  false ,
66-     symbolic =  false ,
67-     max_basis =  100 ,
68-     verbose =  false ,
69-     complex_plane =  true ,
70-     homotopy =  true ,
71-     use_optim =  false ,
72-     detailed =  true )
59+          abstol =  1e-6 ,
60+          num_steps =  2 ,
61+          num_trials =  10 ,
62+          radius =  5.0 ,
63+          show_basis =  false ,
64+          opt =  STLSQ (exp .(- 10 : 1 : 0 )),
65+          bypass =  false ,
66+          symbolic =  false ,
67+          max_basis =  100 ,
68+          verbose =  false ,
69+          complex_plane =  true ,
70+          homotopy =  true ,
71+          use_optim =  false ,
72+          detailed =  true )
7373    deprecation_warnings (; homotopy, use_optim)
7474
7575    eq =  expand (eq)
@@ -130,6 +130,32 @@ function integrate(eq, xx::Tuple; kwargs...)
130130    return  nothing 
131131end 
132132
133+ function  get_solved (p, sol)
134+     if  sol isa  Tuple
135+         s =  sol[1 ]
136+         return  s ==  nothing  ?  0  :  s
137+     else 
138+         return  sol ==  nothing  ?  0  :  sol
139+     end 
140+ end 
141+ 
142+ function  get_unsolved (p, sol)
143+     if  sol isa  Tuple
144+         u =  sol[2 ]
145+         return  u ==  nothing  ?  0  :  u
146+     else 
147+         return  sol ==  0  ||  sol ==  nothing  ?  p :  0 
148+     end 
149+ end 
150+ 
151+ function  get_err (p, sol)
152+     if  sol isa  Tuple
153+         return  sol[3 ]
154+     else 
155+         return  sol ==  0  ||  sol ==  nothing  ?  Inf  :  0 
156+     end 
157+ end 
158+ 
133159#  integrate_sum applies the integral summation rule ∫ Σᵢ fᵢ(x) dx = Σᵢ ∫ fᵢ(x) dx
134160function  integrate_sum (eq, x; bypass =  false , kwargs... )
135161    solved =  0 
@@ -138,10 +164,10 @@ function integrate_sum(eq, x; bypass = false, kwargs...)
138164    ts =  bypass ?  [eq] :  terms (eq)
139165
140166    for  p in  ts
141-         s, u, ε  =  integrate_term (p, x; kwargs... )
142-         solved +=  s 
143-         unsolved +=  u 
144-         ε₀ =  max (ε₀, ε )
167+         sol  =  integrate_term (p, x; kwargs... )
168+         solved +=  get_solved (p, sol) 
169+         unsolved +=  get_unsolved (p, sol) 
170+         ε₀ =  max (ε₀, get_err (p, sol) )
145171    end 
146172
147173    if  ! isequal (unsolved, 0 ) &&  isempty (sym_consts (unsolved, x))
@@ -154,10 +180,10 @@ function integrate_sum(eq, x; bypass = false, kwargs...)
154180            ts =  bypass ?  [eq] :  terms (eq)
155181
156182            for  p in  ts
157-                 s, u, ε  =  integrate_term (p, x; kwargs... )
158-                 solved +=  s 
159-                 unsolved +=  u 
160-                 ε₀ =  max (ε₀, ε )
183+                 sol  =  integrate_term (p, x; kwargs... )
184+                 solved +=  get_solved (p, sol) 
185+                 unsolved +=  get_unsolved (p, sol) 
186+                 ε₀ =  max (ε₀, get_err (p, sol) )
161187
162188                if  ! isequal (u, 0 )   #  premature termination on the first failure
163189                    return  0 , eq, ε₀
0 commit comments