Pourquoi评论组合 Goulu博士博客
Goulu博士博客

套房infinies en Python

Depuis que je program en Python,j'entasse les petits bouts de code utiles ou potentiallement réusibiliables dans«Goulib»,ma-libarie perso et néanmoins disponible en open-source(license LGPL)sur皮皮github,ReadTheDocs倾倒拉多克,avec des(平均值)笔记本Jupyter de démo。

Comme la valeur d'un code se mesure surtout par les tests quiérifient son bon functionnement,je me suis lancédans un ambitieux projet(de plus…):测试仪un maximum de functions de mes模块马特2et(等)itertools2l’套件的计算百科全书(en ligne des suites de nombres entiers),加上connue sous son缩写词anglais OEIS。

Pour cela j’ai fait un truc don je suis vachement-fier*:

La类序列

总工程师容器(doc胚胎)代表团成员一套(英语顺序)结束你的提名儿子建造师:

  • iterf:un它的评价者你是《联合国宪章》条款的制定者
  • itemf:une function反击了leième paramètre de la suite
  • containf:une function renvoyant vrai(True)是一名助理医生。

关于佩特·克莱尔的典型例子,《安西》首映者拉塞里(infinie)des nombres:

A000040型=序列(containf=是素数(_P))

Ensuite,l'objet ainsi crééavec n'importe quelle combinison de ces 3 paramètres peutétre utiliséindifférement公司:

  • 巴黎市长:A000040中的p():打印(p)#affiche les nombres premires(jusqu'ál'infini)
  • 委员会名单:A000040[999]#renvoie le 1000ème nombre premier(parce que Python indiceápartir de 0…)
  • comme un合奏:201420142013,A000040#renvoie True car ce nombre est premier。

清创术,治疗功能加疗效pour chacun de ces paramètres,治疗peut les utiler pour rendre les calculs bien plus rapides。关于peut explorer trois算法差异的Par example pour la suite de Fibonacci:

A000045号=序列(iterf=斐波那契根,项f=斐波那契,包含=is_fibonacci公司)

顺便,语音评论est définie la séquence«auto descriptrice»quiorne la bannière de l’OEIS ci-dessus:

A005150型=序列(重现(λx:数字_来自_位数压扁互换压缩数字(x) ),1))

紧凑型和preque clair,不是吗?

Dérivation公司

Une Sequence peutátre dérivée e d'Une autre gráceáplusieurs方法:

  • 滤波器反致序列与序列源过滤功能相对应。Par示例:
    A000043号=A000040.过滤器(math2.lucas_lehmer公司)
    《默森展览》(exposants de Mersenne),《诺姆布雷斯首映式》(les-nombres premires p tels que)(2^p–1)est premier。
  • 应用序列源的功能变更贴花。作为一个例子,总理们的提名名单已经结束:
    A001248号=A000040.适用(λn:n*n)
  • 将“利用”应用于简单的琐事,将“附加”应用于完整的序列。Par示例:
    A000215号=A001146号+1个
    有限域费马命名形式命名部分(2^{2^n})
  • 积累renvoie une Sequence don le n-ième terme est obtenu en sommant les n premires termes de la Sequence来源:
    A007504号=A000040.累计()
  • 成对地反致序列产生贴花贴花功能,并对其进行分类。在这套不同的作品中,首次亮相的作品有:
    A001223号=A000040.成对(operator.sub)

关于peut aussi组合器deux Sequences pour en créer une nouvelle:

  • L'opérateur%(模数,pourquoi pas……)反致于pas dans L'opérande de droite上的gauche quine序列术语。艾恩斯:
    A007510号
    =A000040%A001097号
    首字母序列限定朱缪
  • L'opérateur和(和)renvoie les termes de la Sequence opérande gauche quisont aussi dans L'opèrande droite。艾恩斯:
    A020449号=A007088号&A000040型
    définit la suite des nombres premiers不要求“紧急状态”的0和1。
  • L'opérateur|(或)反致:双重后果的融合heapq.merge(堆合并)艾恩斯:
    A030513型=A030078型|A006881号
    四个部门(而不是一个部门和一个部门)的提名人组成了一个联盟,这是两个提名人的第一次生产,也是一个提名人的第一次生产。

Il y a encore diux methodes un peu«tirées par les cheveux»du point de vue matique,mais qui functionnent très bien information:

  • 分类反致序列单调牛角面包(par défaut)en triant les termes de la Sequence d’origine。例如,voici la suites des surfaces des三联体食腐菌dans l'ordre牛角面包:
    A024406号=序列(math2.primitive_triples).apply(lambda x:x[0]*x[1]//2).sort()
  • 独特的反致序列o'les termes redondants de la suite d'origine sont缺席,例如:
    A001097号 =A077800型.unique()//oui,第五组是两对非名人首次亮相…

塞斯梅特德利用尊重itertools2.sorted可更改et(等)itertools2.独特功能性参数que la suite首字母缩写est“presque”triée,即savoir tant que l’écart n entre un-terme(a _i+n \leq a _i)n’excède pas le paramètre“buffer”de la function。在peutévidemment trouver des suites qui ne pourront«mathematiquement»pasétre traitées ainsi上,mais informatiquement j’arriveáreproduire les suites de l'OEIS rencontrées jusqu'ici avec buffer=100 seulement

OEIS字典

J'ai ainsi constituépeuápeu le fichier公司oeis.py公司《150年代OEIS环境的公平行动》(quidéfinite actuellement environ 150 séries de l'OEIS,et que jétoff lorsque l'ocasion se presente)。作为一个最终模块,我利用Python的年度内省可能性来重新组合,以实现测试的最终序列:

#Construit le dictionnaire OEIS par自省:简单和惊喜!oeis={}#关于字典的参考seqs=globals().copy()#在copie tous les objets déclarés dans ce模块上对于seqs中的id:#关于parcourt tous les identicateurs des objets如果id[0]=='A'和len(id)==7:#ets’ils ont un nom de sésequence OEIS。。。oeis[id]=seqs[id]#在les ajoute au dictionnaire上。。。seqs[id].name=id#et关于définit leur champ name

性能

最重要的一点是计算出最有效的公民行动。使用序列定义了函数iterf、itemf、containf和leurséventuelles组成的序列。

在“自动魔法”中,mais il faut tout de méme veileráuseler les algorithmes les plus efficies,et C’est mém eun des buts que je poursuis avece projet。例如,首映的提名套房不需要“犯罪记录”
A020449号=A007088号&A000040型
aurait pu s'écrireégalement公司:
A020449=A000040和A007088
mais la première formulation est beaucopus plus rapide car la série A007088 des nombres ne s'e crivant qu'avec des 0 et des 1 cro峘t beaucopus+vite que celle des nombers premires A000040《超级美食家配方》。这是一个很好的结果,加上110101011101这一类型的名字的快速测试,这是一个16个孩子的名字的首秀,也是一个0或1个孩子的名字的首秀。

Malgré吹嘘“公共安全”、“私人套房”、“临时雇员”、“白痴”、“同事”、“儿子”、“总统”阿尔雷问题.J'ai doncécrit un先生décorateur(j’adore!)计算布克莱西的温度限制:

对于x个在里面 装饰器.itimeout(suite,1):打印(x)#affiche tous les termes calculatables en 1 seconde(au total)

Ce décorateur est utiliéen particulier丹打印上诉法院功能序列__代表__pour afficher les dix premiers termes d’une Sequence,ou du moins ceux qu’on peut calculer en moins d’one seconde。

Les suites particulèrement lentes堪称典范A007508号A035533号不要把我的名字写在donne le nombre de nombres inférieursé10^n满足特定条件。Faute de meilleur算法,chaque terme prend 10x+de temps que le précédent…

测验

好了,我们的测试仪是功能校正的beaux算法,虽然是简单的,但却是初始的je le rapelle。

Pour ceci,il suffit de vérifier que chaque Sequence fournit bien les mémes termes que ceux disponibles dans l’OEIS。这有助于OEIS四个单位在虚拟文本中提供一套一流的价值观格式maison«B文件»可访问的par le web。Par示例https://oeis.org/A000040/b000040.txt网站四部十万部首映,提名首映。

Donc mon fichier公司测试环境.pyest lui aussi génialement simple*:il travel le dictionnaire oeis et pour chaque Sequence il télécharge les N termes de référence du site oeis,vérifie que les N premiers termes des la Sequence sont bien ceux attentus,et produit une erreur sinon。我们避免了10个月的限制。

Ces测试自动化测试(avec beaucoup d'autres)苏·特拉维斯-CIchaque fois que je pousse une nouvelle版本GitHub河畔古利卜,ce qui fait que je suis averti si modified cre e un problème avec une ancinne version de Python ou un Pingouin détecte un probleme invisible de mes Fenétres。

Débogage…de l'OEIS!

我认为这是一个很好的机会,也是一个很好的机会古利卜.math2et beaucound’(与博阿库奇德)itertools2,et je compte poursuivre dans cette voie qui permet d'utiler les données de l'OEIS comme une référence,validées par de nombreux utiateurs。

Sauf que des fois,le bugétait chez eux餐厅。Et je ne suis pas peuifier d’埃弗里·普科里奇欧亚大陆:

  • A121727号,梅塞·迪安·梅坦斯(comme déjámentionnédans)cet文章,第20个任期为145年,第142个任期。
  • A036275号,不要确定除了0个补给品之外的可用术语。Tant qu'a faire j'ai fourniun B-file contentant les 1000 premiers termes requis pour remplacer l'ancien quin’en avait que 500(第四个B级文件)。

这是一个重要的时刻,《世界经济展望》是一个充满活力的节日,也是一个为丁香贡献力量的节日。Peut-átre que mon谦逊projet pourrait servir de baseáun site+interactive,利用du代码(当然是Python)为计算程序注入所需的动态les-suites…

Ce long article mijotépensel加上6个mois se termine par un appel auxdu代码的诱惑博内斯·沃伦特斯(bonnes volontés):这篇文章给了我们一个动力,那就是GitHub河畔古利卜的贡献。

倒入ma-part je m'attaque aux无名自恋et(等)弗里德曼(nombres de Friedman)在网络上发布代码杰·德兰内伊利用et测试le模块Goulib.expr公司

笔记

*中国外交政策…
**你的目标是为安可剧团表演…

自由放任

投票地址电子邮件ne-sera pas publieée。 《印度之声》(Les champs objectiatories sont indiqués avec)*

Ce站点使用Akismet pour réduire les indésirables。En savoir plus sur comment les données de vos commentaires sont utiliées(恩萨维尔附加评论).

2条评论”套房infinies en Python