Dear Jason,
i think i explained myself badly
imagine i have
a = Symbol('a')
a = sqrt(2)+1
my_special_print(a) --> i would like to print something like "double a =
sqrt(2) + 1"
the point is that in writing the "my_special_print" i need to know the name
of the variable to be able to print my special output (i need to tell that
i see "a" as "a"...)
cheers
Riccardo
On Monday, November 30, 2015 at 2:34:55 AM UTC+1, Jason Moore wrote:
>
> Ricardo,
>
> I think you are confusing SymPy symbols with Python variables here. In the
> previous case you store the symbol 'a' in the python variable 'a' and then
> you overwrite the python variable 'a' by storing the square root of two,
> which makes it an expression. In general, you don't get to access Python
> variable names because the same Python object can be assigned to any number
> of variables. For example:
>
> a = Symbol('a')
> b = Symbol('a')
> c = Symbol('a')
> my_sym = Symbol('a')
>
> All of the above Python variables (a, b, c, my_sym) store the exact same
> SymPy symbol object.
>
> Check out this page for some more info:
> http://docs.sympy.org/dev/gotchas.html#variables
>
> Jason
>
>
> Jason
> moorepants.info
> +01 530-601-9791
>
> On Sun, Nov 29, 2015 at 2:44 AM, Riccardo Rossi <[email protected]
> <javascript:>> wrote:
>
>> Dear Thomas,
>>
>> the suggestion of Mateusz appears to work fine for my needs. I don't mind
>> if some optimization opportunities are left out... the common factors are
>> even too many for me as of now :-)
>>
>> one more little question though:
>>
>> after collecting the factors i have to do some C code generation for
>> them, and i am doing some string magic to have a form i like
>> for my C++ FE program. Nothing too clever really, but i would need to
>> have access somehow to the name of the symbol.
>>
>> i thought at first that __str__() would do, but no
>>
>> imagine i have a symbol
>>
>> a = symbol('a')
>> a = sqrt(2)
>>
>> i would like something that returns me "a"
>>
>> while
>>
>> a.__str__() will return sqrt(2)
>>
>> is there a method to give this? (surely yes, but i can not find it in the
>> documentation
>>
>> cheers
>> Riccardo
>>
>>
>>
>> On Sunday, November 29, 2015 at 10:08:21 AM UTC+1, Thomas Hisch wrote:
>>>
>>> Take a look at https://github.com/sympy/sympy/pull/7318. I remember
>>> that this PR didn't work for all matrices (I guess matices including
>>> expressions with sqrt(2)). If we find a better way to determine the common
>>> factor, I'll update the PR.
>>>
>>> On Saturday, November 28, 2015 at 8:08:52 PM UTC+1, Riccardo Rossi wrote:
>>>>
>>>> Dear Mateusz,
>>>>
>>>> what you suggest is exactly what i was hoping for and could not find by
>>>> googling
>>>>
>>>> i'll definitely try that out :-)
>>>>
>>>> Dzienkuje Bardzo! (hope spelling is correct and...that i guessed
>>>> correctly your nationalty)
>>>>
>>>> cheers
>>>> Riccardo
>>>>
>>>> On Saturday, November 28, 2015 at 11:07:20 AM UTC+1, Mateusz Paprocki
>>>> wrote:
>>>>>
>>>>> Hi,
>>>>>
>>>>> On 27 November 2015 at 19:34, Riccardo Rossi <[email protected]>
>>>>> wrote:
>>>>> > Dear list,
>>>>> >
>>>>> > i am a newby to sympy, and i should say that i liked what i found,
>>>>> so ...
>>>>> > first of all kudos to the developers.
>>>>> >
>>>>> > as of now i can succesfully generate my finite element matrices
>>>>> using sympy,
>>>>> > which saves me quite a lot of work.
>>>>> >
>>>>> > the point is that now i would like to optimize a bit what i did, and
>>>>> i would
>>>>> > like to collect some common factors between the entries of a matrix.
>>>>> >
>>>>> > for example imagine that i have (pseudocode and just an example, no
>>>>> physics
>>>>> > behind)
>>>>> >
>>>>> > a,b = symbols('a b')
>>>>> >
>>>>> > A = Matrix(2,1)
>>>>> > A[0] = a*(exp(a+b)+exp(b^2))
>>>>> > A[1] = b*(exp(a+b)+exp(b^2))
>>>>> >
>>>>> > i would like a way to detect that the term
>>>>> > (exp(a+b)+exp(b^2))
>>>>> >
>>>>> > is common to the different entries and eventually later on do
>>>>> something of
>>>>> > the type
>>>>> >
>>>>> > aux = (exp(a+b)+exp(b^2))
>>>>> > A[0] = a*aux
>>>>> > A[1] = b*aux
>>>>> >
>>>>> > note that later on for me it would be still interesting to do
>>>>> something
>>>>> > similar on SOME of the entries of the matrix
>>>>> >
>>>>> > for example if i had
>>>>> >
>>>>> > A = Matrix(3,1)
>>>>> > A[0] = a*(exp(a+b)+exp(b^2))
>>>>> > A[1] = b*(exp(a+b)+exp(b^2))
>>>>> > A[2] = a+b
>>>>> >
>>>>> > i would still love to have
>>>>> >
>>>>> >
>>>>> > aux = (exp(a+b)+exp(b^2))
>>>>> > A[0] = a*aux
>>>>> > A[1] = b*aux
>>>>> > A[2] = a+b
>>>>> >
>>>>>
>>>>> you could use cse() (common subexpression elimination) for this, e.g.:
>>>>>
>>>>> In [1]: from sympy import *
>>>>>
>>>>> In [2]: var('a,b')
>>>>> Out[2]: (a, b)
>>>>>
>>>>> In [3]: aux = exp(a + b) + exp(b**2)
>>>>>
>>>>> In [4]: Matrix([a*aux, b*aux, a + b])
>>>>> Out[4]:
>>>>> Matrix([
>>>>> [a*(exp(b**2) + exp(a + b))],
>>>>> [b*(exp(b**2) + exp(a + b))],
>>>>> [ a + b]])
>>>>>
>>>>> In [5]: replacements, (M,) = cse(_)
>>>>>
>>>>> In [6]: M
>>>>> Out[6]:
>>>>> Matrix([
>>>>> [a*x1],
>>>>> [b*x1],
>>>>> [ x0]])
>>>>>
>>>>> In [7]: replacements
>>>>> Out[7]: [(x0, a + b), (x1, exp(b**2) + exp(x0))]
>>>>>
>>>>> In [8]: M.subs(list(reversed(replacements)))
>>>>> Out[8]:
>>>>> Matrix([
>>>>> [a*(exp(b**2) + exp(a + b))],
>>>>> [b*(exp(b**2) + exp(a + b))],
>>>>> [ a + b]])
>>>>>
>>>>> However, this may not be exactly what you want, because it eliminates
>>>>> `a + b` as well.
>>>>>
>>>>> Mateusz
>>>>>
>>>>> >
>>>>> >
>>>>> > thanks in advance for any suggestion.
>>>>> >
>>>>> > cheers
>>>>> > Riccardo
>>>>> >
>>>>> > --
>>>>> > 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/a72b7481-c0c8-49a2-9a1f-3e88ae8f5f3d%40googlegroups.com.
>>>>>
>>>>>
>>>>> > For more options, visit https://groups.google.com/d/optout.
>>>>>
>>>> --
>> 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] <javascript:>.
>> To post to this group, send email to [email protected] <javascript:>
>> .
>> 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/1c8e9ddf-94fa-46ea-88a6-b79d77deec02%40googlegroups.com
>>
>> <https://groups.google.com/d/msgid/sympy/1c8e9ddf-94fa-46ea-88a6-b79d77deec02%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
--
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/16a4d556-8202-4794-9814-3b133f4979e3%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.