o
    lhqf                     @   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
   n/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/mpmath/tests/test_elliptic.pympc_ae   s   r      sncndnc                 C   s
   t | dS )Nk)qfromr   r
   r
   r   <lambda>#   s   
 r   c                   C   s  dt _tddddksJ tddddksJ tddddks!J tddddks+J tdd	dtd	s8J td
d	dtd	sEJ tdd	ddsPJ tdd	dtd	s]J tdd	dtd	sjJ tdd	ddsuJ tdd	dtd	sJ tdd	dtd	sJ tdd	dtd	sJ tdd	dt	d	sJ tdd	dtd	sJ tdd	dtd	sJ tdd	dt
d	sJ td
d	dtd	sJ tdd	dtd	sJ tdd	dtd	sJ tdd	dtd	sJ tdd	dtd	sJ tdd	dtd	s!J tdd	dtd	s/J tdd	dds;J tdd	dtd	sIJ tdd	ddsUJ tdd	dtd	scJ tdd	ddsoJ td
d	dds{J tdd	ddsJ tdd	ddsJ tdd	ddsJ tdd	ddsJ tdd	ddsJ tdd	ddsJ tdd	ddsJ tdd	ddsJ tdd	dd sJ tdd	dd!sJ d S )"N   ssr   r   ccddnnr         ?r   r   nsncndscsdcdcsdcds      ?g@p4(?gTi$?g>x?g(?@gZx:	?g~??gbUaA?g]`w73?gk?g) @g
oA?gff @)mpdpsellipfunr   sincoscscsectancottanhsechcothcoshsinhcschr
   r
   r
   r   test_ellipfun%   sR   r4   c                  C   s  dt _tt} | tksJ 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
}|D ]}|d }tt|} | |d sJ qndt _d S )Nd      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zerompfsqrtr   )qmath1imr
   r
   r   test_calculate_nomeS   s(   
rH   c                     s|  dt _t tddD ] t } |  d d ksJ qttdfD ]tddD ] tt	 fdd q,q%td td td	}td}|
|sUJ td
}td}|
|sfJ td}td}|
|swJ td}td}|
|sJ t}td }tdD ]&}tt }t|td|}|
dsJ td|}|
dsJ qdt _d S )Nr6   r   r;   r8   c                      s   t  S Njthetar
   nrD   zr
   r   r   w       ztest_jtheta.<locals>.<lambda>r7      z0.1069552990104042681962096z1.101385760258855791140606z1.178319743354331061795905r9   z0.8219318954665153577314573r:   r   r   )r%   r&   rA   rangerK   onerB   pytestraises
ValueErrorr   pistrrandom)valuer	   resultz1z2rF   qstringr
   rL   r   test_jthetam   sB   
r^   c                     sX  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	| }|	| sJ dt _ddt  }ddt   td	| }dt _td	| }|	|sJ dt _dt }t
td }td	dD ] }dt _|d	td	d|     td	| }dt _td	| }q|	|sJ dt _tdddd	dsJ tdddd	ds	J dt _tdddd}|	dsJ tdddd}|	ds*J d S ) N   r<   r7   i@B r>   z32.0031009628901652627099524264z16.6153027998236087899308935624r9   r   i c                      s   t dd S )Nr9   r   rJ   r
   rD   r
   r   r      rO   z&test_jtheta_issue_79.<locals>.<lambda>r5   l   'e[>
 l     I5 l   tQh z$2.4439389177990737589761828991467471z$0.5446453005688226915290954851851490P   r:   r$   r   r8   g      @r   r?   gl2<@2   g3m,z21359.048926806828939547859396600218966947753213803z4-6148327726309051673317975084654262.4119215720343656)r%   r&   rB   rR   jrK   rS   rT   rU   r   exprQ   )r	   rZ   rN   r1r2q1rM   rr
   r`   r   test_jtheta_issue_79   s\   $
$
ri   c            
      C   s  dt _ttd} td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| scJ 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| sJ td||d tdt	|d  }td||d tdt	|d  }td||d tdt	|d  }|| | }	|	
d| sJ td||d tdt	|d  }td||d tdt	|d  }td||d tdt	|d  }|| | }	|	
d| s*J tdt	|d }tdt	|d }tdt	|d }|| | }	|	
d| sQJ q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_   r7   r   r8   r:   r9   r   r5   r   N)r%   r&   ldexpr   rQ   rW   rX   rB   rK   rA   r   )
eps1rF   r]   rD   zstringrN   term1term2term3equalityr
   r
   r   test_jtheta_identities   sF   
            
rr   c                  C   s  dt _tdd td  } tdd td  }tdtdt  }td| |}t||s.J td	td
t  }td| |}t||sEJ tdtdt  }td| |}t||s\J tdtdt  }td| |}t||ssJ 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  _|D ]}t|tdsWJ qKdt _d S )Nr_   r   r:   r>   r9   r=   z%0.31618034835986160705729105731678285z%0.07542013825835103435142515194358975z$1.6530986428239765928634711417951828z$0.2015344864707197230526742145361455r8   z$1.6520564411784228184326012700348340z$0.1998129119671271328684690067401823z%0.37619082382228348252047624089973824z%0.15623022130983652972686227200681074r5   r7   r   r   )r%   r&   rB   rc   rK   r   dosmpc)rN   rD   r	   rh   r   txr
   r
   r   test_jtheta_complex  sN   



&.::::"
rw   c            	         s  dt _td td  } td td  tdtdt  }td| d}t||s+J td	td
t  }td| d}t||sCJ tdtdt  }td| d}t||s[J tdtdt  }td| d}t||ssJ tdD ]0}tt  tt   d tddd}tddtdd tdd }|	|sJ qwdt _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fD ]>\} dD ]7 t | d}t
 fdd| dd}|	|sJ t | d}t
 fdd| dd}|	|sJ qqtd t} dgd }td| dtd| d |d< dD ] t | dt |  | < q5|d |d  |d  |d  }|	ds`J dt _d S )Nr_   r=   r9   r>   r;   z$1.5555195883277196036090928995803201z%0.02439761276895463494054149673076275r   z%0.19825296689470982332701283509685662z%0.46038135182282106983251742935250009r8   z%0.36492498415476212680896699407390026z%0.57743812698666990209897034525640369z&-0.38936892528126996010818803742007352z%0.66549886179739128256269617407313625r:   r7   r      )r   r8   r9   r:   c                       t  | S rI   rJ   zzrM   rD   r
   r   r   m  rO   ztest_djtheta.<locals>.<lambda>)rM   c                    ry   rI   rJ   rz   r|   r
   r   r   p  rO   )r8   r9   r:   r   )r%   r&   rR   rc   rB   rK   r   rQ   rX   r   diffrA   )	rN   r	   rZ   rF   r   r   rh   re   rq   r
   r|   r   test_djthetaC  sb   



$$4	
 " 
r~   c                  C   s   dt _ttt} | tksJ tdD ]}tt }t|}tt|}|ds*J qdt _t	d }td}t
t	d}t||} | |sGJ td}t||} | |sWJ dt _d	S )
z;
    Test some special cases of the sn(z, q) function.
    r5   r7   r   r6   z0.09983341664682815230681420z0.09981686718599080096451168r   N)r%   r&   jsnrA   rQ   rW   rX   rB   r   rR   rk   )rZ   rF   r]   rD   rq   argr	   rG   r
   r
   r   test_jsn~  s$   





r   c                  C   s   dt _tt } t| }tt|}|tsJ dt _td }t	td}td}t||}||s5J td}t||}||sEJ dt _dS )	z;
    Test some special cases of the cn(z, q) function.
    r5   r6   r7   r   z0.9950041652780257660955620z0.9950058256237368748520459r   N)
r%   r&   rW   rX   rB   jcnrA   r   rR   rk   )r]   rD   r   r   rG   r	   rZ   r
   r
   r   test_jcn  s   




r   c                  C   sj   dt _tt } t| }tt|}|tsJ dt _td}td }t||}||s0J dt _dS )z;
    Test some special cases of the dn(z, q) function.
    r5   r6   z0.9995017055025556219713297r7   r   N)	r%   r&   rW   rX   rB   jdnrA   r   rR   )mstringrG   r   r	   r   rZ   r
   r
   r   test_jdn  s   


r   c                  C   s  dt _d} t| D ]3}tt }t|}tdt  }t|}t||d }t||d }t| | }|	ds<J q	t| D ];}tt }	t|}
|

 }tdt  }t|}|d t||
d  }t||
d }t| | }|	ds|J qAt| D ]k}tt }	t|	}
|

 }tt }t|}|d t||
d  }d|d  }t||
d }|| | }|	dsJ t|d }t||
}|	tsJ t||
}|	dsJ |
}t|t}|	tsJ qdt _dS )	zx
    Tests the some of the jacobi elliptic function identities found
    on Mathworld. Haven't found in Abramowitz.
    r5   r;   r8   r   r7   r   r   N)r%   r&   rQ   rW   rX   rB   r   r   rR   r   rC   r   ellipkrA   )NrF   r]   rD   rm   rN   rn   ro   rq   r   rG   r   rp   Krh   rY   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|| s-J td	td
t  } t||}t|| sCJ tdtdt  } t||}t|| sYJ dt _d S )Nr_   z!0.2495674401066275492326652143537z"0.12017344422863833381301051702823r   r:   r>   r9   r=   z!0.9762691700944007312693721148331z!0.0307203994181623243583169154824z%0.99639490163039577560547478589753039z%0.01346296520008176393432491077244994r   )r%   r&   rB   rc   r   r   r   r   )r	   urG   rh   r
   r
   r   test_sn_cn_dn_complex+  s&   






r   c                  C   sp  dt _tddddsJ tddddsJ ttt dd	s%J tdtt d
s1J tdtd tds>J tdt t dt dsNJ tddddksXJ tddddscJ tddddsnJ tddddsyJ tddddsJ tddddsJ tddddsJ d\} }}t| ||dsJ t| ||dsJ t|| |dsJ t||| dsJ t|| |dsJ t||| dsJ dD ]}|t _tddddsJ tddddsJ ttt ddsJ ttd tdtddsJ tdddds)J ttt dds6J ttd tdt tddsIJ tddt	
 sUJ tddt

 saJ tdttdd soJ tt ttd!d"s~J tddt
d sJ ttdtd#d$sJ tddddd%sJ tdddd&d'sJ tddddt td(d)sJ ttt ddd*sJ tdt dt ddd+sJ ttt ddt td,d-sJ tdt dt dd.t td/d0sJ tdt dt t dt td1d2s$J tdddt	
 s1J tdddd3s=J tdtt d4sJJ ttd tdtd5d6s[J tt td ttd7d8smJ tdtd9dd:s{J qdt _td;d<d=d>jd?d@dAsJ tdBdCddDjdEd@dAsJ tdFdGdHdIjdJd@dAsJ tdFdKdHdIjdLdMdAsJ tdFdNdHdIjdOd@dAsJ tdFdPdHdIjdQd@dAsJ tdFdRdHdIdSsJ tdFdTdHdIdUsJ tdVdWdXdYsJ tdZd[d\s
J td]d^d_sJ td`dadbs J td[dZdcs+J td[d`dds6J d S )eNr   r   r8   r   g2e_?r9   r:   gi+"?gP$M?yfFU?6?@y,R<8*y#62?z   g{ I|`?)r   y              ?y            ?yafG?Etw\?)r;   r   r_   <   r5   zo1.3110287771460599052324197949455597068413774757158115814084108519003952935352071251151477664807145467230678763r$   zn1.854074677301371918433850347195260046217598823521766905585928045056021776838119978357271861650371897277771871zp0.79612586584233913293056938229563057846592264089185680214929401744498956943287031832657642790719940442165621412zp-1.2138566698364959864300942567386038975419875860741507618279563735753073152507112254567291141460317931258599889zp0.58408284167715170669284916892566789240351359699303216166309375305508295130412919665541330837704050454472379308zo1.0441445654064360931078658361850779139591660747973017593275012615517220315993723776182276555339288363064476126zp0.93912050218619371196624617169781141161485651998254431830645241993282941057500174238125105410055253623847335313zq-0.53296252018635269264859303449447908970360344322834582313172115220559316331271520508208025270300138589669326136r   g      @zo1.1107207345395915617539702475151734246536554223439225557713489017391086982748684776438317336911913093408525532zp-1.1107207345395915617539702475151734246536554223439225557713489017391086982748684776438317336911913093408525532zo1.2260849569072198222319655083097718755633725139745941606203839524036426936825652935738621522906572884239069297zq-0.34471136988767679699935618332997956653521218571295874986708834375026550946053920574015526038040124556716711353zp0.77778596920447389875196055840799837589537035343923012237628610795937014001905822029050288316217145443865649819zo0.1983248499342877364755170948292130095921681309577950696116251029742793455964385947473103628983664877025779304zp0.77688623778582332014190282640545501102298064276022952731669118325952563819813258230708177398475643634103990878r;   zp0.14297579667156753833233879421985774801466647854232626336218889885463800128817976132826443904216546421431528308zp0.13613945827770535203521374457913768360237593025944342652613569368333226052158214183059386307242563164036672709zq-0.38207561624427164249600936454845112611060375760094156571007648297226090050927156176977091273224510621553615189zo1.6490011662710884518243257224860232300246792717163891216346170272567376981346412066066050103935109581019055806zp0.94148358841220238083044612133767270187474673547917988681610772381758628963408843935027667916713866133196845063zo1.8260115229009316249372594065790946657011067182850435297162034335356430755397401849070610280860044610878657501zo1.2290661908643471500163617732957042849283739403009556715926326841959667290840290081010472716420690899886276961zq-0.61127970812028172123588152373622636829986597243716610650831553882054127570542477508023027578037045504958619422zp-1.0684038390006807880182112972232562745485871763154040245065581157751693730095703406209466903752930797510491155zo1.8249027393703805304622013339009022294368078659619988943515764258335975852685224202567854526307030593012768954zp-1.2218475784827035854568450371590419833166777535029296025352291308244564398645467465067845461070602841312456831zo1.7255030280692277601061148835701141842692457170470456590515892070736643637303053506944907685301315299153040991zp0.42360654239698954330324956174109581824072295516347109253028968632986700241706737986160014699730561497106114281zp0.44660591677018372656731970402124510811555212083508861036067729944477855594654762496407405328607219895053798354zp0.70768352357515390073102719507612395221369717586839400605901402910893345301718731499237159587077682267374159282zp0.36023392184473309033675652092928695596803358846377334894215349632203382573844427952830064383286995172598964266zp0.40348623401722113740956336997761033878615232917480045914551915169013722542827052849476969199578321834819903921z0.0796zo1.0284758090288040009838871385180217366569777284430590125081211090574701293154645750017813190805144572673802094y            y      $      y      $      y            $@y+͸q?3(?g:0yE>)abs_epsgn?y'1@mgQy9]տ9DBٿgQkw?yS%MbX9?gX9v?g>W[yf0č[Ꭳ5yS%MbX9yݶ#?,eĿgh㈵>yS%vq-?yv0ƾ=T󵱿yS% y?yg%Xd毿yS%vq-y9px?`?yS% yycr??^JY?y @Gz?yffffff@\(\?y      @{Gz?y8Y+}ڿ<@y       @      y       @      ?yRع?Y\ny       @      y      ?      ?y;=?>%yg       @y      ?      ?y=R?IOyRع?Y\n?yi2)G@L !'- @)r%   r&   elliprdr   rc   elliprgelliprfrt   elliprcrV   ln2elliprjrB   ellippi)rv   yrN   rM   r
   r
   r   test_elliptic_integralsD  s    

" r   c                   C   s   t ttds	J d S )N)rG   )isnanr   nanr
   r
   r
   r   test_issue_238  s   r   )__doc__mpmathrX   rS   r   r   rB   rA   rR   r'   r   r   r   r@   r4   rH   r^   ri   rr   rw   r~   r   r   r   r   r   r   r   r
   r
   r
   r   <module>   s4    .1;=-;-%DY