1
1
from lpython import S , str
2
- from sympy import Symbol , Pow , sin , oo , pi , E , Mul , Add
2
+ from sympy import Symbol , Pow , sin , oo , pi , E , Mul , Add , oo , log , exp , cos
3
3
4
4
def mrv (e : S , x : S ) -> list [S ]:
5
5
"""
@@ -149,32 +149,32 @@ def leadterm(e: S, x: S) -> list[S]:
149
149
Returns the leading term a*x**b as a list [a, b].
150
150
"""
151
151
if e == sin (x )/ x :
152
- case1 : list [S ] = [S (1 ), S (0 )]
153
- return case1
152
+ l1 : list [S ] = [S (1 ), S (0 )]
153
+ return l1
154
154
elif e == S (2 )* sin (x )/ x :
155
- case2 : list [S ] = [S (2 ), S (0 )]
156
- return case2
155
+ l2 : list [S ] = [S (2 ), S (0 )]
156
+ return l2
157
157
elif e == sin (S (2 )* x )/ x :
158
- case3 : list [S ] = [S (2 ), S (0 )]
159
- return case3
158
+ l3 : list [S ] = [S (2 ), S (0 )]
159
+ return l3
160
160
elif e == sin (x )** S (2 )/ x :
161
- case4 : list [S ] = [S (1 ), S (1 )]
162
- return case4
161
+ l4 : list [S ] = [S (1 ), S (1 )]
162
+ return l4
163
163
elif e == sin (x )/ x ** S (2 ):
164
- case5 : list [S ] = [S (1 ), S (- 1 )]
165
- return case5
164
+ l5 : list [S ] = [S (1 ), S (- 1 )]
165
+ return l5
166
166
elif e == sin (x )** S (2 )/ x ** S (2 ):
167
- case6 : list [S ] = [S (1 ), S (0 )]
168
- return case6
167
+ l6 : list [S ] = [S (1 ), S (0 )]
168
+ return l6
169
169
elif e == sin (sin (sin (x )))/ sin (x ):
170
- case7 : list [S ] = [S (1 ), S (0 )]
171
- return case7
170
+ l7 : list [S ] = [S (1 ), S (0 )]
171
+ return l7
172
172
elif e == S (2 )* log (x + S (1 ))/ x :
173
- case8 : list [S ] = [S (2 ), S (0 )]
174
- return case8
173
+ l8 : list [S ] = [S (2 ), S (0 )]
174
+ return l8
175
175
elif e == sin ((log (x + S (1 ))/ x )* x )/ x :
176
- case9 : list [S ] = [S (1 ), S (0 )]
177
- return case9
176
+ l9 : list [S ] = [S (1 ), S (0 )]
177
+ return l9
178
178
raise NotImplementedError (f"Can't calculate the leadterm of { e } ." )
179
179
180
180
def mrv_leadterm (e : S , x : S ) -> list [S ]:
@@ -197,9 +197,9 @@ def mrv_leadterm(e: S, x: S) -> list[S]:
197
197
198
198
"""
199
199
200
- #w = Dummy('w', real=True, positive=True)
201
- #e = rewrite(e, x, w)
202
- #return e.leadterm(w)
200
+ # w = Dummy('w', real=True, positive=True)
201
+ # e = rewrite(e, x, w)
202
+ # return e.leadterm(w)
203
203
w : S = Symbol ('w' )
204
204
newe : S = rewrite (e , x , w )
205
205
coeff_exp_list : list [S ] = leadterm (newe , w )
@@ -265,7 +265,24 @@ def gruntz(e: S, z: S, z0: S, dir: str ="+") -> S:
265
265
# test
266
266
def test ():
267
267
x : S = Symbol ('x' )
268
- ans : S = gruntz (sin (x )/ x , x , S (0 ), "+" )
269
- print (ans )
268
+ print (gruntz (sin (x )/ x , x , S (0 ), "+" ))
269
+ print (gruntz (S (2 )* sin (x )/ x , x , S (0 ), "+" ))
270
+ print (gruntz (sin (S (2 )* x )/ x , x , S (0 ), "+" ))
271
+ print (gruntz (sin (x )** S (2 )/ x , x , S (0 ), "+" ))
272
+ print (gruntz (sin (x )/ x ** S (2 ), x , S (0 ), "+" ))
273
+ print (gruntz (sin (x )** S (2 )/ x ** S (2 ), x , S (0 ), "+" ))
274
+ print (gruntz (sin (sin (sin (x )))/ sin (x ), x , S (0 ), "+" ))
275
+ print (gruntz (S (2 )* log (x + S (1 ))/ x , x , S (0 ), "+" ))
276
+ print (gruntz (sin ((log (x + S (1 ))/ x )* x )/ x , x , S (0 ), "+" ))
277
+
278
+ assert gruntz (sin (x )/ x , x , S (0 )) == S (1 )
279
+ assert gruntz (S (2 )* sin (x )/ x , x , S (0 )) == S (2 )
280
+ assert gruntz (sin (S (2 )* x )/ x , x , S (0 )) == S (2 )
281
+ assert gruntz (sin (x )** S (2 )/ x , x , S (0 )) == S (0 )
282
+ assert gruntz (sin (x )/ x ** S (2 ), x , S (0 )) == oo
283
+ assert gruntz (sin (x )** S (2 )/ x ** S (2 ), x , S (0 )) == S (1 )
284
+ assert gruntz (sin (sin (sin (x )))/ sin (x ), x , S (0 )) == S (1 )
285
+ assert gruntz (S (2 )* log (x + S (1 ))/ x , x , S (0 )) == S (2 )
286
+ assert gruntz (sin ((log (x + S (1 ))/ x )* x )/ x , x , S (0 )) == S (1 )
270
287
271
288
test ()
0 commit comments