跳到内容
新问题

对这个项目有疑问吗?注册一个免费的GitHub帐户以打开一个问题,并联系其维护者和社区。

点击“注册GitHub”,即表示您同意我们的服务条款隐私声明。我们偶尔会向您发送与帐户相关的电子邮件。

已经在GitHub上了?登录到您的帐户

实现Q上椭圆曲线的S积分寻点 #4741

关闭
约翰克雷莫纳已打开此问题2008年12月8日·43条评论
关闭

Q上椭圆曲线的S-积分求点 #4741

约翰克雷莫纳已打开此问题2008年12月8日·43条评论

评论

@约翰克雷莫纳
复制链接
成员

这是从以下开始的#3674,其中实现了Q上椭圆曲线的积分点。

这里的工作(再次)由Tobias Nagel和Michael Mardaus完成,我(John Cremona)为已经合并的椭圆曲线本地数据提供了一些必要的备份功能。

定义了两个功能:(1)padic_elliptic_logarithm()对于数字字段上曲线上的点,单位为ell_point.py;(2)S_integration_points()仅适用于Q上的曲线(目前为止!),在ell_rational field.py中。

补丁s_int_pts.patch适用于3.2.1+上的补丁#4715。应很快准备好进行审查。。。

抄送:@sagetrac-mardaus@sagetrac-tnagel

组件:数论

从迁移创建的问题https://trac.sagemath.org/tickt/4741

@约翰克雷莫纳
复制链接
成员 作者

附件:s_int_pts.patch.gz

附件:trac-4741-padic_log.patch.gz

@约翰克雷莫纳
复制链接
成员 作者

注释:1

第二个补丁修复了padic_log函数的各种问题:

  1. 错误:有限阶点的对数为0,这种情况应该在开始时处理。例如,代码在E(0)处中断。
  2. 我删除了“print_mode”参数,因为它实际上是将输出类型从p-adic更改为rational;打电话的人如果愿意可以取消。
  3. 测试“if xde==p**(xde.valuation(p))”似乎是错误的。我将其更改为“ifx.valuation(p)>=0”,这是p不在正式组中的条件。
  4. 它没有将P乘以Tamagawa指数。
  5. 它没有把答案除以你乘以的因子!
  6. 由于未使用log()的prec参数,精度被人为限制为20,默认值为20。这是t中幂级数的精度,我们将其替换为t=-x/y,因此我添加了“prec=1+precision//v”,其中v是-x/y.的估值(注意电子^1一个值为val(x)=-2v和val(y)=-3对于某些v>0,则v=val(-x/y)。
  7. 我添加了一些文档测试,以在各种示例中显示log(k*P)/log(P)==k。这就是我如何发现精度问题的。现在看起来不错。

@约翰克雷莫纳
复制链接
成员 作者

附件:trac-4741-fix2.patch.gz

@约翰克雷莫纳
复制链接
成员 作者

注释:2

第三个补丁修复了一个错误(在37a1上错过了2个积分),并使S_integration_x_coords_with_abs_bounded_by()效率稍高,但我们比Magma慢得多,我认为主要原因是该功能和S_integration_points_with_bounded_mw_ceffs()在积分的情况下,我们使用实数点使后者更快(因为你可以知道实数是否近似积分),但S积分的类似情况更复杂。不要等待,因为我们正在获得正确的分数(例如,在对Magma进行实质性测试之后),我希望现在就开始,我们可以考虑稍后加快速度。

第三个补丁的详细信息:

  1. p-adic椭圆日志:默认精度现在是20而不是100,这很好。还可以更早地将点转换为p-adic,这样可以避免在需要乘数因子时处理较大的有理数。
  2. 现在,从S_integration_points()调用p-adic log时,在获取logs之后,而不是之前,乘以必要的因子:这是一个同态,再次避免处理更大的有理数。
  3. 正确使用proof标志(尽管当proof==False时,我们只是省略了对S_integration_x_coords_with_abs_bounded_by(abs_bound)的耗时调用,这相当粗糙)。
  4. 对S_integration_x_coords_with_abs_bounded_by()进行了一些速度改进,并改进了一些注释,包括一些TODO。

[Tobias和Michael M注意:此补丁包含您发送给我的补丁中的更改。]

我有一个时间比较表,一旦我学会了如何创建wiki表,我就会在这里包含它。

@约翰克雷莫纳 约翰克雷莫纳更改了标题[尚未准备好审查]实现Q上椭圆曲线的S-积分点查找 实现Q上椭圆曲线的S积分寻点 2008年12月11日
@约翰克雷莫纳
复制链接
成员 作者

评论:3

我一直在想应该做些什么来加快这一进程。我把它们放在这里,这样它们就不会迷路了。

p-adic椭圆对数:我们在每个素数的几个点上调用它,但许多代码并不依赖于该点(p-adic字段、形式组和序列的构造),因此应该重新组织此代码:这可能意味着有一个新类来存储所有这些内容。

@圣哲伦马道
复制链接
人体模型

圣哲伦马道 人体模型 评论2008年12月12日

评论:4

嘿,约翰,

我很难使用最新的补丁。它不适用于3.2.1中带有标签4715中的补丁和该标签中其他2个补丁的新克隆。

它给了我:

修补文件sage/schemes/elliptic_curves/ell_rational_field.pyHunk#1在4532失败Hunk#4以fuzz 2(偏移0行)在4611取得成功。Hunk#5在4633失败Hunk#6在4655失败Hunk#11在4822失败Hunk#12在4845失败16个块中有5个失败--将拒绝保存到文件sage/schemes/elliptic_curves/ell_rational_field.py.rej中止:应用修补程序失败

当我尝试的时候。可能您在导出此文件之前更改了文件中的其他内容。
还是我做错了什么?

@鼠尾草-马绍夫
复制链接
人体模型

注释:5

是的,在我当前的3.2.2.alpha2合并树中,我也是这样:

mabshoff@鼠尾草:/scratch/mabshoff/release-cycle/sage-3.2.2.alpha2/devel/sage$patch-p1<trac-4741-fix2.patch\?format\=原始补丁文件sage/schemes/elliptic_curves/ell_point.py修补文件sage/schemes/elliptic_curves/ell_rational_field.pyHunk#1在4533失败。Hunk#2在4547成功(偏移1行)。Hunk#4在4609年凭借fuzz 2取得了成功。Hunk#5在4634失败。亨克6号在4662处失败。Hunk#7在4669取得成功(偏移量为-10行)。Hunk#8在4695取得成功(偏移量为-10行)。Hunk#9在4728成功(偏移量为-10行)。Hunk#10在4744成功(偏移量-10行)。Hunk#11在4819失败。12号悍马在4854分失败。Hunk#13在4936取得成功(偏移量为19行)。Hunk#14在4972取得成功(偏移量为19行)。Hunk#15在5014成功(偏移量为19行)。Hunk#16在5094取得成功(偏移量为19行)。16个大块中有5个失败--将拒绝保存到文件sage/schemes/elliptic_curves/ell_rational_field.py.rej

3.2.1后对该文件的唯一更改是:

吊架:11145:614177b99fa2用户:John Cremona<john.cremona@gmail.com>日期:2008年12月5日星期五13:34:53+0000摘要:#4715秒补丁变更集:11144:84cee787fc0f用户:John Cremona<john.cremona@gmail.com>日期:2008年12月5日星期五11:58:48+0000小结:#4715:KodairaSymbol+doctest中的微小错误修复

但即使恢复这两个补丁也无法应用fix2,那么我们是否缺少一个补丁呢?

干杯,

迈克尔

@约翰克雷莫纳
复制链接
成员 作者

注释:6

对不起,各位。我将使用3.2.2.alpha1制作一个正常工作的新补丁。由于我们的补丁实际上只是添加了两个单独的函数,每个函数包含两个文件,这应该不会太难,但我会等到我进入办公室。

@约翰克雷莫纳
复制链接
成员 作者

附件:trac-4741-rebase.patch.gz

取代上述所有内容;基于3.2.2.alpha1

@约翰克雷莫纳
复制链接
成员 作者

注释:7

好的,我已经发布了一个新补丁,它取代了所有以前的补丁,并且基于3.2.2.alpha1。我在该版本的新克隆上测试了它,一切似乎都很好。

@鼠尾草-马绍夫
复制链接
人体模型

注释:8

trac-4741-rebase.patch干净地应用于我的Sage 3.2.2.alpha2合并树。但我看到一个doctest在sage.math上使用-long失败:

mabshoff@鼠尾草:/scratch/mabshoff/release-cycle/sage-3.2.2.alpha2$/sage-t-长开发/sage/sage/schemes/elliptic_curves/ell_rational_field.pysage-t-long“devel/sage/sage/schemes/elliptic_curves/ell_rational_field.py”**********************************************************************文件“/scratch/mabshoff/release-cycle/sage-3.2.2.alpha2/devel/sage/sage/schemes/elliptic_curves/ell_rational_field.py”,第3338行,位于__main__.example_110中失败的示例:time E.rank(),len(E.S_integration_points([整数(3),整数(5),整型(7)]))#long time(~15s)##line 4619:_sage_>>>time E.rank()出现异常:回溯(最近一次调用):run_one_test中的文件“/scratch/mabshoff/release-cycle/sage-3.2.2.alpha2/local/bin/ncadoctest.py”,第1231行self.run_one_example(测试、示例、文件名、编译标志)文件“/scratch/mabshoff/release-cycle/sage-3.2.2.alpha2/local/bin/sagedoctest.py”,第38行,run_one_example中OrigDocTestRunner.run_one_example(自我、测试、示例、文件名、编译标志)文件“/scratch/mabshoff/release-cycle/sage-3.2.2.alpha2/local/bin/ncadoctest.py”,第1172行,run_one_example中compileflags,1)在test.globs中文件“<doctest__main__.example_110[10]>”,第1行time E.rank(),len(E.S_integration_points([整数(3),整数(5),整型(7)]))#long time(~15s)##line 4619:_sage_>>>time E.rank()^语法错误:无效语法**********************************************************************1项失败:第1页,共11页,在__main__.example_110中***测试失败***1次失败。[221.0秒]退出代码:1024

干杯,

迈克尔

@鼠尾草-马绍夫 鼠尾草-马绍夫 人体模型修改了里程碑:圣母-3.3,第3.2.2节 2008年12月12日
@约翰克雷莫纳
复制链接
成员 作者

附件:trac-4741-doctest.patch.gz

@约翰克雷莫纳
复制链接
成员 作者

注释:9

很抱歉,很明显我没有做一个很长的测试。我只是在doctest中错误地留下了“time”命令。再次测试后,我发现这个示例只需要7.5秒,而不是15秒(我昨天的工作做得很好,不是吗!),但我已经离开了很长时间,因为这个文件已经放了很多了。

新的迷你补丁应该就是这样。

@圣哲伦马道
复制链接
人体模型

圣哲伦马道 人体模型 评论2008年12月13日

注释:10

我们开始吧,现在它适用于我的3.2.1构建和所有测试,但长期以来都通过了。
ell_rational_field的长测试需要多长时间?我跑了3小时,什么都没有。
谢谢

@圣哲伦马道
复制链接
人体模型

圣哲伦马道 人体模型 评论2008年12月13日

评论:11

好吧,不知道,我的3.2.1有什么问题,但使用新构建的3.2.2 alpha1和这里的2个补丁,doctest工作得很好。(正常和长)。所以我想我们可以选择3.2.2。

干杯迈克尔

@约翰克雷莫纳
复制链接
成员 作者

评论:12

谢谢Michael(M)。迈克尔(A),我们能对此进行正面评价吗?我宁愿有人而不是我们三个人来审查彼此的代码!

@威廉姆斯坦
复制链接
贡献者

注释:13

参考报告:

两个简单的拼写错误修复:

  • “没有必要指定mw_base,则必须计算Mordell-Will基(可能需要更长的时间)”-->“没有必要指定mw_base;如果没有指定,则必须计算Mordell-Will基,这可能需要更长的时间。”

  • “计算self的p-adic椭圆对数”-->“计算self的p-adic椭圆对数。”

一个错误:

sage:E=椭圆曲线('794a1')sage:E.S_积分点([2,3,5])回溯(最近一次调用):...sage.rings.padics.precision_error。PrecisionError:无法除以与零无法区分的值

@约翰克雷莫纳
复制链接
成员 作者

评论:14

对于您的示例,*-prec.patch修复了这个问题,但更智能的解决方案更可取。。。

@约翰克雷莫纳
复制链接
成员 作者

评论:21

附件:trac-4741基于补丁.gz

我是对的:昨晚的3个补丁都是基于前一版本的。这解释了两件事:我昨晚重新修复的kodaira错误已经修复,pari_curve精度问题也已经修复。

所以现在我们有了trac-4741-rebased-fixes.patch,它(1)取代了前面的3个;(2) 正确地基于3.2.2.alpha2;(3) 通过更智能地处理p-adic精度改进了早期的修复(它使用try/except,首先尝试p-adci精度20,如果失败则加倍)。

我在一个新的3.2.2.alpha2克隆上尝试了这个补丁。重述一下,按此顺序应用这三个补丁程序,忽略其他补丁程序:

  1. trac-4741-基于补丁
  2. trac-4741-doctest.批次
  3. trac-4741基于修复补丁
    您应该会发现sage/schemes/elliptic_curves中的所有doctest都通过了,对于秩>1的导体2000的所有数据库曲线,E.S_integration_points([2,3,5])都可以正常工作。

@约翰克雷莫纳 约翰克雷莫纳更改了标题[needs rebase]实现Q上椭圆曲线的S-积分点查找 [使用重新基础的补丁,需要审查(最后)]实现Q上椭圆曲线的S积分点查找 2008年12月14日
@鼠尾草-马绍夫
复制链接
人体模型

评论:22

回复@威廉姆斯坦:

这是一种积极的评价。我已经阅读了所有最新的更改很好,但我有实际上尝试了新代码或运行了doctest,因为我无法应用上一个补丁。

应用

  1. trac-4741-基于补丁
  2. trac-4741-doctest.批次
  3. trac-4741基于修复补丁

导致一个工作的圣人以及通过文档测试。

威廉:我想你想在多做一点调查后,对这篇文章进行最后的正面评论。

干杯,

迈克尔

@威廉姆斯坦
复制链接
贡献者

评论:23

参考报告:

我用一个简单的for循环再次打破了它。

sage:椭圆曲线('2534g1')。S_积分点([13,2])...-->576返回self[0]/self[2],self[1]/self[2]577578定义is_divisable_by(self,m):/sage.structure.element中的home/was/build/sage-3.2.2.alpha2/local/lib/python2.5/site-packages/sage/structure/element.so。环形元件__div__(sage/结构/元件c:9074)()/sage.rings.padics.padic_capped_relative_element.pAdicCappedRelativeElement中的home/was/build/sage-3.2.2.alpha2/local/lib/python2.5/site-packages/sage/rings/padics/padic_capped-relative_lement.so_div_(sage/rings/padics/padic_capped_relative_element.c:11055)()ZeroDivisionError:不能被零除

这就是得到它的循环:

sage:表示cremona_optimal_curves中的E([1000..10000]):如果E.rank()==2:打印E.cremona_label(),E.S_integration_points([13]+[E.conductor().factor()[0][0]])

@威廉姆斯坦 威廉姆斯坦更改了标题[使用基于基的补丁,需要审查(最后)]实现Q上椭圆曲线的S积分点查找 [with rebased patch]实现Q上椭圆曲线的S-积分点查找 2008年12月14日
@鼠尾草-马绍夫
复制链接
人体模型

评论:24

修改摘要,使报告19不会收到此票据。

干杯,

迈克尔

@鼠尾草-马绍夫 鼠尾草-马绍夫 人体模型更改了标题[使用重新基础的补丁]实现Q上椭圆曲线的S积分点查找 实现Q上椭圆曲线的S积分寻点 2008年12月14日
@约翰克雷莫纳
复制链接
成员 作者

评论:25

你不喜欢彻底的复习吗。我没有在我的padic日志修复中捕获足够的错误。现在,除了PariError I陷阱ZeroDivisionError和TypeError,当精度太低时,都可能发生。在2666e1之前,was的循环运行良好。今晚可能完成不了。。。

@约翰克雷莫纳
复制链接
成员 作者

评论:26

附件:trac-4741-padic.patch.gz

应用了各种p-adic精密创可贴,因此William的循环现在达到了这个:

sage:椭圆曲线(“7690e1”)。S_积分点([13,2])

此时p-adic代码中出现了一个错误。我现在无法处理这件事,所以必须有人来判断这件事现在是否“足够好”。

与p-adics合作是一种后天习得的技能,我不确定我是否有足够的技能——也许我们需要增援?例如,您不能只对E执行E.change_ring(Qp(p,precision)),即Q上的椭圆曲线,因为如果精度太低,就会产生错误(我认为只有p是降阶不良的素数,所以应该能够计算出必要的精度)。

Tobias和Michael,我在ell_rational_field.py的第5077行左右输入的try/except没有经过充分考虑,也许这就是你应该研究的问题?

trac-4741-padic.补丁

@约翰克雷莫纳 约翰克雷莫纳更改了标题Q上椭圆曲线的S-积分求点 [有了新补丁,需要审查(也需要工作)]实现Q上椭圆曲线的S-积分点查找 2008年12月14日
@鼠尾草
复制链接
人体模型

鼠尾草 人体模型 评论2008年12月15日

评论:27

我将看一下try/except语句。不幸的是,我今天早上必须去上大学的一些课程,所以我今天下午会去上。你需要这次尝试/排除的是一条特殊的曲线吗?

我希望剩下的代码能得到“足够好”的判断。

@鼠尾草-马绍夫
复制链接
人体模型

评论:28

我倾向于合并此代码,然后为剩余的问题打开一个新票据。这段代码已经被破解了很多,它似乎比当前发布的任何Magma代码都要少很多错误:)

干杯,

迈克尔

@约翰克雷莫纳
复制链接
成员 作者

评论:29

谢谢你的鼓励,迈克尔!

这是我提出的策略。我们将p-adic椭圆对数的计算(Q上椭圆曲线上的点的计算,以及后来在数域上的计算)作为一个问题分开。很多工作都不依赖于点,只依赖于曲线和素数(特别是Qp上的基变换曲线的构造,以及整数f,以便f*E(Qp)\substeq E^1(Qp),它是tamagawa指数(已缓存)和组mod p的指数的乘积。这可以存储在我们已有的local_data类中。其中的p-adic部分需要一些工作来计算所需的合适精度(可能比用户要求的精度要高)。

第二个问题是S_integral点代码本身,在这里我遇到了一个困难。我将恢复导致此结果的曲线并将其发送给tnagel。

@威廉姆斯坦
复制链接
贡献者

评论:30

只要在S_integration_points(等)的文档字符串中添加一个“NOTE:”(注意:),就可以按现在的方式合并代码,因为已知某些输入会失败,并带有指向相应trac票证的指针。与“这里没有bug”的Ma*方法相比,我更喜欢这种方法,在这种方法中,用户可以发现bug。

所以“正面评论”模块添加了这样的注释。

@约翰克雷莫纳
复制链接
成员 作者

评论:31

回复@威廉姆斯坦:

只要在S_integration_points(等)的docstring中添加一个“NOTE:”(注意:),我就可以按现在的方式合并代码,因为已知某些输入会失败,并带有指向相应trac票证的指针。与“这里没有bug”的Ma*方法相比,我更喜欢这种方法,在这种方法中,用户可以发现bug。

所以“正面评论”模块添加了这样的注释。

听起来不错。我今天会尝试添加这样的注释。JEC公司

@约翰克雷莫纳
复制链接
成员 作者

注释:32

附件:trac-4741-note.patch.gz

回复@约翰克雷莫纳:

回复@威廉姆斯坦:

只要在S_integration_points(等)的文档字符串中添加一个“NOTE:”(注意:),就可以按现在的方式合并代码,因为已知某些输入会失败,并带有指向相应trac票证的指针。与“这里没有bug”的Ma*方法相比,我更喜欢这种方法,在这种方法中,用户可以发现bug。

所以“正面评论”模块添加了这样的注释。

听起来不错。我今天会尝试添加这样的注释。JEC—完成

@威廉姆斯坦
复制链接
贡献者

评论:33

正面评论等待删除最后一个补丁的这行中的问号“?”:

椭圆曲线?(“7690e1”)。S_积分点([13,2])

威廉

@鼠尾草-马绍夫
复制链接
人体模型

评论:34

厕所,

请为已知的故障打开一张新的罚单,并在注释中提及该罚单,因为该罚单将被关闭,在干净的新罚单中查找有关该曲线的信息要容易得多。

干杯,

迈克尔

@约翰克雷莫纳
复制链接
成员 作者

评论:35

附件:trac-4741-note2.patch.gz

回复@鼠尾草-马绍夫:

厕所,

请为已知的故障打开一张新的罚单,并在注释中提及该罚单,因为该罚单将被关闭,在干净的新罚单中查找有关该曲线的信息要容易得多。

干杯,

迈克尔

修复了错误并引用了新票据#4805在*-note2.patch中添加。

@约翰克雷莫纳
复制链接
成员 作者

评论:36

回复@威廉姆斯坦:

正面评论等待删除最后一个补丁的这行中的问号“?”:

椭圆曲线?(“7690e1”)。S_积分点([13,2])

威廉

完美主义者!当然,我在上传补丁后注意到了这一点(之后我们普通人就无法删除它了;)。

@鼠尾草-马绍夫
复制链接
人体模型

评论:37

积极评价。最后;)

干杯,

迈克尔

@鼠尾草-马绍夫 鼠尾草-马绍夫 人体模型更改了标题[使用新补丁,需要审查(也需要工作)]实现Q上椭圆曲线的S积分点查找 Q上椭圆曲线的S-积分求点 2008年12月15日
@鼠尾草-马绍夫
复制链接
人体模型

评论:38

已合并

  • trac_4741_第1部分_基础.补丁
  • trac_4741_第2部分_十月份_批次
  • trac_4741_part_3_rebased-fixes.patch
  • trac_4741_部件_4_注释.补丁
  • trac_4741_part_5_note2.补丁

在Sage 3.2.2.rc0中

免费注册 在GitHub上加入此对话.已经有账户了吗?登录以发表评论
项目
还没有
开发

没有分支或拉请求

2名参与者