Thanks Bruin, that was really helpful.
On Friday, May 6, 2022 at 2:52:52 AM UTC+5:30 Nils Bruin wrote:
> On Thursday, 5 May 2022 at 02:03:30 UTC-7 Ha wrote:
>
>> For Example: I tried this:
>>
>> f(X[1] = 1, X[2] = 5)
>>
>> and got this error:
>>
>> File "<ipython-input-6-3b58a4eab255>", line 10 f(X[Integer(1)] =
>> Integer(1), X[Integer(2)] = Integer(5))
>> ^ SyntaxError: keyword can't be an expression
>>
>> Indeed, that does not work. The syntax f(x0=1,x1=5) works via python's
> keyword parameter mechanism. For it to work. the keyword argument used (x0
> and x1 in the example) must match the print names of the variables of the
> polynomial ring. Those print names are x0,x1,...,x9 in your example. The
> names X[1] and X[2] do not match. What's worse: they are not valid python
> keywords, as the error says! So you don't even get to the matching phase.
>
> What you would need is the *value* of X[1], X[2] instead (which is 'x1'
> and 'x2' respectively).
>
> Python has some magic that allows you to specify the keyword names through
> expressions:
>
> f(**{X[1]: 1, X[2]: 5})
>
> should do the trick. It basically evaluates to f(**{'x1': 1, 'x2': 5}),
> and f(x1=1,x2=5) basically translates to f(**{'x1':1,'x2':5}) as well.
>
> The keyword trick is really just there for convenience. The workarounds
> above may reduce convenience by quite a bit, so perhaps you prefer to just
> use "full evaluation" instead. For instance, for your example, you could do
>
> v=list(X)
> v[1]=1
> v[2]=5
> f(v)
>
> (as presented here, it's less compact, but in your actual application it
> may be more direct)
>
--
You received this message because you are subscribed to the Google Groups
"sage-support" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/sage-support/0f59ed5e-efb2-41f3-824f-2c89832b3ef8n%40googlegroups.com.