o
    1ήcq                     @   s\  d dl Z d dlZd dlZd dlmZmZ d dlmZ d dl	m
Z
 d dlmZmZmZmZ dZdZeege Zd ZdZd	d
 Zdd Zdd Zdd Zdd Zejjdd Zdd Zdd Zdd Z d;ddZ!dd  Z"ejjd!d" Z#ejjd#d$ Z$d%d& Z%d'd( Z&d)d* Z'd+d, Z(d<d-d.Z)d/d0 Z*d1d2 Z+d3d4 Z,d5d6 Z-d7d8 Z.G d9d: d:Z/dS )=    N)solve_diophantineinternal_overlap)_umath_tests)
as_strided)assert_assert_raisesassert_equalassert_array_equal   
   c              	   C   sl   | dkr	t d gS g }dD ]&}dD ]!}t d | | | d  }|| | |  }|t||||  qq|S )zGReturns slices of length nelems, from start onwards, in direction sign.r   r
      r
   )r   r   )sizeappendslice)nelemsresstepsignstartstop r   H/tmp/pip-target-vg8gfxp4/lib/python/numpy/core/tests/test_mem_overlap.py_indices_for_nelems   s   
r   c                  C   s,   g } dD ]}t |}| t|| q| S )z$Returns (src, dst) pairs of indices.)r   r
      )r   extend	itertoolsproduct)r   r   indr   r   r   _indices_for_axis%   s
   r    c                 C   s   t  }tj|| dS )zKReturns ((axis0_src, axis0_dst), (axis1_src, axis1_dst), ... ) index pairs.)repeat)r    r   r   )ndimsr   r   r   r   _indices0   s   r#   c                 C   sV   t t tt}| }||  ||< ||  ||< tt ||kd|| f  dS )z1Check assignment arr[dstidx] = arr[srcidx] works.zassigning arr[%s] = arr[%s]N)nparanger   shapereshapecopyr   all)srcidxdstidxarrcpyr   r   r   _check_assignment7   s   
r.   c                  C   sD   t t} | D ]}tdd |D }tdd |D }t|| qd S )Nc                 S      g | ]}|d  qS r   r   .0ar   r   r   
<listcomp>K       z0test_overlapping_assignments.<locals>.<listcomp>c                 S   r/   r   r   r1   r   r   r   r4   L   r5   )r#   r"   tupler.   )indsr   r*   r+   r   r   r   test_overlapping_assignmentsE   s   r9   c                     s6  t jdt t jj} tdD ]}d}d}d|d  }t|||k rdjddt jdd   jddt jdd t|   t| d t	 fd	d
t|D }t	fdd
t|D }t| d t
dd
 t||D }jd|d t jd|dkr||k rdt||}|d u rt||dd}	t|	d u |||	f t	dd
 t||D }
d}|
D ]}|t|9 }q|dk rttfdd
tj|
 D   |d7 }n5t||dd}	t|	d u|||	f tt
dd
 t||D k ttdd
 t||D  |d7 }t|||k s&qd S )N  r   r     r      dtype   c                 3   s*    | ]}t jd  d  tjdV  qdS )r   r=   Nintrandintr$   intpr2   j)A_maxrngr   r   	<genexpr>f       "z(test_diophantine_fuzz.<locals>.<genexpr>c                 3   s*    | ]}t jd  d tjdV  qdS )r   r
   r=   Nr@   rD   )U_maxrG   r   r   rH   h   rI   r
   c                 s       | ]	\}}|| V  qd S Nr   r2   r3   ubr   r   r   rH   k       r   )simplifyc                 s   s(    | ]\}}t d || d |V  qdS )r   r   NrangerM   r   r   r   rH   {   s   & i c                 3   s    | ]	}t | kV  qd S rL   )sum)r2   w)br   r   rH      rO   c                 s   rK   rL   r   r2   r3   xr   r   r   rH      rO   c                 s   ,    | ]\}}d |  ko|kn  V  qdS r   Nr   )r2   rW   rN   r   r   r   rH         * )r$   randomRandomStateiinforC   maxrR   minrB   r7   rS   zipr   r   lenanyr   r   r)   )max_intndimfeasible_countinfeasible_count	min_countAUb_ubXX_simplifiedrangesr   rr   )rF   rJ   rU   rG   r   test_diophantine_fuzzQ   sR   
"" ro   c                  C   sv   t t jj} t t jj}|| kr9|d |d d f}|d |d d f}d|d  d }tt|||d d S d S )Nr
   r   )r   r   )r$   r]   rC   r^   int64r   r   )max_intp	max_int64rh   ri   rU   r   r   r   test_diophantine_overflow   s   rs   c                 C   s   t j| |td}tt | |t j| |td | d |d | d | }d}||kreddd| jd d |jd d  f d	| j	f d
|j	f d| j
f d|j
f d| jf d|jf g }t|||d d S )Nmax_workr   r    z    z
    zbase_a - base_b = %rdatazshape_a = %rzshape_b = %rzstrides_a = %rzstrides_b = %rzsize_a = %rzsize_b = %rerr_msg)r$   may_share_memoryMAY_SHARE_EXACTr   MAY_SHARE_BOUNDSfillrb   join__array_interface__r&   stridesr   )r3   rU   gotexactry   r   r   r   check_may_share_memory_exact   s(   


 






r   c               
   C   s  t jg dt jdt jg dt jdd d d d d d dd d f g} g }| D ]}tjtd td d dgfd  D ]}|| }|| q9q'|D ]}tt |d d dd d f |d d dd d f  tt j|d d dd d f |d d dd d f d d	 t	|d d dd d f |d d dd d f  t	|d d d d d
f |d d dd df  z|
 }|jjrW qH|t j}W n	 ty   Y qHw t	|
 dd |ddddd d d d d
f  t	|d d d d d
f |dddd t	|d d d d d
f |ddddd d dd df  t	|
 dd
 |ddddd d d d d
f  qHt jdgt jd}t	|| t	||  d S )N)            r=   )r   r   .   r   r
   r      r   r   rt      r   r?   r   r   r   r<   )r$   zerosint8r   r   r   r   r   rz   r   ravelflagsowndataviewint16
ValueErrorr'   r(   )xs0xsrW   ssxpr   r   r   test_may_share_memory_manual   sJ   0$48..   
r   TFc                 #   sF   t jd|r|rt fdd fdd| | fV  tdddD ]"}| |d  | d |  fV  | d	|d f | d	d | f fV  q%t| j}d
|d
< t| | j|d}| |fV  ||fV  t| j}|d
 dkrrd|d
< t| | j|d}| |fV  ||fV  	 t	fddt| j
D }t	 fddt| j|D }t | j
}| |r|}	nt | j
}	|	 | | }
|r|
jd
krqt	fddt| j||
jD }t	fddt| j||
jD }n|r|}nt	fddt| j
D }|st	 fddt| j|D }|
|}
| | |	}|
|fV  q)Nr:   c                    `    j d| d tjd} j || d tjd} j ddtjddkr*||}}|d9 }t|||S Nr   r   r=   r
   r   rB   r$   rC   r   nr   r   r   rG   r   r   random_slice      
z,iter_random_view_pairs.<locals>.random_slicec                    sn     d| d ||  }||d |  d }  dddkr1|d |d }}|dk r-d }|d9 }t|||S )Nr   r   r
   r   )rB   r   )r   r   r   r   r   r   r   r   random_slice_fixed_size   s   z7iter_random_view_pairs.<locals>.random_slice_fixed_sizer   r   r   .r   )r&   r   Tc                 3   <    | ]} j d dtjdd kr j ddtjdndV  qdS r      r=   r   r<   NrB   r$   rC   rD   r   r   r   rH         
z)iter_random_view_pairs.<locals>.<genexpr>c                 3       | ]
\}} ||V  qd S rL   r   r2   psr   r   r   rH         c              	   3   sD    | ]\}}}  d dd kr  dtd|d|  ndV  qdS )r   r   r   r
   N)rB   r^   r2   r   r   par   r   r   rH   -  s    
c                 3   s"    | ]\}}} |||V  qd S rL   r   r   )r   r   r   rH   0  s    c                 3   r   r   r   rD   r   r   r   rH   5  r   c                 3   r   rL   r   r   r   r   r   rH   :  r   )r$   r[   r\   r   rR   listr   r   r&   r7   rd   r`   r%   shuffler   	transpose)rW   
same_steps
equal_sizerE   r   r   stepss1t1t2r3   steps2s2rU   r   )r   r   rG   r   iter_random_view_pairs   sj   
&











r   c                 C   s   t jg dt jd}d}d}t||}t|||k rgt|\}}t ||}	t ||}
t j||| ||d}t j||td}||krHt|| |
|	krQt|
|	 |	r^|rZ|d7 }n|d7 }t|||k sd S d S )N   "   G   a   r=   r   rt   r   )	r$   r   r   r   r_   nextrz   r{   r   )get_max_workr   rg   rW   feasible
infeasible	pair_iterr3   rU   bounds_overlapmay_share_answereasy_answerexact_answerr   r   r    check_may_share_memory_easy_fuzzB  s&   



r   c                   C      t dd ddd d S )Nc                 S   s   dS Nr   r   r3   rU   r   r   r   <lambda>g  s    z1test_may_share_memory_easy_fuzz.<locals>.<lambda>T  r   r   rg   r   r   r   r   r   test_may_share_memory_easy_fuzzb  s   
r   c                   C   r   )Nc                 S   s   t | j|jd S )Nr
   )r^   r   r   r   r   r   r   u  s    z3test_may_share_memory_harder_fuzz.<locals>.<lambda>Fr   r   r   r   r   r   r   !test_may_share_memory_harder_fuzzl  s   	
r   c                  C   s   t jg dt jd} tt | | d tt | |  d | d d d d dd d df }| d d d d dd d df }tt ||d tt j||d dd tt jt j||dd d S )	N)r   r   r?   r=   TFr
   r   rt   r   )r$   r   r   r   shares_memoryr(   r   TooHardError)rW   r3   rU   r   r   r   test_shares_memory_apiz  s   r   c                  C   s@   t dg} ttt j| | dd d ttt j| | dd d d S )Nr   r   d   rt   )r$   r   r   OverflowErrorrz   r   )rW   r   r   r   "test_may_share_memory_bad_max_work  s   r   c                  C   s*   d
dd} | dddd | ddd	d d S )Nc                 S   s   t | |ddd}|d u r|d u}|d urJttdd t| |D tdd t| |D k ttdd t||D  ttdd t||D  |rWt|d ut| d S t|d u t| d S )	Nr   r   )require_ub_nontrivialc                 s   rK   rL   r   rV   r   r   r   rH     rO   zCtest_internal_overlap_diophantine.<locals>.check.<locals>.<genexpr>c                 s   s     | ]\}}|| d  V  qdS r
   Nr   )r2   r3   ur   r   r   rH         c                 s   rX   rY   r   r2   rW   r   r   r   r   rH     rZ   c                 s   s     | ]\}}||d  kV  qdS r   r   r   r   r   r   rH     r   )r   r   rS   r`   r)   rb   repr)rh   ri   existsrk   r   r   r   check  s   4z0test_internal_overlap_diophantine.<locals>.check)r   r
   )r   r?   T)r   )r?   r
   )   r   FrL   r   )r   r   r   r   !test_internal_overlap_diophantine  s   
r   c                     s   t jg dt jd} t jdfdd d}d}||k r^tfdd	t| jD }t | j}	| t fd
d	t
| j|D }| | |}tt|  |d7 }||k sd S d S )Nr   r=   r:   c                    r   r   r   r   r   r   r   r     r   z2test_internal_overlap_slices.<locals>.random_slicer     c                 3   r   r   r   rD   r   r   r   rH     r   z/test_internal_overlap_slices.<locals>.<genexpr>c                 3   r   rL   r   r   r   r   r   rH     r   r   )r$   r   r   r[   r\   r7   rR   rd   r%   r   r`   r&   r   r   r   )rW   casesrg   r   r   r   r3   r   )r   rG   r   test_internal_overlap_slices  s    
r   c                 C   s   t | }t }tdd | jD }tj| D ]}tdd t| j|D }||v r-d} n|	| qd}||krFt
||t| j| jfd |d urS||krSt
|| |S )Nc                 s   s    | ]}t |V  qd S rL   rQ   )r2   r   r   r   r   rH     s    z)check_internal_overlap.<locals>.<genexpr>c                 s   rK   rL   r   )r2   r   rT   r   r   r   rH     rO   TFrx   )r   setr7   r&   r   r   rS   r`   r   addr   r   )r3   manual_expectedr   mrm   voffsetexpectedr   r   r   check_internal_overlap  s   
r   c                  C   s   t dt j} t| d t| g d t| ddd}t|d t| ddd}t|d t| ddd}t|d t| dd	d}t|d t| dd
d}t|d t| ddd}t|d t| ddd}t|d t| ddd}t|d d S )Nr   F)r   r   )r   r   r   r&   )r   r   Tr0   r6   )r
   )r   i)W   r   )r   r   )r   r   )r$   r%   astyper   r   r'   r   )rW   r3   r   r   r   test_internal_overlap_manual  s&   







r   c            	         s   t dt j} d}d}d}t jd t|||k r^ jddt jd}t	 fddt
|D }t	 fd	dt
|D }t| ||d
}t|}|rQ|d7 }n|d7 }t|||k sd S d S )Nr   r   r   r:   r   r=   c                 3   "    | ]} j d dtjdV  qdS )i  r=   Nr   rD   r   r   r   rH         z-test_internal_overlap_fuzz.<locals>.<genexpr>c                 3   r   )r   r   r=   Nr   rD   r   r   r   rH     r   r   )r$   r%   r   r   r[   r\   r_   rB   rC   r7   rR   r   r   )	rW   overlap
no_overlaprg   rd   r   r&   r3   resultr   r   r   test_internal_overlap_fuzz  s&   
r   c               	   C   s   G dd d} G dd d}| |fD ]X}t d}tt ||d d d |dd d  tt ||d d d |dd d   tt ||dd d |d d d  tt ||dd d |d d d  qd S )	Nc                   @   s    e Zd Zdd Zedd ZdS )z(test_non_ndarray_inputs.<locals>.MyArrayc                 S   
   || _ d S rL   rw   selfrw   r   r   r   __init__     
z1test_non_ndarray_inputs.<locals>.MyArray.__init__c                 S   s   | j jS rL   )rw   r   r   r   r   r   r   "  s   z<test_non_ndarray_inputs.<locals>.MyArray.__array_interface__N)__name__
__module____qualname__r   propertyr   r   r   r   r   MyArray  s    r  c                   @   s   e Zd Zdd Zdd ZdS )z)test_non_ndarray_inputs.<locals>.MyArray2c                 S   r   rL   r   r   r   r   r   r   '  r   z2test_non_ndarray_inputs.<locals>.MyArray2.__init__c                 S   s   | j S rL   r   r   r   r   r   	__array__*  s   z3test_non_ndarray_inputs.<locals>.MyArray2.__array__N)r   r   r  r   r  r   r   r   r   MyArray2&  s    r  r   r
   r   r   )r$   r%   r   rz   r   )r  r  clsrW   r   r   r   test_non_ndarray_inputs  s   
(*(*r  c                 C   s8   ddl m} t| j}d|d< dg|d< t||| S )z@Construct an array viewing the first byte of each element of `x`r   )
DummyArray|b1typestr)rv   r	  descr)numpy.lib.stride_tricksr  dictr   r$   asarray)rW   r  	interfacer   r   r   view_element_first_byte7  s
   

r  c                 K   sv   ||d< t |}| |d< | }| |i ||d< | }||d< | |i | }||k r9t|| dS dS )z}
    Check that operation(*args, out=out) produces results
    equivalent to out[...] = operation(*args, out=out.copy())
    out.N)r  r(   rb   r   )	operationargsr  kwargskwargs2out_origr   r   r   r   r   assert_copy_equivalent@  s   r  c                   @   s   e Zd ZdZejdfddZejj	dd Z
ejj	dd Zd	d
 Zdd Zdd Zdd Zejj	dd Zdd Zdd Zdd Zejj	dd Zdd ZdS )	TestUFuncz1
    Test ufunc call memory overlap handling
    r   c                 C   s  g d}t jd}tddD ]}|jdd|d | d|}t|dd	d
}	||d d  }
d}||
k rt|	\}}| }| }|d u rZt	||g|d t 
||rY|d7 }ntt|d gD ]}||d< ||d< ||||\}}|dkrzqctd g| }|d u r|d u rtddgdg|d   }n<td|gdg|d   }n.|d u r|j| d }|dkrt||d ||< n|||< n|j| |ksJ td|||< |t| }|r|g }t 
||r|d7 }t	||g||d qc||
k s5qd S )Nr   r      r          r:   r   r?   r   i   )r   FTr   r   r
   r  .skipr  axis)r$   r[   r\   rR   rB   r   r   r   r(   r  r   r   chainr   r&   r7   r'   )r   r  get_out_axis_sizer>   countshapesrG   rd   rW   itrg   overlappingr3   rU   a_origb_origr!  outsize	scalarizeslkb_outr   r   r   check_unary_fuzzZ  sV   

zTestUFunc.check_unary_fuzzc                 C   s   |  tjd tj d S rL   )r/  r$   invertr   r   r   r   r   test_unary_ufunc_call_fuzz  s   z$TestUFunc.test_unary_ufunc_call_fuzzc                 C   s   | j tjd tjdd d S )Nr;   )r$  )r/  r$   negative
complex128r   r   r   r   "test_unary_ufunc_call_complex_fuzz  s   z,TestUFunc.test_unary_ufunc_call_complex_fuzzc                 C   $   dd }| j tjj|tjdd d S )Nc                 S   .   |d u r| j dkr| jdfS dS | j| dfS Nr   F)r  Frd   r   r&   r3   rU   r!  r   r   r   r#    
   

zFTestUFunc.test_binary_ufunc_accumulate_fuzz.<locals>.get_out_axis_sizer;   r>   r$  )r/  r$   r   
accumulater   r   r#  r   r   r   !test_binary_ufunc_accumulate_fuzz  s   	
z+TestUFunc.test_binary_ufunc_accumulate_fuzzc                 C   r5  )Nc                 S   s   d |d u p	| j dkfS r   )rd   r9  r   r   r   r#    s   zBTestUFunc.test_binary_ufunc_reduce_fuzz.<locals>.get_out_axis_sizer;   r;  )r/  r$   r   reducer   r=  r   r   r   test_binary_ufunc_reduce_fuzz  s   
z'TestUFunc.test_binary_ufunc_reduce_fuzzc                 C   s(   dd }dd }| j ||tjdd d S )Nc                 S   r6  r7  r8  r9  r   r   r   r#    r:  zDTestUFunc.test_binary_ufunc_reduceat_fuzz.<locals>.get_out_axis_sizec                 S   s^   |d u rt | }|t | }n| j| }| j| |j|  }td||}tjj| |||dS )Nr   r   )ra   r&   r$   r%   r   reduceat)r3   r  r!  r   r   idxr   r   r   do_reduceat  s   
z>TestUFunc.test_binary_ufunc_reduceat_fuzz.<locals>.do_reduceatr;   r;  )r/  r$   r   )r   r#  rC  r   r   r   test_binary_ufunc_reduceat_fuzz  s
   	

z)TestUFunc.test_binary_ufunc_reduceat_fuzzc                 C   sd   dd }t jdt jd}|t j||d d d  | t jdt jd}|t j||d d d | d S )Nc                 S   s:   | j | | | d}| j |||d}t|| d S Nr  )rA  r(   r	   )ufuncr3   r   r  c1c2r   r   r   r     s   z:TestUFunc.test_binary_ufunc_reduceat_manual.<locals>.check'  r=   r   )r$   r%   r   r   r(   )r   r   r3   r   r   r   !test_binary_ufunc_reduceat_manual  s
   z+TestUFunc.test_binary_ufunc_reduceat_manualc              	   C   s  g d}t j}tjd}tddD ]}|j|d |  }t|ddd}d|d	 d  }d
}||k rt|\}	}
t	|	j
dd  dk sUt	|
j
dd  dk sU|	j
d dk rVq.|
j
d |
j
d krj|
dd
d d f }
n	|
dd d d
f }
|	j
d }||d	  d }||
j
d kr|d
kr|
dd |f }
n*tdtt|
j
d d }||d	  d }|	dd |d d f }	|
dd |f }
t|	|
r|d	7 }tjddd t||	g|
d W d    n1 sw   Y  ||k s2qd S )Nr  r:   r
   r?   FTr  r;   r   r   r   .ignore)overinvalidr  )r   euclidean_pdistr$   r[   r\   rR   randr   r   r_   r&   r^   rA   sqrtr   errstater  )r   r%  gufuncrG   rd   rW   r&  rg   r'  r3   rU   r   r   r   r   r   test_unary_gufunc_fuzz  s>   :
z TestUFunc.test_unary_gufunc_fuzzc                 C   sr   ddd}t jdt jd}|t j|d d d | t jdt jd}t jdddt jd}|t j|||d	d
  d S )Nc                 S   s   |  }|d u r| ||   |  }| || |  }n| ||  |   |  }| ||| |  }t|| d S rL   )r(   atr	   )rF  r3   r   rU   a0rG  rH  r   r   r   r     s   
z-TestUFunc.test_ufunc_at_manual.<locals>.checkrI  r=   r   r   r   r
      K   rL   )r$   r%   r   r0  r   )r   r   r3   r   r   r   r   test_ufunc_at_manual  s   
zTestUFunc.test_ufunc_at_manualc                    s   fdd}t jt jt jt jt jt jt jt jg}dd |D }|D ]}t 	|t j
r.t j nt j d}d}t jd | t j|||  t j|d d d t j|| d |d d t jd d	| d	 t j||d	|  d	 t jd	| d d d
 t j|d	|  d |d d
 g}t||D ]_\}}t jdd|d	  | |d}	|	| }
|	| }t jdd7 ||
| ||
d d | ||
dd  | ||
d d g | ||
dd  g | W d    n1 sw   Y  qq!d S )Nc           	         s   |   }|  }|  } | |d} | |d}t|| t|tj}|| d< ||d<  | |  |  d  }|| d< ||d<  | ||  d  }|| d< ||d<  | ||d  }t|| t|| d S )Nr  .r  where)r(   r	   r  r   r$   bool_)	r3   rU   r(  r)  b0rG  rH  maskc3rF  r   r   r   "  s$   

z3TestUFunc.test_unary_ufunc_1d_manual.<locals>.checkc                 S   s   g | ]}t |qS r   )r$   r>   )r2   rW   r   r   r   r4   @  s    z8TestUFunc.test_unary_ufunc_1d_manual.<locals>.<listcomp>r   r   r   r   r
   rK  r=   rL  )r)   )r$   r   r   int32rp   float32float64	complex64r3  
issubdtypeintegerr0  
reciprocal	index_expr   r   r%   rR  r'   )r   r   dtypesr>   r   r-  indicesxiyir   rW   yr   r`  r   test_unary_ufunc_1d_manual  sD   
z$TestUFunc.test_unary_ufunc_1d_manualc                    sT   t j  fdd}t dt j}|||| ||| | ||||  d S )Nc                    s2    | |  |  d} | ||d}t|| d S )NrZ  r(   r	   )r3   r  r^  rG  rH  r`  r   r   r   g  s   z4TestUFunc.test_unary_ufunc_where_same.<locals>.checkr   )r$   r0  r%   r   r\  r(   )r   r   rW   r   r`  r   test_unary_ufunc_where_samec  s   z%TestUFunc.test_unary_ufunc_where_samec                    s  t j  fdd}t jt jt jt jt jt jt jt j	fD ]}d}d}g }dD ]7}|
t jd || | t j||||  | t j|| d d |  t j|||  d |d |  g q%t|||D ]}\}}}	t d| |}
|
| }|
| }|
|	 }	||||	 ||d d ||	 ||dd  ||	 ||d d g ||	 ||dd  g ||	 |||d d |	 |||dd  |	 |||d d g |	 |||dd  g |	 qdqd S )	Nc                    s2   |  } | ||d} | ||d}t|| d S rE  ro  )r3   rU   cc0rG  rH  r`  r   r   r   v  s   z4TestUFunc.test_binary_ufunc_1d_manual.<locals>.checkr   r   r   r   r?   r   )r$   r   r   r   ra  rp   rb  rc  rd  r3  r   rh  r   r   r%   r   r'   )r   r   r>   r   r-  rj  r   rW   rm  zr   r   r`  r   test_binary_ufunc_1d_manualr  s>    z%TestUFunc.test_binary_ufunc_1d_manualc                 C   s6   t jd}|dd}||j7 }t||j d d S )Nr:      r   )r$   r[   r\   rP  Tr	   )r   rG   rW   r   r   r   test_inplace_op_simple_manual  s   
z'TestUFunc.test_inplace_op_simple_manualN)r   r   r  __doc__r$   r   r/  pytestmarkslowr1  r4  r>  r@  rD  rJ  rT  rY  rn  rp  rt  rw  r   r   r   r   r  U  s*    
?


+D
+r  )TFrL   )0r   ry  numpyr$   numpy.core._multiarray_testsr   r   
numpy.corer   r  r   numpy.testingr   r   r   r	   r"   r   r7   r&   r|   r{   r   r    r#   r.   r9   rz  r{  ro   rs   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r   r   r   r   <module>   sN    
<
3X 
	

%	