@@ -442,7 +442,13 @@ <h1>Source code for sympy.parsing.sympy_parser</h1><div class="highlight"><pre>
442
442
< span class ="k "> def</ span > < span class ="nf "> _split_symbols</ span > < span class ="p "> (</ span > < span class ="n "> tokens</ span > < span class ="p "> ,</ span > < span class ="n "> local_dict</ span > < span class ="p "> ,</ span > < span class ="n "> global_dict</ span > < span class ="p "> ):</ span >
443
443
< span class ="n "> result</ span > < span class ="o "> =</ span > < span class ="p "> []</ span >
444
444
< span class ="n "> split</ span > < span class ="o "> =</ span > < span class ="bp "> False</ span >
445
+ < span class ="n "> split_previous</ span > < span class ="o "> =</ span > < span class ="bp "> False</ span >
445
446
< span class ="k "> for</ span > < span class ="n "> tok</ span > < span class ="ow "> in</ span > < span class ="n "> tokens</ span > < span class ="p "> :</ span >
447
+ < span class ="k "> if</ span > < span class ="n "> split_previous</ span > < span class ="p "> :</ span >
448
+ < span class ="c "> # throw out closing parenthesis of Symbol that was split</ span >
449
+ < span class ="n "> split_previous</ span > < span class ="o "> =</ span > < span class ="bp "> False</ span >
450
+ < span class ="k "> continue</ span >
451
+ < span class ="n "> split_previous</ span > < span class ="o "> =</ span > < span class ="bp "> False</ span >
446
452
< span class ="k "> if</ span > < span class ="n "> tok</ span > < span class ="p "> [</ span > < span class ="mi "> 0</ span > < span class ="p "> ]</ span > < span class ="o "> ==</ span > < span class ="n "> NAME</ span > < span class ="ow "> and</ span > < span class ="n "> tok</ span > < span class ="p "> [</ span > < span class ="mi "> 1</ span > < span class ="p "> ]</ span > < span class ="o "> ==</ span > < span class ="s "> 'Symbol'</ span > < span class ="p "> :</ span >
447
453
< span class ="n "> split</ span > < span class ="o "> =</ span > < span class ="bp "> True</ span >
448
454
< span class ="k "> elif</ span > < span class ="n "> split</ span > < span class ="ow "> and</ span > < span class ="n "> tok</ span > < span class ="p "> [</ span > < span class ="mi "> 0</ span > < span class ="p "> ]</ span > < span class ="o "> ==</ span > < span class ="n "> NAME</ span > < span class ="p "> :</ span >
@@ -452,17 +458,18 @@ <h1>Source code for sympy.parsing.sympy_parser</h1><div class="highlight"><pre>
452
458
< span class ="k "> if</ span > < span class ="n "> char</ span > < span class ="ow "> in</ span > < span class ="n "> local_dict</ span > < span class ="ow "> or</ span > < span class ="n "> char</ span > < span class ="ow "> in</ span > < span class ="n "> global_dict</ span > < span class ="p "> :</ span >
453
459
< span class ="c "> # Get rid of the call to Symbol</ span >
454
460
< span class ="k "> del</ span > < span class ="n "> result</ span > < span class ="p "> [</ span > < span class ="o "> -</ span > < span class ="mi "> 2</ span > < span class ="p "> :]</ span >
455
- < span class ="n "> result</ span > < span class ="o "> .</ span > < span class ="n "> extend</ span > < span class ="p "> ([(</ span > < span class ="n "> OP </ span > < span class =" p " > , </ span > < span class =" s " > '(' </ span > < span class =" p " > ), </ span > < span class =" p " > ( </ span > < span class =" n " > NAME</ span > < span class ="p "> ,</ span > < span class ="s "> "</ span > < span class ="si "> %s</ span > < span class ="s "> "</ span > < span class ="o "> %</ span > < span class ="n "> char</ span > < span class =" p " > ), </ span > < span class =" p " > ( </ span > < span class =" n " > OP </ span > < span class =" p " > , </ span > < span class =" s " > ')' </ span > < span class ="p "> ),</ span >
461
+ < span class ="n "> result</ span > < span class ="o "> .</ span > < span class ="n "> extend</ span > < span class ="p "> ([(</ span > < span class ="n "> NAME</ span > < span class ="p "> ,</ span > < span class ="s "> "</ span > < span class ="si "> %s</ span > < span class ="s "> "</ span > < span class ="o "> %</ span > < span class ="n "> char</ span > < span class ="p "> ),</ span >
456
462
< span class ="p "> (</ span > < span class ="n "> NAME</ span > < span class ="p "> ,</ span > < span class ="s "> 'Symbol'</ span > < span class ="p "> ),</ span > < span class ="p "> (</ span > < span class ="n "> OP</ span > < span class ="p "> ,</ span > < span class ="s "> '('</ span > < span class ="p "> )])</ span >
457
463
< span class ="k "> else</ span > < span class ="p "> :</ span >
458
464
< span class ="n "> result</ span > < span class ="o "> .</ span > < span class ="n "> extend</ span > < span class ="p "> ([(</ span > < span class ="n "> NAME</ span > < span class ="p "> ,</ span > < span class ="s "> "'</ span > < span class ="si "> %s</ span > < span class ="s "> '"</ span > < span class ="o "> %</ span > < span class ="n "> char</ span > < span class ="p "> ),</ span > < span class ="p "> (</ span > < span class ="n "> OP</ span > < span class ="p "> ,</ span > < span class ="s "> ')'</ span > < span class ="p "> ),</ span >
459
465
< span class ="p "> (</ span > < span class ="n "> NAME</ span > < span class ="p "> ,</ span > < span class ="s "> 'Symbol'</ span > < span class ="p "> ),</ span > < span class ="p "> (</ span > < span class ="n "> OP</ span > < span class ="p "> ,</ span > < span class ="s "> '('</ span > < span class ="p "> )])</ span >
460
- < span class ="c "> # Delete the last three tokens: get rid of the extraneous</ span >
461
- < span class ="c "> # Symbol( we just added, and also get rid of the last ) </ span >
462
- < span class ="c "> # because the closing parenthesis of the original Symbol is </ span >
463
- < span class ="c "> # still there </ span >
464
- < span class ="k "> del</ span > < span class ="n "> result</ span > < span class ="p "> [</ span > < span class ="o "> -</ span > < span class ="mi "> 3 </ span > < span class ="p "> :]</ span >
466
+ < span class ="c "> # Delete the last two tokens: get rid of the extraneous</ span >
467
+ < span class ="c "> # Symbol( we just added</ span >
468
+ < span class ="c "> # Also, set split_previous=True so will skip </ span >
469
+ < span class ="c "> # the closing parenthesis of the original Symbol </ span >
470
+ < span class ="k "> del</ span > < span class ="n "> result</ span > < span class ="p "> [</ span > < span class ="o "> -</ span > < span class ="mi "> 2 </ span > < span class ="p "> :]</ span >
465
471
< span class ="n "> split</ span > < span class ="o "> =</ span > < span class ="bp "> False</ span >
472
+ < span class ="n "> split_previous</ span > < span class ="o "> =</ span > < span class ="bp "> True</ span >
466
473
< span class ="k "> continue</ span >
467
474
< span class ="k "> else</ span > < span class ="p "> :</ span >
468
475
< span class ="n "> split</ span > < span class ="o "> =</ span > < span class ="bp "> False</ span >
@@ -816,6 +823,10 @@ <h1>Source code for sympy.parsing.sympy_parser</h1><div class="highlight"><pre>
816
823
< span class ="sd "> undefined variables into SymPy symbols, and allow the use of standard</ span >
817
824
< span class ="sd "> mathematical factorial notation (e.g. ``x!``).</ span >
818
825
826
+ < span class ="sd "> evaluate : bool, optional</ span >
827
+ < span class ="sd "> When False, the order of the arguments will remain as they were in the</ span >
828
+ < span class ="sd "> string and automatic simplification that would normally occur is</ span >
829
+ < span class ="sd "> suppressed. (see examples)</ span >
819
830
820
831
< span class ="sd "> Examples</ span >
821
832
< span class ="sd "> ========</ span >
@@ -832,6 +843,23 @@ <h1>Source code for sympy.parsing.sympy_parser</h1><div class="highlight"><pre>
832
843
< span class ="sd "> >>> parse_expr("2x", transformations=transformations)</ span >
833
844
< span class ="sd "> 2*x</ span >
834
845
846
+ < span class ="sd "> When evaluate=False, some automatic simplifications will not occur:</ span >
847
+
848
+ < span class ="sd "> >>> parse_expr("2**3"), parse_expr("2**3", evaluate=False)</ span >
849
+ < span class ="sd "> (8, 2**3)</ span >
850
+
851
+ < span class ="sd "> In addition the order of the arguments will not be made canonical.</ span >
852
+ < span class ="sd "> This feature allows one to tell exactly how the expression was entered:</ span >
853
+
854
+ < span class ="sd "> >>> a = parse_expr('1 + x', evaluate=False)</ span >
855
+ < span class ="sd "> >>> b = parse_expr('x + 1', evaluate=0)</ span >
856
+ < span class ="sd "> >>> a == b</ span >
857
+ < span class ="sd "> False</ span >
858
+ < span class ="sd "> >>> a.args</ span >
859
+ < span class ="sd "> (1, x)</ span >
860
+ < span class ="sd "> >>> b.args</ span >
861
+ < span class ="sd "> (x, 1)</ span >
862
+
835
863
< span class ="sd "> See Also</ span >
836
864
< span class ="sd "> ========</ span >
837
865
0 commit comments