I think the problem is that the SR exression parses does not know about python's "(a,b)" tuple notation. If you replace the round brackets with square brackets, it does seem to work; at least for the example you give:
sage: SR('hypergeometric([3/2,], [5/2, 3], -1/4*3^2)') hypergeometric((3/2,), (5/2, 3), -1/4*3^2) You could use the python parser instead, via something like: SR(sage_eval(' hypergeometric((3/2,), (5/2, 3), -1/4*3^2)')) but note that SR will happily define symbols it doesn't know, whereas sage_eval will complain: sage: SR("my_function(var1,var2)") my_function(var1, var2) sage: SR(sage_eval("my_function(var1,var2)")) NameError: name 'my_function' is not defined On Tuesday, 25 April 2023 at 23:08:02 UTC-7 Nasser M. Abbasi wrote: > I read integrals from a file. They all are stored as strings. > > Then use SR('expression') inside sagemath to convert them to sagemath > symbolic expression before calling integrate. > > Some give parsing error. > > Is using SR('expression') not the correct way to convert string to a > symbolic expression? > > I am using 9.8 on Linux. Here is an example > > >sage > │ SageMath version 9.8, Release Date: 2023-02-11 │ > │ Using Python 3.11.1. Type "help()" for help. │ > > sage: hypergeometric((3/2,), (5/2, 3), -1/4*3^2) > hypergeometric((3/2,), (5/2, 3), -9/4) > > You see, there is no error. But now if put the expression inside string > and use SR, it gives error: > > > sage: SR('hypergeometric((3/2,), (5/2, 3), -1/4*3^2)') > --------------------------------------------------------------------------- > SyntaxError Traceback (most recent call last) > File ~/TMP/sage-9.8/src/sage/symbolic/expression.pyx:13706, in > sage.symbolic.expression.new_Expression() > 13705 from sage.calculus.calculus import > symbolic_expression_from_string > > 13706 return parent(symbolic_expression_from_string(x)) > 13707 except SyntaxError as err: > > File ~/TMP/sage-9.8/src/sage/calculus/calculus.py:2578, in > symbolic_expression_from_string(s, syms, accept_sequence, parser) > 2576 parser._callable_constructor().set_names({k[0]: v for k, v in > syms.items() > 2577 if _is_function(v)}) > -> 2578 return parse_func(s) > > File ~/TMP/sage-9.8/src/sage/misc/parser.pyx:556, in > sage.misc.parser.Parser.parse_expression() > 555 > --> 556 cpdef parse_expression(self, s): > 557 """ > > File ~/TMP/sage-9.8/src/sage/misc/parser.pyx:568, in > sage.misc.parser.Parser.parse_expression() > 567 cdef Tokenizer tokens = Tokenizer(s) > --> 568 expr = self.p_expr(tokens) > 569 if tokens.next() != EOS: > > File ~/TMP/sage-9.8/src/sage/misc/parser.pyx:792, in > sage.misc.parser.Parser.p_expr() > 791 cdef int op > --> 792 operand1 = self.p_term(tokens) > 793 op = tokens.next() > > File ~/TMP/sage-9.8/src/sage/misc/parser.pyx:826, in > sage.misc.parser.Parser.p_term() > 825 cdef int op > --> 826 operand1 = self.p_factor(tokens) > 827 op = tokens.next() > > File ~/TMP/sage-9.8/src/sage/misc/parser.pyx:869, in > sage.misc.parser.Parser.p_factor() > 868 tokens.backtrack() > --> 869 return self.p_power(tokens) > 870 > > File ~/TMP/sage-9.8/src/sage/misc/parser.pyx:897, in > sage.misc.parser.Parser.p_power() > 896 """ > --> 897 operand1 = self.p_atom(tokens) > 898 cdef int token = tokens.next() > > File ~/TMP/sage-9.8/src/sage/misc/parser.pyx:952, in > sage.misc.parser.Parser.p_atom() > 951 func = self.callable_constructor(name) > --> 952 args, kwds = self.p_args(tokens) > 953 token = tokens.next() > > File ~/TMP/sage-9.8/src/sage/misc/parser.pyx:989, in > sage.misc.parser.Parser.p_args() > 988 while token == c',': > --> 989 arg = self.p_arg(tokens) > 990 if isinstance(arg, tuple): > > File ~/TMP/sage-9.8/src/sage/misc/parser.pyx:1039, in > sage.misc.parser.Parser.p_arg() > 1038 tokens.backtrack() > -> 1039 return self.p_expr(tokens) > 1040 > > File ~/TMP/sage-9.8/src/sage/misc/parser.pyx:792, in > sage.misc.parser.Parser.p_expr() > 791 cdef int op > --> 792 operand1 = self.p_term(tokens) > 793 op = tokens.next() > > File ~/TMP/sage-9.8/src/sage/misc/parser.pyx:826, in > sage.misc.parser.Parser.p_term() > 825 cdef int op > --> 826 operand1 = self.p_factor(tokens) > 827 op = tokens.next() > > File ~/TMP/sage-9.8/src/sage/misc/parser.pyx:869, in > sage.misc.parser.Parser.p_factor() > 868 tokens.backtrack() > --> 869 return self.p_power(tokens) > 870 > > File ~/TMP/sage-9.8/src/sage/misc/parser.pyx:897, in > sage.misc.parser.Parser.p_power() > 896 """ > --> 897 operand1 = self.p_atom(tokens) > 898 cdef int token = tokens.next() > > File ~/TMP/sage-9.8/src/sage/misc/parser.pyx:964, in > sage.misc.parser.Parser.p_atom() > 963 if token != c')': > --> 964 self.parse_error(tokens, "Mismatched parentheses") > 965 return expr > > File ~/TMP/sage-9.8/src/sage/misc/parser.pyx:1042, in > sage.misc.parser.Parser.parse_error() > 1041 cdef parse_error(self, Tokenizer tokens, msg="Malformed > expression"): > -> 1042 raise SyntaxError(msg, tokens.s, tokens.pos) > 1043 > > SyntaxError: Mismatched parentheses > > During handling of the above exception, another exception occurred: > > TypeError Traceback (most recent call last) > Cell In [19], line 1 > ----> 1 SR('hypergeometric((3/2,), (5/2, 3), -1/4*3^2)') > > File ~/TMP/sage-9.8/src/sage/structure/parent.pyx:896, in > sage.structure.parent.Parent.__call__() > 894 if mor is not None: > 895 if no_extra_args: > --> 896 return mor._call_(x) > 897 else: > 898 return mor._call_with_args(x, args, kwds) > > File ~/TMP/sage-9.8/src/sage/structure/coerce_maps.pyx:161, in > sage.structure.coerce_maps.DefaultConvertMap_unique._call_() > 159 print(type(C), C) > 160 print(type(C._element_constructor), > C._element_constructor) > --> 161 raise > 162 > 163 cpdef Element _call_with_args(self, x, args=(), kwds={}): > > File ~/TMP/sage-9.8/src/sage/structure/coerce_maps.pyx:156, in > sage.structure.coerce_maps.DefaultConvertMap_unique._call_() > 154 cdef Parent C = self._codomain > 155 try: > --> 156 return C._element_constructor(x) > 157 except Exception: > 158 if print_warnings: > > File ~/TMP/sage-9.8/src/sage/symbolic/ring.pyx:384, in > sage.symbolic.ring.SymbolicRing._element_constructor_() > 382 TypeError: Malformed expression: λ + * !!! 1 > 383 """ > --> 384 return new_Expression(self, x) > 385 > 386 def _force_pyobject(self, x, bint force=False, bint > recursive=True): > > File ~/TMP/sage-9.8/src/sage/symbolic/expression.pyx:13709, in > sage.symbolic.expression.new_Expression() > 13707 except SyntaxError as err: > 13708 msg, s, pos = err.args > > 13709 raise TypeError("%s: %s !!! %s" % (msg, s[:pos], s[pos:])) > 13710 > 13711 from sage.rings.infinity import (infinity, minus_infinity, > > TypeError: Mismatched parentheses: hypergeometric((3/2, !!! ), (5/2, 3), > -1/4*3^2) > sage: > > > > Is this a bug or Am I doing something wrong? This happens on very few > cases, not all the time. The above is an example where SR gives an error. > > Thanks > --Nasser > > -- You received this message because you are subscribed to the Google Groups "sage-devel" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/sage-devel/746f88f1-d783-4d3f-b1a2-743143c361b3n%40googlegroups.com.