Hi,

I couldn't find the theano representation of imaginary unit (that's why 
asked actually). Anyway, the following addition the the mapping worked for 
me:

sympy.numbers.ImaginaryUnit: lambda:tt.sqrt(-1),

Thanks,
Amir

On Monday, November 10, 2014 3:37:52 PM UTC-6, Ondřej Čertík wrote:
>
> On Mon, Nov 10, 2014 at 2:33 PM, Ondřej Čertík <[email protected] 
> <javascript:>> wrote: 
> > On Mon, Nov 10, 2014 at 10:54 AM, Amir Farbin <[email protected] 
> <javascript:>> wrote: 
> >> Hi, 
> >> 
> >> 
> >> I'm trying to convert expressions sympy to theano... following: 
> >> 
> >> 
> >> http://matthewrocklin.com/blog/work/2013/03/28/SymPy-Theano-part-2/ 
> >> 
> >> 
> >> And I run into a failure that appears simple to fix. Here's a simple 
> >> example: 
> >> 
> >> 
> >> from sympy.printing.theanocode import theano_function 
> >> 
> >> 
> >> im=sp.sqrt(-1) 
> > 
> > Note that you can use "I", i.e. sp.I. 
> > 
> >> 
> >> x=sp.symbols("x") 
> >> 
> >> y=x+im*x 
> >> 
> >> fn_theano  = theano_function([x], [y], dims={x: 1}, dtypes={x: 
> 'float64'}) 
> >> 
> >> 
> >> ends with: 
> >> 
> >> 
> >> KeyError: <class 'sympy.core.numbers.ImaginaryUnit'> 
> >> 
> >> 
> >> which appears to my naive eyes to be a just a missing entry in a 
> conversion 
> >> map. Can someone help? 
> > 
> > There seem to be more bugs. With the latest master, I am getting: 
> > 
> > 
> > In [1]: from sympy.printing.theanocode import theano_function 
> > 
> > In [3]: import sympy as sp 
> > 
> > In [4]: im=sp.sqrt(-1) 
> > 
> > In [5]: x=sp.symbols("x") 
> > 
> > In [6]: y=x+im*x 
> > 
> > In [7]: fn_theano  = theano_function([x], [y], dims={x: 1}, dtypes={x: 
> > 'float64'}) 
> > 
> --------------------------------------------------------------------------- 
> > NameError                                 Traceback (most recent call 
> last) 
> > <ipython-input-7-8d3dbb9c015b> in <module>() 
> > ----> 1 fn_theano  = theano_function([x], [y], dims={x: 1}, dtypes={x: 
> > 'float64'}) 
> > 
> > /home/certik/repos/sympy/sympy/printing/theanocode.py in 
> > theano_function(inputs, outputs, dtypes, cache, **kwargs) 
> >     224     code = partial(theano_code, cache=cache, dtypes=dtypes, 
> >     225                    broadcastables=broadcastables) 
> > --> 226     tinputs  = list(map(code, inputs)) 
> >     227     toutputs = list(map(code, outputs)) 
> >     228     toutputs = toutputs[0] if len(toutputs) == 1 else toutputs 
> > 
> > /home/certik/repos/sympy/sympy/printing/theanocode.py in 
> > theano_code(expr, cache, **kwargs) 
> >     192 
> >     193 def theano_code(expr, cache=global_cache, **kwargs): 
> > --> 194     return TheanoPrinter(cache=cache, 
> > settings={}).doprint(expr, **kwargs) 
> >     195 
> >     196 
> > 
> > /home/certik/repos/sympy/sympy/printing/theanocode.py in doprint(self, 
> > expr, **kwargs) 
> >     187     def doprint(self, expr, **kwargs): 
> >     188         """Returns printer's representation for expr (as a 
> string)""" 
> > --> 189         return self._print(expr, **kwargs) 
> >     190 
> >     191 global_cache = {} 
> > 
> > /home/certik/repos/sympy/sympy/printing/printer.pyc in _print(self, 
> > expr, *args, **kwargs) 
> >     255                 printmethod = '_print_' + cls.__name__ 
> >     256                 if hasattr(self, printmethod): 
> > --> 257                     return getattr(self, printmethod)(expr, 
> > *args, **kwargs) 
> >     258 
> >     259             # Unknown object, fall back to the emptyPrinter. 
> > 
> > /home/certik/repos/sympy/sympy/printing/theanocode.py in 
> > _print_Symbol(self, s, dtypes, broadcastables) 
> >      78             return self.cache[key] 
> >      79         else: 
> > ---> 80             value = tt.tensor(name=s.name, dtype=dtype, 
> > broadcastable=broadcastable) 
> >      81             self.cache[key] = value 
> >      82             return value 
> > 
> > NameError: global name 'tt' is not defined 
>
> Ah, ok, this is caused by me not having the theano module installed, 
> i.e. from the beginning of sympy/printing/theanocode.py: 
>
> theano = import_module('theano') 
> if theano: 
>     ts = theano.scalar 
>     tt = theano.tensor 
>
> otherwise 'tt' is not defined. 
>
> Anyway, Amir, try to add ImaginaryUnit into the "mapping" dicitonary 
> in sympy/printing/theanocode.py, that should do it. Send us a PR with 
> the fix. 
>
> Ondrej 
>
> > 
> > 
> > 
> > 
> > Thanks for letting us know. This might be quite easy to fix, just go 
> > into the source file, do the fix and test it. We can help you out. If 
> > you fix it, then just send us a pull request. 
> > 
> > Ondrej 
>

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sympy.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/753f1e8b-c3c3-4421-a220-93f76d85b14b%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to