B
    +»Ã[E`  ã               @   sÔ   d Z ddlZddlZddlZddlT efdd„ZedƒZedƒZe	dƒZ
e	dƒZe	d	ƒZd
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ ZdS )(a  
Limited tests of the elliptic functions module.  A full suite of
extensive testing can be found in elliptic_torture_tests.py

Author of the first version: M.T. Taschuk

References:

[1] Abramowitz & Stegun. 'Handbook of Mathematical Functions, 9th Ed.',
    (Dover duplicate of 1972 edition)
[2] Whittaker 'A Course of Modern Analysis, 4th Ed.', 1946,
    Cambridge University Press

é    N)Ú*c             C   s0   d}|o| j  |j |¡}|o*| j |j|¡}|S )NT)ÚrealÚaeÚimag)ÚaÚbÚepsÚres© r
   ú9lib/python3.7/site-packages/mpmath/tests/test_elliptic.pyÚmpc_ae   s    r   é   ÚsnÚcnÚdnc             C   s
   t | dS )N)Úk)Úqfrom)r   r
   r
   r   Ú<lambda>#   s    r   c               C   sþ  dt _tdddƒdkst‚tdddƒdks.t‚tdddƒdksBt‚tdddƒdksVt‚tdd	dƒ td	ƒ¡spt‚td
d	dƒ td	ƒ¡sŠt‚tdd	dƒ d¡s t‚tdd	dƒ td	ƒ¡sºt‚tdd	dƒ td	ƒ¡sÔt‚tdd	dƒ d¡sêt‚tdd	dƒ t	d	ƒ¡st‚tdd	dƒ td	ƒ¡s"t‚tdd	dƒ td	ƒ¡s>t‚tdd	dƒ t
d	ƒ¡sZt‚tdd	dƒ td	ƒ¡svt‚tdd	dƒ td	ƒ¡s’t‚tdd	dƒ td	ƒ¡s®t‚td
d	dƒ td	ƒ¡sÊt‚tdd	dƒ td	ƒ¡sæt‚tdd	dƒ td	ƒ¡st‚tdd	dƒ td	ƒ¡st‚tdd	dƒ td	ƒ¡s:t‚tdd	dƒ td	ƒ¡sVt‚tdd	dƒ td	ƒ¡srt‚tdd	dƒ d¡sŠt‚tdd	dƒ td	ƒ¡s¦t‚tdd	dƒ d¡s¾t‚tdd	dƒ td	ƒ¡sÚt‚tdd	dƒ d¡sòt‚td
d	dƒ d¡s
t‚tdd	dƒ d¡s"t‚tdd	dƒ d¡s:t‚tdd	dƒ d¡sRt‚tdd	dƒ d¡sjt‚tdd	dƒ d¡s‚t‚tdd	dƒ d¡sšt‚tdd	dƒ d¡s²t‚tdd	dƒ d¡sÊt‚tdd	dƒ d ¡sât‚tdd	dƒ d!¡sút‚d S )"Né   Zssr   r   ZccZddZnnr   g      Ð?r   r   ÚnsZncZndZscZsdZcdZcsZdcZdsg      à?g@p4ü(‚Ï?gTiÍ$íï?gý>x¤ò‚ï?gô(ÔÌæ?@gZx:Ç	‚ð?g Ï~?ð?gbUaåAÐ?g]`w73ÿÏ?g’Þòkï?g)– Ì@g
oüì†Að?g¡Óff @)ÚmpÚdpsÚellipfunÚAssertionErrorr   ZsinZcosZcscZsecZtanZcotZtanhZsechZcothZcoshZsinhZcschr
   r
   r
   r   Útest_ellipfun%   sR    r   c              C   s  dt _ttƒ} | tkst‚dt _tdƒd tdƒftdƒd tdƒftdƒd td	ƒftd
ƒd tdƒftdƒd tdƒftdƒd tdƒftdƒd tdƒftdƒd tdƒftdƒd tdƒftdƒd tdƒfg
}x2|D ]*}|d }tt|ƒƒ} |  |d ¡sÞt‚qÞW dt _d S )Néd   é   r   é
   z0.006584651553858370274473060é   z0.01394285727531826872146409é   z0.02227743615715350822901627é   z0.03188334731336317755064299é   z0.04321391826377224977441774é   z0.05702025781460967637754953é   z0.07468994353717944761143751é   z0.09927369733882489703607378é	   z0.1401731269542615524091055r   r   )r   r   Úcalculate_nomeÚzeror   ÚmpfÚsqrtr   )ÚqZmath1ÚiÚmr
   r
   r   Útest_calculate_nomeS   s&    
r-   c                 s”  dt _t ‰‰x2tddƒD ]$‰ tˆ ˆˆƒ} | ˆ d d kst‚qW x@ttdƒgD ]0‰x*tddƒD ]‰ t 	t
‡ ‡‡fdd„¡ q`W qPW td ‰td ‰td	ƒ}tdˆˆƒ}| |¡s¶t‚td
ƒ}tdˆˆƒ}| |¡sØt‚tdƒ}tdˆˆƒ}| |¡sút‚tdƒ}tdˆˆƒ}| |¡st‚t}td }x^tdƒD ]R}tt ¡ ƒ}t|ƒ‰td|ˆƒ}| d¡sht‚td|ˆƒ}| d¡s4t‚q4W dt _d S )Nr   r   r!   r   c                  s   t ˆ ˆˆƒS )N)Újthetar
   )Únr*   Úzr
   r   r   w   s    ztest_jtheta.<locals>.<lambda>r   é   z0.1069552990104042681962096z1.101385760258855791140606z1.178319743354331061795905r   z0.8219318954665153577314573r    r   r   )r   r   r'   Úranger.   r   Úoner(   ÚpytestÚraisesÚ
ValueErrorr   ÚpiÚstrÚrandom)Úvaluer	   ÚresultZz1Zz2r+   Úqstringr
   )r/   r*   r0   r   Útest_jthetam   s@     r=   c                 sf  dt _t  jd7  _tdƒd td  tdƒd t  ‰ t  jd8  _tdƒtdƒt  } tdd	ˆ ƒ}t  jd7  _tdƒd td
  tdƒd t  ‰ t  jd8  _t t‡ fdd„¡ dt _d	t d }tdƒd tdƒd t  ‰ tdƒtdƒt  } dt _td	|ˆ ƒ}| 	| ¡st
‚dt _ddt  }ddt  ‰ td	|ˆ ƒ}dt _td	|ˆ ƒ}| 	|¡sjt
‚dt _dt }ttd ƒ}xPtd	dƒD ]B}dt _|d	td	ƒd|    ‰ td	|ˆ ƒ}dt _td	|ˆ ƒ}qW | 	|¡sæt
‚dt _tddddƒ 	d¡st
‚tddddƒ 	d¡s t
‚dt _tddddƒ}| 	d¡sDt
‚tddddƒ}| 	d¡sbt
‚d S ) Né   r"   r   i@B r$   z32.0031009628901652627099524264z16.6153027998236087899308935624r   r   i€–˜ c                  s   t ddˆ ƒS )Nr   r   )r.   r
   )r*   r
   r   r   °   s    z&test_jtheta_issue_79.<locals>.<lambda>r   l   ³'e[>
 l     Iú5 l   tQüh z$2.4439389177990737589761828991467471z$0.5446453005688226915290954851851490éP   r    g      à?r   r   g      @g      Ð?r%   gîlÞ2<•@é2   g‹3må,òòÆz21359.048926806828939547859396600218966947753213803z4-6148327726309051673317975084654262.4119215720343656)r   r   r(   r3   Újr.   r4   r5   r6   r   r   Zexpr2   )r	   r;   r0   Úr1Zr2Zq1r/   Úrr
   )r*   r   Útest_jtheta_issue_79ž   sX    $$rD   c        
      C   s¶  dt _ttdƒ} x˜tdƒD ]Š}tt ¡ ƒ}t|ƒ}tdt ¡  ƒ}t|ƒ}td||ƒd tdt	|ƒd  }td||ƒd tdt	|ƒd  }td||ƒd tdt	|ƒd  }|| | }	|	 
d| ¡sÊt‚td	t ¡  ƒ}t|ƒ}td||ƒd tdt	|ƒd  }td||ƒd tdt	|ƒd  }td||ƒd tdt	|ƒd  }|| | }	|	 
d| ¡s`t‚td||ƒd tdt	|ƒd  }td||ƒd tdt	|ƒd  }td||ƒd tdt	|ƒd  }|| | }	|	 
d| ¡sÞt‚td||ƒd tdt	|ƒd  }td||ƒd tdt	|ƒd  }td||ƒd tdt	|ƒd  }|| | }	|	 
d| ¡s\t‚tdt	|ƒd }tdt	|ƒd }tdt	|ƒd }|| | }	|	 
d| ¡st‚qW d
t _dS )z
    Tests the some of the jacobi identidies found in Abramowitz,
    Sec. 16.28, Pg. 576. The identities are tested to 1 part in 10^98.
    én   r>   r   r   r   r    r   r   r   r   N)r   r   Úldexpr   r2   r8   r9   r(   r.   r'   r   r   )
Zeps1r+   r<   r*   Úzstringr0   Úterm1Úterm2Úterm3Úequalityr
   r
   r   Útest_jtheta_identitiesÙ   sF    
            rL   c              C   sÀ  dt _tdƒd td  } tdƒd td  }tdƒtdƒt  }td| |ƒ}t||ƒs\t‚td	ƒtd
ƒt  }td| |ƒ}t||ƒsŠt‚tdƒtdƒt  }td| |ƒ}t||ƒs¸t‚tdƒtdƒt  }td| |ƒ}t||ƒsæt‚dt _tdƒd td  } tdƒd td  }t  jd7  _ddtdd|ƒtdd|ƒtdd|ƒg}dtd| |ƒtd| |ƒtd| |ƒtd| |ƒg}|d |d  d |d |d  d  |d |d  d  |d |d  d |d |d  d  |d |d  d  |d |d  d |d |d  d  |d |d  d  |d |d  d |d |d  d  |d |d  d  |d d |d d  |d d  g}t  jd8  _x"|D ]}t|tdƒƒs˜t‚q˜W dt _d S )Nr>   r   r    r$   r   r#   z%0.31618034835986160705729105731678285z%0.07542013825835103435142515194358975z$1.6530986428239765928634711417951828z$0.2015344864707197230526742145361455r   z$1.6520564411784228184326012700348340z$0.1998129119671271328684690067401823z%0.37619082382228348252047624089973824z%0.15623022130983652972686227200681074r   r   r   r   )	r   r   r(   rA   r.   r   r   ZdosÚmpc)r0   r*   r	   rC   r   ÚtÚxr
   r
   r   Útest_jtheta_complex  sD    &.::::&
rP   c        	         sà  dt _td td  } td td  ‰tdƒtdƒt  }td| ˆdƒ}t||ƒsVt‚td	ƒtd
ƒt  }td| ˆdƒ}t||ƒs†t‚tdƒtdƒt  }td| ˆdƒ}t||ƒs¶t‚tdƒtdƒt  }td| ˆdƒ}t||ƒsæt‚xltdƒD ]`}tt	 	¡  tt	 	¡   d ‰tddˆdƒ}tddˆƒtddˆƒ tddˆƒ }| 
|¡sðt‚qðW dt _xætd td ftd td  td ftd td td  ftd td  td td  fgD ]†\‰} xzdD ]r‰ tˆ | ˆdƒ}t‡ ‡fdd„| dd}| 
|¡s t‚tˆ | ˆdƒ}t‡ ‡fdd„| dd}| 
|¡sÆt‚qÆW q¸W td ‰t} dgd }td| ˆdƒtd| ˆdƒ |d< x,dD ]$‰ tˆ | ˆdƒtˆ | ˆƒ |ˆ < q~W |d |d  |d  |d  }| 
d¡sÖt‚dt _d S )Nr>   r#   r   r$   r!   z$1.5555195883277196036090928995803201z%0.02439761276895463494054149673076275r   z%0.19825296689470982332701283509685662z%0.46038135182282106983251742935250009r   z%0.36492498415476212680896699407390026z%0.57743812698666990209897034525640369z&-0.38936892528126996010818803742007352z%0.66549886179739128256269617407313625r    r   r   é   )r   r   r   r    c                s   t ˆ | ˆƒS )N)r.   )Úzz)r/   r*   r
   r   r   m  s    ztest_djtheta.<locals>.<lambda>)r/   c                s   t ˆ | ˆƒS )N)r.   )rR   )r/   r*   r
   r   r   p  s    )r   r   r    r   )r   r   r3   rA   r(   r.   r   r   r2   r9   r   Zdiffr'   )	r0   r	   r;   r+   r   r   rC   rB   rK   r
   )r/   r*   r   Útest_djthetaC  sV    $&@

 
$ rS   c              C   s¼   dt _tttƒ} | tkst‚x<tdƒD ]0}tt ¡ ƒ}t|ƒ}tt|ƒ}| 	d¡s&t‚q&W dt _t
d }tdƒ}tt
dƒ}t||ƒ} |  	|¡s’t‚tdƒ}t||ƒ} |  	|¡s²t‚dt _d	S )
z;
    Test some special cases of the sn(z, q) function.
    r   r   r   r   z0.09983341664682815230681420iœÿÿÿz0.09981686718599080096451168r   N)r   r   Újsnr'   r   r2   r8   r9   r(   r   r3   rF   )r;   r+   r<   r*   rK   Úargr	   r,   r
   r
   r   Útest_jsn~  s$    




rV   c              C   s”   dt _tt ¡ ƒ} t| ƒ}tt|ƒ}| t¡s2t	‚dt _td }t
tdƒ}tdƒ}t||ƒ}| |¡sjt	‚tdƒ}t||ƒ}| |¡sŠt	‚dt _dS )	z;
    Test some special cases of the cn(z, q) function.
    r   r   r   iœÿÿÿz0.9950041652780257660955620z0.9950058256237368748520459r   N)r   r   r8   r9   r(   Újcnr'   r   r3   r   rF   )r<   r*   r   rU   r,   r	   r;   r
   r
   r   Útest_jcn«  s    



rX   c              C   sj   dt _tt ¡ ƒ} t| ƒ}tt|ƒ}| t¡s2t	‚dt _tdƒ}td }t||ƒ}| |¡s`t	‚dt _dS )z;
    Test some special cases of the dn(z, q) function.
    r   r   z0.9995017055025556219713297r   r   N)
r   r   r8   r9   r(   Újdnr'   r   r3   r   )Úmstringr,   r   r	   rU   r;   r
   r
   r   Útest_jdnÐ  s    

r[   c              C   sú  dt _d} xrt| ƒD ]f}tt ¡ ƒ}t|ƒ}tdt ¡  ƒ}t|ƒ}t||ƒd }t||ƒd }t| | }| 	d¡st
‚qW x‚t| ƒD ]v}tt ¡ ƒ}	t|ƒ}
|
 ¡ }tdt ¡  ƒ}t|ƒ}|d t||
ƒd  }t||
ƒd }t| | }| 	d¡sˆt
‚qˆW xìt| ƒD ]à}tt ¡ ƒ}	t|	ƒ}
|
 ¡ }tt ¡ ƒ}t|ƒ}|d t||
ƒd  }d|d  }t||
ƒd }|| | }| 	d¡sŒt
‚t|d ƒ}t||
ƒ}| 	t¡s²t
‚t||
ƒ}| 	d¡sÌt
‚|
}t|tƒ}| 	t¡st
‚qW dt _dS )	zx
    Tests the some of the jacobi elliptic function identities found
    on Mathworld. Haven't found in Abramowitz.
    r   r!   r   r   r   r   r   N)r   r   r2   r8   r9   r(   rT   rW   r3   r   r   r)   rY   Zellipkr'   )ÚNr+   r<   r*   rG   r0   rH   rI   rK   rZ   r,   r   rJ   ÚKrC   r:   r
   r
   r   Útest_sn_cn_dn_identitiesç  sR    


r^   c              C   s¼   dt _tdƒtdƒt  } tdƒd td  }tdƒd td  }t||ƒ}t|| ƒsZt‚td	ƒtd
ƒt  } t||ƒ}t|| ƒs†t‚tdƒtdƒt  } t||ƒ}t|| ƒs²t‚dt _d S )Nr>   z!0.2495674401066275492326652143537z"0.12017344422863833381301051702823r   r    r$   r   r#   z!0.9762691700944007312693721148331z!0.0307203994181623243583169154824z%0.99639490163039577560547478589753039z%0.01346296520008176393432491077244994r   )	r   r   r(   rA   rT   r   r   rW   rY   )r	   Úur,   rC   r
   r
   r   Útest_sn_cn_dn_complex+  s     


r`   c              C   s   dt _tdddƒ d¡st‚tdddƒ d¡s2t‚ttt dƒ d	¡sJt‚tdtt ƒ d
¡sbt‚tdtd tƒ d¡s|t‚tdt t dt ƒ d¡sœt‚tdddƒdks°t‚tdddƒ d¡sÆt‚tdddƒ d¡sÜt‚tdddƒ d¡sòt‚tdddƒ d¡s
t‚tdddƒ d¡s"t‚tdddƒ d¡s:t‚d\} }}t| ||ƒ d¡s\t‚t| ||ƒ d¡stt‚t|| |ƒ d¡sŒt‚t||| ƒ d¡s¤t‚t|| |ƒ d¡s¼t‚t||| ƒ d¡sÔt‚x>dD ]4}|t _tdddƒ d¡s t‚tdddƒ d¡st‚ttt dƒ d¡s2t‚ttd tdƒ tddƒ¡sTt‚tdddƒ d¡slt‚ttt dƒ d¡s†t‚ttd tdt ƒ tddƒ¡s¬t‚t	ddƒ t

 ¡sÄt‚t	ddƒ t
 ¡sÜt‚t	dtƒ tdd ƒ¡søt‚t	t tƒ td!d"ƒ¡st‚t	ddƒ td ¡s0t‚t	tdƒ td#d$ƒ¡sLt‚tddddƒ d%¡sft‚tdddd&ƒ d'¡s€t‚tddddt ƒ td(d)ƒ¡s¤t‚ttt ddƒ d*¡sÀt‚tdt dt ddƒ d+¡sât‚ttt ddt ƒ td,d-ƒ¡st‚tdt dt dd.t ƒ td/d0ƒ¡s4t‚tdt dt t dt ƒ td1d2ƒ¡sbt‚tdddƒ t

 ¡s|t‚tdddƒ d3¡s”t‚tdtt ƒ d4¡s®t‚ttd tdƒ td5d6ƒ¡sÐt‚tt td tƒ td7d8ƒ¡sôt‚tdtd9ƒdƒ d:¡sÜt‚qÜW dt _d S );Nr   r   r   r   g2e¤_Áü?r   r    gçÃ×i+"Å?g€P$Må?yçföFUô?¸6¨·?@y,™¢R<¹ý¿Õ8á*Èî¿éþÿÿÿéÿÿÿÿy# ÿ6Í2ý?çzä°Œó¿é   g»{ I|`ó?)r   y              ð?y      ð¿      ð?yaüÇfG†ä?Etw\–â?)r!   r   r>   é<   r   zo1.3110287771460599052324197949455597068413774757158115814084108519003952935352071251151477664807145467230678763g      à?zn1.854074677301371918433850347195260046217598823521766905585928045056021776838119978357271861650371897277771871zp0.79612586584233913293056938229563057846592264089185680214929401744498956943287031832657642790719940442165621412zp-1.2138566698364959864300942567386038975419875860741507618279563735753073152507112254567291141460317931258599889zp0.58408284167715170669284916892566789240351359699303216166309375305508295130412919665541330837704050454472379308zo1.0441445654064360931078658361850779139591660747973017593275012615517220315993723776182276555339288363064476126zp0.93912050218619371196624617169781141161485651998254431830645241993282941057500174238125105410055253623847335313zq-0.53296252018635269264859303449447908970360344322834582313172115220559316331271520508208025270300138589669326136g      Ð?g      @zo1.1107207345395915617539702475151734246536554223439225557713489017391086982748684776438317336911913093408525532zp-1.1107207345395915617539702475151734246536554223439225557713489017391086982748684776438317336911913093408525532zo1.2260849569072198222319655083097718755633725139745941606203839524036426936825652935738621522906572884239069297zq-0.34471136988767679699935618332997956653521218571295874986708834375026550946053920574015526038040124556716711353zp0.77778596920447389875196055840799837589537035343923012237628610795937014001905822029050288316217145443865649819zo0.1983248499342877364755170948292130095921681309577950696116251029742793455964385947473103628983664877025779304zp0.77688623778582332014190282640545501102298064276022952731669118325952563819813258230708177398475643634103990878r!   zp0.14297579667156753833233879421985774801466647854232626336218889885463800128817976132826443904216546421431528308zp0.13613945827770535203521374457913768360237593025944342652613569368333226052158214183059386307242563164036672709zq-0.38207561624427164249600936454845112611060375760094156571007648297226090050927156176977091273224510621553615189zo1.6490011662710884518243257224860232300246792717163891216346170272567376981346412066066050103935109581019055806zp0.94148358841220238083044612133767270187474673547917988681610772381758628963408843935027667916713866133196845063zo1.8260115229009316249372594065790946657011067182850435297162034335356430755397401849070610280860044610878657501zo1.2290661908643471500163617732957042849283739403009556715926326841959667290840290081010472716420690899886276961éýÿÿÿzq-0.61127970812028172123588152373622636829986597243716610650831553882054127570542477508023027578037045504958619422zp-1.0684038390006807880182112972232562745485871763154040245065581157751693730095703406209466903752930797510491155zo1.8249027393703805304622013339009022294368078659619988943515764258335975852685224202567854526307030593012768954zp-1.2218475784827035854568450371590419833166777535029296025352291308244564398645467465067845461070602841312456831zo1.7255030280692277601061148835701141842692457170470456590515892070736643637303053506944907685301315299153040991zp0.42360654239698954330324956174109581824072295516347109253028968632986700241706737986160014699730561497106114281zp0.44660591677018372656731970402124510811555212083508861036067729944477855594654762496407405328607219895053798354zp0.70768352357515390073102719507612395221369717586839400605901402910893345301718731499237159587077682267374159282zp0.36023392184473309033675652092928695596803358846377334894215349632203382573844427952830064383286995172598964266zp0.40348623401722113740956336997761033878615232917480045914551915169013722542827052849476969199578321834819903921z0.0796zo1.0284758090288040009838871385180217366569777284430590125081211090574701293154645750017813190805144572673802094)r   r   Zelliprdr   r   rA   ZelliprgZelliprfrM   Zelliprcr7   Zln2Zelliprjr(   )rO   Úyr0   r/   r
   r
   r   Útest_elliptic_integralsD  s|     
" "rg   c               C   s   t ttdƒst‚d S )N)r,   )Zisnanr   Únanr   r
   r
   r
   r   Útest_issue_238‰  s    ri   )Ú__doc__Zmpmathr9   r4   r   r   r(   r'   r3   r   rT   rW   rY   r&   r   r-   r=   rD   rL   rP   rS   rV   rX   r[   r^   r`   rg   ri   r
   r
   r
   r   Ú<module>   s2   .1;=-;-%DE