跳到内容
新问题

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

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

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

eclib接口对椭圆曲线模符号使用了错误的默认值 #31317

关闭
约翰克雷莫纳已打开此问题2021年2月1日·14条评论
关闭

eclib接口对椭圆曲线模符号使用了错误的默认值 #31317

约翰克雷莫纳已打开此问题2021年2月1日·14条评论

评论

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

2019年12月,Chris Wuthrich向我报告了此事,几天前,Barry Mazur和Karl Rubin也向我报告过此事。我原本以为eclib中有一个bug,但事实证明,唯一的bug是某些参数的默认值对于他们感兴趣的情况来说太小了。我将发布一个双线补丁来增加这个值。它必须是双线补丁,而不是1,因为当前的eclib接口目前根本没有向Sage公开相关参数。

这里有两个例子。Wuthrich的(需要一点时间,因为指挥是87416):

sage:E=椭圆曲线([49,-49])sage:me=E.modular_symbol(实现=“eclib”)圣人:我(1/8)10/17sage:mn=E.modular_symbol(实现=“num”)鼠尾草:mn(1/8)1/2

和Mazur's:

sage:E=椭圆曲线('1590g1')sage:ms=E.模块符号()sage:[1..4]中a的ms(a/5)[1001/153, -1001/153, -1001/153, 1001/153]sage:ms=E.modular_symbol(实现='num')sage:[1..4]中a的ms(a/5)[13/2, -13/2, -13/2, 13/2]

在这两种情况下,在我的补丁之后,“eclib”值与数值一致。

抄送:@类别

组件:椭圆曲线

关键词:椭圆曲线模符号

作者:约翰·克雷莫纳

分支/提交:2ab86参考

审核人:克里斯·伍特里奇

从迁移创建的问题https://trac.sagemath.org/ticket/31317

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

分支机构:u/cremona/31317

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

提交:数据09de4

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

注释:1

除了将nap选项添加到te接口本身之外,我还将其传递到了链上,以便用户也可以通过doctest看到它。在那里,我也整理了一下文档。


新提交:

数据09de4#31317椭圆曲线模符号

@克里斯伍特里奇
复制链接
贡献者

注释:2

有证据表明1000是所有曲线的正确边界吗?所有这些都需要使用eclib。也许它应该随着列车长的增加而增加。大约100*sqrt(N)左右是节省空间。

(抱歉没有完整回复,忙于新学期的评分等)

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

评论:3

正在答复@分类:

有证据表明1000是所有曲线的正确边界吗?所有这些都需要使用eclib。也许它应该随着列车长的增加而增加。大约100*sqrt(N)左右更安全。

好的一点——尽管在顶层,E modular_symbol()在这个补丁中使用了默认的nap=400。如你所知,对于大型导体,制作这种结构需要很长时间,所以我很怀疑它会在N>10000(比方说)的情况下大量使用,所以在这个范围内使用默认值似乎是合理的。另一方面,与构建模块化符号空间所需的时间相比,从曲线计算更多ap所需时间可以忽略不计,这表明默认值越高越好。

无论如何,我会将eclib自己的默认值(即300ap)更改为1000,代码的工作方式是设置一个最小值nap(当前为300),以便用户提供的任何值都会增加到这个值。(即,在eclib的相关函数中,实际上存在一条线nap=max(300,nap.)。)

如果有可能以另一种方式获得这一正常化因子,而不是通过周期定量,我会非常高兴。它是只有这样我们就可以得到非最优曲线的正确答案。当你给它一条最优曲线时,要把比率计算为1(或者在修复之前的例子中,它计算为73/68或其他值)会很麻烦,但我不知道怎么做。可以更改eclib,从而假定默认情况下曲线是最佳的,只有在用户特别要求时才计算归一化因子。然后在Sage方面,如果曲线的标签以“1”结尾,或者如果isogeny类仅包含一条曲线,我们可以决定使用默认值。

当前的修复程序设计得很容易实现,因为它不需要对eclib进行任何更改,eclib在这方面没有任何错误,只是默认值300可能太低。

但我会采纳你的建议,添加一个新补丁,在等待审查的同时,我会尽可能多地测试曲线——测试是“eclib”和“num”对所有小理性给出相同的答案。

(抱歉没有完整回复,忙于新学期的评分等)

@鼠尾草
复制链接
人体模型

鼠尾草 人体模型 评论2021年2月2日

已从更改提交数据09de42ab86参考

@鼠尾草
复制链接
人体模型

鼠尾草 人体模型 评论2021年2月2日

分行推进git回购;我更新了提交sha1。新提交:

2ab86参考#31317:更智能的默认小睡

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

注释:5

我将顶层的默认值切换为max(100*N.isqrt(),10000)。我已经开始对所有导体进行测试,测试范围可达10000人(但可能是10000人)。相比之下,即使是对于高达500000的导体,我在找到曲线时也只计算了6000 ap,这需要更高的精度。

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

注释:6

对于1000以下的所有导体曲线,使用新代码,“eclib”和“num”结果一致(分子和分母都以5为界的所有有理数)。我将继续测试更多,但没有人会怀疑这应该合并。

@克里斯伍特里奇
复制链接
贡献者

审核人:克里斯·伍特里奇

@克里斯伍特里奇
复制链接
贡献者

作者:约翰·克雷莫纳

@克里斯伍特里奇
复制链接
贡献者

注释:7

我同意这里所说的,我检查了代码,所有测试都通过了等等。

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

注释:8

正在答复@分类:

我同意这里所说的,我检查了代码,所有测试都通过了等等。

谢谢。尽管一些补丁程序报告了测试失败,但这些与此补丁程序无关,因此用处不大。也许补丁程序应该首先运行所有测试,而不应用补丁程序,只有当这些测试通过时,他们才会应用补丁程序并重新测试。这将花费两倍的时间,但将避免像这样的虚假失败,这可能会导致发布管理者认为某些东西实际上是错误的,并且bug-fix永远不会合并。

@vbraun公司
复制链接
成员

更改的分支来自u/cremona/313172ab86参考

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

没有分支或拉请求

3名参与者