ó
    Û“,jØW  ã                   ó’   • S r SSKrSSKrSSKrSSKJr  SSKJ	r	   " S S\R                  5      r\S:X  a  \R                  " 5         gg)zR
Author(s): Matthew Loper

See LICENCE.txt for licensing and contact information.
é    Né   )Úchc                   óæ   • \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS r\R"                  " S5      S 5       rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!Sr"g )!ÚTestChé   c                 óâ  • [         R                  " S5      n[         R                  " S5      nUn[        S5       H
  nX-   U-   nM     UR                  U5        UR                  U5        U R	                  UR                  5       UR                  5       -   S5        UR                  U5        UR                  U5        U R	                  UR                  S5      UR                  S5      -   S5        g)zÆTest how many nodes are visited when cache is cleared. 
If the number of hits changes, it has to be carefully
looked at to make sure that correctness and performance
don't get messed up by a change.r   é   é
   é;   é{   é)   N)r   ÚarrayÚrangeÚdr_wrtÚassertEqualÚclear_cache)ÚselfÚaÚbÚcÚis        ÚœC:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\chumpy/test_ch.pyÚtest_cachehitsÚTestCh.test_cachehits   s²   € ô �HŠH�Q‹KˆÜ�HŠH�Q‹KˆØˆÜ�r–ˆAØ‘˜‘	ŠAñ ð 	
�‰�ŒØ	�‰�ŒØ×Ñ˜Ÿ™›¨1¯=©=«?Ñ:¸BÔ?Ø	�‰�ŒØ	�‰�ŒØ×Ñ˜Ÿ™ sÓ+¨a¯m©m¸CÓ.@Ñ@À"ÕEó    c                 óž  • [         R                  " S5      n[         R                  " S5      n[         R                  " S5      n[         R                  " [         R                  " X45      U45      nU R                  UR                  UL 5        U R                  UR
                  UL 5        U R                  UR                  UL 5        U R                  UR                  U5      R                  S:„  5        U R                  UR                  U5      R                  S:„  5        U R                  UR                  U5      R                  S:„  5        g )Né   é   é   r   )	r   ÚarangeÚconcatenateÚ
assertTrueÚm0Úm1Úm2r   Únnz)r   ÚaaÚbbÚccÚresults        r   Útest_nested_concatenateÚTestCh.test_nested_concatenate'   sã   € Ü�YŠY�q‹\ˆÜ�YŠY�q‹\ˆÜ�YŠY�q‹\ˆä—’¤§¢°°Ó!8¸Ð <Ó=ˆØ�‰˜Ÿ	™	 R˜Ô(Ø�‰˜Ÿ	™	 R˜Ô(Ø�‰˜Ÿ	™	 R˜Ô(à�‰˜Ÿ™ bÓ)×-Ñ-°Ñ1Ô2Ø�‰˜Ÿ™ bÓ)×-Ñ-°Ñ1Ô2Ø�‰˜Ÿ™ bÓ)×-Ñ-°Ñ1Õ2r   c                 óì  • [         R                  " [        R                  R	                  S5      R                  S5      5      n[         R                  " [        R                  R	                  S5      R                  S5      5      nSUS'   U R                  [         R                  " X5      S   R                  S5        SUS'   U R                  [         R                  " X5      S   R                  S5        g )Né   )r   r   r   ©r	   r	   ç        )	r   r   ÚnpÚrandomÚrandnÚreshaper   Ú	NanDivideÚr)r   ÚfooÚbars      r   Útest_nandivideÚTestCh.test_nandivide5   s¨   € Ü�hŠh”r—y‘y—‘ rÓ*×2Ñ2°5Ó9Ó:ˆÜ�hŠh”r—y‘y—‘ rÓ*×2Ñ2°5Ó9Ó:ˆØˆˆC‰Ø×ÑœŸš cÓ.¨sÑ3×5Ñ5°rÔ:ØˆˆC‰Ø×ÑœŸš cÓ.¨sÑ3×5Ñ5°rÕ:r   c           	      óJ  • [         [        4 H“  nU R                  U" [        R                  " S5      5      U" [
        R                  " S5      5      5        U R                  U" [        R                  " S//5      5      U" [
        R                  " S//5      5      5        M•     g )Nr   )ÚfloatÚintr   r1   r   r   )r   Úfns     r   Útest_castingÚTestCh.test_casting=   sj   € Üœ“*ˆBØ×Ñ™R¤§¢¨£›_±"´R·X²X¸a³[³/ÔBØ×Ñ™R¤§¢¨1¨#¨£Ó0±"´R·X²XÀ¸s¸e³_Ó2EÖFò r   c                 ó  • [         R                  " S5      R                  SSS5      n[         R                  " S5      R                  SSS5      n[         R                  " XSS/SS/4S	9n[        R                  " S5      R                  SSS5      n[        R                  " S5      R                  SSS5      n[        R                  " XESS/SS/4S	9nUR
                    UR                  U5        UR                  U5        g )
Ng      N@r   r   r   g      8@r	   r   r   )Úaxes)r1   r    r4   Ú	tensordotr   r6   r   )r   ÚanÚbnÚcnÚacÚbcr)   s          r   Útest_tensordotÚTestCh.test_tensordotB   sÇ   € Ü�YŠY�s‹^×#Ñ# A a¨Ó*ˆÜ�YŠY�s‹^×#Ñ# A a¨Ó*ˆÜ�\Š\˜"¨¨! u¨a°¨U mÑ4ˆä�YŠY�s‹^×#Ñ# A a¨Ó*ˆÜ�YŠY�s‹^×#Ñ# A a¨Ó*ˆÜ�\Š\˜"¨¨! u¨a°¨U mÑ4ˆà
�ŠØ
�	‰	�"ŒØ
�	‰	�"�r   c                 óž   • [         R                  " S/5      nU R                  [        UR                  S   [
        R                  5      5        g )Nr   )r   r   r"   Ú
isinstancer6   r1   Úfloat64)r   Úxs     r   Útest_make_sure_is_doubleÚTestCh.test_make_sure_is_doubleP   s0   € Ü�HŠH�a�S‹MˆØ�‰œ
 1§3¡3 q¡6¬2¯:©:Ó6Õ7r   c           
      ó’  • [         R                  R                  S5      R                  S5      n[         R                  R                  S5      R                  S5      n[         R                  " X5      n[
        R                  " UR                  UR                  5      nSn[
        R                  R                  S5      S-
  R                  S5      U-  n[
        R                  " UR                  UR                  U-   5      U-
  nUR                  U5      R                  UR                  5       5      nU R                  S[
        R                  " [
        R                  " UR                  5       UR                  5       -
  5      5      :„  5        [
        R                  " UR                  U-   UR                  5      U-
  nUR                  U5      R                  UR                  5       5      nU R                  S[
        R                  " [
        R                  " UR                  5       UR                  5       -
  5      5      :„  5        g )Né   )r
   r   ç      ð?ç      à?ç›+¡†›„=)r   r2   r3   r4   Úcrossr1   r6   Úrandr   ÚdotÚravelr"   ÚmaxÚabs)	r   r'   r(   Úcross_chÚcross_npÚepsÚstepÚgt_diffÚpr_diffs	            r   Ú
test_crossÚTestCh.test_crossT   s|  € Ü�Y‰Y�_‰_˜RÓ ×(Ñ(¨Ó0ˆÜ�Y‰Y�_‰_˜RÓ ×(Ñ(¨Ó0ˆä—8’8˜BÓ#ˆÜ—8’8˜BŸD™D "§$¡$Ó'ˆð
 ˆÜ—	‘	—‘˜rÓ" RÑ'×0Ñ0°Ó8¸3Ñ>ˆä—(’(˜2Ÿ4™4 §¡ d¡Ó+¨hÑ6ˆØ—/‘/ "Ó%×)Ñ)¨$¯*©*«,Ó7ˆð 	�‰˜¤§¢¤r§v¢v¨g¯m©m«o¸g¿m¹m»oÑ.MÓ'NÓ OÑOÔPä—(’(˜2Ÿ4™4 ™9 b§d¡dÓ+¨hÑ6ˆØ—/‘/ "Ó%×)Ñ)¨$¯*©*«,Ó7ˆð 	�‰˜¤§¢¤r§v¢v¨g¯m©m«o¸g¿m¹m»oÑ.MÓ'NÓ OÑOÕPr   c                 ó²  • [         R                  " SS5      n[         R                  " SS5      nX-  U-   U-   S-   nUR                  USS 5      nUR                  U5      S S 2SS24   nU R                  XE-
  R                  S:H  5        UR                  US	S
 5      nUR                  U5      S S 2S	S
24   nU R                  XE-
  R                  S:H  5        g )Nr
   é   r   é   r	   r   é   r   r   é   )r   r    r   r"   r&   )r   r'   r(   r)   Údr0Údr1s         r   Útest_dr_wrt_selectionÚTestCh.test_dr_wrt_selectiono   sÀ   € Ü�YŠY�r˜"ÓˆÜ�YŠY�q˜‹_ˆØ‰W�r‰\˜BÑ Ñ!ˆà�i‰i˜˜1˜Q˜Ó ˆØ�i‰i˜‹mšA˜a ˜c˜EÑ"ˆØ�‰˜™Ÿ™¨1Ñ,Ô-à�i‰i˜˜1˜Q˜Ó ˆØ�i‰i˜‹mšA˜a ˜c˜EÑ"ˆØ�‰˜™Ÿ™¨1Ñ,Õ-r   c           
      óÀ  • [         R                  [         R                  [         R                  [         R                  4 GHK  n[         R
                  " S5      n[         R                  " UR                  S[        R                  R                  UR                  5      R                  UR                  5      -  -   5      nUR                  UR                  -
  nU" USS9nU" USS9nUR                  UR                  -
  nUR                  U5      R                  UR!                  5       5      R                  UR                  5      nU[         R                  [         R                  4;   aA  U R#                  S[        R$                  " [        R&                  " Xx-
  5      5      :„  5        GMl  U R#                  S[        R$                  " [        R&                  " Xx-
  5      5      :„  5        UR                  U5      n	[        R                  R)                  UR                  5      R                  UR                  5      US S & U R#                  UR                  U5      U	L 5        SUl        U R#                  UR                  U5      U	L5        GMN     U R-                  [         R                  " [         R.                  " S5      SS9R0                  [        R                  " [        R.                  " S5      SS9R0                  5        U R-                  [         R                  " [         R.                  " S5      S	S9R0                  [        R                  " [        R.                  " S5      S	S9R0                  5        U R-                  [         R                  " [         R.                  " S5      SS9R0                  [        R                  " [        R.                  " S5      SS9R0                  5        U R-                  [         R                  " [         R.                  " S5      S	S9R0                  [        R                  " [        R.                  " S5      S	S9R0                  5        g )
N)r   r   é   r	   çš™™™™™¹?r	   ©Úaxisg{®Gáz„?rU   r   r   r   )r   ÚsumÚmeanÚvarÚstdÚonesr   r6   r1   r2   rW   Úsizer4   Úshaper   rX   rY   r"   rZ   r[   r3   rq   r   ÚeyeÚndim)
r   r>   Údata1Údata2ÚdiffÚresult1Úresult2ÚgtÚpredri   s
             r   Útest_sum_mean_std_varÚTestCh.test_sum_mean_std_var}   s¾  € Ü—6‘6œ2Ÿ7™7¤B§F¡F¬B¯F©FÔ3ˆBô —G’G˜IÓ&ˆEÜ—H’H˜UŸW™W r¬B¯I©I¯N©N¸5¿:¹:Ó,F×,NÑ,NÈuÏ{É{Ó,[Ñ'[Ñ[Ó\ˆEØ—7‘7˜UŸW™WÑ$ˆDñ ˜ QÑ'ˆGÙ˜ QÑ'ˆGð —‘˜WŸY™YÑ&ˆBØ—>‘> %Ó(×,Ñ,¨T¯Z©Z«\Ó:×BÑBÀ2Ç8Á8ÓLˆDð ”b—f‘fœbŸf™fÐ%Ó%Ø—‘ ¤r§v¢v¬b¯fªf°R±YÓ.?Ó'@Ñ @×Aà—‘ ¬¯ª¬r¯vªv°b±iÓ/@Ó(AÑ AÔBà—n‘n UÓ+�ÜŸ9™9Ÿ?™?¨5¯:©:Ó6×>Ñ>¸u¿{¹{ÓK�‘a�Ø—‘ §¡¨uÓ 5¸Ð <Ô=Ø�”Ø—‘ §¡¨uÓ 5¸SÐ @×Añ5 4ð8 	×ÑœŸš¤§¢¨£°Ñ2×7Ñ7¼¿ºÄÇÂÈÃÐPQÑ9R×9WÑ9WÔXØ×ÑœŸš¤§¢¨£°Ñ2×7Ñ7¼¿ºÄÇÂÈÃÐPQÑ9R×9WÑ9WÔXØ×ÑœŸš¤§¢ q£	¨qÑ1×6Ñ6¼¿º¼r¿vºvÀa»yÈaÑ8P×8UÑ8UÔVØ×ÑœŸš¤§¢ q£	¨qÑ1×6Ñ6¼¿º¼r¿vºvÀa»yÈaÑ8P×8UÑ8UÕVr   c           	      óò  • [         R                  " / SQ5      n[         R                  " U5      nUR                  nUR	                  U5      n[         R
                  R                  S5      S-
  S-  nU=R                  UR                  -  sl        UR                  UR                  5      nUR                  U-
  nU R                  S[        R                  " [        R                  " Xv-
  5      5      :„  5        g )N)rS   g      @g      @g      @r   rT   ro   g‚vIhÂ%<=)r   r   Úcumsumr6   r   r2   rW   rN   rX   r"   r1   rZ   r[   )r   r   ÚcsÚr1Údrr}   r�   r€   s           r   Útest_cumsumÚTestCh.test_cumsum¡   s£   € Ü�HŠH’]Ó#ˆÜ�YŠY�q‹\ˆØ�T‰TˆØ�Y‰Y�q‹\ˆÜ—	‘	—‘˜qÓ! "Ñ$ bÑ(ˆØ	�Šˆt�v‰v‰�Ø�v‰v�d—f‘f‹~ˆØ�T‰T�B‰YˆØ�‰˜¤§¢¤r§v¢v¨b©iÓ'8Ó 9Ñ9Õ:r   c                 óö  • [         R                  " S5      [         R                  " S5      [         R                  " S5      p2nX-   nXC-   nU R                  UR                  S   S:H  5        UR	                  SSS5        U R                  UR                  S:H  5        UR	                  SS	S5        U R                  UR                  S:H  5        UR	                  SS	S5        U R                  UR                  S
:H  5        [         R
                  " S/5      [         R
                  " S/5      [         R
                  " S/5      p2nX-   nXC-   nU R                  UR                  S   S:H  5        UR	                  S[        R
                  " S/5      S5        U R                  UR                  S   S:H  5        UR	                  S[        R
                  " S	5      S5        U R                  UR                  S   S:H  5        UR	                  S[        R
                  " S	5      S5        U R                  UR                  S   S
:H  5        UR                  [        [        SS5      5      [        R
                  " S5      S5        U R                  UR                  S   S
:H  5        UR                  [        [        SS5      5      [        R
                  " S5      S5        U R                  UR                  S   S:H  5        g)aÓ  Each time you set an attribute, the cache (of r's and dr's) of 
ancestors is cleared. Because children share ancestors, this means
these can be cleared multiple times unnecessarily; in some cases, 
where lots of objects exist, this cache clearing can actually be a bottleneck.

Therefore, the concept of an iteration was added; intended to be used in 
an optimization setting (see optimization.py) and in the set() method, it 
avoids such redundant clearing of cache.r   r	   r   r   rg   rN   r
   é   éd   éi   éÈ   éÍ   N)
r   ÚChr"   r6   Ú__setattr__r   r1   Ú__setitem__Úlistr   )r   r   r   r   rN   Úys         r   Útest_iteration_cacheÚTestCh.test_iteration_cache­   s  € ô —%’%˜“(œBŸEšE !›H¤b§e¢e¨A£hˆaˆØ‰CˆØ‰CˆØ�‰˜Ÿ™˜A™ ™	Ô"à	�‰�c˜2˜qÔ!Ø�‰˜Ÿ™˜r™	Ô"Ø	�‰�c˜3 Ô"Ø�‰˜Ÿ™˜r™	Ô"Ø	�‰�c˜3 Ô"Ø�‰˜Ÿ™˜s™
Ô#ä—(’(˜A˜3“-¤§¢¨1¨#£´·²¸!¸³ˆaˆØ‰CˆØ‰CˆØ�‰˜Ÿ™˜A™ ™	Ô"à	�‰�cœ2Ÿ8š8 R D›>¨1Ô-Ø�‰˜Ÿ™˜A™ "™Ô%Ø	�‰�cœ2Ÿ8š8 C›=¨!Ô,Ø�‰˜Ÿ™˜A™ "™Ô%Ø	�‰�cœ2Ÿ8š8 C›=¨!Ô,Ø�‰˜Ÿ™˜A™ #™Ô&Ø	�‰”dœ5  1›:Ó&¬¯ª°«°qÔ9Ø�‰˜Ÿ™˜A™ #™Ô&Ø	�‰”dœ5  1›:Ó&¬¯ª°«°qÔ9Ø�‰˜Ÿ™˜A™ #™Õ&r   c                 óÖ  • [         R                  " [        R                  " S5      R	                  SS5      5      n[         R                  " [        R                  " S5      R	                  SS5      5      n[         R
                  " X45      n[        R
                  " UR                  UR                  45      nXCR                  -
  R                  5       n[         R                  " [        R                  " S5      R	                  SS5      5      n[         R                  " [        R                  " S5      R	                  SS5      5      n[         R                  " Xg45      n[        R                  " UR                  UR                  45      n	X˜R                  -
  R                  5       n
U R                  [        R                  " U5      5        U R                  [        R                  " U
5      5        [         R                  " [        R                  " S5      R	                  S5      5      n[         R
                  " US S USS  45      n[         R                  " US S 2S S24   US S 2SS 24   45      nUR                  U5      R                  5       nU[        R                  " UR                  S	   5      -
  nU R                  [        R                  " UR                  5       5      5        g )
Nr
   r	   r   re   r   é<   ©r
   rg   r   r   )r   r‘   r1   r    r4   Úvstackr6   rY   ÚhstackÚassertFalseÚanyr   r   Útodensery   rx   )r   Úa1Úb1Úc1Úc1_checkÚ
residuals1Úa2Úb2Úc2Úc2_checkÚ
residuals2Úd0Úd1Úd2Útmpr}   s                   r   Útest_stackingÚTestCh.test_stackingÕ   sñ  € ä�UŠU”2—9’9˜R“=×(Ñ(¨¨1Ó-Ó.ˆÜ�UŠU”2—9’9˜R“=×(Ñ(¨¨1Ó-Ó.ˆÜ�YŠY˜�wÓˆÜ—9’9˜bŸd™d B§D¡D˜\Ó*ˆØ§¡‘o×,Ñ,Ó.ˆ
ô �UŠU”2—9’9˜R“=×(Ñ(¨¨1Ó-Ó.ˆÜ�UŠU”2—9’9˜R“=×(Ñ(¨¨1Ó-Ó.ˆÜ�YŠY˜�wÓˆÜ—9’9˜bŸd™d B§D¡D˜\Ó*ˆØ§¡‘o×,Ñ,Ó.ˆ
à×ÑœŸš 
Ó+Ô,Ø×ÑœŸš 
Ó+Ô,ä�XŠX”b—i’i “m×+Ñ+¨FÓ3Ó4ˆÜ�YŠY˜˜2˜A˜  1 2 Ð'Ó(ˆÜ�YŠY˜š1˜R˜a˜R˜4™ "¢Q q¡r T¡(Ð+Ó,ˆØ�i‰i˜‹m×#Ñ#Ó%ˆØ”R—V’V˜CŸI™I a™LÓ)Ñ)ˆØ×ÑœŸš §
¡
£Ó-Õ.r   zGWe are using LinearOperator for this for now. Might change back though.c                 ó¸  • [         R                  " [        R                  " S5      R	                  S5      5      nUR
                  nUR                  U5      nUR                  S-   Ul        UR                  U5      nU R                  X4L 5        [        R                  " S5      R	                  S5      Ul        UR                  U5      nU R                  XTL5        g )Nrh   ©r   r	   rS   r   r/   )	r   r‘   r1   Úzerosr4   ÚTr   rN   r"   )r   r   r   ri   rj   Údr2s         r   Útest_reorder_cachingÚTestCh.test_reorder_caching÷   s˜   € ä�EŠE”"—(’(˜1“+×%Ñ% eÓ,Ó-ˆØ�C‰CˆØ�h‰h�q‹kˆØ�c‰c�B‰hˆŒØ�h‰h�q‹kˆØ�‰˜˜
Ô#Ü�hŠh�q‹k×!Ñ! %Ó(ˆŒØ�h‰h�q‹kˆØ�‰˜˜Õ'r   c                 óè  • SSK JnJn  SSKJn  S GH]  n[
        R                  " [        R                  " [        R                  " S5      R                  S5      US95      nUR                  nUR                  R                  5       nU" UR                  U5      5      n[        R                  " UR                  5      R                  UR                   5      n	[        R                  " UR                  U	-   US9Ul        UR                  R                  5       n
UR%                  U" U	5      5      R'                  5       nX§-
  R'                  5       n[        R(                  R+                  X¼5        GM`     g )	Nr   ©ÚrowÚcolr   )Údeepcopy)ÚCÚFrh   r±   )Úrequirements)Úutilsr¹   rº   Úcopyr»   r   r‘   r1   Úrequirer²   r4   r³   r6   r   r    rw   rx   rN   rX   rY   ÚtestingÚassert_array_equal)r   r¹   rº   r»   Úwhichr   r   r¡   rˆ   r}   r¦   Ú	diff_predÚdiff_emps                r   Útest_transposeÚTestCh.test_transpose  sí   € ß#Ý!ÜˆEÜ—’”b—j’j¤§¢¨!£×!4Ñ!4°UÓ!;È%ÑPÓQˆAØ—‘ˆAà—‘—‘“ˆBá˜!Ÿ(™( 1›+Ó&ˆBä—9’9˜QŸV™VÓ$×,Ñ,¨Q¯W©WÓ5ˆDÜ—*’*˜QŸS™S 4™Z°eÑ<ˆAŒCØ—‘—‘“ˆBàŸ™™s 4›yÓ)×/Ñ/Ó1ˆIØ™Ÿ™Ó)ˆHÜ�J‰J×)Ñ)¨)×>ò  r   c                 óö  • [         R                  [         R                  [         R                  [         R                  [         R
                  [         R                  [         R                  [         R                  [         R                  [         R                  [         R                  [         R                  [         R                  /nSnU GH+  n[         R                  " S5      n[         R                  " UR                  U-   5      nU" U5      R!                  U5      nU" U5      R                  U" U5      R                  -
  U-  nU[         R                  L aO  U R#                  S[$        R                  " UR'                  5       S   UR'                  5       S   -
  5      :„  5        MÞ  U R#                  S[$        R                  " UR'                  5       S   UR'                  5       S   -
  5      :„  5        GM.     g )Ng:Œ0âŽyE>g      Ð?g�íµ ÷Æ°>r   gH¯¼šò×z>)r   ÚexpÚlogÚsinÚarcsinÚcosÚarccosÚtanÚarctanÚnegativeÚsquareÚsqrtr[   Ú
reciprocalr‘   r6   r   r"   r1   rY   )r   Úfnsr^   ÚfÚx0Úx1r�   Úemprs           r   Ú
test_unaryÚTestCh.test_unary  sJ  € Ü�v‰v”r—v‘vœrŸv™v¤r§y¡y´"·&±&¼"¿)¹)ÄRÇVÁVÌRÏYÉYÔXZ×XcÑXcÔeg×enÑenÔpr×pwÑpwÔy{×yÑyô  BD÷  BOñ  BOð  PˆàˆÜˆAä—’�s“ˆBÜ—’�r—t‘t˜C‘x“ˆBá�R“5—<‘< Ó#ˆDÙ�b“E—G‘G™a ›eŸg™gÑ%¨Ñ,ˆDð ”B—M‘MÒ!Ø—‘ ¤r§v¢v¨d¯j©j«l¸1©oÀÇ
Á
ÃÈQÁÑ.OÓ'PÑ PÖQà—‘ ¤r§v¢v¨d¯j©j«l¸1©oÀÇ
Á
ÃÈQÁÑ.OÓ'PÑ P×Qò r   c                 ór  • SSK Jn  [        R                  " S5      [        R                  " S5      -   nUR	                  UR                  U5      5      nSUR                  l        U R                  UR                  S   S:H  5        U R                  [        UR                  R                  R                  5       5      S   U:H  5        U R                  [        UR                  R                  R                  5       5      S   [        UR                  R                  R                  5       5      S   :H  5        g )Nr   )ÚcPickler
   re   rR   é(   )Ú	six.movesrÞ   r   r‘   ÚloadsÚdumpsr   rN   r"   r6   r”   r   Ú_parentsÚkeys)r   Úpickler­   s      r   Útest_serializationÚTestCh.test_serialization+  sÏ   € õ
 	0Ü�eŠe�B‹iœ"Ÿ%š% ›)Ñ#ˆØ�l‰l˜6Ÿ<™<¨Ó,Ó-ˆØˆ�‰ŒØ�‰˜Ÿ™˜a™ B™Ô'Ø�‰œ˜SŸU™UŸ^™^×0Ñ0Ó2Ó3°AÑ6¸#Ñ=Ô>Ø�‰œ˜SŸU™UŸ^™^×0Ñ0Ó2Ó3°AÑ6¼$¸s¿u¹u¿~¹~×?RÑ?RÓ?TÓ:UÐVWÑ:XÑXÕYr   c                 ó˜  • [         R                  " S5      [         R                  " S5      [         R                  " S5      p2n[         R                  " S 5      nXl        X$l        U R                  UR                  S:H  5        X$l        U R                  UR                  S:H  5        Xl        U R                  UR                  S:H  5        g )Nr   r	   r   c                 ó
   • X-   $ ©N© )rN   r•   s     r   Ú<lambda>Ú'TestCh.test_chlambda1.<locals>.<lambda>:  s   € ¨ªr   r   )r   r‘   ÚChLambdarN   r•   r"   r6   )r   r¢   r§   Úc3Úadders        r   Útest_chlambda1ÚTestCh.test_chlambda18  s„   € Ü—U’U˜1“XœrŸušu Q›x¬¯ª¨q«�ˆÜ—’Ñ,Ó-ˆØŒØŒØ�‰˜Ÿ™ 1™Ô%ØŒØ�‰˜Ÿ™ 1™Ô%ØŒØ�‰˜Ÿ™ 1™Õ%r   c                 ó  • [         R                  " S 5      nU R                  UR                  UR                  5      S L5        [         R
                  " S5      Ul        U R                  UR                  UR                  5      S L5        g )Nc                 ó   • U $ rê   rë   ©rN   s    r   rì   Ú'TestCh.test_chlambda2.<locals>.<lambda>E  s   € ©ar   r   )r   rî   r"   r   rN   r‘   )r   Úpassthroughs     r   Útest_chlambda2ÚTestCh.test_chlambda2D  s_   € Ü—k’k¡<Ó0ˆØ�‰˜×*Ñ*¨;¯=©=Ó9ÀÐEÔFÜŸš˜c›
ˆŒØ�‰˜×*Ñ*¨;¯=©=Ó9ÀÐEÕFr   c           	      ó"  • SSK Jn  SS KnUR                  " S5      nUR                  " UR
                  " UR                  5      S-  5      UR                  S S & [        [        UR                  5      5       H•  nU" X4S9nUR                  UR                  5      R                  UR                  5       5      nUR                  " X4S9R                  5       nU R                  UR                   " UR"                  " Xg-
  5      5      S:  5        M—     g )	Nr   )Úamaxr   )r   r	   r   rn   g     @�@)r   rq   rp   g»½×Ùß|Û=)r   rû   ÚnumpyÚemptyrÌ   r    rw   Úflatr   Úlenrx   r   r   rX   rY   r"   rZ   r[   )r   rû   r1   Úarrrq   r   r�   Úreals           r   Ú	test_amaxÚTestCh.test_amaxW  s¿   € ÝÛØ�hŠh�yÓ!ˆØ—f’f˜RŸYšY s§x¡xÓ0°Ñ6Ó7ˆ�‰‘ˆô œ#˜cŸi™i›.Ö)ˆDÙ�sÑ&ˆAØ—8‘8˜AŸC™C“=×$Ñ$ S§Y¡Y£[Ó1ˆDØ—7’7˜3Ñ*×0Ñ0Ó2ˆDØ�O‰O˜BŸFšF 2§6¢6¨$©)Ó#4Ó5¸Ñ=Ö>ò	 *r   c                 óœ  • SSK JnJn  SSKJn  U" [        R
                  " S5      [        R
                  " S5      5      nU R                  UR                  R                  5       S   S:H  5        U R                  UR                  UR                  5      S   S:H  5        U R                  UR                  UR                  5      S   S:H  5        [        R                  " [        R                  R                  [        R                   " S5      5      [        R"                  5      n[        R
                  " US S R%                  S	5      5      n[        R
                  " USS
 R%                  S	5      5      n[        R
                  " US
   5      n[        R
                  " US   5      n	Sn
Xh4 GHœ  nXy4 GH�  nU" X¼5      nX¼4 GH|  nUR                  R'                  5       n[        R(                  " [        R*                  " U[        R                  " UR                  UR                  5      -
  5      5      nU R                  US:H  5        UR                  U5      R'                  5       nUR,                  U
-   Ul        UR                  R'                  5       nUR                  U-
  R                  5       nUR/                  U" U
[        R0                  " UR2                  S   5      -  5      5      R                  5       n[        R(                  " [        R*                  " UU-
  5      5      nU R                  US:  5        GM     GM“     GMŸ     g )Nr   r¸   )Úmaximumr   rS   ©r   r   re   rg   ©r	   r   é   é   ro   rU   )r¿   r¹   rº   r   r  r‘   r"   r6   rY   r   r   r   r1   Úasarrayr2   Úpermutationr    rM   r4   rÀ   rZ   r[   rN   rX   rv   rx   )r   r¹   rº   r  Úthe_maxÚrndr¢   r§   Ús1Ús2r^   ÚfirstÚsecondÚwhich_to_changeÚmax_r0Ú
max_r_diffÚmax_drÚmax_r1Úemp_diffÚ	pred_diffÚmax_dr_diffs                        r   Útest_maximumÚTestCh.test_maximumd  sN  € ß#Ýñ œ"Ÿ%š% ›(¤B§E¢E¨!£HÓ-ˆØ�‰˜Ÿ	™	Ÿ™Ó)¨!Ñ,°Ñ2Ô3Ø�‰˜Ÿ™ w§y¡yÓ1°#Ñ6¸"Ñ<Ô=Ø�‰˜Ÿ™ w§y¡yÓ1°#Ñ6¸"Ñ<Ô=ô
 �jŠjœŸ™×.Ñ.¬r¯yªy¸«}Ó=¼r¿z¹zÓJˆÜ�UŠU�3�r˜�7—?‘? 5Ó)Ó*ˆÜ�UŠU�3�q˜�9×$Ñ$ UÓ+Ó,ˆÜ�UŠU�3�r‘7‹^ˆÜ�UŠU�3�r‘7‹^ˆàˆØ”XˆEØœ(�Ù! %Ó0�à(-¤�Oð %ŸY™YŸ^™^Ó-�FÜ!#§¢¬¯ª¨v¼¿
º
À5Ç7Á7ÈFÏHÉHÓ8UÑ/UÓ(VÓ!W�JØ—O‘O J°!¡OÔ4Ø$Ÿ^™^¨OÓ<×AÑAÓC�FØ(7×(9Ñ(9¸CÑ(?�OÔ%Ø$ŸY™YŸ^™^Ó-�Fà '§	¡	¨FÑ 2×9Ñ9Ó;�HØ &§
¡
©3¨s´2·7²7¸6¿<¹<È¹?Ó3KÑ/KÓ+LÓ M× SÑ SÓ U�Iô #%§&¢&¬¯ª°¸Ñ0BÓ)CÓ"D�Kà—O‘O K°%Ñ$7×8ô/ (7ô #ò r   c                 óØ  • [        S5       Vs/ s H  n[        R                  " U5      PM     nn[        S5       Vs/ s H  n[        U5      PM     nnS nU" U5      R                  nU" U5      nU R                  XV:H  5        U" U5      nUR                  US   [        R                  " S5      5        SUS'   UR                  nU" U5      nU R                  XV:H  5        g s  snf s  snf )Nr
   c                 ó<   • U S   U S   -  U S   U S   -  U S   -  -   $ )Nr   r   r	   r   r   rë   )r   s    r   rì   Ú$TestCh.test_shared.<locals>.<lambda>œ  s*   € ˜!˜A™$˜q ™t™) q¨¡t¨A¨a©D¡y°!°A±$Ñ&6Ò6r   r   é2   )r   r   r‘   r<   r6   r"   Úreplace)r   r   ÚchsÚvrsÚfuncÚchained_resultÚregular_resultÚchained_funcs           r   Útest_sharedÚTestCh.test_shared—  sÁ   € ä!& r¤Ó+¢˜AŒr�uŠu�QŽx¡ˆÐ+Ü!& r¤Ó+¢˜AŒu�QŽx¡ˆÐ+á6ˆá˜c›Ÿ™ˆÙ˜c›ˆà�‰˜Ñ8Ô9ñ ˜C“yˆØ×Ñ˜S ™V¤R§U¢U¨2£YÔ/ØˆˆA‰à%Ÿ™ˆÙ˜c›ˆà�‰˜Ñ8Õ9ùò' ,ùÚ+s
   Ž C"½C'c           	      ór  • SSK Jn  [         R                  " [        R                  " S5      R                  S5      5      n[         R                  " [        R                  " S5      R                  S5      S-  5      nU" X#5      nX#4 GH,  nUR                  R                  5       nUR                  U5      R                  5       n[        R                  R                  UR                  R                  5      R                  UR                  R                  5      nUR                  U-   Ul        UR                  U-
  n	UR                  UR                  5       5      R                  U	R                  5      n
U R                  [        R                   " [        R"                  " Xš-
  5      5      S:  5        GM/     g )	Nr   )rX   rg   )r   r	   rh   )r	   r   r
   g•dyáý¥=)r   rX   r‘   r1   r    r4   r6   rÀ   r   r2   rW   rw   rx   rN   rY   r"   rZ   r[   )r   rX   Úmtx1Úmtx2Úmtx3ÚmtxÚoldvalÚmtxdÚmtx_diffÚmtx_empÚmtx_preds              r   Útest_matmatmultÚTestCh.test_matmatmult±  s  € ÝÜ�uŠu”R—Y’Y˜q“\×)Ñ)¨%Ó0Ó1ˆÜ�uŠu”R—Y’Y˜q“\×)Ñ)¨%Ó0°Ñ3Ó4ˆá�4‹ˆð ”<ˆCØ—V‘V—[‘[“]ˆFØ—;‘;˜sÓ#×(Ñ(Ó*ˆDÜ—y‘y—~‘~ c§e¡e§j¡jÓ1×9Ñ9¸#¿%¹%¿+¹+ÓFˆHØ—E‘E˜HÑ$ˆCŒEØ—f‘f˜v‘oˆGØ—x‘x §¡Ó 0Ó1×9Ñ9¸'¿-¹-ÓHˆHà�O‰OœBŸFšF¤2§6¢6¨'Ñ*<Ó#=Ó>ÀÑF×Gò  r   c           	      ó¨  • [        S5       Vs/ s HF  n[        R                  " [        R                  R                  S5      R                  SS5      5      PMH     nnUS   US   -   US   US   -  US   S-  US   -  -  -
  nU R                  UR                  S   S:H  =(       a    UR                  S   S:H  5        US   S-   US   S-
  -   US   S-  US   S-  -  US   S-  US   -  -  -
  nU R                  UR                  S   S:H  =(       a    UR                  S   S:H  5        U Vs/ s H  oCR                  U5      PM     nng s  snf s  snf )Nrg   r	   r   r   r   r   r   )
r   r   r‘   r1   r2   r3   r4   r"   rx   r   )r   r   ÚvsÚresÚvÚdrss         r   Ú	test_ndimÚTestCh.test_ndimÈ  s<  € Ü>CÀA¼hÓGºh¸Œb�eŠe”B—I‘I—O‘O AÓ&×.Ñ.¨q°Ó3Ö4¹hˆÐGØ�‰e�b˜‘e‰m˜b ™e b¨¡e™m¨r°!©u¸©z¸bÀ¹eÑ.CÑCÑCˆØ�‰˜Ÿ	™	 !™ a™×;¨C¯I©I°a©L¸!©OÔ<Ø�!‰u�q‰y˜R ™U Q™YÑ'¨2¨a©5°1©9¸¸A¹À¹Ñ*CÈÈ1ÉÐQRÉ
ÐWYÐZ[ÑW\ÑG\Ñ*\Ñ\ˆØ�‰˜Ÿ	™	 !™ a™×;¨C¯I©I°a©L¸!©OÔ<Ù&(Ó)¢b �z‰z˜!Ž}¡bˆÐ)ˆùò Hùò
 *s   ŽAE
Ä-Ec                 óD  • [         R                  " [        R                  " S5      R	                  S5      5      nUSS2SS24   nU R                  [        R                  " [        R                  " UR                  [        R                  " / SQ/ SQ/5      -
  5      5      S:H  5        US	   nU R                  [        R                  " [        R                  " UR                  [        R                  " S
S5      -
  5      5      S:H  5        U R                  [        R                  " [        R                  " [        R                  " UR                  U5      5      R                  [        R                  " S
S5      -
  5      5      S:H  5        US   nU R                  UR                  S   S:H  5        USSS	24   nU R                  [        R                  " [        R                  " UR                  [        R                  " SS/5      -
  5      5      S:H  5        UR                  U5      n[         R                  " S5      R	                  S5      S S2S S2S S24   nSUS'   U R                  US   R                  S   S:H  5        [         R                  " S5      R	                  S5      n[        R                  US'   U R                  [        R                  " UR                  S   5      5        U R!                  [        R                  " UR                  S   5      5        g )Nr™   rš   r   r   rg   )é	   r
   rf   )rŒ   r.   r   r   r   rR   é$   r  g      .@r	   rŒ   r.   r0   é@   )r   r   r   r�   )r   r   r	   r=  )r   r   )r   r   r  )r   r‘   r1   r    r4   r"   rZ   r[   r6   r   ÚspÚ
coo_matrixr   rº   ÚnanÚisnanr�   )r   ÚbigÚlittleÚ_r'   s        r   Útest_indexingÚTestCh.test_indexingÑ  s6  € Ü�eŠe”B—I’I˜b“M×)Ñ)¨&Ó1Ó2ˆØ�Q�q�S˜!˜A˜#�X‘ˆØ�‰œŸšœrŸvšv f§h¡h´·²º9ÂZÐ:PÓ1QÑ&QÓRÓSÐWXÑXÔYà�Q‘ˆØ�‰œŸšœrŸvšv f§h¡h´·²¸2¸rÓ1BÑ&BÓCÓDÈÑIÔJØ�‰œŸšœrŸvšv¤b§m¢m°F·M±MÀ#Ó4FÓ&G×&KÑ&KÌbÏiÊiÐXZÐ[]ÓN^Ñ&^Ó_Ó`ÐdeÑeÔfà�T‘ˆØ�‰˜Ÿ™ ™ tÑ+Ô,à�Q˜˜!˜�V‘ˆØ�‰œŸšœrŸvšv f§h¡h´·²¸2¸r¸(Ó1CÑ&CÓDÓEÈÑKÔLØ�]‰]˜3Óˆô �YŠY�uÓ×%Ñ% gÓ.¨r°¨r°"°1°"°R°a°R¨xÑ8ˆØˆˆ5‰	Ø�‰˜˜5™	Ÿ™ A™¨#Ñ-Ô.ô �YŠY�q‹\×!Ñ! %Ó(ˆÜ—&‘&ˆˆ3‰Ø�‰œŸš §¡ c¡Ó+Ô,Ø×ÑœŸš "§$¡$ s¡)Ó,Õ-r   c                 ó¢  • S HÉ  n[         R                  " S5      [         R                  " S5      p2X#-   nX#-   nXE-   S-  nXl        U R                  UR                  R                  UR                  R
                  L5        UR                  5         U R                  UR                  R                  UR                  R
                  L 5        MË     g )N©FTr
   re   r	   )r   r‘   ÚMTr"   r   r   Úremove_redundancy)r   rK  rÙ   Úx2Úx1_plus_x2_1Úx1_plus_x2_2Úredundant_sums          r   Útest_redundancy_removalÚTestCh.test_redundancy_removalí  sš   € ãˆBÜ—U’U˜2“Y¤§¢ b£	�Ø™7ˆLØ™7ˆLØ)Ñ8¸AÑ=ˆMØ!Ôà�O‰O˜MŸO™O×-Ñ-°]·_±_×5FÑ5FÐFÔGØ×+Ñ+Ô-Ø�O‰O˜MŸO™O×-Ñ-°·±×1BÑ1BÐBÖCò  r   c                 ó
  • / SQnS nU Vs/ s H  n[         R                  " U5      PM     nnU" U6 nUR                  nUR                  nU R                  XgL 5        US   R	                  SS9  UR                  nU R                  X‡L5        UR                  US   5      n	UR                  US   5      n
U R                  XšL 5        US   R	                  SS9  UR                  US   5      nU R                  XºL5        g s  snf )N)r
   re   rR   rß   r  c                 ó   • XU-  -   X4-  -
  $ rê   rë   ©r   r   r   ÚdÚes        r   rì   Ú%TestCh.test_caching.<locals>.<lambda>ý  ó   €  1¨A©¡;°±Ò#7r   r   r   rõ   r   r	   )r   r‘   r6   r"   Úsetr   )r   Úvalsr×   r8  ÚCsÚC_resultr‡   Úr2Úr3rj   r´   Údr3s               r   Útest_cachingÚTestCh.test_cachingú  së   € â#ˆÙ7ˆñ !%Ó%¢˜1Œb�eŠe�AŽh¡ˆÐ%Ù�b�6ˆð �Z‰ZˆØ�Z‰ZˆØ�‰˜˜Ô!ð 	ˆ1‰�	‰	�Aˆ	‰Ø�Z‰ZˆØ�‰˜˜Ô%ð �o‰o˜b ™eÓ$ˆØ�o‰o˜b ™eÓ$ˆØ�‰˜˜
Ô#ð 	ˆ1‰�	‰	�Aˆ	‰Ø�o‰o˜b ™eÓ$ˆØ�‰˜˜Õ'ùò+ &s   Œ D c           	      óÚ  •  SS K Jn  SSKJn  / SQnS nU Vs/ s H  n[        R
                  " U5      PM     nnU" U6 nUR                  SSSSS	5      nU" U6 n	U" X‰5      n
U R                  UR                  U
" U6 5        [        [        U5      5       HG  nU" X�R                  X˜U   5      5      " U6 nUR                  Xk   5      S
   nU R                  XÍ5        MI     g !    g = fs  snf )Nr   ©Úfunction)r   r	   r   r   r   c                 ó   • XU-  -   X4-  -
  $ rê   rë   rU  s        r   rì   Ú%TestCh.test_scalars.<locals>.<lambda>"  rY  r   ÚT1ÚT2ÚT3ÚT4ÚT5r  )Útheano.tensorÚtensorÚtheanore  r   r‘   Údscalarsr   r6   r   rÿ   Úgradr   )r   r³   re  r[  r×   r8  r\  r]  ÚTsÚTFÚT_resultÚkÚtheano_derivativeÚour_derivatives                 r   Útest_scalarsÚTestCh.test_scalars  sç   € ð	Ý%Ý'ò
 ˆÙ7ˆñ !%Ó%¢˜1Œb�eŠe�AŽh¡ˆÐ%Ù�b�6ˆð �Z‰Z˜˜d D¨$°Ó5ˆÙ�ˆVˆÙ˜BÓ#ˆð 	×Ñ˜Ÿ™¡X¨t _Ô5Ü”s˜4“yÖ!ˆAÙ (¨¯V©V°B¸1¹Ó->Ô ?ÀÐ FÐà%Ÿ_™_¨R©UÓ3°CÑ8ˆNà×ÑÐ.Ö?ò "øð%	Ùüò &s   ‚C! ™ C(Ã!C%c           
      óÌ  •  SS K Jn  SSKJn  S GH¿  n[	        S5       Vs/ s H"  n[
        R                  R                  S5      PM$     nnS nU Vs/ s H  n[        R                  " U5      PM     nnU" U6 n	X9l
        UR                  SSS	S
S5      n
U" U
6 nU" X«5      n [
        R*                  R-                  U	R.                  U" U6 5        [	        [1        U5      5       Hç  nU" X¡R3                  XºU   5      5      " U6 n[
        R4                  " U	R%                  UU   5      R7                  5       5      n[
        R8                  " [
        R:                  " [
        R<                  " UR?                  5       5      5      5      S   n[
        R*                  R-                  UR?                  5       U   UR?                  5       U   5        Mé     GMÂ     g !    g = fs  snf s  snf )Nr   rd  rJ  r   re   c                 ó   • XU-  -   X4-  -
  $ rê   rë   rU  s        r   rì   Ú%TestCh.test_vectors.<locals>.<lambda>C  s   €  q°©E¡{°Q±VÒ';r   rh  ri  rj  rk  rl  ) rm  rn  ro  re  r   r1   r2   r3   r   r‘   rK  ÚdvectorsÚtheano.gradientrr   Úgradientrq  ÚprintÚSumOfSquaresr   ÚpdbÚ	set_tracerÂ   rÃ   r6   rÿ   Újacobianr   rŸ   ÚnonzeroÚlogical_notrC  Úflatten)r   r³   re  rK  r   r[  r×   r8  r\  r]  rr  rs  rt  ro  rÄ   Ú
theano_sseÚtheano_gradÚ	theano_fnÚC_result_gradr‚  ru  rv  rw  Úwithout_nanss                           r   Útest_vectorsÚTestCh.test_vectors7  s�  € ð	Ý%Ý'ô  ˆBô 27°q´Ó:²¨A”B—I‘I—O‘O BÖ'±ˆDÐ:Ù;ˆAñ %)Ó)¢D˜q”"—%’%˜–(¡DˆBÐ)Ù˜"�vˆHØŒKð —‘˜D $¨¨d°DÓ9ˆBÙ�B�ˆBÙ Ó'ˆHàô" �J‰J×)Ñ)¨(¯*©*±hÀ°oÔFÜœ3˜t›9Ö%�Ù$,¨R·±¸BÀ1ÁÓ1FÔ$GÈÐ$NÐ!Ü!#§¢¨(¯/©/¸"¸Q¹%Ó*@×*HÑ*HÓ*JÓ!K�ô
  "Ÿzšz¬"¯.ª.¼¿ºÐBS×B[ÑB[ÓB]Ó9^Ó*_Ó`ÐabÑc�Ü—
‘
×-Ñ-Ð.?×.GÑ.GÓ.IÈ,Ñ.WÐYg×YoÑYoÓYqÐr~ÑYö  Aô &òE  øð	Ùüò
 ;ùò *s   ‚G ¡)GÁ G!ÇGrë   N)#Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r+   r9   r?   rI   rO   rb   rk   r‚   r‰   r–   r®   ÚunittestÚskiprµ   rÇ   rÛ   ræ   rñ   rø   r  r  r'  r3  r:  rG  rQ  ra  rx  r�  Ú__static_attributes__rë   r   r   r   r      s·   † òFò&3ò;òGò
ò8òQò6.ò WòH	;ò$'òP/ðD ‡]‚]Ð\Ó]ñ	(ó ^ð	(ò?ò(Rò(Zò	&òGò&?ò09òf:ò4Hò.*ò.ò8Dò(ò<@õ>2Ar   r   Ú__main__)Ú__doc__Útimer“  rü   r1   Úscipy.sparseÚsparser@  Ú r   ÚTestCaser   r�  Úmainrë   r   r   Ú<module>rž     sJ   ðñó ã Û Ý å ôX	AˆX×Ñô X	Aðv ˆzÓØ‡M‚M…Oð r   