115
115
116
116
You can test this with:
117
117
118
- from sympy.solvers.ode.tests.test_single import _test_particular_example
118
+ from sympy.solvers.ode.tests.test_single import _test_an_example
119
119
120
- _test_particular_example ('{hint}', example_name = '{example}')
120
+ _test_an_example ('{hint}', example_name = '{example}')
121
121
122
122
The ODE is:
123
123
{eq}
@@ -160,6 +160,8 @@ def _test_all_hints(runxfail=False):
160
160
all_examples = _get_all_examples ()
161
161
162
162
for our_hint in all_hints :
163
+ if our_hint .endswith ('_Integral' ) or 'series' in our_hint :
164
+ continue
163
165
_test_all_examples_for_one_hint (our_hint , all_examples , runxfail )
164
166
165
167
@@ -170,88 +172,89 @@ def _test_dummy_sol(expected_sol,dsolve_sol):
170
172
return expected_sol .dummy_eq (dsolve_sol )
171
173
172
174
173
- def _test_particular_example (our_hint , ode_example = None ,solver_flag = False , example_name = None ):
174
- if example_name is not None :
175
- all_examples = _get_all_examples ()
176
- for example in all_examples :
177
- if example ['example_name' ] == example_name :
178
- eq = example ['eq' ]
179
- dsolve (eq , hint = our_hint )
180
- else :
181
- eq = ode_example ['eq' ]
182
- expected_sol = ode_example ['sol' ]
183
- example = ode_example ['example_name' ]
184
- xfail = our_hint in ode_example ['XFAIL' ]
185
- func = ode_example ['func' ]
186
- result = {'msg' : '' , 'xpass_msg' : '' }
187
- xpass = True
188
- if solver_flag :
189
- if our_hint not in classify_ode (eq , func ):
190
- message = hint_message .format (example = example , eq = eq , our_hint = our_hint )
175
+ def _test_an_example (our_hint , example_name ):
176
+ all_examples = _get_all_examples ()
177
+ for example in all_examples :
178
+ if example ['example_name' ] == example_name :
179
+ eq = example ['eq' ]
180
+ dsolve (eq , hint = our_hint )
181
+
182
+
183
+ def _test_particular_example (our_hint , ode_example , solver_flag = False ):
184
+ eq = ode_example ['eq' ]
185
+ expected_sol = ode_example ['sol' ]
186
+ example = ode_example ['example_name' ]
187
+ xfail = our_hint in ode_example ['XFAIL' ]
188
+ func = ode_example ['func' ]
189
+ result = {'msg' : '' , 'xpass_msg' : '' }
190
+ xpass = True
191
+ if solver_flag :
192
+ if our_hint not in classify_ode (eq , func ):
193
+ message = hint_message .format (example = example , eq = eq , our_hint = our_hint )
194
+ raise AssertionError (message )
195
+
196
+ if our_hint in classify_ode (eq , func ):
197
+ result ['match_list' ] = example
198
+ try :
199
+ dsolve_sol = dsolve (eq , func , hint = our_hint )
200
+
201
+ except Exception as e :
202
+ dsolve_sol = []
203
+ result ['exception_list' ] = example
204
+ if not solver_flag :
205
+ traceback .print_exc ()
206
+ result ['msg' ] = exception_msg .format (e = str (e ), hint = our_hint , example = example , eq = eq )
207
+ xpass = False
208
+
209
+ if solver_flag and dsolve_sol != []:
210
+ expect_sol_check = False
211
+ if type (dsolve_sol )== list :
212
+ for sub_sol in expected_sol :
213
+ if sub_sol .has (Dummy ):
214
+ expect_sol_check = not _test_dummy_sol (sub_sol , dsolve_sol )
215
+ else :
216
+ expect_sol_check = sub_sol not in dsolve_sol
217
+ if expect_sol_check :
218
+ break
219
+ else :
220
+ expect_sol_check = dsolve_sol not in expected_sol
221
+ for sub_sol in expected_sol :
222
+ if sub_sol .has (Dummy ):
223
+ expect_sol_check = not _test_dummy_sol (sub_sol , dsolve_sol )
224
+
225
+ if expect_sol_check :
226
+ message = expected_sol_message .format (example = example , eq = eq , sol = expected_sol , dsolve_sol = dsolve_sol )
191
227
raise AssertionError (message )
192
228
193
- if our_hint in classify_ode (eq , func ):
194
- result ['match_list' ] = example
195
- try :
196
- dsolve_sol = dsolve (eq , func , hint = our_hint )
197
-
198
- except Exception as e :
199
- dsolve_sol = []
200
- result ['exception_list' ] = example
201
- if not solver_flag :
202
- traceback .print_exc ()
203
- result ['msg' ] = exception_msg .format (e = str (e ), hint = our_hint , example = example , eq = eq )
204
- xpass = False
205
-
206
- if solver_flag and dsolve_sol != []:
207
- expect_sol_check = False
208
- if type (dsolve_sol )== list :
209
- for sub_sol in expected_sol :
210
- if sub_sol .has (Dummy ):
211
- expect_sol_check = not _test_dummy_sol (sub_sol , dsolve_sol )
212
- else :
213
- expect_sol_check = sub_sol not in dsolve_sol
214
- if expect_sol_check :
215
- break
216
- else :
217
- expect_sol_check = dsolve_sol not in expected_sol
218
- for sub_sol in expected_sol :
219
- if sub_sol .has (Dummy ):
220
- expect_sol_check = not _test_dummy_sol (sub_sol , dsolve_sol )
229
+ expected_checkodesol = [(True , 0 ) for i in range (len (expected_sol ))]
230
+ if len (expected_sol ) == 1 :
231
+ expected_checkodesol = (True , 0 )
221
232
222
- if expect_sol_check :
223
- message = expected_sol_message .format (example = example , eq = eq , sol = expected_sol , dsolve_sol = dsolve_sol )
233
+ if checkodesol (eq , dsolve_sol ) != expected_checkodesol :
234
+ result ['unsolve_list' ] = example
235
+ xpass = False
236
+ message = dsol_incorrect_msg .format (hint = our_hint , eq = eq , sol = expected_sol ,dsolve_sol = dsolve_sol )
237
+ if solver_flag :
238
+ message = checkodesol_msg .format (example = example , eq = eq )
224
239
raise AssertionError (message )
240
+ else :
241
+ result ['msg' ] = 'AssertionError: ' + message
225
242
226
- expected_checkodesol = [(True , 0 ) for i in range (len (expected_sol ))]
227
- if len (expected_sol ) == 1 :
228
- expected_checkodesol = (True , 0 )
229
-
230
- if checkodesol (eq , dsolve_sol ) != expected_checkodesol :
231
- result ['unsolve_list' ] = example
232
- xpass = False
233
- message = dsol_incorrect_msg .format (hint = our_hint , eq = eq , sol = expected_sol ,dsolve_sol = dsolve_sol )
234
- if solver_flag :
235
- message = checkodesol_msg .format (example = example , eq = eq )
236
- raise AssertionError (message )
237
- else :
238
- result ['msg' ] = 'AssertionError: ' + message
239
-
240
- if xpass and xfail :
241
- result ['xpass_msg' ] = example + "is now passing for the hint" + our_hint
242
- return result
243
+ if xpass and xfail :
244
+ result ['xpass_msg' ] = example + "is now passing for the hint" + our_hint
245
+ return result
243
246
244
247
245
248
def _test_all_examples_for_one_hint (our_hint , all_examples = [], runxfail = None ):
246
249
if all_examples == []:
247
250
all_examples = _get_all_examples ()
248
251
match_list , unsolve_list , exception_list = [], [], []
249
252
for ode_example in all_examples :
250
- if our_hint .endswith ('_Integral' ) or 'series' in our_hint :
251
- continue
252
253
xfail = our_hint in ode_example ['XFAIL' ]
253
254
if runxfail and not xfail :
254
255
continue
256
+ if xfail :
257
+ continue
255
258
result = _test_particular_example (our_hint , ode_example )
256
259
match_list += result .get ('match_list' ,[])
257
260
unsolve_list += result .get ('unsolve_list' ,[])
@@ -617,7 +620,8 @@ def _get_examples_ode_sol_factorable():
617
620
#Below examples were added for the issue: https://github.com/sympy/sympy/issues/15889
618
621
'fact_12' : {
619
622
'eq' : exp (f (x ).diff (x ))- f (x )** 2 ,
620
- 'sol' : [Eq (NonElementaryIntegral (1 / log (y ** 2 ), (y , f (x ))), C1 + x )]
623
+ 'sol' : [Eq (NonElementaryIntegral (1 / log (y ** 2 ), (y , f (x ))), C1 + x )],
624
+ 'XFAIL' : ['lie_group' ] #It shows not implemented error for lie_group.
621
625
},
622
626
623
627
'fact_13' : {
0 commit comments