Correction: I guess this is the right thing to do:

sympy.numbers.ImaginaryUnit: lambda:tt.complex(0,1),

Sorry for the mistake.
Amir



On Tuesday, November 11, 2014 4:30:51 PM UTC-6, Amir Farbin wrote:
>
> 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]> 
>> wrote: 
>> > On Mon, Nov 10, 2014 at 10:54 AM, Amir Farbin <[email protected]> 
>> 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/ee9e900a-c1d7-4905-b80d-1319f3dc1350%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to