(args, expr, printer=None, dummify=False)
return "lambda %s: (%s)" % (args, expr)
Returns a string that can be evaluated to a lambda function.

    Examples
    ========

    >>> from sympy.abc import x, y, z
    >>> from sympy.utilities.lambdify import lambdastr
    >>> lambdastr(x, x**2)
    'lambda x: (x**2)'
    >>> lambdastr((x,y,z), [z,y,x])
    'lambda x,y,z: ([z, y, x])'

    Although tuples may not appear as arguments to lambda in Python 3,
    lambdastr will create a lambda function that will unpack the original
    arguments so that nested arguments can be handled:

    >>> lambdastr((x, (y, z)), x + y)
    'lambda _0,_1: (lambda x,y,z: (x + y))(*list(__flatten_args__([_0,_1])))'
Returns a string that can be evaluated to a lambda function.
Returns a string that can be evaluated to a lambda function .
def lambdastr(args, expr, printer=None, dummify=False):
    """
    Returns a string that can be evaluated to a lambda function.

    Examples
    ========

    >>> from sympy.abc import x, y, z
    >>> from sympy.utilities.lambdify import lambdastr
    >>> lambdastr(x, x**2)
    'lambda x: (x**2)'
    >>> lambdastr((x,y,z), [z,y,x])
    'lambda x,y,z: ([z, y, x])'

    Although tuples may not appear as arguments to lambda in Python 3,
    lambdastr will create a lambda function that will unpack the original
    arguments so that nested arguments can be handled:

    >>> lambdastr((x, (y, z)), x + y)
    'lambda _0,_1: (lambda x,y,z: (x + y))(*list(__flatten_args__([_0,_1])))'
    """
    # Transforming everything to strings.
    from sympy.matrices import DeferredVector
    from sympy import Dummy, sympify, Symbol, Function, flatten

    if printer is not None:
        if inspect.isfunction(printer):
            lambdarepr = printer
        else:
            if inspect.isclass(printer):
                lambdarepr = lambda expr: printer().doprint(expr)
            else:
                lambdarepr = lambda expr: printer.doprint(expr)
    else:
        #XXX: This has to be done here because of circular imports
        from sympy.printing.lambdarepr import lambdarepr

    def sub_args(args, dummies_dict):
        if isinstance(args, str):
            return args
        elif isinstance(args, DeferredVector):
            return str(args)
        elif iterable(args):
            dummies = flatten([sub_args(a, dummies_dict) for a in args])
            return ",".join(str(a) for a in dummies)
        else:
            #Sub in dummy variables for functions or symbols
            if isinstance(args, (Function, Symbol)):
                dummies = Dummy()
                dummies_dict.update({args : dummies})
                return str(dummies)
            else:
                return str(args)

    def sub_expr(expr, dummies_dict):
        try:
            expr = sympify(expr).xreplace(dummies_dict)
        except:
            if isinstance(expr, DeferredVector):
                pass
            elif isinstance(expr, dict):
                k = [sub_expr(sympify(a), dummies_dict) for a in expr.keys()]
                v = [sub_expr(sympify(a), dummies_dict) for a in expr.values()]
                expr = dict(zip(k, v))
            elif isinstance(expr, tuple):
                expr = tuple(sub_expr(sympify(a), dummies_dict) for a in expr)
            elif isinstance(expr, list):
                expr = [sub_expr(sympify(a), dummies_dict) for a in expr]
        return expr

    # Transform args
    def isiter(l):
        return iterable(l, exclude=(str, DeferredVector))

    if isiter(args) and any(isiter(i) for i in args):
        from sympy.utilities.iterables import flatten
        import re
        dum_args = [str(Dummy(str(i))) for i in range(len(args))]
        iter_args = ','.join([i if isiter(a) else i
            for i, a in zip(dum_args, args)])
        lstr = lambdastr(flatten(args), expr, printer=printer, dummify=dummify)
        flat = '__flatten_args__'
        rv = 'lambda %s: (%s)(*list(%s([%s])))' % (
            ','.join(dum_args), lstr, flat, iter_args)
        if len(re.findall(r'\b%s\b' % flat, rv)) > 1:
            raise ValueError('the name %s is reserved by lambdastr' % flat)
        return rv

    dummies_dict = {}
    if dummify:
        args = sub_args(args, dummies_dict)
    else:
        if isinstance(args, str):
            pass
        elif iterable(args, exclude=DeferredVector):
            args = ",".join(str(a) for a in args)

    # Transform expr
    if dummify:
        if isinstance(expr, str):
            pass
        else:
            expr = sub_expr(expr, dummies_dict)
    expr = lambdarepr(expr)

    return "lambda %s: (%s)" % (args, expr)
def lambdastr ( args , expr , printer = None , dummify = False ) : # Transforming everything to strings. from sympy . matrices import DeferredVector from sympy import Dummy , sympify , Symbol , Function , flatten if printer is not None : if inspect . isfunction ( printer ) : lambdarepr = printer else : if inspect . isclass ( printer ) : lambdarepr = lambda expr : printer ( ) . doprint ( expr ) else : lambdarepr = lambda expr : printer . doprint ( expr ) else : #XXX: This has to be done here because of circular imports from sympy . printing . lambdarepr import lambdarepr def sub_args ( args , dummies_dict ) : if isinstance ( args , str ) : return args elif isinstance ( args , DeferredVector ) : return str ( args ) elif iterable ( args ) : dummies = flatten ( [ sub_args ( a , dummies_dict ) for a in args ] ) return "," . join ( str ( a ) for a in dummies ) else : #Sub in dummy variables for functions or symbols if isinstance ( args , ( Function , Symbol ) ) : dummies = Dummy ( ) dummies_dict . update ( { args : dummies } ) return str ( dummies ) else : return str ( args ) def sub_expr ( expr , dummies_dict ) : try : expr = sympify ( expr ) . xreplace ( dummies_dict ) except : if isinstance ( expr , DeferredVector ) : pass elif isinstance ( expr , dict ) : k = [ sub_expr ( sympify ( a ) , dummies_dict ) for a in expr . keys ( ) ] v = [ sub_expr ( sympify ( a ) , dummies_dict ) for a in expr . values ( ) ] expr = dict ( zip ( k , v ) ) elif isinstance ( expr , tuple ) : expr = tuple ( sub_expr ( sympify ( a ) , dummies_dict ) for a in expr ) elif isinstance ( expr , list ) : expr = [ sub_expr ( sympify ( a ) , dummies_dict ) for a in expr ] return expr # Transform args def isiter ( l ) : return iterable ( l , exclude = ( str , DeferredVector ) ) if isiter ( args ) and any ( isiter ( i ) for i in args ) : from sympy . utilities . iterables import flatten import re dum_args = [ str ( Dummy ( str ( i ) ) ) for i in range ( len ( args ) ) ] iter_args = ',' . join ( [ i if isiter ( a ) else i for i , a in zip ( dum_args , args ) ] ) lstr = lambdastr ( flatten ( args ) , expr , printer = printer , dummify = dummify ) flat = '__flatten_args__' rv = 'lambda %s: (%s)(*list(%s([%s])))' % ( ',' . join ( dum_args ) , lstr , flat , iter_args ) if len ( re . findall ( r'\b%s\b' % flat , rv ) ) > 1 : raise ValueError ( 'the name %s is reserved by lambdastr' % flat ) return rv dummies_dict = { } if dummify : args = sub_args ( args , dummies_dict ) else : if isinstance ( args , str ) : pass elif iterable ( args , exclude = DeferredVector ) : args = "," . join ( str ( a ) for a in args ) # Transform expr if dummify : if isinstance ( expr , str ) : pass else : expr = sub_expr ( expr , dummies_dict ) expr = lambdarepr ( expr ) return "lambda %s: (%s)" % ( args , expr )