sage语法A.<x>

2024-10-05 10:00:39 发布

您现在位置:Python中文网/ 问答频道 /正文

sage中,我可以在变量x中的字段上创建一个PolynomialRing,如下所示:

A.<x> = PolynomialRing(GF(2))

doc所示。你知道吗

我这里的问题纯粹是关于语法:什么是A.<x>?在纯python中,这将是无效的语法(对吧?)?是否有相关的__something__函数被调用?或者这里发生了什么?所有这些是怎么分配给A(和x)的呢?你知道吗

分解可得到:

sage: from dis import dis
sage: def f():
....:     A.<x> = PolynomialRing(GF(2))
....:     return A
....: 
sage: dis(f)
  2           0 LOAD_GLOBAL              0 (PolynomialRing)
              3 LOAD_GLOBAL              1 (GF)
              6 LOAD_GLOBAL              2 (Integer)
              9 LOAD_CONST               1 (2)
             12 CALL_FUNCTION            1
             15 CALL_FUNCTION            1
             18 LOAD_CONST               2 ('names')
             21 LOAD_CONST               5 (('x',))
             24 CALL_FUNCTION          257
             27 STORE_FAST               0 (A)
             30 LOAD_FAST                0 (A)
             33 LOAD_ATTR                3 (_first_ngens)
             36 LOAD_CONST               4 (1)
             39 CALL_FUNCTION            1
             42 UNPACK_SEQUENCE          1
             45 STORE_FAST               1 (x)

  3          48 LOAD_FAST                0 (A)
             51 RETURN_VALUE        

括号里是不是叫_first_ngens?你知道吗


Tags: storedoc语法loadfunctioncallglobalfirst
1条回答
网友
1楼 · 发布于 2024-10-05 10:00:39

Here is an example of the syntax you need

sage: preparse("A.<x> = PolynomialRing(GF(2))")
"A = PolynomialRing(GF(Integer(2)), names=('x',)); (x,) = A._first_ngens(1)"

为了详细说明,Sage构建了一个preparser,它接受在数学上有意义的无效Python输入,并给出有效的Python。事实上,即使你不这么认为,它也有很多:

sage: preparse("2+2")
'Integer(2)+Integer(2)'

因此,该算法采用Sage任意精度Integer,而不是Python int

sage: preparse("f(x)=x^2")
'__tmp__=var("x"); f = symbolic_expression(x**Integer(2)).function(x)'

这看起来有点疯狂,但使我们能够使用“正常”的数学符号来定义符号函数,而不是以同样的方式defPython函数。你知道吗

(最后,关于为什么在您最初的示例中使用这种语法,显然历史是这也是Magma的语法。)

相关问题 更多 >

    热门问题