
    eZ                        d dl Z d dlZd dlZd dlZd dlmZ d dlZd dlZd dlm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 d dlZd dl2m3Z3m4Z4m5Z5m6Z6 d dlm7Z7m8Z8m9Z9m:Z:m;Z;m<Z< d dl=Z=d dl=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZD d dlEmFZF d dlGZGeGjH        ZHejI        ZIeJZK G d d	eH          ZL G d
 deL          ZM G d deH          ZNdg dfgZOg ZP eQd          dgz   D ]ZRePS                    deRz             ePS                    deRz             ePS                    deRz             ePS                    deRz             ePS                    deRz             ePS                    deRz             ePS                    deRz             ePS                    deRz             eOS                    dePf           g ZTdD ]bZReTS                    deRz             eTS                    deRz             eTS                    deRz             eTS                    deRz             ceOS                    d eTf           g ZUd!D ]ZVeUS                    d"eVz             eOS                    d#eUf           g ZWd$D ]JZVeWS                    d%eVz             eWS                    d&eVz             eWS                    d'eVz             KeOS                    d(eWf           g ZXd)D ]ZYeXS                    d*eYz             eOS                    d+eXf           d, ZZ G d- d.e[          Z\d/ Z] G d0 d1eH          Z^ G d2 d3eH          Z_ G d4 d5eH          Z` G d6 d7eH          Za G d8 d9eH          Zb G d: d;eH          Zced<             Zd G d= d>eH          Ze G d? d@eH          ZfdLdAZg G dB dCeH          ZhdD ZidMdFZjdGej_k        dH ZlemdIk    r ei              eGjn        dJK           dS dS )N    N)contextmanager)(arrayarangeemptyzerosint32int64uint16complex_float64reccopy	ones_likewherealllinspacesumprodsqrtfmodfloorceilsincostanarcsinarccosarctanarctan2sinhcoshtanharcsinharccosharctanhloglog1plog10expexpm1conj)assert_equalassert_array_equalassert_array_almost_equalassert_allclose)shapeallclosearray_equalravelisnanisinf)ENumExprevaluatere_evaluatevalidatedisassembleuse_vml)ConstantNodec                       e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )test_numexprzTesting with 1 thread   c                 8    t          j        | j                   d S N)numexprset_num_threadsnthreadsselfs    :lib/python3.11/site-packages/numexpr/tests/test_numexpr.pysetUpztest_numexpr.setUp1   s    .....    c                 f   dt           j        z  dt           j        z  t           j        z  z   }dt          fdt          fdt          fg}t          ||          } |t          g d          t          g d          t          g d	                    }t          |t          g d
                     d S )N       @      @abc)	signature)      ?      )      @      )      @   	   g     U@g      _@g      e@)r6   rN   rO   rP   doubler7   r   r-   )rG   exsigfuncxs        rH   test_simpleztest_numexpr.test_simple4   s    13YqsQS(V}sFmc6];rS)))Dzzz""E***$5$5uZZZ7H7HII1e$5$5$56677777rJ   c                     t          t          j                  }t          d          } ||          }t	          ||           d S )N      Y@r7   r6   rN   r   r-   rG   r_   r`   ys       rH   test_simple_expr_small_arrayz)test_numexpr.test_simple_expr_small_array;   s=    qs||5MMDGG1a     rJ   c                     t          t          j                  }t          d          } ||          }t	          ||           d S )N    .Ard   re   s       rH   test_simple_exprztest_numexpr.test_simple_exprA   s=    qs||3KKDGG1a     rJ   c                 Z   t          t          j        dt          j        z  z   dt          j        z   dt          j        z  t          j        z  z   z            }t	          d          }t	          d          dz  }|d|z  z   d|z   d|z  |z  z   z  } |||          }t          ||           d S )NrL   r@      ri   皙?rS   )r7   r6   rN   rO   r   r.   )rG   r_   rN   rO   r`   rf   s         rH   test_rational_exprztest_numexpr.test_rational_exprG   s    cACiAGa!#gm,CDEE3KK3KK#QY1q51q519,-DAJJ!!Q'''''rJ   c           	      >   t          t          t          ddt          fg                    g d           t          t          t          ddt          fg                    g d           t          t          t          ddt          fg                    g d           t	          d          d	z   }t          t          d
          t          |dz   d                      t          t          d          t          |dz   d                     t          t          d          t          |d                     t          t          d          t          j
        |                     t          t          d          t          j        |d                     t          j        d                              dd          }t          t          d          t          |d                      t          t          d          t          |d                     t          t          d          t          |d                     t          d          }t          t          d          t          |dz  dz   d                     t          t          d          t          |dz  dz   d                     t          t          d          t          j
        |dz  dz   d                     t          t          d          t          j        |dz  dz   d                     t          d          }t          t          d          t          |dz  dz   d                     t          t          d          t          |dz
  d                     t          t          d          t          j
        |dz
  d                     t          t          d          t          j        |dz
  d                     t          d d!d"          }t          t          d          t          |dz  dz   d                     t          t          d          t          |dz
  d                     t          t          d          t          j
        |dz
  d                     t          t          d          t          j        |dz
  d                     t          d#                              d$d$          }t          t          d%          t          |dz  d                     t          t          d&          t          |dz  d                     t          t          d'          t          |dz  d                      t          t          d(          t          |dz  d                     t          t          d)          t          |dz  d                     t          t          d*          t          |dz  d                      t          t          d+          t          j
        |dz  d                     t          t          d,          t          j
        |dz  d                     t          t          d-          t          j
        |dz  d                      t          t          d.          t          j        |dz  d                     t          t          d/          t          j        |dz  d                     t          t          d0          t          j        |dz  d                      t          d          }|                    t                     }t          t          d          t          |dz  dz   d                     t          t          d          t          |dz  dz   d                     t          t          d          t          j
        |dz  dz   d                     t          t          d          t          j        |dz  dz   d                     |                    t                     }t          t          d          t          |dz  dz   d                     t          t          d          t          |dz  dz   d                     t          t          d          t          j
        |dz  dz   d                     t          t          d          t          j        |dz  dz   d                     |d1z   }t          t          d          t          |dz  dz   d                     t          t          d          t          |dz
  d                     d S )2Nzsum(x**2+2, axis=None)r`   )   mul_ddd   t3   r1[x]rs      add_dddrr   rr      c2[2.0])   sum_ddn   r0rr   Nzsum(x**2+2, axis=1))rp   rt   )rw   rx   rr   r@   zprod(x**2+2, axis=2))rp   rt   )s   prod_ddnrx   rr   rS   i g{Gz?zsum(x+2,axis=None)rS   axiszsum(x+2,axis=0)r   zprod(x,axis=0)zmin(x)zmax(x,axis=0)
   r@   zsum(x,axis=None)zsum(x,axis=0)zsum(x,axis=1)g      $@zsum(x**2+2,axis=0)zprod(x**2+2,axis=0)zmin(x**2+2,axis=0)zmax(x**2+2,axis=0)rc   zprod(x-1,axis=0)zmin(x-1,axis=0)zmax(x-1,axis=0)rm   rR   i        "@rT   zsum(y**2, axis=1)zsum(y**2, axis=0)zsum(y**2, axis=None)zprod(y**2, axis=1)zprod(y**2, axis=0)zprod(y**2, axis=None)zmin(y**2, axis=1)zmin(y**2, axis=0)zmin(y**2, axis=None)zmax(y**2, axis=1)zmax(y**2, axis=0)zmax(y**2, axis=None)y        ?)r,   r;   r7   r\   r   r/   r8   r   r   npminmaxr   reshaper   astypeintrG   r`   rf   s      rH   test_reductionsztest_numexpr.test_reductionsO   s   [,V}o>>@ @8 8 8	9 	9 	9
 	[)S&M?;;= =5 5 5	6 	6 	6
 	[*c6]O<<> >6 6 6	7 	7 	7 &MMC!566AE8M8M8MNNN!233SQQ5G5G5GHHH!122DOOODDD**BF1II6661126!!3D3D3DEEE IbMM!!!B''!344c!$6G6G6GIII113qq>>>CCC113qq>>>CCC4LL!566AFQJQ8O8O8OPPP!677a1fqjq9Q9Q9QRRR!566qAvzPQ8R8R8RSSS!566qAvzPQ8R8R8RSSS5MM!566AFQJQ8O8O8OPPP!344d1q5q6I6I6IJJJ!233RVAE5J5J5JKKK!233RVAE5J5J5JKKKS#t$$!566AFQJQ8O8O8OPPP!344d1q5q6I6I6IJJJ!233RVAE5J5J5JKKK!233RVAE5J5J5JKKK 3KK1%%!455s167J7J7JKKK!455s167J7J7JKKK!788#a1f4:P:P:PQQQ!566Q!V!8L8L8LMMM!566Q!V!8L8L8LMMM!8994QT;R;R;RSSS!455rva1f17M7M7MNNN!455rva1f17M7M7MNNN!788"&ad:S:S:STTT!455rva1f17M7M7MNNN!455rva1f17M7M7MNNN!788"&ad:S:S:STTT3KKHHSMM!566AFQJQ8O8O8OPPP!677a1fqjq9Q9Q9QRRR!566qAvzPQ8R8R8RSSS!566qAvzPQ8R8R8RSSSHHSMM!566AFQJQ8O8O8OPPP!677a1fqjq9Q9Q9QRRR!566qAvzPQ8R8R8RSSS!566qAvzPQ8R8R8RSSSG!566AFQJQ8O8O8OPPP!344d1q5q6I6I6IJJJJJrJ   c                    t          d                              dd          }t          d|           t          |t          d                              dd          dz              t          d          }t          d|           t          |t          d                              dd          t          d          dz   z             d S )	N     @i  r{   zx + 3outrT   z(x - 3) * y + (x - 3)r@   )r   r   r8   r,   r   s      rH   test_in_placeztest_numexpr.test_in_place   s    6NN""4,,a    Qv..tR881<===2JJ(a0000Qv..tR88F2JJNKLLLLLrJ   c                 d   t          d                              dd          }	 t          d           t          d          # t          $ r Y nw xY w	 t          d           t          d          # t          $ r Y nw xY w	 t          d           t          d          # t          $ r Y d S w xY w)Nr|   rT   zsum(y, axis=2)should raise exception!zsum(y, axis=-3)zsum(y, axis=-1))r   r   r8   
ValueError)rG   rf   s     rH   	test_axisztest_numexpr.test_axis   s    3KK1%%	8%&&& 6777  	 	 	D		8&''' 6777  	 	 	D		8&''' 6777  	 	 	DD	s5   A 
AAA2 2
A?>A?B! !
B/.B/c           	      p    t          t          t          ddt          fg                    ddg           d S )Nz	x * x + 2r`   )rq   rx   rs   rs   )ru   rx   rx   rv   )r,   r;   r7   r\   rF   s    rH   test_r0_reuseztest_numexpr.test_r0_reuse   sC    [V}o!F!FGG=<>	? 	? 	? 	? 	?rJ   c                 D    t          d          }t          |d           d S )Nzcontains(b"abc", b"ab")Tr8   r,   rG   ress     rH   test_str_contains_basic0z%test_numexpr.test_str_contains_basic0   s&    011S$rJ   c                 j    t          g d          }t          d          }t          |g d           d S )N   abc   def   xyzs   x11   zazcontains(haystack, b"ab")TFFFFr   r8   r,   rG   haystackr   s      rH   test_str_contains_basic1z%test_numexpr.test_str_contains_basic1   sA    @@@AA233S<<<=====rJ   c                 j    t          g d          }t          d          }t          |g d           d S )Nr   zcontains(b"abcd", haystack)r   r   r   s      rH   test_str_contains_basic2z%test_numexpr.test_str_contains_basic2   sA    @@@AA455S<<<=====rJ   c                     t          g d          }t          g d          }t          d          }t          |g d           d S )N)s   abckkks   adefr   s   x11abcpr   r   )r   r      aterr   oot   zus   abzcontains(haystacks, needles))TTFFFTr   )rG   	haystacksneedlesr   s       rH   test_str_contains_basic3z%test_numexpr.test_str_contains_basic3   s_    CCCE E	<<<> >566SAAABBBBBrJ   c                 j    t          g d          }t          d          }t          |g d           d S )N)r   r   r   r   r      ab c    abcs   abc #contains(b"test abc here", needles))TFFFFFTTr   rG   r   r   s      rH   test_str_contains_basic4z%test_numexpr.test_str_contains_basic4   sM        <==SOOOPPPPPrJ   c                 j    t          g d          }t          d          }t          |g d           d S )N)r   r   r   s    abc s   	abcs   c hr   )TFTTFTr   r   s      rH   test_str_contains_basic5z%test_numexpr.test_str_contains_basic5   sG    BBBD D<==S@@@AAAAArJ   c                     ddl m} g d}g d}t           |||                    }d |D             }d |D             }d |D             }d t          d	          D             }t	          ||           d S )
Nr   )product)zIt wzas thze Whitze Rabzbit,z trottingz slowly back zagain, andz lookinzg anxiouszly abouzt azs it wzent,z as izf itz had lostz somethizng; aznd she zheard zit mutterinzg to itszelf z'Thez Duchzess! Tzhe Ducheszs! Oh zmy deazr pawsz! Oh zmy fzur zand whiskezrs! Shez'll gzet mez execuzted, zas suzre azs ferrets are fr   z! Whzere CANz I havze droppezd tzhem,z I woznder?z' Alicez guessedz in az momzent thazt it wzas lookizng fzor zthe fazn and thez paizr of whitze kidz glovesz, and r   zvery goodz-naturedly bezgan huntingz aboutz for themz, butz they werze nowhzere toz bez sezen--everythinzg seemed zto zhave changr   sincez hezr swimz inz thez pool,r   z the gzreat halzl, with thze glzass tablze and r   z littlez doozr, hazd vanizshed completezly.)zIt wazs thez Wr   e Rabbzit, troztting slowlyr   agaizn, andz lookinzg anxiouslyz about zas it wzent, asz if zit hadz loszt somethingz; andz she hzeard zit mutterizng toz itselfz 'The Duchess! Thr   r   z! Oh mzy dezar pawsr   zOh my fuzr and whiskersz! She'zll getz me executezd,z azs suzre as ferretsr   zerrets!z Wherze CANz I hazve drozpped tr   z, I wonzder?' Azlice guessr   zin a momenzt thatz izt was lookzing fzor thr   zfan andr   ze pzair ozf whitze kizd glovezs, and zshe vzery zgood-naturedlr   zgan huntizng abouzt for thezm, buzt tzhey zwere nowherez to bze szeen-z-everythizng seemezd zto havez changedz sincze her szwim zin the zpool,z anzd the greazt hzall, wizth the glaszs tzable anzd thze littlze door,z had vanizshed completelzy.c                 .    g | ]}|d          |d         v S )r   r@    .0r`   s     rH   
<listcomp>z>test_numexpr.test_str_contains_listproduct.<locals>.<listcomp>  s$    ---aQqTQqT\---rJ   c                 B    g | ]}|d                                           S )r   encoder  s     rH   r  z>test_numexpr.test_str_contains_listproduct.<locals>.<listcomp>  $    &&&qQqT[[]]&&&rJ   c                 B    g | ]}|d                                           S r@   r  r  s     rH   r  z>test_numexpr.test_str_contains_listproduct.<locals>.<listcomp>  r  rJ   c                 ,    g | ]}t          |          S r
  )boolr  s     rH   r  z>test_numexpr.test_str_contains_listproduct.<locals>.<listcomp>  s    ;;;1tAww;;;rJ   zcontains(b, a))	itertoolsr   listr8   r,   )	rG   r   smallbigp	python_inrN   rO   r   s	            rH   test_str_contains_listproductz*test_numexpr.test_str_contains_listproduct   s    %%%%%%K K K*9 9 9* $$%%--1---	&&A&&&&&A&&&;;)9 : :;;;S)$$$$$rJ   c                 j    t          g d          }t          d          }t          |g d           d S )Nr   r   rJ   zcontains(b"abcd", withemptystr))TFTr   rG   withemptystrr   s      rH   test_str_contains_withemptystr1z,test_numexpr.test_str_contains_withemptystr1  sA    22233899S---.....rJ   c                 j    t          g d          }t          d          }t          |g d           d S )Nr  zcontains(withemptystr, b""))TTTr   r  s      rH   test_str_contains_withemptystr2z,test_numexpr.test_str_contains_withemptystr2!  sA    22233455S,,,-----rJ   c                 L    d}d}t          d          }t          |d           d S )Ns)   1aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaas(   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazcontains(a, b)Tr   )rG   rN   rO   r   s       rH   test_str_contains_long_needlez*test_numexpr.test_str_contains_long_needle&  s0    '((S$rJ   c                     d}t          ddg          }t          ddg          }t          d          }t          ||           d}t          d          }t          ||           d S )NTr@   rS   rT   rl   zwhere(a, b, c)Fr   r8   r-   )rG   rN   rO   rP   r   s        rH   test_where_scalar_boolz#test_numexpr.test_where_scalar_bool,  sl    1a&MM1a&MM'((3"""'((3"""""rJ   c                     t          dg          }t          j        |          dk    sJ t          d           t          j        |          dk    sJ d S )Nr@   rS   1)r   sysgetrefcountr8   rG   rN   s     rH   test_refcountztest_numexpr.test_refcount7  sV    1#JJq!!Q&&&&q!!Q&&&&&&rJ   c                 v    d                     g d          }t          j        t          j        d|g          }d S )N;)
zimport numexpr as neza=10zne.evaluate('1')a += 1zne.evaluate('2', local_dict={})r1  z ne.evaluate('3', global_dict={})r1  z/ne.evaluate('4', local_dict={}, global_dict={})r1  -cjoin
subprocess
check_callr+  
executable)rG   scriptchecks      rH   test_locals_clears_globalsz'test_numexpr.test_locals_clears_globals>  sE           %s~tV&DEErJ   N)__name__
__module____qualname____doc__rE   rI   ra   rg   rj   rn   r   r   r   r   r   r   r   r   r   r   r  r!  r#  r%  r(  r.  r:  r
  rJ   rH   r?   r?   -   s       H/ / /8 8 8! ! !! ! !( ( (NK NK NK`M M M8 8 8,? ? ?
     > > >
> > >
C C CQ Q QB B B2% 2% 2%h/ / /
. . .
     # # #' ' 'F F F F FrJ   r?   c                       e Zd ZdZdZdS )test_numexpr2zTesting with 2 threadsrS   N)r;  r<  r=  r>  rE   r
  rJ   rH   r@  r@  U  s          HHHrJ   r@  c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  e"j#                    vrd! Z$d" Z%d#S d#S )$test_evaluatec                     t          g d          }t          g d          }t          g d          }t          d          }t          |t          g d                     d S NrR   rL   rM   rU   g      @g      @rX   g       @r|   2*a + 3*b*cr[   r'  rG   rN   rO   rP   r`   s        rH   ra   ztest_evaluate.test_simple[  sg    ,,,,,,,,,]##1e$5$5$56677777rJ   c                 b    t          d          }t          d          }t          ||           d S )Nrc   r`   r   r8   r-   r   s      rH   rg   z*test_evaluate.test_simple_expr_small_arrayb  s.    5MMSMM1a     rJ   c                 b    t          d          }t          d          }t          ||           d S )Nri   r`   rK  r   s      rH   rj   ztest_evaluate.test_simple_exprg  s.    3KKSMM1a     rJ   c                     t          g d          }t          g d          }t          g d          }t          d          }t                      }t          |t          g d                     d S rD  r   r8   r9   r-   rI  s        rH   test_re_evaluateztest_evaluate.test_re_evaluatel  sp    ,,,,,,,,,]##MM1e$5$5$56677777rJ   c                     t          g d          }t          g d          }t          g d          }|||d}t          d|          }t          |          }t          |t          g d                     d S NrE  rF  rG  rN   rO   rP   rH  )
local_dictr[   rN  )rG   a1b1c1rS  r`   s         rH   test_re_evaluate_dictz#test_evaluate.test_re_evaluate_dictt  s    <<<  <<<  <<<  "2..
]z::::...1e$5$5$56677777rJ   c                     t          g d          }t          g d          }t          g d          }t          d          }|J t                      }t          |t          g d                     d S rD  r   r:   r9   r-   )rG   rN   rO   rP   retvalr`   s         rH   test_validateztest_evaluate.test_validate}  sy    ,,,,,,,,,-((~~~MM1e$5$5$56677777rJ   c                     t          g d          }t          g d          }t          d          }t          |t                    sJ d S )NrE  rF  rH  )r   r:   
isinstanceKeyError)rG   rN   rO   rZ  s       rH   test_validate_missing_varz'test_evaluate.test_validate_missing_var  sM    ,,,,,,-((&(++,,,,,rJ   c                 R    t          d          }t          |t                    sJ d S )Nz2+)r:   r]  SyntaxError)rG   rZ  s     rH   test_validate_syntaxz"test_evaluate.test_validate_syntax  s)    $&+../////rJ   c                     t          g d          }t          g d          }t          g d          }|||d}t          d|          }|J t          |          }t          |t          g d                     d S rQ  rY  )rG   rT  rU  rV  rS  rZ  r`   s          rH   test_validate_dictz test_evaluate.test_validate_dict  s    <<<  <<<  <<<  "2..
-J???~~~:...1e$5$5$56677777rJ   c                 4   t          dd          }t          t          d          |dz             t          t          dd          |dz             t          t          dd          |dz             t          t          dd	          |d
z             d S )Nr{   i4dtypezx/2rS   F)truedivautoTrL   r   r-   r8   rG   r`   s     rH   test_true_divztest_evaluate.test_true_div  s    2T"""8E??AE2228E59991q5AAA8E6:::AEBBB8E4888!c'BBBBBrJ   c                 h    t          dd          }t          t          d          |dz             d S )Nr{   rf  rg  zx<<2rS   rk  rl  s     rH   test_left_shiftztest_evaluate.test_left_shift  6    2T"""8F++Q!V44444rJ   c                 h    t          dd          }t          t          d          |dz	             d S )Nr{   rf  rg  zx>>2rS   rk  rl  s     rH   test_right_shiftztest_evaluate.test_right_shift  rp  rJ   c                     t          dd          }	 t          d           t          d          # t          $ r Y d S w xY w)Nr{   rf  rg  z(x > 1) and (x < 9)r   )r   r8   r   	TypeErrorrl  s     rH   test_boolean_operatorz#test_evaluate.test_boolean_operator  s]    2T"""	8*+++ 6777  	 	 	DD	s   1 
??c                     t          d          }t          d          dz  }|d|z  z   d|z   d|z  |z  z   z  }t          d          }t          ||           d S )Nri   rm   rS   r@   rl   z(a + 2*b) / (1 + a + 4*b*b))r   r8   r.   )rG   rN   rO   r`   rf   s        rH   rn   z test_evaluate.test_rational_expr  sd    3KK3KK#QY1q51q519,-233!!Q'''''rJ   c                     d }t          d          }t          d          dz  }|d|z  z   }|j        }t           |||                    j        |j        z   }t	          d          }t          ||           d S )Nc                 X    t          | j        t                    }| |_        ||_        |S )Nrg  )r   r0   r   realimagrR  s      rH   complexz0test_evaluate.test_complex_expr.<locals>.complex  s)    agX...AAFAFHrJ   r   h㈵>              ?z sin(complex(a, b)).real + z.imag)r   rz  r   ry  r8   r.   )rG   r{  rN   rO   zr`   rf   s          rH   test_complex_exprztest_evaluate.test_complex_expr  s    	 	 	 3KK3KK4QJF1#af,788!!Q'''''rJ   c                    t          d                              dd          d d d         }t          d                              dd          }t          t          d          ||z              t	          dgdt
          fdt          fg	          }t          d          |d<   |d                             d
           |d         }|d         }t          t          d          |           t          t          d          ||z              d S )Nd   r{   rS   2   rV   a+brV  c2rg  i  r   za0+c1)r   r   r-   r8   r   r   r
   fill)rG   rN   rO   rP   rV  a0s         rH   test_complex_stridesz"test_evaluate.test_complex_strides  s    3KKB''!,2JJq"%%8E??AE2222$e}tVn=>>>**$	$VtWqT8D>>2...8G,,b2g66666rJ   c                 \   t          d          }t          dd          }t          j                            d dd          }||d<   ||d<   |d         }t	          t          d          t          |          d	k               t	          t          d
          t          |                     d S )Nr     zf4,f4)r  )formatsr0   f0f1zsqrt(c) > 1.rR   zlog10(c))r   r}   r   r   r.   r8   r   r(   )rG   rN   rO   recarrrP   s        rH   test_recarray_stridesz#test_evaluate.test_recarray_strides  s    3KK3sOOdG6BBtt4L!(>":":DGGbLIII!(:"6"6aAAAAArJ   c                    t          d                              dd          d d d         }t          d          }t          d                              dd          }t          t          d          ||z              t          t          d          ||z              t	          dd	t
          fd
t
          fg          }t           |||          d|z  d|z  z              d S )Nr  r{   rS   rV   r@   za+cza+dz2.0*a+3.0*crN   rP   rL   rM   )r   r   r-   r8   r7   r\   )rG   rN   rP   dexprs        rH   test_broadcastingztest_evaluate.test_broadcasting  s    3KKB''!,2JJ1IIa##8E??AE2228E??AE222}V}sFm&DEE441::sQwq'899999rJ   c                     d}d}t          t          d          ||z              t          ddt          fdt          fg          }t	           |||          d|z  d|z  z              d S )	NrM   rU   r  2*a+3*brN   rO   rS   rT   )r/   r8   r7   r\   r,   rG   rN   rO   r  s       rH   test_all_scalarztest_evaluate.test_all_scalar  sn    Q///yC=3-"@AATT!QZZQQ/////rJ   c                    t          d                              dd          d d d         }t          d          }t          ddt          fdt          fg          }t	           |||          |                    ||                     d S )Nr  r{   rS   r  rN   rO   )r   r   r7   r\   r-   runr  s       rH   test_runztest_evaluate.test_run  s{    3KKB''!,2JJyC=3-"@AA441::txx1~~66666rJ   c                     t          d          }	 t          d           |                                  d S # t          t          f$ r Y d S w xY w)NrT   za < [0, 0, 0])r   r8   failr   rt  r-  s     rH   test_illegal_valuez test_evaluate.test_illegal_value  s\    1II	_%%% IIKKKKK I& 	 	 	DD	s   6 A
Ac                    t          dd          5  	 t          d           |                                  n# t          $ r Y nw xY w	 t          d           |                                  n# t          $ r Y nw xY w	 t          d           |                                  n# t          $ r Y nw xY w	 t          d           |                                  n# t          $ r Y nw xY w	 t          d           |                                  n# t          $ r Y nw xY w	 t          d           |                                  n# t          $ r Y nw xY wd	}t          d
           t          d           t          d           t          d           t          d           t          d           t          d           t          d           d}t          d           t          d           d d d            d S # 1 swxY w Y   d S )NNUMEXPR_SANITIZEr*  __builtins__zlambda x: xzlocals()["evaluate"]
import os;zos. cpu_count()u   (3+1).ᵇit_length()rM   za*2.e-5za*2.e+5za*2e-5za*2e+5za*2E-5za*2.0e5za*2.2e5z2.+ay      @      ?zc.realzc.imag)_environmentr8   r  r   )rG   rN   rP   s      rH   test_sanitizeztest_evaluate.test_sanitize   s   ,c22 @	 @	((( 		    ''' 		    /000 		    &&& 		    *+++ 		    /000 		     AYYXXXYYV AXXA@	 @	 @	 @	 @	 @	 @	 @	 @	 @	 @	 @	 @	 @	 @	 @	 @	 @	s   G77G7
AG7AG7A,G7,
A96G78A99G7=B!G7!
B.+G7-B..G72CG7
C# G7"C##G7'D6G7
DG7DG7E +G7 
E
G7EBG77G;>G;c                 4   	 t          dd           |                                  n# t          $ r Y nw xY wt          dd          5  	 t          dd            |                                  n# t          $ r Y nw xY wd d d            d S # 1 swxY w Y   d S )Nr  F)sanitizer  0)r8   r  ra  r  rF   s    rH   test_no_sanitizeztest_evaluate.test_no_sanitizeD  s   	\E2222 IIKKKK  	 	 	D	
 ,c22 	 	5555 		    	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sB   ( 
55B
A0B0
A=:B<A==BBBc           
          t          t          t          ddt          fdt          fg                    g dg dg           d S )Nzwhere(m, a, -1)mrN   )s
   where_fbffrx   s   r1[m]s   r2[a]s   c3[-1.0])s   noopNNN)r,   r;   r7   r  floatrF   s    rH   test_disassembleztest_evaluate.test_disassembleT  s_    [dc5\:"< "< = =DDD(((*	+ 	+ 	+ 	+ 	+rJ   c                 f    t          t          ddt          j        fg          j        d           d S )Nz(a + 1)*(a - 1)rN   r  )r,   r7   r}   r   	constantsrF   s    rH   test_constant_deduplicationz)test_evaluate.test_constant_deduplicationZ  s/    W.#rx0ABBLdSSSSSrJ   c           	      v   t          t          t          t          d                    j                  d           t          t          d                    }t
          j        |z   t
          j        |z   z  }t          t          |dt          fdt          fg          j
        t          d          f           d S )NnanrN   rO   )r,   strr=   r  valuer6   rN   rO   r7   r\   r  )rG   _nanr  s      rH   test_nan_constantztest_evaluate.test_nan_constant]  s    SeEll339::EBBB E%LL))d
QS4Z(WTS&MC=#ABBLuUZ||o^^^^^rJ   c           	      0   t          t          t          j        d                    j        d           t          t          t          j        d                    j        d           t          t          t          j        d                    j        j        t          j        d                     t          t          t          t          j        d                              	                                t          j
        dd                     d S )Nr@   r  r  rT   float32rg  )r,   r=   numpyr  astKindr  rh  r-   r7   r  r   rF   s    rH   test_f32_constantztest_evaluate.test_f32_constantf  s    \%-"2"233;WEEE\%-"6"677?III\%-"2"2339?YAWAWXXX7<a0@0@#A#ABBFFHH ;q	:::	< 	< 	< 	< 	<rJ   c                     t          j        dt           j                  dd                              t           j                  }t          d|           t          |d           d S )NrV   rg  r@   3r   rT   )r}   r   uint8viewr   r8   r,   r-  s     rH   test_unaligned_singletonz&test_evaluate.test_unaligned_singletonm  s\     HQbh'''+00::!QrJ   c                    t          j        g dt           j                  }t          j        g dt           j                  }t          d          }t	          |t          j        ||                     |                    t           j                  }|                    t           j                  }t          d          }t	          |t          j        ||                     d S )N)iiyr   r      i  rg  )r  r  h  r  r  za % nzb % m)r}   r   r   r8   r,   modr   r	   )rG   rN   nout_irO   r  out_ls          rH   test_negative_modztest_evaluate.test_negative_modt  s     H111BBBH666bhGGG!!UBF1aLL)))HHRXHHRX!!UBF1aLL)))))rJ   c                 V   t          j        g dt           j                  }t          d          }t	          |t          j        |d                     t          j        g dt           j                  }t          d          }t	          |t          j        |d                     d S )N)r   r@   rS   rT   rg  zbase ** -1.0g      )r}   r   r   r8   r,   powerr	   )rG   baser  r  s       rH   test_negative_power_scalarz(test_evaluate.test_negative_power_scalar  s     x,,,BH===((UBHT400111x,,,BH===((UBHT40011111rJ   c                     g d}|D ]@}|dz   }t           j                            |i           \  }}t          |t          |           Ad S )N)r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   absr+   r   r   z(a))rC   
necompilergetExprNamesr,   r<   )rG   	vml_funcsr_   strexpr_ex_uses_vmls         rH   test_ex_uses_vmlztest_evaluate.test_ex_uses_vml  sh    ) ) )	  	8 	8D5jG$/<<WbIINA{gw7777	8 	8rJ   sparcc                     t          ddd          }d|z  dz   |z  dz
  |z  dz
  }t          dd          D ]5}t          j        |           t	          d	          }t          ||           6d S )
Nr  r@   @B       ?      ?      ?rS      ((.25*a + .75)*a - 1.5)*a - 2r   rangerC   rD   r8   r.   rG   rN   rO   rE   rP   s        rH   test_changing_nthreads_00_incz+test_evaluate.test_changing_nthreads_00_inc  s    Q((A'C-1$s*a/!3A!!QKK 0 0'111<==)!Q////0 0rJ   c                     t          ddd          }d|z  dz   |z  dz
  |z  dz
  }t          ddd          D ]5}t          j        |           t	          d	          }t          ||           6d S )
Nr  r@   r  r  r  r  rS   rW   r  r  r  s        rH   test_changing_nthreads_01_decz+test_evaluate.test_changing_nthreads_01_dec  s    Q((A'C-1$s*a/!3A!!QOO 0 0'111<==)!Q////0 0rJ   N)&r;  r<  r=  ra   rg   rj   rO  rW  r[  r_  rb  rd  rm  ro  rr  ru  rn   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  platformmachiner  r  r
  rJ   rH   rB  rB  Z  s4       8 8 8! ! !
! ! !
8 8 88 8 88 8 8- - -0 0 08 8 8C C C5 5 55 5 58 8 8( ( (( ( (
7 
7 
7B B B: : :0 0 07 7 7  A A AH   + + +T T T_ _ _< < <  * * *	2 	2 	28 8 8 &h&((((	0 	0 	0	0 	0 	0 	0 	0 )(rJ   rB  MISC)zb*c+d*er  -azsinh(a)z2*a + (cos(3)+5)*sinh(cos(b))z2*a + arctan2(a, b)zarcsin(0.5)zwhere(a != 0.0, 2, a)zwhere(a > 10, b < a, b > a)zwhere((a-10).real != 0.0, a, 2)z 0.25 * (a < 5) + 0.33 * (a >= 5)zcos(1+1)z1+1r*  zcos(a2)z+-*/%z**z(a+1) %s (b+3)z
3 %s (b+3)z
(a+1) %s 4z
2 %s (b+3)z
(a+1) %s 2z(a+1) %s -1z(a+1) %s 0.5z
(a+1) %s 0
OPERATIONS)<z<=z==z>=>z!=z
a/2+5 %s bz
a/2+5 %s 7z7 %s bz7.0 %s 5COMPARISONS)r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r  r+   r   r   za + %s(b+c)1_ARG_FUNCS)r   r   za + %s(b+c, d+1)za + %s(b+c, 1)za + %s(1, d+1)2_ARG_FUNCS)ig      g      gg      r   g        r@   gffffff@g      @rT   z	(a+1)**%s	POW_TESTSc                    t          | |          rdS t          | d          r| j        dv rt          |                                           }|dk    r%|t          |                                          k    S t          |                                           }|dk    r%|t          |                                          k    S |rOt          |           t          |          k    o.t          t          |           t          |          k    d          S t          | d          r| j        dk    rd}nd}t          |           t          |          k    o+t          t          |           t          |          |	          S )
NTrh  )f4f8r   ry   r  r|  g:0yE>)atol)
r2   hasattrrh  r4   r   r5   r0   alltruer3   r1   )rN   rO   exactnnansninfsr  s         rH   equalr    sI   1a tq' +qw,66a199
 E!HHLLNN**a199E!HHLLNN** 9aE!HH$O'%((eAhh2FQ*O*O*OO1g 	17d??DDDaE!HH$ 8q588$777	9rJ   c                       e Zd ZdS )SkipNr;  r<  r=  r
  rJ   rH   r  r    s          rJ   r  c               #     K   dgfd} d }dD ]d}t           t           t          j        t          t          fD ]:}d}t          d|z  |          d d d         }t          ||g|          }t          ||          |z  }t          ||          }t          ||          }	t          ||          }
|t          k    r|j        }||||	|
fD ]}|dz  }|dz  }|d	k    r||dz           }|dk    r||dz           }d
D ]s\  }}t          D ]f\  }}|D ]^}|t          k    rd|v sd|v sd|v sd|v sd|v sd|v sd|v r*|t           t           fv r	|r|dk    rC | |||||	|
|||||||          }|V  _gt<fd S )Nr   c                   	
 t                      	
fd}ddd	j        d
dd|_        dxx         d	z  cc<   d
	j        
                    d          |                    d          d         fz  |_        |S )Nc                  v   	 t          j        d           t          	t                                } t          j        d           t          	t                                } d }n# t          $ r}|}d } Y d }~nd }~ww xY w	 t          	
          }d	}|
J |            t          | |          sdJ 	ddj        d
dd	| d
t          |           dt          |           d|d
t          |          dt          |          d            d S # t          $ r  t          $ r t          d	j        
fz             Y d S t          $ rL}t          t          |          t          |                    }||st          d	            Y d }~d S d }~w t          d	            xY w)Nignorealways)rS  optimizationz1expected numexpr error not raised for expression z
(test_scalar=, dtype=, optimization=, exact=z	,
 npval=z (z - z	)
 neval=z))z-%r not implemented for %s (scalar=%d, opt=%s)znumexpr error for expression )warningssimplefilterevalglobals	Exceptionr8   r  r;  typer0   AssertionErrorNotImplementedErrorprint
issubclass)npvalnp_exceptionr]   nevalmsgne_exceptionsame_exc_typerh  r  r  r  test_scalarthis_localss          rH   methodz:test_expressions.<locals>.make_test_method.<locals>.method  sv   $ %h///T799k::%h///T799k::  $      "R +.:< < <$  $t&#++S+++UE511 R R04kkk5>>>0<eee05tE{{{{E%LLLL05tE{{{{E%LLLL4R R R R R R' "   & K K KEu~{LIJ K K K K K K    *4+=+=+/+=+=!? !?'}'EttEFFF ('''''44ABBBs7   A"A( (
B 2A;;B D /F8	F8AF  F8ztest_expressions(z, test_scalar=r  r  r  )r   r@   ztest_scalar%d_%s_%s_%s_%04dascii)localsr;  descriptionr  )rN   a2rO   rP   r  er`   r  r  rh  r  r  sectionr  r  test_nos          `````  @rH   make_test_methodz*test_expressions.<locals>.make_test_method
  s    hh,	R ,	R ,	R ,	R ,	R ,	R ,	R ,	R ,	R ,	R ,	R^ JN{{{\a\j\j\jlxlxlxzzzA


a


7;;@>;G;N;Nw;W;W;B>>';R;R;B1:	;G G
 rJ   )r   r@   rS   r  rS   rg  r}  y      ?      ?r@   ))noneF)moderateF)
aggressiveFr  r  %r   r   r   r   z(a+1) ** -1)	r   r}   r  r\   r{  r   r   ry  tests)r   r`   r  rh  
array_sizerN   r  rO   rP   r  r  r  r  section_namesection_testsr  r  r  s                    @rH   test_expressionsr)    sY     cG: : : : :x 	A  %  % 3
FG< $	  $	 EJq:~U333CCaC8A
J/u===Bz///*<Az///Az///Az///AFaAq)    AGAKAAajAo&ajAo&(M    #e38    /L- -    !W,, D[[C4KK3$;; )T 1 1Vt^^ '46T>> %!c3Z//K/$(M$9$9$,,QAq!Q-1;-95-9; ;  !   #$	 %  % rJ   c                       e Zd Zd ZdS )
test_int64c                     t          g dt                    }t          d          }t          |g d           |                     |j        j        d           d S )N)il        l        l    rg  r  )i  i   l     l r	   )r   r	   r8   r-   assertEqualrh  namerG   rN   r   s      rH   test_negztest_int64.test_negp  s]    >>>eLLLtnn3 R R RSSS11111rJ   N)r;  r<  r=  r0  r
  rJ   rH   r+  r+  o  s#        2 2 2 2 2rJ   r+  c                   &    e Zd Zd Zd Zd Zd ZdS )test_int32_int64c                     t          d          }t          |d           |                     |j        j        d           d S )N2rS   r   r8   r-   r-  rh  r.  r   s     rH   test_small_intztest_int32_int64.test_small_inty  s=    smm3"""11111rJ   c                     t          d          }t          |d           |                     |j        j        d           d S )Nz2**40l        r	   r5  r   s     rH   test_big_intztest_int32_int64.test_big_int  s?    w3(((11111rJ   c                 ~   t          dd          }t          j        d          }t          j        d          }|dz  }t	          d          }t	          d          }t          ||           t          ||           |                     |j        j        d           |                     |j        j        d           d S )Nr  r   rg  rS   zint32array * itwozint32array * ltwor	   )	r   r}   r   r	   r8   r-   r-  rh  r.  )rG   
int32arrayitwoltwor   res32res64s          rH   test_long_constant_promotionz-test_int32_int64.test_long_constant_promotion  s    Cw///
x{{x{{1n,--,--3&&&3&&&)7333)733333rJ   c                     t          dd          }t          dd          }||z  }t          d          }t          ||           |                     |j        j        d           d S )Nr  r   rg  r	   zint32array * int64arrayr   r8   r-   r-  rh  r.  )rG   r:  
int64arrayrespyresnxs        rH   test_int64_array_promotionz+test_int32_int64.test_int64_array_promotion  so    Cw///
Cw///
Z'2335%((()733333rJ   N)r;  r<  r=  r6  r8  r?  rE  r
  rJ   rH   r2  r2  w  sP        2 2 22 2 2
4 
4 
44 4 4 4 4rJ   r2  c                        e Zd Zd Zd Zd ZdS )test_uint32_int64c                     t          j        d          }t          d          }t          |d           |                     |j        j        d           d S )N*   rN   r	   )r}   uint32r8   r-   r-  rh  r.  r/  s      rH   test_small_uint32z#test_uint32_int64.test_small_uint32  sJ    IbMMsmm3###11111rJ   c                 ~   t          dd          }t          j        d          }t          j        d          }||z  }t	          d          }t	          d          }t          ||           t          ||           |                     |j        j        d           |                     |j        j        d           d S )Nr  r   rg  rS   zint32array * stwozint32array * utwor	   )	r   r}   r   rJ  r8   r-   r-  rh  r.  )rG   r:  stwoutwor   r=  r>  s          rH   test_uint32_constant_promotionz0test_uint32_int64.test_uint32_constant_promotion  s    Cw///
x{{y||4,--,--3&&&3&&&)7333)733333rJ   c                     t          dd          }t          dd          }||z  }t          d          }t          ||           |                     |j        j        d           d S )Nr  rJ  rg  r	   zuint32array * int64arrayrA  )rG   uint32arrayrB  rC  rD  s        rH   rE  z,test_uint32_int64.test_int64_array_promotion  so    S111Cw///
j(3445%((()733333rJ   N)r;  r<  r=  rK  rO  rE  r
  rJ   rH   rG  rG    sA        2 2 2
4 
4 
44 4 4 4 4rJ   rG  c                       e Zd ZdZdZg dZg dZ ee          eez   dz   z  Z e	eez            Z
 e	eez            ZdZd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd ZdS )test_strings   rY   )   foos   barrJ   s     )rU  rJ      x    r@   s   doodooc                     g d}|D ]9}t          d          }|                     ||                                           :d S )N)s      s     foo s     foo bs     foo b s   foo s   foo bs   foo b s   foo bar baz  s)r8   r-  tobytes)rG   str_listrY  rs       rH   test_null_charsztest_strings.test_null_chars  s]    D D D  	- 	-AAQ		,,,,	- 	-rJ   c                 t    | j         }d}t          |          }t          |          }t          ||           d S )Nsarr)
str_array1r  r8   r-   rG   r_  r  res1res2s        rH   test_compare_copyztest_strings.test_compare_copy  s:    Dzz~~4&&&&&rJ   c                     | j         }| j        }d}t          |          }t          |          }t	          ||           d S )Nzsarr1 >= sarr2)r`  
str_array2r  r8   r-   )rG   sarr1sarr2r  rb  rc  s         rH   test_compare_arrayztest_strings.test_compare_array  sA    Dzz~~4&&&&&rJ   c                     | j         }| j        }d}t          |          }t          |          }t	          ||           d S )Nzsarr >= svarr`  str_constantr  r8   r-   )rG   r_  svarr  rb  rc  s         rH   test_compare_variablez"test_strings.test_compare_variable  sB     Dzz~~4&&&&&rJ   c                     | j         }d| j        z  }t          |          }t          |          }t	          ||           d S )Nz
sarr >= %rrk  ra  s        rH   test_compare_constantz"test_strings.test_compare_constant  sB    d//Dzz~~4&&&&&rJ   c                 l    | j         }| j        }d}|                     d|t                                 d S )Nzsarr1 + sarr2add_sss)r`  rf  assert_missing_opr  )rG   rg  rh  r  s       rH   test_add_string_arrayz"test_strings.test_add_string_array  s7    y$99999rJ   c                 *   t          j        ddg          }t          j        ddg          }t          d          }t          |t          j        ddg                     t          d          }t          |t          j        ddg                     d S )NrJ      pepe   pepe2(a == b'') & (b == b'pepe2')TF(a == b'pepe') & (b == b'')r}   r   r8   r-   rG   rN   rO   r   rc  s        rH   test_empty_string1ztest_strings.test_empty_string1  s    Hc7^$$Hh_%%5663$ 7 788856645$-!8!899999rJ   c                 *   t          j        ddg          }t          j        ddg          }t          d          }t          |t          j        ddg                     t          d          }t          |t          j        ddg                     d S )N   prv  rw  rJ   rx  Fry  rz  r{  s        rH   test_empty_string2ztest_strings.test_empty_string2  s    HdG_%%Hh_%%5663% 8 89995663% 8 899999rJ   c                     | j         }t          t          |          d          }d}|                     d|t	                                 d S )Nr   rg  zsarr >= narrge_bsi)r`  r   lenrs  r  )rG   r_  narrr  s       rH   test_add_numeric_arrayz#test_strings.test_add_numeric_array  sH    c$iiw///xvxx88888rJ   c                     d|z  }	 t          ||           |                     |           d S # t          $ r8}d|z  |j        d         vr|                     |           Y d }~d S Y d }~d S d }~ww xY w)Nz+expected NotImplementedError regarding '%s'z'%s'r   )r8   r  r  args)rG   opr  rS  r  nies         rH   rs  ztest_strings.assert_missing_op  s    ;b@	T:&&&
 IIcNNNNN	 # 	 	 	{#(1+--		# .-----	s   . 
A0'A++A0c                    dD ]\  }}|                      t          d                     |                      t          d                     |                      t          d                     |                      t          d                     |                      t          d                     d\  }}|                      t          d                     d S )	N))rU  s   foobar)rU     foo bar)s   foo ar  zs1 < s2zs1 <= s2z~(s1 == s2)z~(s1 >= s2)z
~(s1 > s2))rU  s   foo  zs1 == s2)
assertTruer8   )rG   s1s2s      rH   test_compare_prefixz test_strings.test_compare_prefix  s    1 	4 	4FBOOHY//000OOHZ00111OOH]33444OOH]33444OOH\223333 $B,,-----rJ   N)r;  r<  r=  BLOCK_SIZE1BLOCK_SIZE2	str_list1	str_list2r  
str_nloopsr   r`  rf  rl  r]  rd  ri  rn  rp  rt  r|  r  r  rs  r  r
  rJ   rH   rS  rS    s"       KK,,,I)))IY;#<q#@AJy:-..Jy:-..JL- - -' ' '' ' '' ' '' ' ': : :: : :: : :9 9 9  . . . . .rJ   rS  c                       e Zd Zd ZdS )test_irregular_stridec                    t          dt                    }t          dt                    }t          j        ||g          }|d         }|d         }t          d          }t          d          }t          ||         t          dt                               t          ||         t          dt                               d S )Nr{   rg  r  r  zf0 < 5zf1 < 5rV   )r   r   r   r   
fromarraysr8   r-   )rG   r  r  	irregulari0i1s         rH   test_selectz!test_irregular_stride.test_select$  s    Be$$$Bg&&&NB8,,	t_t_hh2b66!5#9#9#9:::2b66!7#;#;#;<<<<<rJ   N)r;  r<  r=  r  r
  rJ   rH   r  r  #  s#        = = = = =rJ   r  c                       e Zd Zd Zd ZdS )test_zerodimc                     t          g t                    }t          g t                    }t          d          }t          d          }t	          ||           t	          ||           d S )Nrg  a0 + a1a0 * a1)r   r   r   r8   r-   rG   r  rT  r0r1s        rH   test_zerodim1dztest_zerodim.test_zerodim1d6  sf    2U###2W%%%i  i  2r"""2r"""""rJ   c                 .   t          g t                                        ddd          }t          g t                                        ddd          }t	          d          }t	          d          }t          ||           t          ||           d S )Nrg  r   rS   rl   r  r  )r   r   r   r   r8   r-   r  s        rH   test_zerodim3dztest_zerodim.test_zerodim3d@  s    2U###++Aq!442W%%%--aA66i  i  2r"""2r"""""rJ   N)r;  r<  r=  r  r  r
  rJ   rH   r  r  5  s2        # # ## # # # #rJ   r  c              #      K   t           j                            |           }|t           j        | <   	 d V  |r|t           j        | <   d S t           j        | = d S # |r|t           j        | <   nt           j        | = w xY wrB   )osenvironr   )keyr  olds      rH   r  r  K  s      
*..

CBJsO  	 !BJsOOO
3  	 !BJsOO
3s   A !A9c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )test_threading_configc                 v    d                     g d          }t          j        t          j        d|g           d S )N
)	import oszMif 'NUMEXPR_MAX_THREADS' in os.environ: os.environ.pop('NUMEXPR_MAX_THREADS')zEif 'OMP_NUM_THREADS' in os.environ: os.environ.pop('OMP_NUM_THREADS')import numexprzassert(numexpr.nthreads <= 8)exit(0)r2  r3  rG   r8  s     rH   test_max_threads_unsetz,test_threading_config.test_max_threads_unsetY  sH           	s~tV<=====rJ   c                 v    d                     g d          }t          j        t          j        d|g           d S )Nr  )r  z'os.environ['NUMEXPR_MAX_THREADS'] = '4'r  z assert(numexpr.MAX_THREADS == 4)r  r2  r3  r  s     rH   test_max_threads_setz*test_threading_config.test_max_threads_sete  sH           	s~tV<=====rJ   c                 p   t          dd          5  t          dd          5  dt          j                    v r(|                     dt	          j                               n'|                     dt	          j                               d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NOMP_NUM_THREADS5NUMEXPR_NUM_THREADSr  r  r@   rT   r  r  r  r-  rC   _init_num_threadsrF   s    rH   test_numexpr_num_threadsz.test_threading_config.test_numexpr_num_threadsp  sW   +S11 	F 	F3S99 F Fx/1111%%a)B)D)DEEEE%%a)B)D)DEEE	F F F F F F F F F F F F F F F	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	Fs5   B+A%BB+B	B+B	B++B/2B/c                     t          dd          5  dt          j                    v r(|                     dt	          j                               n'|                     dt	          j                               d d d            d S # 1 swxY w Y   d S )Nr  r  r  r@   rV   r  rF   s    rH   test_omp_num_threadsz*test_threading_config.test_omp_num_threadsy  s    +S11 	A 	A(*,,,,  G$=$?$?@@@@  G$=$?$?@@@		A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	As   A%BB
Bc                    d}t           rUt          j                            |           t          j                                        }|                     ||           d S |                     t          j                            |                     |                     t          j                                                   d S )NrT   )r<   rC   utilsset_vml_num_threadsget_vml_num_threadsr-  assertIsNone)rG   	n_threadsset_threadss      rH   test_vml_threads_round_tripz1test_threading_config.test_vml_threads_round_trip  s    	 	CM--i888!-;;==KY44444gm??	JJKKKgm??AABBBBBrJ   N)r;  r<  r=  r  r  r  r  r  r
  rJ   rH   r  r  X  sj        
> 
> 
>	> 	> 	>F F FA A AC C C C CrJ   r  c                       e Zd Zd Zd ZdS )test_threadingc                     dd l } G d d|j                  } |            }|                                 |                                 d S )Nr   c                       e Zd Zd ZdS ).test_threading.test_thread.<locals>.ThreadTestc                 |    t          d          }t          t          d          t          g d                     d S )NrT   za**3)r   r@   rY   )r   r-   r8   r   r-  s     rH   r  z2test_threading.test_thread.<locals>.ThreadTest.run  s7    1II"8F#3#3U9995E5EFFFFFrJ   N)r;  r<  r=  r  r
  rJ   rH   
ThreadTestr    s(        G G G G GrJ   r  )	threadingThreadstartr4  )rG   r  r  tests       rH   test_threadztest_threading.test_thread  sn    	G 	G 	G 	G 	G) 	G 	G 	G
 z||

		rJ   c                     dd l d  d           d}fdt          |          D             }|D ]}|                                 |D ]}|                                 d S )Nr   c                 B    t          |           }t          d           d S )Nza+a)r   r8   )r  rN   s     rH   workz-test_threading.test_multithread.<locals>.work  s    q		AUOOOOOrJ   r{      c                 >    g | ]}                     d           S ))g     j@targetr  )r  )r  ir  r  s     rH   r  z3test_threading.test_multithread.<locals>.<listcomp>  s<     - - - ##4f#== - - -rJ   )r  r  r  r4  )rG   rE   threadstr  r  s       @@rH   test_multithreadztest_threading.test_multithread  s    	 	 	 	R- - - - -!(OO- - - 	 	AGGIIII 	 	AFFHHHH	 	rJ   N)r;  r<  r=  r  r  r
  rJ   rH   r  r    s2        
 
 
    rJ   r  c                 ~    t          j        d          }t          d          }| |                     d           d S d S )Ng     @@zra > 0Done)r}   r   r8   put)qoutrarowss      rH   _workerr    sB    	3BHD rJ   c                       e Zd Zd ZdS )test_subprocessc                 8   	 dd l }n# t          $ r Y d S w xY wt          j        d           t	                       |                                }|                    t          |f          }d|_        |                                 |	                                }d S )Nr   rS   r  T)
multiprocessingImportErrorrC   rD   r  QueueProcessdaemonr  r   )rG   mpr  psresults        rH   test_multiprocessz!test_subprocess.test_multiprocess  s    	((((( 	 	 	FF	 	"""			xxzzZZwdWZ55	



s    
N)r;  r<  r=  r  r
  rJ   rH   r  r    s#            rJ   r  c                     ddl m}  ddl}t          d           t          dt          j        z             t          dt          j        z             t          dt          j        z              |j	                    \  }}}}}}t          dt          j        d	|d	|           	 | j
        d         }t          d
|                    dd          z             t          d|                    dd          z             t          d|                    dd          z             n# t          $ r Y nw xY wt          dt          z             t          r#t          dt	          j                    z             t          dt          j        t          j        fz             t          dt          j        z             t          d           dS )z6Print the versions of software that numexpr relies on.r   )cpuNzL-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=zNumexpr version:   %szNumPy version:     %szPython version:    %szPlatform:          -zCPU vendor:        %sVendorIdentifier zCPU model:         %sProcessorNameStringzCPU clock speed:   %s MHzz~MHzzVML available?     %szVML/MKL version:   %sz@Number of threads used by default: %d (out of %d detected cores)zMaximum number of threads: %s)numexpr.cpuinfor  r  r  rC   __version__r}   r+  versionunameinfor   r^  r<   get_vml_versionrE   ncoresMAX_THREADS)	r  r  sysnamenodenamerelease
os_versionr  	processorcpu_infos	            rH   print_versionsr    s    $#####OOO	)	
!G$7
7888	
!BN
2333	
!CK
/000CQ8>CSCS@WhWi	E3<<<**
MNNN 8A;%5G(L(LLMMM%5JB(O(OOPPP)HLL,C,CCDDDD   	
!G
+,,, C%(?(A(AABBB	 '*1*:GN)KL M M M	
)G,?
?@@@	)s   'A?D' '
D43D4r@   c                     t                       t          j        dddd           t          j        |                               t                                S )z.
    Run all the tests in the test suite.
    r  )divideinvalidoverunder	verbosity)r  r}   seterrunittestTextTestRunnerr  suiter  s    rH   r  r    sQ      IXxhhOOOO"Y777;;EGGDDDrJ   Fc                     dd l } dd l} | j                    }d} G d dt                    fd}t	                      D ]} ||           t          |          D ]}|                     | j        t                               dt          j	                    vr(|                     | j        t                               |                     | j        t                               |                     | j                             |                     | j        t                               |                     | j        t                               |                     | j        t                               |                     | j        t                               |                     | j        t                                |                     | j        t"                               |                                                                dvr(|                     | j        t(                               |                     | j        t*                               |S )Nr   r@   c                       e Zd ZdS )suite.<locals>.TestExpressionsNr  r
  rJ   rH   TestExpressionsr     s        rJ   r  c                 h      fd}t           j        |                    d                      d S )Nc                                  S rB   r
  )rG   r_   s    rH   r  z)suite.<locals>.add_method.<locals>.method  s    466MrJ   )setattrr;  __get__)r_   r  r  s   ` rH   
add_methodzsuite.<locals>.add_method  sR    	 	 	 	 	 	t_55	7 	7 	7 	7 	7rJ   r  )gnuzgnu/kfreebsd)r  r  	TestSuiteTestCaser)  r  addTest	makeSuiter?   r  r@  rB  r2  rG  rS  r  r  r  systemlowerr  r  )r  pltheSuiteniterr  r_   r  r  s          @rH   r  r    s   OOO!x!##HE    (   7 7 7 7 7 !""  
45\\ = =++L99:::(*,,,,/X/>>???++M::;;;++O<<===++,<==>>>++,=>>???++L99:::H455	7 	7 	7++L99:::++,ABBCCC IIKK'>>>/X/@@AAA 	++N;;<<<<OrJ   __main__r  )defaultTestrB   r  )or  r+  r  r  
contextlibr   r5  r  r}   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   numpy.testingr,   r-   r.   r/   r0   r1   r2   r3   r4   r5   rC   r6   r7   r8   r9   r:   r;   r<   numexpr.expressionsr=   r  r  r\   r   longr?   r@  rB  r%  optestsr  r  appendcmptests
func1testsr_   
func2testspowtestsr  r  r	  r  r)  r+  r2  rG  rS  r  r  r  r  r  r  r  r  r  __test__r  r;  mainr
  rJ   rH   <module>r3     s   
			 



   % % % % % %        ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) G G G G G G G G G G G G C C C C C C C C C C C C C C C C  U U U U U U U U U U U U U U U U U U , , , , , , 	
bF bF bF bF bF8 bF bF bFP	    L   
N0 N0 N0 N0 N0H N0 N0 N0d
     	$ 
$w--4&
  	& 	&BNN#b()))NN<"$%%%NN<"$%%%NN<"$%%%NN<"$%%%NN=2%&&&NN>B&'''NN<"$%%%% lG$ % % %
, % %BOOL2%&&&OOL2%&&&OOHrM"""OOJO$$$$ mX& ' ' '
 , ,D
 md*++++ mZ( ) ) )
 / /D(4/000&-...&-.... mZ( ) ) )	< % %AOOK!O$$$$ k8$ % % %9 9 96     9   e  e  e P2 2 2 2 2 2 2 2 4  4  4  4  4x  4  4  4F4 4 4 4 4 4 4 4:c. c. c. c. c.8 c. c. c.X= = = = =H = = =$# # # # #8 # # #, 	  	  	 0C 0C 0C 0C 0CH 0C 0C 0Ch    X   F       h   (  <	E 	E 	E 	E , , ,^ zNHMg&&&&&& rJ   