コード例 #1
0
def compile_theano_source(values,
                          args_list,
                          args_names,
                          parms,
                          fname='anonymous_function'):
    """
    :param vars: parameters
    :param values: list of values (already triangular)


    """

    vars = ['_res_{}'.format(i) for i in range(len(values))]

    sub_dict = {}
    for e in vars:
        try:
            sn = e.safe_name()
        except Exception:
            sn = '_' + str(e)
        sub_dict[e] = sn

    from dolo.compiler.common import DicPrinter

    dec = ''

    for s in args_names:
        dec += "{} = T.matrix('{}')\n".format(s, s)

    dec += "p = T.vector('p')\n"

    for i, p in enumerate(parms):
        sn = '_' + str(p)
        sub_dict[p] = sn
        dec += '{} = p[{}]\n'.format(sn, i)

    for i, l in enumerate(args_list):
        name = args_names[i]
        for j, e in enumerate(l):
            try:
                sn = e.safe_name()
            except Exception:
                sn = '_' + str(e)
            sub_dict[e] = sn
            dec += '{} = {}[{},:]\n'.format(sn, name, j)

    dp = DicPrinter(sub_dict)
    strings = []
    for i, eq in enumerate(values):
        rhs = (dp.doprint(eq))
        lhs = vars[i]
        #        strings.append( '{} = OO + {}'.format(lhs,rhs))
        strings.append('{} = {}'.format(lhs, rhs))

    source = """

from theano import tensor as T
from theano import function
from theano.tensor import exp

{declarations}

#    OO =  T.zeros((1,s.shape[1]))

{computations}

res = T.stack({vars})

f = function([{args}], res, mode='FAST_RUN',name="{fname}"{on_unused_input})

"""

    #    print(args_names)
    source = source.format(computations=str.join('\n', strings),
                           declarations=dec,
                           vars=str.join(', ', [str(v) for v in vars]),
                           args=str.join(', ',
                                         [str(v) for v in args_names] + ['p']),
                           fname=fname,
                           on_unused_input=",on_unused_input='ignore'"
                           if not theano_less_than_6 else "")

    return source
コード例 #2
0
def compile_theano_source(values, args_list, args_names, parms, fname='anonymous_function'):


    """
    :param vars: parameters
    :param values: list of values (already triangular)


    """


    vars = ['_res_{}'.format(i) for i in range(len(values))]

    sub_dict = {}
    for e in vars:
        try:
            sn = e.safe_name()
        except Exception:
            sn = '_'+str(e)
        sub_dict[e] = sn

    from dolo.compiler.common import DicPrinter

    dec = ''

    for s in args_names:
        dec += "{} = T.matrix('{}')\n".format(s,s)

    dec += "p = T.vector('p')\n"

    for i,p in enumerate(parms):
        sn = '_'+str(p)
        sub_dict[p] = sn
        dec += '{} = p[{}]\n'.format(sn,i)

    for i, l in enumerate( args_list):
        name = args_names[i]
        for j, e in enumerate(l):
            try:
                sn = e.safe_name()
            except Exception:
                sn = '_'+str(e)
            sub_dict[e] = sn
            dec += '{} = {}[{},:]\n'.format(sn,name,j)

    dp = DicPrinter(sub_dict)
    strings = [ ]
    for i,eq in enumerate( values ):
        rhs = ( dp.doprint( eq) )
        lhs = vars[i]
#        strings.append( '{} = OO + {}'.format(lhs,rhs))
        strings.append( '{} = {}'.format(lhs,rhs))

    source = """

from theano import tensor as T
from theano import function
from theano.tensor import exp

{declarations}

#    OO =  T.zeros((1,s.shape[1]))

{computations}

res = T.stack({vars})

f = function([{args}], res, mode='FAST_RUN',name="{fname}"{on_unused_input})

"""

#    print(args_names)
    source = source.format(
        computations = str.join( '\n', strings),
        declarations = dec,
        vars = str.join(', ', [str(v) for v in vars]),
        args = str.join(', ', [str(v) for v in args_names] + ['p'] ),
        fname = fname,
        on_unused_input = ",on_unused_input='ignore'" if not theano_less_than_6 else ""

    )

    return source