
    Phm                        d dl Z d dlZd dlZd dlZd dlZd dlmZmZmZ d dl	m
Z
 	 	 	 d)dZ G d d      Z G d de      Z G d	 d
e      Z G d de      Z G d de      Z G d de      Z G d de      ZdZdZdZeez   ZeeeeeededeeeiZ ej0                         D ]6  \  ZZerej6                  ndZej;                  d      Z ee      dkD  rddjA                  e       dZned    ZdZ! e"       Z#esde dZ!n=ej6                  sde d Z!n*ejH                  s	de d!e#d"<   ejJ                  s	de d#e#d$<   ej1                         D ]  \  Z&Z'e&D ]}  Z(e#jS                  e(e!      Z*e'fZ+ e"ee   e(e%      Z, e-d&e'j\                   d'e d'e d'e( e+e,      Z/e*r" e j`                  jC                  e*(      e/       e/ e1       e/j\                  <     9 y)*    N)targetsclear_floatstatusget_floatstatus)__cpu_baseline__c                     t               }|xs | xr |dz  dk7  }||xs |xr |dz  dk7  z  }||xs |xr |dz  dk7  z  }||xs |xr |dz  dk7  z  }|S )N   r            )r   )	divbyzerooverflow	underflowinvalidallerrrets          eC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\numpy/core/tests/test_simd.pycheck_floatstatusr   	   sz     
C)
/#'aCCO8/#'a/CC9037q.0CCN7.qQ.CJ    c                   z    e Zd ZdZdZdZd Zd Zd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y)_Test_UtilityNc                 N    t        | j                  |dz   | j                  z         S )z
        To call NPV intrinsics without the attribute 'npyv' and
        auto suffixing intrinsics according to class attribute 'sfx'
        _getattrnpyvsfx)selfattrs     r   __getattr__z_Test_Utility.__getattr__   s"    
 tyy$*txx"788r   c                 N    t        | j                  | d| j                   d      S )Nr   x2r   )r   intrin_names     r   _x2z_Test_Utility._x2&   s$    tyy[M488*B"?@@r   c                     |d}|| j                   }t        |||z         }|rt        |      }| j                         r|D cg c]  }|dz  	 c}S t	        |      S c c}w )z[
        Create list of consecutive numbers according to number of vector's lanes.
        r         ?)nlanesrangereversed_is_fplist)r   startcountreverserngxs         r   _dataz_Test_Utility._data)   si     =E=KKEE55=)3-C;;=%()SAGS))Cy *s   Ac                 &    | j                   d   dk(  S )Nr   ur   r   s    r   _is_unsignedz_Test_Utility._is_unsigned8       xx{c!!r   c                 &    | j                   d   dk(  S )Nr   sr4   r5   s    r   
_is_signedz_Test_Utility._is_signed;   r7   r   c                 &    | j                   d   dk(  S )Nr   fr4   r5   s    r   r*   z_Test_Utility._is_fp>   r7   r   c                 2    t        | j                  dd        S )Nr   )intr   r5   s    r   _scalar_sizez_Test_Utility._scalar_sizeA   s    488AB<  r   c           	          | j                         r|S | j                         }| j                         }|D cg c]  }t        t	        ||      |       c}S c c}w N)r*   _int_max_int_minminmax)r   seqmax_intmin_intvs        r   	_int_clipz_Test_Utility._int_clipD   sK    ;;=J--/--/7:;s!C7OW-s;;;s   Ac                     | j                         ry | j                  | j                  d            d   }| j                         r|dz  S |S )Nr   r	   )r*   _to_unsignedsetallr:   )r   max_us     r   rB   z_Test_Utility._int_maxK   sD    ;;=!!$++b/215??A:r   c                 n    | j                         ry | j                         ry| j                         dz    S )Nr   r   )r*   r6   rB   r5   s    r   rC   z_Test_Utility._int_minS   s1    ;;=1$%%r   c                 d     t        | j                  d| j                  dd  z         d      }|d   S )Nsetall_ur   rL   r   r   )r   	max_unsigs     r   
_true_maskz_Test_Utility._true_maskZ   s2    AGDIIzDHHQRL'@A"E	|r   c           	      6   t        |t        t        f      r, t        | j                  d| j
                  dd  z         |      S |j                  j                  dd      }|d   dk(  rd}nd} t        | j                  |j                  |dd  |            |      S )	Nload_ur   npyv_ r   bzcvt_u{0}_b{0}zreinterpret_u{0}_{1})	
isinstancer+   tupler   r   r   __name__replaceformat)r   vectorr   
cvt_intrins       r   rM   z_Test_Utility._to_unsigned^   s    ftUm,>7499h!"&=>vFF//))'26C1v},
3
F7499j&7&7AB&EFvNNr   c                     t        d      S Ninffloatr5   s    r   
_pinfinityz_Test_Utility._pinfinityi       U|r   c                     t        d       S rb   rd   r5   s    r   
_ninfinityz_Test_Utility._ninfinityl   s    e}r   c                     t        d      S )Nnanrd   r5   s    r   _nanz_Test_Utility._nano   rg   r   c                 v    | j                   }|dk(  rt        }n|j                  d      }dj                  |      S )Nbaseline__ )target_namer   splitjoin)r   targets     r   _cpu_featuresz_Test_Utility._cpu_featuresr   s7    !!Z%F\\$'Fxxr   NNF)r\   
__module____qualname__r   r   rq   r    r$   r1   r6   r:   r*   r?   rJ   rB   rC   rT   rM   rf   ri   rl   ru    r   r   r   r      sc    DCK9A"""!<&	O r   r   c                       e Zd ZdZd ZddZd Zd Zd Zd Z	e
j                  j                  d	d
dg      e
j                  j                  dddgddgdgdgf      d               Zy)
_SIMD_BOOLz2
    To test all boolean vector types at once
    c                 N    t        | j                  d| j                  dd  z         S )Nnlanes_ur   r   r5   s    r   _nlanesz_SIMD_BOOL._nlanes~   s"    tyy*txx|";<<r   Nc                     | j                         }t        | j                               }|rt        |      }|D cg c]  }|dz  r|nd c}S c c}w )Nr	   r   )rT   r(   r~   r)   )r   r,   r-   r.   	true_maskr/   r0   s          r   r1   z_SIMD_BOOL._data   sM    OO%	DLLN#3-C3673aQU	)3777s   Ac                     | j                   dd  }t        | j                  d|z         }t        | j                  d| d|       } | ||            S )Nr   rV   cvt_b_u)r   r   r   )r   datalen_strloadcvts        r   _load_bz_SIMD_BOOL._load_b   sQ    ((12,tyy(W"45dii5	G9!=>4:r   c                     | j                         }| j                  d      }| j                  |      }| j                  |      }t        ||      D cg c]
  \  }}||z   }}} t        | d      ||      }||k(  sJ t        ||      D cg c]
  \  }}||z   }	}} t        | d      ||      }
|
|	k(  sJ t        ||      D cg c]
  \  }}||z   }}} t        | d      ||      }||k(  sJ  t        | d      |      }||k(  sJ | j                  dvryt        ||      D cg c]  \  }}|| z  d	z   }}} t        | d
      ||      }||k(  sJ t        ||      D cg c]  \  }}|| z  d	z   }}} t        | d      ||      }||k(  sJ t        ||      D cg c]  \  }}||z   d	z   }}} t        | d      ||      }||k(  sJ yc c}}w c c}}w c c}}w c c}}w c c}}w c c}}w )z
        Logical operations for boolean types.
        Test intrinsics:
            npyv_xor_##SFX, npyv_and_##SFX, npyv_or_##SFX, npyv_not_##SFX,
            npyv_andc_b8, npvy_orc_b8, nvpy_xnor_b8
        Tr.   andorxornotb8N   andcorcxnor)r1   r   zipr   r   )r   data_adata_bvdata_avdata_barY   data_andvanddata_orvordata_xorvxorvnot	data_andcvandcdata_orcvorc	data_xnorvxnors                       r   test_operators_logicalz!_SIMD_BOOL.test_operators_logical   sL    D),,v&,,v&&)&&&9:&9daAE&9:#wtU#GW5x%(%89%8TQ1q5%89!gdD!'73g~~&)&&&9:&9daAE&9:#wtU#GW5x#wtU#G,v~~ 88D!14VV1DE1DAa1"f_1D	E%f%gw7E!!!03FF0CD0C1Q!VtO0CD#wtU#GW5414VV1DE1DAq1uX_1D	E%f%gw7E!!!; ; : ; F E Fs$   GG"
G(-G.,G4+G:c                     d }| j                         | j                  d      fD ]G  }| j                  |      } ||      }| j                  |      }t        |      }|t        |      k(  rGJ  y )Nc           
      |    t        t        | d      D cg c]  \  }}t        |dk7        |z   c}}      S c c}}w )Nr   )sum	enumerater>   )r   ir0   s      r   <lambda>z(_SIMD_BOOL.test_tobits.<locals>.<lambda>   s6    9TSTCU%VCU41ac!q&kQ&6CU%V!W%Vs   8
Tr   )r1   r   tobitsbin)r   	data2bitsr   vdata	data_bitsr   
bin_tobitss          r   test_tobitsz_SIMD_BOOL.test_tobits   sg    W	ZZ\4::d:#;<DLL&E!$I[['FVJY/// =r   c           
         | j                   dvry| j                         }| j                  d      }| j                  |      }| j                  |      }t        | j                  d| j                          }| j                   dk(  r1t        |      t        |      z   D cg c]  }|dz  	 }} |||      }n| j                   dk(  r9d	t        |      z  d	t        |      z  z   D cg c]  }|dz  	 }} |||||      }nK| j                   d
k(  r<dt        |      z  dt        |      z  z   D cg c]  }|dz  	 }} |||||||||      }k(  sJ yc c}w c c}w c c}w )z
        Pack multiple vectors into one
        Test intrinsics:
            npyv_pack_b8_b16
            npyv_pack_b8_b32
            npyv_pack_b8_b64
        )b16b32b64NTr   pack_b8_r   r   r   r	   r   r
   )r   r1   r   r   r   r+   )	r   r   rdatar   vrdata	pack_simdr   spackvpacks	            r   	test_packz_SIMD_BOOL.test_pack   sf    8800zz|

4
(T"e$DII$(('<=	 88u*.u+T
*BD*BAa$h*BEDfe,EXX*+DK-!DJ,*FH*FAa$h*FEHffeU;EXX*+DK-!DJ,*FH*FAa$h*FEHffff$uuu>E~~ E I Is   E%E-Eintrinanyr   r   rL   r   c                     | j                  || j                         z        }t        |      }t        | |      } ||      } ||      }||k(  sJ yzX
        Test intrinsics:
            npyv_any_##SFX
            npyv_all_##SFX
        N)r   r~   evalr   r   r   r   r   funcdesiredsimds          r   test_operators_crosstestz#_SIMD_BOOL.test_operators_crosstest   sS     dT\\^34F|v&v,f~w&&r   rv   )r\   rw   rx   __doc__r~   r1   r   r   r   r   pytestmarkparametrizer   ry   r   r   r{   r{   z   s    =8)"V0> [[Xu~6[[V	Q	
B		
	& ' 7'r   r{   c                   j    e Zd ZdZd Zd Zd Zej                  j                  dg d      d        Z
y)		_SIMD_INTz2
    To test all integer vector types at once
    c                 z   | j                   dv ry | j                  | j                         | j                  z
        }| j                  | j	                         d      }| j                  |      | j                  |      }}t        | j                               D ]x  }| j                  |D cg c]  }||z  	 c}      }| j                  ||      }||k(  sJ | j                  |D cg c]  }||z	  	 c}      }	| j                  ||      }
|
|	k(  rxJ  t        d| j                               D ]x  }| j                  |D cg c]  }||z  	 c}      }| j                  ||      }||k(  sJ | j                  |D cg c]  }||z	  	 c}      }	| j                  ||      }||	k(  rxJ  y c c}w c c}w c c}w c c}w )N)u8s8Tr   r   )r   r1   rB   r'   rC   r   r(   r?   shlshrshlishri)r   r   r   r   r   r-   r   
data_shl_ar   
data_shr_ar   r   r   s                r   test_operators_shiftz_SIMD_INT.test_operators_shift   s   88|#DMMOdkk9:DMMOT:99V,dii.?4,,./E#?1AJ#?@J((7E*C*$$$#?1AJ#?@J((7E*C*$$$ 0 1d//12E#?1AJ#?@J99We,D:%%%#?1AJ#?@J99We,D:%%% 3 $@
 $@ $@
 $@s   *F)
%F.
?F3
:F8
c                 @   | j                   dv ry | j                  | j                         | j                  z
        }| j                  | j	                         d      }| j                  |      | j                  |      }}| j                  t        ||      D cg c]
  \  }}||z    c}}      }| j                  ||      }||k(  sJ | j                  t        ||      D cg c]
  \  }}||z
   c}}      }	| j                  ||      }
|
|	k(  sJ y c c}}w c c}}w )N)u32s32u64s64Tr   )
r   r1   rB   r'   rC   r   rJ   r   addssubs)r   r   r   r   r   r   rY   	data_addsr   	data_subsr   s              r    test_arithmetic_subadd_saturatedz*_SIMD_INT.test_arithmetic_subadd_saturated  s   8833DMMOdkk9:DMMOT:99V,dii.?NNc&&6I#J6IdaAE6I#JK	yy'*y   NNc&&6I#J6IdaAE6I#JK	yy'*y    $K $Ks   D
#D
c                    | j                         }| j                  | j                        }| j                  |      | j                  |      }}t        ||      D cg c]  \  }}t	        ||       }}}| j	                  ||      }||k(  sJ t        ||      D cg c]  \  }}t        ||       }	}}| j                  ||      }
|
|	k(  sJ y c c}}w c c}}w rA   )r1   r'   r   r   rE   rD   )r   r   r   r   r   r   rY   data_maxsimd_maxdata_minsimd_mins              r   test_math_max_minz_SIMD_INT.test_math_max_min*  s    DKK(99V,dii.?*-ff*=>*=$!QC1I*=>88GW-8###*-ff*=>*=$!QC1I*=>88GW-8### ? ?s   CCr,   )iir   d   i'  c                     | j                  | j                  |            }| j                  |      t        |      k(  sJ | j	                  |      t        |      k(  sJ y)zf
        Test intrinsics:
            npyv_reduce_max_##sfx
            npyv_reduce_min_##sfx
        N)r   r1   
reduce_maxrE   
reduce_minrD   )r   r,   r   s      r   test_reduce_max_minz_SIMD_INT.test_reduce_max_min7  sQ     ))DJJu-.w'3w<777w'3w<777r   N)r\   rw   rx   r   r   r   r   r   r   r   r   ry   r   r   r   r      s>    &B! $ [[W&CD8 E8r   r   c                       e Zd ZdZd Zy)
_SIMD_FP32z'
    To only test single precision
    c                 t   | j                         }| j                  j                  st        j                  d|      rd }nt
        }| j                  | j                               }| j                  || j                  d            }|D cg c]
  } ||       }}| j                  |      }||k(  sJ yc c}w )
        Round to nearest even integer, assume CPU control register is set to rounding.
        Test intrinsics:
            npyv_round_s32_##SFX
        z.*(NEON|ASIMD)c                 8    t        | | dk\  rdz         S dz         S )Nr         ?      )r>   )rI   s    r   r   z-_SIMD_FP32.test_conversions.<locals>.<lambda>Q  s    s1qAv#@A4#@Ar   r   N)ru   r   simd_f64rematchroundr   r1   subrN   	round_s32)r   features_roundr   r0   
data_roundvrounds          r   test_conversionsz_SIMD_FP32.test_conversionsG  s     %%'yy!!bhh/@(&K BFF))DJJL)((7DKK$45)01AfQi
1(### 2s   B5Nr\   rw   rx   r   r   ry   r   r   r   r   C  s    $r   r   c                       e Zd ZdZd Zy)
_SIMD_FP64z'
    To only test double precision
    c                 \   | j                  | j                               }| j                  || j                  d            }| j	                  || j                  d            }t        |      t        |      z   D cg c]  }t        |       }}| j                  ||      }||k(  sJ yc c}w )r   r   g      N)r   r1   r   rN   mulr+   r   r   )r   r   r   r0   r   r   s         r   r   z_SIMD_FP64.test_conversions^  s     ))DJJL)((7DKK$45((7DKK$56(,WW(EF(E1eAh(E
F1### Gs   ;B)Nr  ry   r   r   r  r  Z  s    $r   r  c                   :   e Zd ZdZd Zd Zd Zd Zej                  j                  ddej                  fdej                  fd	ej                  fd
efg      d        Zej                  j                  dg d      d        Zd Zd Zej                  j                  dg d      d        Zej                  j                  dej,                  dfej.                  dfej0                  dfej2                  dfej4                  dfej6                  dfg      d        Zej                  j                  dddg      ej                  j                  d ed      d gd  ed      g ed      d!gd! ed      g ed       ed      gd"d#gd#d"gd$d#gf      d%               Zy&)'_SIMD_FPz0
    To test all float vector types at once
    c           
         | j                  | j                               gdz  \  }}}| j                  ||      }| j                  t        |||      D cg c]  \  }}}||z  |z    c}}}      }| j	                  |||      }	|	|k(  sJ | j                  |||      }
| j                  ||      }|
|k(  sJ | j                  |||      }| j                  ||      }||k(  sJ | j                  |||      }| j                  || j                  d            }||k(  sJ t        | j                  |||            }|dd d   t        |      dd d   k(  sJ |dd d   t        |      dd d   k(  sJ y c c}}}w )N   rL   r   r	   r   )r   r1   addr   muladdmulsubr   nmuladdnmulsubr  rN   r+   	muladdsub)r   r   r   vdata_c	vdata_cx2r   rY   cdata_fmafmafmsdata_fmsnfma	data_nfmanfms	data_nfmsfmass                    r   test_arithmetic_fusedz_SIMD_FP.test_arithmetic_fusedo  s   %)YYtzz|%<$=a$?!'HHWg.	99s7GW7UV7UGAq!a!eai7UVWkk'7G4hkk'7G488Hi0h||GWg6HHY1	y   ||GWg6HHXt{{27	y    DNN7GW=>ADqDzT(^ADqD1111ADqDzT(^ADqD1111' Ws   E4c                    | j                         | j                         | j                         }}}| j                         }| j	                  | j                               }d||f||f||ff}|D ]Q  \  }}|g| j
                  z  }	| j                  | j                  |            }
|
t        j                  |	d      k(  rQJ  | j                  | j                  || j                  d                  }
|
|k(  sJ y )N)r   r   Tnan_okrL   )rf   ri   rl   r1   r   r'   absrN   r   approxr  )r   pinfninfrk   r   r   	abs_casescaser   data_absvabss              r   test_absz_SIMD_FP.test_abs  s    //+T__->		Cdzz|		$**,'tTlT4L3*E	&MD'y,H88DKK-.D6==$???? '
 xxB89t||r   c                 &   | j                         | j                         | j                         }}}| j                         }| j	                  | j                               }ddd|f||f||ff}|D ]Q  \  }}|g| j
                  z  }	| j                  | j                  |            }
|
t        j                  |	d      k(  rQJ  | j	                  |D cg c]  }t        j                  |       c}      }	| j                  |      }
|
|	k(  sJ y c c}w )N)       r*  )        r+  g      Tr  )rf   ri   rl   r1   r   r'   sqrtrN   r   r!  math)r   r"  r#  rk   r   r   
sqrt_casesr%  r   	data_sqrtr,  r0   s               r   	test_sqrtz_SIMD_FP.test_sqrt  s    //+T__->		Cdzz|		$**,'"JsdC[4QU,W
'MD' 	$++-IIIdkk$/0D6==4@@@@ (
 IIT:Ttyy|T:;	yyy    ;s   Dc                    | j                         | j                         | j                         }}}| j                         }| j	                  | j                               }||f||f||ff}|D ]Q  \  }}|g| j
                  z  }	| j                  | j                  |            }
|
t        j                  |	d      k(  rQJ  |D cg c]  }||z  	 }	}| j                  |      }
|
|	k(  sJ y c c}w )NTr  )
rf   ri   rl   r1   r   r'   squarerN   r   r!  )r   r"  r#  rk   r   r   square_casesr%  r   data_squarer2  r0   s               r   test_squarez_SIMD_FP.test_square  s    //+T__->		Cdzz|		$**,'c
T4L4,?)MD'")DKK/Kkk$++d"34FV]];tDDDD *
 %))DqqsD)U#$$$ *s   C,zintrin, funcceiltruncfloorrintc           	      l   |}t        | |      }| j                         | j                         | j                         }}}||f||f||ff}|D ]H  \  }}	|	g| j                  z  }
 || j                  |            }|t        j                  |
d      k(  rHJ  t        ddd      D ]e  }dD ]^  }| j                  t        | j                        D cg c]
  }|z   |z   c}      }|D cg c]
  } ||       }
} ||      }||
k(  r^J  g dD ]7  }| j                  |      } ||      }|D cg c]
  } ||       }
}||
k(  r7J  |dk(  rd	}nd
}|D ]O  }| j                   || j                  |                  }| j                  | j                  d            }
||
k(  rOJ  yc c}w c c}w c c}w )z
        Test intrinsics:
            npyv_rint_##SFX
            npyv_ceil_##SFX
            npyv_trunc_##SFX
            npyv_floor##SFX
        Tr  r   i      )gggffffffg?g?gffffff?)g/Cg/Cg?Dg_Dr8  )r*  )r*  g      пg333333ӿgܿr   r*  N)r   rf   ri   rl   r'   rN   r   r!  r(   r   rM   )r   r   r   r#   r"  r#  rk   round_casesr%  r   r   r   r0   wr   r   r   yn
data_szeros                       r   test_roundingz_SIMD_FP.test_rounding  s    v&//+T__->		CdSzD$<$>(MD'!4;;.JDKK-.FV]]:dCCCC )
 q%(A<yy53E!F3Ea1Q3'3E!FG/34t!d1gt
4+++	 = )
A AAq	A+,-1a$q'1J-
?"?
 '! J:JA&&vdkk!n'=>F**4;;t+<=JZ''' + "G4 .s   F'(F,.F1r   )rE   maxpmaxnrD   minpminnc                    | j                         | j                         | j                         c}}dddddj                  |dd d      }t	        |dd       }t        | d|z         }t        | |      }| j                  dz  }d	d
gd
d	gfddgddgf|dgd|gfd|g|dgfddgddgfddgddgff}|D ]]  \  }	}
| j                  |	|z        }| j                  |
|z        } |||      } |||      }||k(  sJ  ||      } ||      }||k(  r]J  |sy|dk(  rd }nfd}dfdf|f|fff}|D ]  \  }	}
| j                  |	|
g|z        } ||	|
      } ||      }|t        j                  |d      k(  sJ | j                  |	      }| j                  |
      }|g| j                  z  } |||      }|t        j                  |d      k(  rJ  y)a  
        Test intrinsics:
            npyv_max_##sfx
            npyv_maxp_##sfx
            npyv_maxn_##sfx
            npyv_min_##sfx
            npyv_minp_##sfx
            npyv_minn_##sfx
            npyv_reduce_max_##sfx
            npyv_reduce_maxp_##sfx
            npyv_reduce_maxn_##sfx
            npyv_reduce_min_##sfx
            npyv_reduce_minp_##sfx
            npyv_reduce_minn_##sfx
        r   r	   )xpnpnnxnNr   r	  reduce_r+  r*  
   ic                 b    t        j                  |       r|S t        j                  |      r| S |S rA   r-  isnan)r   rY   s     r   r   z'_SIMD_FP.test_max_min.<locals>.<lambda>  s&    ZZ]ATZZ]AAr   c                 `    t        j                  |       st        j                  |      rS |S rA   rO  )r   rY   rk   s     r   r   z'_SIMD_FP.test_max_min.<locals>.<lambda>  s"    zz!}

1<1<r   Tr  )rf   ri   rl   getr   r   r'   r   r   r!  rN   )r   r   r"  r#  chk_nanr   reduce_intrin	hf_nlanescasesop1op2r   r   r   r   test_nanvdata_abrk   s                    @r   test_max_minz_SIMD_FP.test_max_min  sS   & //+T__->		dC!1A6::6"#;JF2AJi&&89v&KKN	 4[4+&#Y"c#BZ"d$$Z$$#YS	"2Yb	"
 HCiiI.GiiI.G)D'7+D4<<=D )D4<<  a<HH "II$K3K#J
 HCyy#sI!56HC%D *D6==d;;;;kk#&Gkk#&G6DKK'D'7+D6==d;;;; r   c                    | j                         | j                         | j                         }}}| j                         }| j	                  | j                               }||f|df|dfd|fd|ff}|D ]Q  \  }}|g| j
                  z  }	| j                  | j                  |            }
|
t        j                  |	d      k(  rQJ  | j	                  |D cg c]  }d|z  	 c}      }	| j                  |      }
|
|	k(  sJ y c c}w )Nr+  r*  Tr  r   )
rf   ri   rl   r1   r   r'   reciprN   r   r!  )r   r"  r#  rk   r   r   recip_casesr%  r   
data_recipr]  r0   s               r   test_reciprocalz_SIMD_FP.test_reciprocal,  s    //+T__->		Cdzz|		$**,'SzD#;tsDkDRV<X(MD'!4;;.JJJt{{401EFMM*TBBBB )
 YYT2T!T23


5!
"""  3s   Dc                     | j                  | j                  | j                                     }|dg| j                  z  k(  sJ y)zQ
        Compare Not NaN. Test intrinsics:
            npyv_notnan_##SFX
        r   N)notnanrN   rl   r'   )r   nnans     r   test_special_casesz_SIMD_FP.test_special_cases;  s9    
 {{4;;tyy{34s4;;&&&r   r#   )r9  r7  r6  r8  c                     t        | |      }t        d      t        d      t        d       fD ]6  }| j                  |      }t                 ||       t	        d      dk(  r6J  y )Nrk   rc   T)r   F)r   re   rN   r   r   )r   r#   r   drI   s        r   test_unary_invalid_fpexceptionz'_SIMD_FP.test_unary_invalid_fpexceptionC  s\     {+,euU|m<AAA1I$T2e;;;	 =r   zpy_comp,np_compcmpltcmplecmpgtcmpgecmpeqcmpneqc           	         | j                         | j                         | j                         }}}| j                         fd}t	        | |      }d|f|df||f||f||fdf}|D ]  \  }	}
|	g| j
                  z  }|
g| j
                  z  }| j                  |	      }| j                  |
      } | |||            }t        ||      D cg c]  \  }} |||       }}}||k(  rJ  y c c}}w )Nc                 4    | D cg c]  }|k(  	 c}S c c}w rA   ry   r_   lane	mask_trues     r   to_boolz2_SIMD_FP.test_comparison_with_nan.<locals>.to_boolZ       289&$DI%&999   r   )r*  r+  )rf   ri   rl   rT   r   r'   rN   r   )r   py_compnp_compr"  r#  rk   rs  r   	cmp_casescase_operand1case_operand2r   r   r   r   vcmpr   rY   data_cmprr  s                      @r   test_comparison_with_nanz!_SIMD_FP.test_comparison_with_nanN  s    //+T__->		CdOO%		: w'XQx#sdC[C[,0	,5(M=#_T[[0F#_T[[0Fkk-0Gkk-0G6'734D25ff2EF2E$!Q12EHF8### -6 Gs   C-r   r   r   rk   r   r   r+  r*  r&   c                     | j                  || j                  z        }t        |      }t        | |      } ||      } ||      }||k(  sJ yr   r   r'   r   r   r   s          r   r   z!_SIMD_FP.test_operators_crosstesti  Q    " 4$++-.F|v&v,f~w&&r   N)r\   rw   rx   r   r  r(  r0  r5  r   r   r   r-  r6  r7  r8  r   rA  r[  r`  rd  rg  operatorltlegtgeeqner}  re   r   ry   r   r   r  r  k  s   22!% [[^vtyy.AdjjGTZZ065/.C D,(D,(\ [[X ( C<C<J#' [[] - << [[.	g	g	g	g	g	h1 $$& [[Xu~6[[V	uq	
E%L	uq	
E%L	uuU|$	d	s	d	& 	'	 7'r   r  c                   
   e Zd ZdZd Zd Zej                  j                  dddddgfd	dd
ddgfg      d        Z	ej                  j                  dddg      d        Z
ej                  j                  dddg      d        Zej                  j                  dddddgfddd
ddgfg      d        Zej                  j                  dddg      d        Zej                  j                  dddg      d        Zej                  j                  dddg      d         Zd! Zd" Zd# Zd$ Zej                  j                  d%ej*                  d&fej,                  d'fej.                  d(fej0                  d)fej2                  d*fg      d+        Zd, Zej                  j                  d-d.d/g      ej                  j                  d0g d1g d2g d3g d4g d5d6gdgd7gf      d8               Zd9 Zd: Zd; Zd< Z d= Z!d> Z"d? Z#d@ Z$dA Z%yB)C	_SIMD_ALLz*
    To test all vector types at once
    c                 L   | j                         }| j                  |      }||k(  sJ | j                  |      }||k(  sJ | j                  |      }||k(  sJ | j	                  |      }t        |      d | j                  dz   }|d | j                  dz   }||k(  sJ ||k7  sJ y )Nr	   )r1   r   loadaloadsloadlr+   r'   )r   r   	load_data
loada_data
loads_datar  
loadl_half	data_halfs           r   test_memory_loadz_SIMD_ALL.test_memory_load  s    zz|IIdO	D   ZZ%
T!!!ZZ%
T!!!

4 %[$++q.1
$++q.)	Y&&&}}r   c                 |   | j                         }| j                  |      }dg| j                  z  }| j                  ||       ||k(  sJ dg| j                  z  }| j	                  ||       ||k(  sJ dg| j                  z  }| j                  ||       ||k(  sJ dg| j                  z  }| j                  ||       |d | j                  dz   |d | j                  dz   k(  sJ ||k7  sJ dg| j                  z  }| j                  ||       |d | j                  dz   || j                  dz  d  k(  sJ ||k7  sJ y )Nr   r	   )r1   r   r'   storestoreastoresstorelstoreh)r   r   r   r  store_astore_sstore_lstore_hs           r   test_memory_storez_SIMD_ALL.test_memory_store  sH   zz|		$dkk!

5% }}##GU#$##GU#$##GU#Q'4a+@@@@%##GU#Q'4Q+@@@@%r   zintrin, elsizes, scale, fillzself.load_tillz, self.load_till    @   r   i  z!self.load2_tillz, self.load2_tillr	     c                    | j                         |vry t        |      \  }}| j                         }t        t	        d| j
                  dz               }|| j
                  dz  | j
                  dz  gz  }|D ]\  }	 |||	g| }
 |||	      }|	|z  }	|d |	 || j
                  |	z
  |z  z  z   }|
|k(  sJ |d |	 dg| j
                  |	z
  z  z   }||k(  r\J  y )Nr   r	   r
   r   )r?   r   r1   r+   r(   r'   )r   r   elsizesscalefillnpyv_load_tillznpyv_load_tillr   lanesr?  	load_till
load_tillz	data_till
data_tillzs                 r   test_memory_partial_loadz"_SIMD_ALL.test_memory_partial_load  s    
 g-*.v,'zz|U1dkkAo./$++q.$++q.11A&tQ66I(q1JJARa4DKKMe+C#DDI	)))bqQC4;;q=$99J+++ r   zintrin, elsizes, scale)zself.store_tillr  r   )zself.store2_tillr  r	   c                    | j                         |vry t        |      }| j                         }| j                  d      }| j                  |      }t	        t        d| j                  dz               }|| j                  dz  | j                  dz  gz  }|D ]C  }	|j                         }
|d |	|z   |
d |	|z   | j                  d      } |||	|       ||
k(  rCJ  y )NTr   r   r	   r
   r?   r   r1   r   r+   r(   r'   copy)r   r   r  r  npyv_store_tillr   data_revr   r  r?  r  
store_tills               r   test_memory_partial_storez#_SIMD_ALL.test_memory_partial_store  s    
 g-v,zz|::d:+		$U1dkkAo./$++q.$++q.11A I"&x%.IhqwD1JJ51*** r   )z
self.loadnr  r   )zself.loadn2r  r	   c                    | j                         |vry t        |      }t        dd      D ]  }|dk  rb| j                  || | j                  z        }t        t        j                  t        t        |dd      D cg c]  }|| d |    c}        }n|dk(  r&| j                         }|d| | j                  |z  z  }n]| j                  || j                  z        }t        t        j                  t        t        |      D cg c]
  }||d |    c}        }| j                  |      } |||      }	|	|k(  rJ  y c c}w c c}w )Nr  r   rL   r-   )
r?   r   r(   r1   r'   r+   	itertoolschainr   r   )
r   r   r  r  
npyv_loadnstrider   r   data_strideloadns
             r   test_memory_noncont_loadz"_SIMD_ALL.test_memory_noncont_load  sN   
 g-&\
CnFzzz&6'$++*=>"9??U5!R5HI5H4
F
+5HIJ$  1zz|"1Umt{{E/ABzzt{{(:z;"9??E%LALq4	6	?LAB$D  ))K0KtV,EK'''! % J Bs   <EEz!self.loadn_tillz, self.loadn_tillz#self.loadn2_tillz, self.loadn2_tillc                    | j                         |vry t        |      \  }}t        t        d| j                  dz               }|| j                  dz  | j                  dz  gz  }t        dd      D ]d  }|dk  rb| j                  || | j                  z        }	t        t        j                  t        t        |dd      D 
cg c]  }
|	|
 d |    c}
        }n|dk(  r&| j                         }	|	d| | j                  |z  z  }n]| j                  || j                  z        }	t        t        j                  t        t        |      D 
cg c]
  }
|	|
d |    c}
        }t        | j                  |            }|D ]S  }||z  }| j                  |z
  }|d | |||z  z  z   } ||	||g| }||k(  sJ |d | dg|z  z   } ||	||      }||k(  rSJ  g y c c}
w c c}
w )	Nr   r	   r
   r  r  r   rL   r  )
r?   r   r+   r(   r'   r1   r  r  r   r   )r   r   r  r  r  npyv_loadn_tillznpyv_loadn_tillr  r  r   r   r  r?  nscalellanesdata_stride_till
loadn_tilldata_stride_tillzloadn_tillzs                      r    test_memory_noncont_partial_loadz*_SIMD_ALL.test_memory_noncont_partial_load  s   
 g-,0L)/U1dkkAo./$++q.$++q.11CnFzzz&6'$++*=>"9??U5!R5HI5H4
F
+5HIJ$  1zz|"1Umt{{E/ABzzt{{(:z;"9??E%LALq4	6	?LAB$  tyy56KUv-(465=+AA ! -T61DtD
!%5555$/$8A3<$G!.tVQ?"&7777  % J Bs   GG)zself.storenr  r   )zself.storen2r  r	   c                 T   | j                         |vry t        |      }| j                         }| j                  |      }| j                  |z  }t        dd      D ]~  }dg|z  | j                  z  }	t        d||z  |      D ]  }
|
|z  |z  }||||z    |	|
|
|z     dg|z  | j                  z  }|dgdz  z  } ||||       |d d |	k(  sJ |dd  dgdz  k(  r~J  t        dd      D ]  }dg| z  | j                  z  }	t        d||z  |      D ]  }
|
|z  |z  }||||z    |	|
|z
  |
xs d   dgdz  }|dg| z  | j                  z  z  } ||||       |dd  |	k(  sJ |d d dgdz  k(  rJ  dg| j                  z  }	|	j                         }|| d  |	d|  ||d|       ||	k(  sJ y )Nr   r  r   r      r  )r?   r   r1   r   r'   r(   r  )r   r   r  r  npyv_storenr   r   hlanesr  data_storenr9   r   storens                r   test_memory_noncont_storez#_SIMD_ALL.test_memory_noncont_store  s'   
 g-6lzz|		$%ArlF&6/DKK7K1fVmV4Y%)-a%Aag& 5 Vf_t{{2FtfRiF.$3<;...#$<D6"9,,, # CmF&F7*T[[8K1fVmV4Y%15a%AeGAI. 5 VBYFtfw&44F."#;+---#2;4&)+++ $ ft{{*!!##UFG}AeFAu%$$$r   )zself.storen_tillr  r   )zself.storen2_tillr  r	   c                    | j                         |vry t        |      }| j                         }| j                  |      }t	        t        d| j                  dz               }|| j                  dz  | j                  dz  gz  }| j                  |z  }t        dd      D ]  }	|D ]  }
dg|	z  | j                  z  }|d |
|z   dg| j                  |
|z  z
  z  z   }t        d||	z  |	      d |
 D ]  }||	z  |z  }||||z    ||||z     dg|	z  | j                  z  }|dgdz  z  } |||	|
|       |d d |k(  sJ |dd  dgdz  k(  rJ   t        dd      D ]  }	|D ]  }
dg|	 z  | j                  z  }|d |
|z   dg| j                  |
|z  z
  z  z   }t        d||	z  |	      d |
 D ]  }||	z  |z  }||||z    |||z
  |xs d   dgdz  }|dg|	 z  | j                  z  z  } |||	|
|       |dd  |k(  sJ |d d dgdz  k(  rJ   |D ]C  }
dg| j                  z  }|j                         }|d |
|z   | d  |d|  ||d|
|       ||k(  rCJ  y )	Nr   r	   r
   r  r   r   r  r  r  )r   r   r  r  npyv_storen_tillr   r   r  r  r  r?  r  tdatar9   r   storen_tills                   r   !test_memory_noncont_partial_storez+_SIMD_ALL.test_memory_noncont_partial_store?  s   
 g-<zz|		$U1dkkAo./$++q.$++q.11%ArlF!FVOdkk9	Xag$4;;qw3F)GGq&-8!<AFE)A+01U7+;Ia%( =  $fvo;vby( fa?"4C(I555"34(TF2I555  # CmF!FfW,t{{:	Xag$4;;qw3F)GGq&-8!<AFE)A381U73CIagai40 =  $fRiv/$++== fa?"23'9444"3B'D6"9444  $ A,I#..*K!%hqw!8Ia[!Q6)+++ r   zintrin, table_size, elsize)z
self.lut32r  r  )z
self.lut16   r  c                     || j                         k7  ryt        |      }t        | j                  d|       }t	        d|      }|D ]+  }| j                  |      } ||      } |||      }	|	|k(  r+J  y)zi
        Test lookup table intrinsics:
            npyv_lut32_##sfx
            npyv_lut16_##sfx
        NrR   r   )r?   r   r   r   r(   rN   )
r   r   
table_sizeelsize	idx_itrintabler   broadiidxluts
             r   test_lutz_SIMD_ALL.test_lutn  s|     T&&((fDII&':;	a$A[[^FA,C$C&= =	 r   c                 &   | j                         }|dg| j                  z  k(  sJ t        dd      D ](  }| j                  |      }||g| j                  z  k(  r(J  | j	                         | j	                  d      }}| j                  |      | j                  |      }} | j                  | }||k(  sJ  | j                  dg| }	|	|k(  sJ g d}
| j                  j                  r|
j                  d       | j                  j                  r|
j                  d       |
D ]+  } t        | d	|z         |      j                  }|d
|z   k(  r+J  | j                  | j                  | j                         | j                               ||      }||k(  sJ | j                  | j!                  | j                         | j                               ||      }||k(  sJ | j#                  |      |d   k(  sJ | j                  j%                          y )Nr   r   rM  Tr   r   r   u16s16r   r   r   r   f64f32reinterpret_rW   )zeror'   r(   rN   r1   r   setsetfr   r   appendsimd_f32r   r\   selectrl  rm  extract0cleanup)r   broadcast_zeror   
broadcastir   r   r   r   vsetvsetfsfxesr   vec_nameselect_aselect_bs                  r   	test_miscz_SIMD_ALL.test_misc  s   !t{{!2222q"AQJ!t{{!2222  tzz$z'?99V,dii.? txx v~~ 		"&v&
 G99LL99LLC:wt^c%9:7CLLHw},,, 
 ;;tzz$))+tyy{CWgV6!!!;;t{{499;		DgwW6!!! }}W%333
 			r   c                    | j                         | j                  d      }}| j                  |      | j                  |      }}|d | j                  dz   }|d | j                  dz   }|| j                  dz  d  }|| j                  dz  d  }| j                  ||      }	|	||z   k(  sJ | j	                  ||      }
|
||z   k(  sJ | j                  ||      }|||z   ||z   fk(  sJ | j                  t        ||      D cg c]  }|D ]  }|  c}}      }| j                  t        ||      D cg c]  }|D ]  }|  c}}      }| j                  ||      }|||fk(  sJ dg| j                  z  dz  } | j                  d      |||f       |t        |      t        |      z   k(  sJ | j                  ||      }|||fk(  sJ  | j                  d      t        |      t        |      z         }|||fk(  sJ y c c}}w c c}}w )NTr   r	   r   r  r   )
r1   r   r'   combinelcombinehcombiner   r$   r+   unzip)r   r   r   r   r   	data_a_lo	data_b_lo	data_a_hi	data_b_hir  r  r  prI   	data_zipl	data_ziphvzipr  s                     r   test_reorderz_SIMD_ALL.test_reorder  s:   **,

4
(@99V,dii.??DKKN+	?DKKN+	4;;>?+	4;;>?+	=='29y0000=='29y0000,,w09y0)i2GHHHH II9i0
0!!QA!A0
 	 II9i0
0!!QA!A0
 	 xx)	9----s4;;q $' 23tIi8888 

9i0((((  i4	?!BC((((!

s    G?
2H
c                 B   | j                         }|dk(  ry t        d| j                  d|z        D cg c]$  }t        t        ||d|z  z               D ]  }| & }}}| j	                  | j                  t        | j                                    }||k(  sJ y c c}}w )Nr  r   )r?   r(   r'   r)   rev64r   )r   ssizer0   r>  
data_rev64r  s         r   test_reorder_rev64z_SIMD_ALL.test_reorder_rev64  s    !!#B;QRY7
7!aRY 78! 8 7 	 
 

499U4;;%789
"""
s   )Bc           	         | j                         }|dk  ry| j                  | j                               }d|z  }|dz
  }| j                  |z  }|dk(  rddgng d}t	        |      D ][  }|D cg c]
  }||z	  |z   }	} | j
                  |g|	 }
t        |	|z        D cg c]  \  }}|||| z  z       }}}|
|k(  r[J  yc c}w c c}}w )z\
        Test permuting elements for each 128-bit lane.
        npyv_permi128_##sfx
        r  N   r   r  r   )r   r	   r
      )r?   r   r1   r'   r(   permi128r   )r   r  r   permnpermdnlane128shflr   shfindicesvpermej
data_vperms                 r   test_reorder_permi128z_SIMD_ALL.test_reorder_permi128  s    
 !!#2:yy&U
a;;%"1v,uA59:TcSE)TG:!DMM$11E &gh&677DAq Q!uf*%&7   J&&& :s   .C#Czfunc, intrinrh  ri  rj  rk  rl  c                    | j                         r| j                         }n,| j                  | j                         | j                  z
        }| j                  | j	                         d      }| j                  |      | j                  |      }}t        | |      }| j                         fd}t        ||      D 	cg c]  \  }}	 |||	       }
}}	 | |||            }||
k(  sJ y c c}	}w )NTr   c                 4    | D cg c]  }|k(  	 c}S c c}w rA   ry   rp  s     r   rs  z4_SIMD_ALL.test_operators_comparison.<locals>.to_bool	  rt  ru  )	r*   r1   rB   r'   rC   r   r   rT   r   )r   r   r   r   r   r   r   rs  r   rY   r|  cmprr  s               @r   test_operators_comparisonz#_SIMD_ALL.test_operators_comparison  s     ;;=ZZ\FZZ$++ =>FDMMOT:99V,dii.?v&OO%		: ,/vv+>?+>41aDAJ+>?fWg./h @s   C/c                    | j                         r| j                         }n,| j                  | j                         | j                  z
        }| j                  | j	                         d      }| j                  |      | j                  |      }}| j                         r;| j                  |      }| j                  |      }| j                  | j                  }}n||}}d | j
                  }} |t        ||      D 	
cg c]
  \  }	}
|	|
z   c}
}	      } || j                  ||            }||k(  sJ  |t        ||      D 	
cg c]
  \  }	}
|	|
z   c}
}	      } | t        | d      ||            }||k(  sJ  |t        ||      D 	
cg c]
  \  }	}
|	|
z   c}
}	      } | t        | d      ||            }||k(  sJ  ||D 	cg c]  }	|	  c}	      } | t        | d      |            }||k(  sJ | j                  dvry t        ||      D 	
cg c]  \  }	}
|	|
 z   }}	}
 | t        | d      ||            }||k(  sJ y c c}
}	w c c}
}	w c c}
}	w c c}	w c c}
}	w )	NTr   c                     | S rA   ry   )r   s    r   r   z2_SIMD_ALL.test_operators_logical.<locals>.<lambda>  s    r   r   r   r   r   r   )r*   r1   rB   r'   rC   r   rM   r   r   r   r   )r   r   r   r   r   data_cast_adata_cast_bcast	cast_datar   rY   r   r   r   r   r   r   data_notr   r   r   s                        r   r   z _SIMD_ALL.test_operators_logical  si   ;;=ZZ\FZZ$++ =>FDMMOT:99V,dii.?;;=++G4K++G4K"//1B1B)D'-vK)499)DK0MN0M1a!e0MNODHHWg./xK0MN0M1a!e0MNO'GD$'9:g~~K0MN0M1a!e0MNO(GD%(':;x+6+Qqb+67(GD%(12x88D!(+K(EF(E1Q!V(E	F*WT6*7G<=	!!!) O O O 7 Gs    I
I
I

I I%r   r   r   r   )r   r	   r	  r
   )rL   rK  )r   r   r	   r	  r
   )r  r  il    )r   rL   rK  r%  r
   r   rL   c                     | j                  || j                  z        }t        |      }t        | |      } ||      } ||      }||k(  sJ yr   r  r   s          r   r   z"_SIMD_ALL.test_operators_crosstest6  r  r   c                    d| j                   dd  z   }t        | j                  d|d| j                         }t        | j                  d| j                   d|      } || j                  d            }| j	                  | j                  d      | j                  d            }||k7  sJ  ||      } ||      }||k7  sJ y )NrY   r   cvt_r   r   )r   r   r   rN   rl  )r   bsfx
to_booleanfrom_booleanfalse_vbtrue_vb
false_vsfx	true_vsfxs           r   test_conversion_booleanz!_SIMD_ALL.test_conversion_booleanN  s    TXXab\!TYYtTXX(FG
tyy4*HIdkk!n-::dkk!ndkk!n=7"""!(+
 )	Y&&&r   c                    | j                   dvry| j                   d   t        t        | j                   dd       dz        z   }t        | j                  d| d| j                          }| j                  | j                         | j                  z
        }| j                  |      } ||      }|d| j                  dz   }|| j                  dz  d }|||fk(  sJ y)zh
        Test expand intrinsics:
            npyv_expand_u16_u8
            npyv_expand_u32_u16
        r   r  Nr   r   r	   expand_r   )	r   strr>   r   r   r1   rB   r'   r   )r   totypeexpandr   r   edatadata_lodata_his           r   test_conversion_expandz _SIMD_ALL.test_conversion_expand[  s     88=(!STXXab\!21!455gfXQtxxj$AB

4==?T[[89		$uQ't{{A~''****r   c                 d   | j                         r| j                         }n,| j                  | j                         | j                  z
        }| j                  | j	                         d      }| j                  |      | j                  |      }}| j                  t        ||      D cg c]
  \  }}||z    c}}      }| j                  ||      }||k(  sJ | j                  t        ||      D cg c]
  \  }}||z
   c}}      }	| j                  ||      }
|
|	k(  sJ y c c}}w c c}}w NTr   )	r*   r1   rB   r'   rC   r   r   r
  r   )r   r   r   r   r   r   rY   data_addr
  data_subr   s              r   test_arithmetic_subaddz _SIMD_ALL.test_arithmetic_subaddo  s   ;;=ZZ\FZZ$++ =>FDMMOT:99V,dii.? 99FF0CD0C1a!e0CDExx)hIIVV1DE1DAq1u1DEFxx)h E Fs   +D&
5D,
c                    | j                   dv ry | j                         r| j                         }n,| j                  | j                         | j                  z
        }| j                  | j                         d      }| j                  |      | j                  |      }}| j                  t        ||      D cg c]
  \  }}||z   c}}      }| j                  ||      }||k(  sJ y c c}}w )N)r   r   Tr   )	r   r*   r1   rB   r'   rC   r   r   r  )	r   r   r   r   r   r   rY   data_mulr  s	            r   test_arithmetic_mulz_SIMD_ALL.test_arithmetic_mul  s    88~%;;=ZZ\FZZ$++ =>FDMMOT:99V,dii.?99FF0CD0C1a!e0CDEhhw(h Es   :C+
c                 N   | j                         sy | j                         | j                  d      }}| j                  |      | j                  |      }}| j                  t        ||      D cg c]
  \  }}||z   c}}      }| j	                  ||      }||k(  sJ y c c}}w r=  )r*   r1   r   r   div)	r   r   r   r   r   r   rY   data_divrE  s	            r   test_arithmetic_divz_SIMD_ALL.test_arithmetic_div  s    {{}tzz$z'?99V,dii.? 99FF0CD0C1a!e0CDEhhw(h Es   0B!
c                    | j                         ry| j                         fd}d g}|t        ddd      z  }|t        ddd      z  }| j                         }|dkD  r |t        dd	d
      z  }|t        dd	d      z  }|dkD  r |t        d	dd      z  }|t        d	dd      z  }|dkD  r |t        ddd      z  }|t        ddd      z  }||D cg c]  }|  c}z  }t	        j
                  ||      D ]  \  }}| j                  |      d   }|dk(  r | j                  | j                  |            }|D cg c]  } |||       }}| j                  |      }	| j                  ||	      }
|
|k(  rJ  yc c}w c c}w )zn
        Test integer division intrinsics:
            npyv_divisor_##sfx
            npyv_divc_##sfx
        Nc                 j    |dk(  r| k(  r| S | dk  |dk  }}| dk(  s||k(  r| |z  S | |z   |z
  |z  dz   S )z
            Divide towards zero works with large integers > 2^53,
            and wrap around overflow similar to what C does.
            rL   r   r   ry   )r   rf  sign_asign_dint_mins       r   	trunc_divz3_SIMD_ALL.test_arithmetic_intdiv.<locals>.trunc_div  sX    
 Bw1<UAEFFAv6)AvJ'A-11r   r   r      r     r   r;  i    i  r  l        i    il            l            l    )r*   rC   r(   r?   r  productrN   r   r1   divisordivc)r   rM  r   bsizer0   dividendrQ  r   	data_divcdivisor_parmsrR  rL  s              @r   test_arithmetic_intdivz _SIMD_ALL.test_arithmetic_intdiv  s    ;;=--/
	2 G8}at$$av&&!!#19E$u--DE$w//D2:E%..DE%00D2:E%..DE%00DT"T!T""!*!2!24!>Hgkk'*1-G!|yyH!56H8@A11g.IA LL1M99X}5D9$$$ "? # Bs   
E9:E>c                     | j                   dvry| j                         }| j                  |      }t        |      }| j                  |      }||k(  sJ y)zH
        Test reduce sum intrinsics:
            npyv_sum_##sfx
        )r   r   r  r  N)r   r1   r   r   )r   r   r   data_sumvsums        r   test_arithmetic_reduce_sumz$_SIMD_ALL.test_arithmetic_reduce_sum  sP    
 8877zz|		$t9xxxr   c                 ,   | j                   dvryd| j                  | j                         | j                         | j                  z
  f}|D ]G  }| j	                  |      }| j                  |      }t        |      }| j                  |      }||k(  rGJ  y)zQ
        Test extend reduce sum intrinsics:
            npyv_sumup_##sfx
        r3  Nr   )r   r'   rC   rB   r1   r   r   sumup)r   r   rr   r   rY  rZ  s          r   test_arithmetic_reduce_sumupz&_SIMD_ALL.test_arithmetic_reduce_sumup  s    
 88=(DKK$--/$++2MNA::a=DIIdOE4yH::e$D8### r   c                    | j                  | j                               }| j                  | j                  d            }| j                  | j                         | j                               }| j	                  | j                         | j                               }| j                  ||      }| j                  ||||      }||k(  sJ | j                  ||||      }||k(  sJ | j                  ||      }| j                  ||||      }||k(  sJ | j                  ||||      }||k(  sJ | j                         sy| j                  ||      }	| j                  ||||      }
|
|	k(  sJ | j                  |||      }||	k(  sJ | j                  ||||      }
|
|k(  sJ | j                  |||      }|| j                         k(  sJ y)z
        Conditional addition and subtraction for all supported data types.
        Test intrinsics:
            npyv_ifadd_##SFX, npyv_ifsub_##SFX
        Tr   N)r   r1   rl  r  rm  r   ifsubr
  ifaddr*   rE  ifdivifdivz)r   r   r   r   
false_maskr?  ra  r>  rb  rF  rc  rd  s               r   test_mask_conditionalz_SIMD_ALL.test_mask_conditional  s    ))DJJL)))DJJtJ45ZZ		TYY[9	[[diik:
88GW-

9gw@   

:wA88GW-

9gw@   

:wA{{}88GW-

9gw@   Y9!!!

:wAZ':$$$r   N)&r\   rw   rx   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   r1  r;  r@  rC  rG  rW  r[  r_  rf  ry   r   r   r  r    s   $ 4 [[;	*Ha&B	,hFF;KL> ,	,  [[5()8 +	+  [[5#$8 (	(, [[;	,hF8D	.!ff=MN> 8	8B [[5$%8 !%	!%F [[5)*8 ),	),V [[9< !	!"+Z$)L
#', [[^	g	g	g	g	g. "$"L [[Xu~6[[V6	
	
		& 	'	 7''+( 
-%^ $!%r   r  )r   r   r   r   r  )r  r  )r  )r  rX   ro   r   (rp   )ztarget 'z$' isn't supported by current machinez' isn't supported by NPYVz"' doesn't support single-precisionr  z!' doesn'tsupport double-precisionr  )r   r   rq   Testr   )reason)FFFFF)2r   r-  r   r  r  numpy.core._simdr   r   r   numpy.core._multiarray_umathr   r   r   r{   r   r   r  r  r  bool_sfxint_sfxfp_sfxall_sfxtests_registryitemsrq   r   r   
simd_widthrr   pretty_namelenrs   skipdictskip_sfxr  r   r  clsr   rR  skip_minhrr   typer\   tclsr   globalsry   r   r   <module>r     sJ       H H 905/4a  a Fy' y'vK8 K8\$ $.$ $"T'} T'lG
% G
%R '
@

F
ji
hjji 'K"J##D)K
;!#((;/02!!nDvH+&JKYY+&?@}} ( 6B BHUO}} ( 6: :HUO %**,
sC\\#t,F6DW[1sTD$s||nAj\;-qNPTVZ[D/   /5'+GIdmm$  -/ )r   