o
    OZh                    @   s   d dl Z d dlZd dlZd dlmZmZ d dlZd dlmZm	Z	 de
 kZG dd dejZG dd dejZG d	d
 d
ejZedkrKe  dS dS )    N)
CollectionSequence)Vector2Vector3PyPyc                   @   s    e Zd ZdZdd Zdd ZdS )MathModuleTestzMath module tests.c                 C   s   t jddd}| |d t jddd}| |d t jddd}| |d | tt jjd	 | tt jjd
d
d
 | tt jjddd | tt jjddd d S )N
   d         ?g     K@              $@      ?g      Y@   str皙?g      )pygamemathlerpassertAlmostEqualassertRaises	TypeError
ValueErrorselfresult r   E/var/www/auris/lib/python3.10/site-packages/pygame/tests/math_test.py	test_lerp   s   zMathModuleTest.test_lerpc                 C   sD  t jddd}| |d t jddd}| |d t jddd}| |d t jddd}| |d t jddd}| |d t jddd}| |d t jd	dd}| |d t jddd}| |d t jddd}| |d t jd
dd}| |d
 | tt jjd | tt jjddd dS )zTest clamp function.r   r         r   Q?      @      $      @hellopyZthonN)r   r   clampassertEqualr   r   r   r   r   r   r   
test_clamp#   s,   zMathModuleTest.test_clampN)__name__
__module____qualname____doc__r   r)   r   r   r   r   r      s    r   c                   @   s<  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMdN Z)dOdP Z*dQdR Z+dSdT Z,dUdV Z-dWdX Z.dYdZ Z/d[d\ Z0d]d^ Z1d_d` Z2dadb Z3dcdd Z4dedf Z5dgdh Z6didj Z7dkdl Z8dmdn Z9dodp Z:dqdr Z;dsdt Z<dudv Z=dwdx Z>dydz Z?d{d| Z@d}d~ ZAdd ZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdS )Vector2TypeTestc                 C   sl   t  | _t dd| _t dd| _d| _t| j| _t | j| _d| _t| j| _	t | j| _
d| _d| _d S )Nr   r   333333?333333@)ffffff@333333@r2   r3   )r   zeroVece1e2t1listl1v1t2l2v2s1s2r   r   r   r   setUpP   s   
zVector2TypeTest.setUpc                 C   s&   t  }| |jd | |jd d S Nr   r   r(   xyr   vr   r   r   testConstructionDefault]   s   z'Vector2TypeTest.testConstructionDefaultc                 C   s(   t d}| |jd | |jd d S Nr   r   rC   rF   r   r   r   testConstructionScalarb      z&Vector2TypeTest.testConstructionScalarc                 C   s*   t dd}| |jd | |jd d S Nr   )rD   r   rC   rF   r   r   r   testConstructionScalarKeywordsg      
z.Vector2TypeTest.testConstructionScalarKeywordsc                 C   s,   t ddd}| |jd | |jd d S )Nr      rD   rE   r          @rC   rF   r   r   r   testConstructionKeywordsl      z(Vector2TypeTest.testConstructionKeywordsc                 C   s*   t dd}| |jd | |jd d S Nr0   r1   rC   rF   r   r   r   testConstructionXYq   rN   z"Vector2TypeTest.testConstructionXYc                 C   s(   t d}| |jd | |jd d S )Nr/   r0   r1   rC   rF   r   r   r   testConstructionTuplev   rK   z%Vector2TypeTest.testConstructionTuplec                 C   s,   t ddg}| |jd | |jd d S rT   rC   rF   r   r   r   testConstructionList{   rS   z$Vector2TypeTest.testConstructionListc                 C   s.   t t dd}| |jd | |jd d S rT   rC   rF   r   r   r   testConstructionVector2   s   z'Vector2TypeTest.testConstructionVector2c                 C   s   | j j}| || j j | || j d  | j j}| || j j | || j d  d| j _| | j jd d| j _| | j jd dd }| t| d S )Nr   r   T㥛 	@c                  S      t  } d| _d S Nspamr   rD   rG   r   r   r   assign_nonfloat      
z<Vector2TypeTest.testAttributeAccess.<locals>.assign_nonfloat)r:   rD   r(   rE   r   r   r   tmpr_   r   r   r   testAttributeAccess   s   z#Vector2TypeTest.testAttributeAccessc                 C   s\  |  ttddtdd |  tttddtj |  ttddttdd |  ttddttdd |  ttddtdd |  ttddtdd |  ttddtdd |  ttddtdd |  ttddtdd |  ttd	d	td	d	 |  ttd
d
tdd |  ttddtdd |  ttddtdd |  ttddtdd |  ttddtdd |  ttddtdd |  ttddtdd |  ttddtdd |  ttddtdd |  ttddtdd |  ttddtdd |  ttddtdd |  ttddtdd |  ttdddtdd |  tttdddtj |  tttdddtj |  tttdddtj |  ttddtdd |  ttddtdd |  ttddtd d  |  ttd!d!td"d" |  ttd#d#td$d$ |  ttd%d%td"d" | tttddd& | tttddd' d S (Nr   r   r   g    eAg@xDg      r#   g    eg@xg?r   g333333$@g eA皙g333333$g eg?g#@g33dAgg#g33dg       r   r   g      @   g@r"   r2         @g      iggffffffg      ?a)r(   roundr   r   typer   r   r@   r   r   r   test___round___basic   s    
  
   
 
  
 
         z$Vector2TypeTest.test___round___basicc                 C   s6   t dd}| }| |j|j | |j|j d S )N     P@g     @)r   copyr(   rD   rE   r   Zv_copy0Zv_copy1r   r   r   testCopy   s   
zVector2TypeTest.testCopyc                 C      t dd}t dd}t dd}t dd}||d}||d | t|jd|j | t|jd|j | t|jd|j | t|jd|j d S )	Ng)\( @gGz[@zG@rn   皙(@     @r    rO   r   move_towardsmove_towards_ipr(   rk   rD   rE   r   expectedorigintarget	change_ipchanger   r   r   test_move_towards_basic      



z'Vector2TypeTest.test_move_towards_basicc                 C   s   t dd}t dd}t dd}t dd}||d}||d | t|jd|j | t|jd|j | t|jd|j | t|jd|j d S )Nrt     rs   rn   ru      rO   rv   ry   r   r   r   test_move_towards_max_distance   r   z.Vector2TypeTest.test_move_towards_max_distancec                 C   s   t dd}t dd}t dd}t dd}||d}||d | t|jd|j | t|jd|j | t|jd|j | t|jd|j d S )Nrs   rn   rt   ru   r   rO   rv   ry   r   r   r   test_move_nowhere  r   z!Vector2TypeTest.test_move_nowherec                 C   rr   )	Nq=
ףp@QD@rs   rn   rt   ru   rO   rv   ry   r   r   r   test_move_away  r   zVector2TypeTest.test_move_awayc                 C   sL   t dd}| }dD ]}| |||| ||| | || qd S )Nr   r   gRQrf   r   gʡE?   )r   ro   r(   rw   rx   r   vecZvec2distr   r   r   test_move_towards_self$  s   
z&Vector2TypeTest.test_move_towards_selfc                 C   s|   dd }dd }dd }dd }d	d
 }dd }|  t| |  t| |  t| |  t| |  t| |  t| d S )Nc                  S   &   t dd} t dd}| |dd d S Nrs   rn   rt   ru   r    rO   r   rw   r{   r|   r   r   r   overpopulate-     

z>Vector2TypeTest.test_move_towards_errors.<locals>.overpopulatec                  S   r   r   r   rx   r   r   r   r   overpopulate_ip2  r   zAVector2TypeTest.test_move_towards_errors.<locals>.overpopulate_ipc                  S   $   t dd} t dd}| |d d S )Nrs   rn   rt   ru   Znovialr   r   r   r   r   invalid_types17     

z@Vector2TypeTest.test_move_towards_errors.<locals>.invalid_types1c                  S   r   )Nrs   rn   rt   ru   isr   r   r   r   r   invalid_types_ip1<  r   zCVector2TypeTest.test_move_towards_errors.<locals>.invalid_types_ip1c                  S   $   t dd} t dd}| dd d S )Nrs   rn   rt   ru   Zkindar    r   r   r   r   r   invalid_types2A  r   z@Vector2TypeTest.test_move_towards_errors.<locals>.invalid_types2c                  S   r   )Nrs   rn   rt   ru   coolr    r   r   r   r   r   invalid_types_ip2F  r   zCVector2TypeTest.test_move_towards_errors.<locals>.invalid_types_ip2)r   r   )r   r   r   r   r   r   r   r   r   r   test_move_towards_errors,  s   z(Vector2TypeTest.test_move_towards_errorsc                    s  t dd t  d d   | t d |  d d |  d d | t fdd |  d d |  d	 d | t fd
d |  d d  ddg |  dd  dg |  d d dg | t ddg | t d d d< d d< |  jd |  jd ddg d d < |  jd |  jd dd }| t	| dd }| t	| dd }| t
| d S )Nr0   r1   rO   r   r   c                          d S NrO   r   r   r^   r   r   <lambda>X      z.Vector2TypeTest.testSequence.<locals>.<lambda>rf   c                      r   )Nr   r   r   r^   r   r   r   [  r   r/   r2   r3   333333"@=
ףp=&@c                  S      t  } g d| d d < d S Nr   rO   r    r   r^   r   r   r   r   i     z2Vector2TypeTest.testSequence.<locals>.overpopulatec                  S      t  } dg| d d < d S Nr   r   r^   r   r   r   underpopulateo     z3Vector2TypeTest.testSequence.<locals>.underpopulatec                  S      t  } d| d< d S Nr\   r   r   r^   r   r   r   r_   u     z5Vector2TypeTest.testSequence.<locals>.assign_nonfloat)r   r(   lenr   
IndexErrorr8   tuplerD   rE   r   r   r   r   r   r_   r   r^   r   testSequenceR  s6   
zVector2TypeTest.testSequencec                 C   s  d
dd}t | j}| t||d d d | t||dd d | t||ddd t | j}dg|d d d< | |d| jjg t | j}dg|d d d< | || jjdg t | j}||d d d< | || jj| jjg t | j}t | j}t | j}dg|dd< dg|tdd< d	|dd< | || | || | t|t| j | t|t| j | t|t| j d S )Nc                 S      |d ur|d ur|d ur| |||= d S |d ur(|d u r(|d ur(| |d |= d S |d u r<|d u r>|d ur@| d d |= d S d S d S d S Nr   r   startstopstepr   r   r   delSlice}     z5Vector2TypeTest.testExtendedSlicing.<locals>.delSlicerO   r   rf   r   r   皙@r   NNN)	r   r:   r   r   r(   rE   rD   slicerl   r   r   rG   rj   bcr   r   r   testExtendedSlicing{  s2   







z#Vector2TypeTest.testExtendedSlicingc                    s   t dd |  d | d v  | d v  | d v |  d | t fdd | t fdd d S )Nr   r   rO   c                         d v S Nstringr   r   r   r   r   r     r   z/Vector2TypeTest.test_contains.<locals>.<lambda>c                      r   Ny      @      @r   r   r   r   r   r     r   )r   
assertTrue__contains__assertFalser   r   r@   r   r   r   test_contains  s   
zVector2TypeTest.test_containsc                 C   s  | j | j }| t|t| j  | |j| j j| jj  | |j| j j| jj  | j | j }| t|t| j  | |j| j j| jd   | |j| j j| jd   | j | j	 }| t|t| j  | |j| j j| j	d   | |j| j j| j	d   | j
| j }| t|t| j  | |j| j
d | jj  | |j| j
d | jj  | j| j }| t|t| j  | |j| jd | jj  | |j| jd | jj  d S Nr   r   r:   r=   r   
isinstancerl   r(   rD   rE   r;   r<   r7   r9   r   v3r   r   r   testAdd  (    zVector2TypeTest.testAddc                 C   s  | j | j }| t|t| j  | |j| j j| jj  | |j| j j| jj  | j | j }| t|t| j  | |j| j j| jd   | |j| j j| jd   | j | j	 }| t|t| j  | |j| j j| j	d   | |j| j j| j	d   | j
| j }| t|t| j  | |j| j
d | jj  | |j| j
d | jj  | j| j }| t|t| j  | |j| jd | jj  | |j| jd | jj  d S r   r   r   r   r   r   testSub  r   zVector2TypeTest.testSubc                 C   s   | j | j }| t|t| j | |j| j | jj  | |j| j | jj  | j| j }| |j| jj| j  | |j| jj| j  d S r   )	r>   r:   r   r   rl   r(   rD   rE   r?   rF   r   r   r   testScalarMultiplication  s   z(Vector2TypeTest.testScalarMultiplicationc                 C   s   | j | j }| t|t| j  | |j| j j| j  | |j| j j| j  | j | j }| t|t| j  | 	|j| j j| j  | 	|j| j j| j  d S r   )
r:   r>   r   r   rl   r   rD   rE   r?   r(   rF   r   r   r   testScalarDivision  s   z"Vector2TypeTest.testScalarDivisionc                 C   B   |  t| jd |  t| jd | | j  | | j d S NFTr(   boolr4   r:   r   r@   r   r   r   testBool     zVector2TypeTest.testBoolc                 C   s   | j 
 }| t|t| j  | |j| j j | |j| j j | t|t| j  | j  }| t|t| j  | |j| j j  | |j| j j  | t|t| j  d S r   )	r:   r   r   rl   r(   rD   rE   assertNotEqualidrF   r   r   r   	testUnary  s   zVector2TypeTest.testUnaryc                 C   s   t dd}t dd}t dd}| ||kd | ||kd | ||kd | ||kd | |dkd | |dkd | |ddgkd | |ddgkd | |d	kd | |d	kd | |g d
kd | |g d
kd d S )Nr    r         @       r   TF)r    r   r   )r    r   r   )r   r(   r   Zint_vecZflt_vecZzero_vecr   r   r   testCompare  s   


zVector2TypeTest.testComparec                 C   s   t dd}| t|d d S )Nr0   r1   z
[1.2, 3.4])r   r(   r   rF   r   r   r   testStr  s   
zVector2TypeTest.testStrc                 C   s2   t dd}| | d | |t |  d S )Nr0   r1   z<Vector2(1.2, 3.4)>)r   r(   __repr__rF   r   r   r   testRepr  s   
zVector2TypeTest.testReprc                    s   | j  }|j |   | j d  |   | j d  | t fdd | j  }| j  }| t|t| | t|t|  | t|t| | t| j  | j	 d}| j D ]}| || j |  |d7 }qad S )Nr   r   c                           S r   r   r   Znext_r   r   r         z*Vector2TypeTest.testIter.<locals>.<lambda>
r:   __iter____next__r(   r   StopIterationr   r   r8   r9   r   itZit1Zit2idxvalr   r   r   testIter  s    




zVector2TypeTest.testIterc                 C   s  t dd}|d}|d}| |jd | |jd | |jd | |jd | |j|j | |j|j t dd}|d}| |jd | |jd |d}| |j|j | |j|j |d}| |j|j | |j|j | t dddt dd d S )	Nr   r   Z     rf   h  gPv@)r   rotater(   rD   rE   r   r:   r=   r   r   r   r   test_rotate)  s(   






"zVector2TypeTest.test_rotatec                 C   sj   dt jfdt jd fdt j d fdt jd ff}|D ]\}}| t||t |t |f qd S Nr   r   rO      )r   pir(   r   
rotate_radcossin)r   tests
initialVecradiansr   r   r   test_rotate_rad@  s   zVector2TypeTest.test_rotate_radc                 C   sl   t dd}| |dd  | |jd | |jd t dd}|d | |jd | |jd d S Nr   r   r   rf   r   )r   r(   	rotate_iprD   rE   rF   r   r   r   test_rotate_ipM  s   


zVector2TypeTest.test_rotate_ipc                 C   sr   dt jfdt jd fdt j d fdt jd ff}|D ]\}}t|}|| | |t |t |f qd S r   )r   r  r   rotate_rad_ipr(   r  r  )r   r  r  r  r   r   r   r   test_rotate_rad_ipW  s   
z"Vector2TypeTest.test_rotate_rad_ipc                    s    j  } |j|j |j|j  d   j j jd    j j jd    j j|j  j j|j  d  t fdd d S )Nr   r   r   r   c                      
    j  S r   r4   	normalizer   r@   r   r   r   l     
 z0Vector2TypeTest.test_normalize.<locals>.<lambda>)	r:   r  r   rD   rE   r(   r9   r   r   rF   r   r@   r   test_normalizec  s   
 $zVector2TypeTest.test_normalizec                    s    j 
 } |j|j |j|j  d  | d   |j|j |j|j  d   j j|j  j j|j  d  t fdd d S )Nr   r   c                      r  r   r4   normalize_ipr   r@   r   r   r   x  r  z3Vector2TypeTest.test_normalize_ip.<locals>.<lambda>)	r:   r   rD   rE   r(   r  r   r   r   rF   r   r@   r   test_normalize_ipn  s     $z!Vector2TypeTest.test_normalize_ipc                 C   T   |  | j d | j }|  | d |  | j d |  | j d d S r   r(   r:   is_normalizedr  r6   r4   rF   r   r   r   test_is_normalizedz  
   
z"Vector2TypeTest.test_is_normalizedc                 C   s   |  | j| j| jj| jj | jj| jj   |  | j| j| jj| jd  | jj| jd    |  | j| j| jj| jd  | jj| jd    |  | j| j| j| j  |  | j| jd d S Nr   r   )r(   r:   crossr=   rD   rE   r<   r;   r@   r   r   r   
test_cross  s   *.."zVector2TypeTest.test_crossc                 C   s   |  | j| j| jj| jj | jj| jj   |  | j| j| jj| jd  | jj| jd    |  | j| j| jj| jd  | jj| jd    | | j| j| j| j | | j| j| j| j  d S r   )	r   r:   dotr=   rD   rE   r<   r;   r(   r@   r   r   r   test_dot  s   *.. "zVector2TypeTest.test_dotc                 C   s   |  | j| j| j | j  |  tdddd |  tdddd |  tdddd |  ttdddd	 d S )
Nr   )rf   r   r   r   )r   rf   r      )rf   r      )r(   r:   r   angle_tor=   r  r   absr@   r   r   r   test_angle_to  s     zVector2TypeTest.test_angle_toc                    sh   t dd}|d  |t ddtd   t fdd  |dd   | j d S )Nr   r$   rO   c                          j dS r   r4   scale_to_lengthr   r@   r   r   r         z6Vector2TypeTest.test_scale_to_length.<locals>.<lambda>r   )r   r(  r(   r   sqrtr   r   r4   rF   r   r@   r   test_scale_to_length  s   

z$Vector2TypeTest.test_scale_to_lengthc                 C   B   |  tdd d |  tdd d |  | j d d S )Nr    r  r   r   r   )r(   r   lengthr4   r@   r   r   r   test_length     zVector2TypeTest.test_lengthc                 C   r,  )Nr    r  r   r   r   )r(   r   length_squaredr4   r@   r   r   r   test_length_squared  r/  z#Vector2TypeTest.test_length_squaredc                    sx   t ddt dd} |t dd  d| |      t fdd d S )Nr   rf   r   r    c                           jS r   reflectr4   r   rF   r   r   r     r)  z.Vector2TypeTest.test_reflect.<locals>.<lambda>)r   r(   r4  r   r   r   nr   rF   r   test_reflect  s   

zVector2TypeTest.test_reflectc                    s   t dd}t | t dd}|  |d  |  t dd t |  d|  |  || t |  |  |  |  | t fdd d S )Nr   rf   r   r    c                      s     t S r   )
reflect_ipr   r   r=   r   r   r     r)  z1Vector2TypeTest.test_reflect_ip.<locals>.<lambda>)r   r(   r8  r4  r   r   r   r:   r6  r   r9  r   test_reflect_ip  s   

zVector2TypeTest.test_reflect_ipc                 C   s  | j | j }| | j| jtd | | jdtd | | jddgtd | | j | jt|j	|j	 |j
|j
   | | j | jt|j	|j	 |j
|j
   | | j | jt|j	|j	 |j
|j
   | | j | j d | | j | jd | | j | jd | | j | j| j| j | | j | j| j| j | | j | j| j| j  d S NrO   )r   r   r   r   )r:   r=   r(   r5   distance_tor6   r   r*  r   rD   rE   r;   r<   r7   r9   r   diffr   r   r   test_distance_to  s&   (((  $z Vector2TypeTest.test_distance_toc                 C   sr  | j | j }| | j| jd | | jdd | | jddgd | | j | j|j|j |j|j   | | j | j	|j|j |j|j   | | j | j
|j|j |j|j   | | j | j d | | j | jd | | j | jd | | j | j| j| j  | | j | j	| j| j | | j | j
| j| j d S r<  )r:   r=   r(   r5   distance_squared_tor6   r   rD   rE   r;   r<   r7   r9   r>  r   r   r   test_distance_squared_to  s2   """z(Vector2TypeTest.test_distance_squared_toc                 C   s`   t dd}|d | |t d |dd | |t dd |d | |t d d S )	Nr    r  r   )r   r   r   r   )r  r   )r   r   )r   updater(   r   rF   r   r   r   test_update  s   


zVector2TypeTest.test_updatec              	   C   s   |  | jj| jj| jjf |  | jj| jj| jj| jj| jj| jj| jjf | j| j_|  | j| j | j| j_|  | j| jd | jd f |  t| jt	 dd }dd }| 
t| | 
t| dd }| 
t| d	d
 }| 
t| d S )Nr   r   c                   S      dt  _d S Nr   rO   )r   xxr   r   r   r   invalidSwizzleX     z5Vector2TypeTest.test_swizzle.<locals>.invalidSwizzleXc                   S   rE  rF  )r   yyr   r   r   r   invalidSwizzleY  rJ  z5Vector2TypeTest.test_swizzle.<locals>.invalidSwizzleYc                   S   rE  Nr    )r   xyr   r   r   r   invalidAssignment  rJ  z7Vector2TypeTest.test_swizzle.<locals>.invalidAssignmentc                   S   s   t t d d S )N   ä)getattrr   r   r   r   r   unicodeAttribute  s   z6Vector2TypeTest.test_swizzle.<locals>.unicodeAttribute)r(   r:   ZyxrE   rD   Zxxyyxyr;   rN  rl   r   r   AttributeErrorr   )r   rI  rL  rO  rR  r   r   r   test_swizzle  s$   &

zVector2TypeTest.test_swizzlec                 C   h   |  t| jjt |  t| jjt |  t| jjt |  t| jj	t
 |  t| jjt
 d S r   )r(   rl   r:   rD   floatrN  r   Zxyxr   xyxyr   xyxyxr@   r   r   r   test_swizzle_return_types$  
   z)Vector2TypeTest.test_swizzle_return_typesc                    s   j } j} j} j} | | |j| |j| f  | | |j| |j| f  | | |j| |j| f  | | |j| |j| f  | | |j| |j| f  | | |j| |j| f  | | |j| |j| f  | |k|j|ko|j|k  | |k |j|k o|j|k   | |k|j|ko|j|k  | |k||j|jfv  | |k|j|ko|j|k  | |k|j|ko|j|k  | |k||j|jfv  ||  ||j ||j f  ||  ||j ||j f  ||  ||j ||j f  ||  ||j ||j f  ||  ||j ||j f  ||  ||j ||j f  ||  ||j ||j f  || k ||jk o||jk   || k||jko||jk  || k||jko||jk  || k||j|jfv  || k||jko||jk  || k||jko||jk  || k||j|jfv  t| | t|  | | ||   | | ||   | | |j|j |j|j f  | | |j|j |j|j f  | | |j|j |j|j f  | | |j|j |j|j f  | | |j|j |j|j f  | |k|j|jko|j|jk  | |k |j|jk o|j|jk   | |k|j|jko|j|jk  | |k|j|jko|j|jk  | |k|j|jko|j|jk  | |k|j|jko|j|jk  ||  ||   ||  ||   ||  |j|j |j|j f  ||  |j|j |j|j f  ||  |j|j |j|j f  ||  |j|j |j|j f  ||  |j|j |j|j f  || k |j|jk o|j|jk   || k|j|jko|j|jk  || k|j|jko|j|jk  || k|j|jko|j|jk  || k|j|jko|j|jk  || k|j|jko|j|jk  | |  ||   | |  ||   | |  |j|j |j|j f  | |  |j|j |j|j f  | |  |j|j |j|j f  | |  |j|j |j|j f  | |  |j|j |j|j f  | | k |j|jk o|j|jk   | | k|j|jko|j|jk  | | k|j|jko|j|jk  | | k|j|jko|j|jk  | | k|j|jko|j|jk  | | k|j|jko|j|jk  t	| t	|jt	|jf  |  |   | 
 |
   t
| t
|  t
t  t
t    j d d  tdd   t fdd  t fdd  tdd   tdd   td	d   t fd
d  t fdd  t fdd  t fdd  t fdd  t fdd d S )Nr   r   r   c                   S   s   t tdd dS Nrf   r   r0   )powr   elementwiser   r   r   r   r         z2Vector2TypeTest.test_elementwise.<locals>.<lambda>c                          j  d S Nrf   r4   r^  r   r@   r   r   r         c                      r`  ra  rb  r   r@   r   r   r     rc  c                   S   s   t dd d S r  r   r^  r   r   r   r   r         c                   S   s   t dd d S r  rd  r   r   r   r   r     re  c                   S   s   t dd d S r  rd  r   r   r   r   r     re  c                      s   t dd  j S r   r   r^  r4   r   r@   r   r   r     r_  c                      s   t dd  j S r   rf  r   r@   r   r   r     r_  c                      s   t dd  j S r   rf  r   r@   r   r   r     r_  c                         d j   S r   rb  r   r@   r   r   r     rc  c                         d j   S r   rb  r   r@   r   r   r     rc  c                         d j   S r   rb  r   r@   r   r   r     rc  )r:   r=   r>   r?   r(   r^  rD   rE   rl   r$  r   r   r4   r   r   ZeroDivisionError)r   r:   r=   r>   r?   r   r@   r   test_elementwise,  s   $$$$$$$$$$ $$ $$$$$$$&&& && (((((******(((((******$$$,$&&&&&&$z Vector2TypeTest.test_elementwisec                    s    t fdd   t fdd   t fdd tddtddd }fdd	td D D ]\}} | d  |||  q@ | td
dtdd   }fdd	td D D ]\}} |    t|     q |  	d  	d   tfdd d S )Nc                          j  jdS Nr
   r4   slerpr:   r   r@   r   r   r         z,Vector2TypeTest.test_slerp.<locals>.<lambda>c                      rl  rm  r:   ro  r4   r   r@   r   r   r     rp  c                          j  j dS rm  r4   ro  r   r@   r   r   r     rp  r   r   r   c                 3   s(    | ]}| |t  fV  qd S r   ro  rV  .0istepsr:   r=   r   r   	<genexpr>  s   & z-Vector2TypeTest.test_slerp.<locals>.<genexpr>r	   c                 3   *    | ]}| | t  fV  qd S r   rt  ru  rx  r   r   rz       ( r
   c                             dS rm  ro  r   r:   r   r   r     rc  )
r   r   r   r#  ranger   r-  r(   rV  ro  r   Z
angle_steprw  uZradial_factorr   r   ry  r:   r=   r   
test_slerp  s.   

&

&"zVector2TypeTest.test_slerpc                    sj   t dd t dd|  dd | t fdd t dd t dd|  dd	 d S )
Nr   r   r
   )r   r   c                           dS Nr$   r   r   r:   r=   r   r   r     r)  z+Vector2TypeTest.test_lerp.<locals>.<lambda>r   ri   )r   r$   )r   r(   r   r   r   r@   r   r  r   r     s   



zVector2TypeTest.test_lerpc                    s  t    | j  | | j  | | jt | j  | | j d | | j d | d| j  d | t fdd | t fdd | t fdd | t fd	d | t fd
d | t fdd | tdd  | tdd  | tdd  | tdd  | tdd  | tdd   d |  d| j  | t dd| j  | t d   d |  | j | t d| j | t d  d S )Nr   )r   r   rO   )rO   r   c                      
     dS N)NN
from_polarr   r^   r   r   r     r  z,Vector2TypeTest.test_polar.<locals>.<lambda>c                      r  Nabr  r   r^   r   r   r     r  c                      r  Nr   r  r   r^   r   r   r     r  c                      r  r   r  r   r^   r   r   r     r  c                      r  Nr   r  r   r^   r   r   r     r  c                      s     ddS Nr   rO   r  r   r^   r   r   r     r)  c                   S   
   t dS r  r   r  r   r   r   r   r     r  c                   S   r  r  r  r   r   r   r   r     r  c                   S   r  r  r  r   r   r   r   r     r  c                   S   r  r   r  r   r   r   r   r     r  c                   S   r  r  r  r   r   r   r   r     r  c                   S   s   t ddS r  r  r   r   r   r   r     r)  )r
   r   r
   )	r   r  r:   Zas_polarr(   r5   r6   r   r   r@   r   r^   r   
test_polar  s6   

zVector2TypeTest.test_polarc                 C   s`   G dd dt jj}|dd}|dd}|| }| ||dd |d9 }| ||dd d S )Nc                   @      e Zd ZdS )z7Vector2TypeTest.test_subclass_operation.<locals>.VectorNr*   r+   r,   r   r   r   r   Vector      r  rO   r   r   r  )r   r   r   r(   )r   r  Zvec_aZvec_bZ
result_addr   r   r   test_subclass_operation  s   

z'Vector2TypeTest.test_subclass_operationc                 C   s@   t dd}t dd}||}| |j|j | d|j dS )MProject onto x-axis, e.g. get the component pointing in the x-axis direction.rO   r   r   Nr   projectr(   rD   rE   r   rG   Zx_axisactualr   r   r   test_project_v2_onto_x_axis  s
   


z+Vector2TypeTest.test_project_v2_onto_x_axisc                 C   s@   t dd}t dd}||}| d|j | |j|j dS )MProject onto y-axis, e.g. get the component pointing in the y-axis direction.rO   r   r	   Nr  r   rG   Zy_axisr  r   r   r   test_project_v2_onto_y_axis  s
   


z+Vector2TypeTest.test_project_v2_onto_y_axisc                 C   sZ   t dd}t dd}||}|||| | }| |j|j | |j|j dS )Project onto other vector.rO   r    r   N)r   r  r  r(   rD   rE   r   rG   otherr  rz   r   r   r   test_project_v2_onto_other  s   


z*Vector2TypeTest.test_project_v2_onto_otherc                 C   ^   t dd}t dd}|t|}|||| | }| |j|j | |j|j dS )#Project onto other tuple as vector.rO   r    r   N)r   r  r   r  r(   rD   rE   r  r   r   r   #test_project_v2_onto_other_as_tuple!     

z3Vector2TypeTest.test_project_v2_onto_other_as_tuplec                 C   r  )"Project onto other list as vector.rO   r    r   N)r   r  r8   r  r(   rD   rE   r  r   r   r   "test_project_v2_onto_other_as_list/  r  z2Vector2TypeTest.test_project_v2_onto_other_as_listc                 C   s(   t dd}t dd}| t|j| dS )ECheck if exception is raise when projected on vector has zero length.rO   r    r   N)r   r   r   r  r   rG   r  r   r   r   /test_project_v2_raises_if_other_has_zero_length=  s   

z?Vector2TypeTest.test_project_v2_raises_if_other_has_zero_lengthc                 C   s"   t dd}d}| t|j| dS )ECheck if exception is raise when projected on vector is not iterable.rO   r    r   N)r   r   r   r  r  r   r   r   /test_project_v2_raises_if_other_is_not_iterableF  s   
z?Vector2TypeTest.test_project_v2_raises_if_other_is_not_iterablec                 C   s.   t dd}| t|t | t|t d S )Nr    r  )r   r   r   r   r   r   rF   r   r   r   test_collection_abcO  s   
z#Vector2TypeTest.test_collection_abcc                 C   st   t dd}|d}|dd}| || |d | || |dd | || t dd}| || d S )N   rO   r   r   gW, ;@gc(3I?)r   clamp_magnituder(   clamp_magnitude_ipr   r:   r=   r   expected_v2r   r   r   test_clamp_mag_v2_maxT  s   



z%Vector2TypeTest.test_clamp_mag_v2_maxc                 C   sH   t dd}|dd}|dd t dd}| || | || d S )Nr   rO   r    r   gcOT\w?gcOT\w@)r   r  r  r(   r   r:   r=   r  r   r   r   test_clamp_mag_v2_minc  s   

z%Vector2TypeTest.test_clamp_mag_v2_minc              	   C   sv   t dd}dD ]1}| j|d! |j| }|j|  | || | |t dd W d    n1 s3w   Y  qd S )Nr   rO   )r   rg   )r!   gffffff@)(\?gp=
ף@gffffff@args)r   subTestr  r  r(   r   r:   r  r=   r   r   r   test_clamp_mag_v2_no_changek  s   


z+Vector2TypeTest.test_clamp_mag_v2_no_changec                 C   sr   t dd}|dd}|dd | || | | d |d}|dd | || | |t   d S Nr   rO   rg   r   )r   r  r  r(   r   r-  r   r:   r=   r   r   r   test_clamp_mag_v2_edge_casesy  s   

z,Vector2TypeTest.test_clamp_mag_v2_edge_casesc              	   C   s   t dd}dD ].}| j|d | jt|jg|R   | jt|jg|R   W d    n1 s0w   Y  qdD ].}| j|d | jt|jg|R   | jt|jg|R   W d    n1 saw   Y  q8t  }| t|jd | t|jd d S Nr   rO   ))Zfoobarr   )g9vcu@test)invalid_args))rf   )r  r    )r   )r  r   r    r  )r   r  r   r   r  r  r   r   r:   r  r=   r   r   r   test_clamp_mag_v2_errors  s    
z(Vector2TypeTest.test_clamp_mag_v2_errorsc                 C   s  t dd}G dd dt }|dd}| | d | t|| | t|t|  | |t|| | |t||d | |t||d | |t|	d | |t|
d | |t|| | |t||d | |t|d | |t|dd | |t| |  |dd}| t|| | | t|| | | t|d | | t|d | | t| d | d	S )
z Check if Vector2 is subclassabler  rO   c                   @      e Zd Zdd ZdS )z7Vector2TypeTest.test_subclassing_v2.<locals>.TestVectorc                 S      dS N  r   r@   r   r   r   supermariobrosiscool     zLVector2TypeTest.test_subclassing_v2.<locals>.TestVector.supermariobrosiscoolNr*   r+   r,   r  r   r   r   r   
TestVector      r  r   r  r   r    N)r   r(   r  r   rl   ro   r4  r   ro  r   r  r  rw   r  r^  r   rG   r  r  Zother1r   r   r   test_subclassing_v2  s,   


z#Vector2TypeTest.test_subclassing_v2N)Ir*   r+   r,   rA   rH   rJ   rM   rR   rU   rV   rW   rX   rc   rm   rq   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.  r1  r7  r;  r@  rB  rD  rT  rY  rk  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r.   O   s    O&)%	

		
		r.   c                   @   s  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMdN Z)dOdP Z*dQdR Z+dSdT Z,dUdV Z-dWdX Z.dYdZ Z/d[d\ Z0d]d^ Z1d_d` Z2dadb Z3dcdd Z4dedf Z5dgdh Z6didj Z7dkdl Z8dmdn Z9dodp Z:dqdr Z;dsdt Z<e=>e?dudvdw Z@dxdy ZAdzd{ ZBd|d} ZCd~d ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLe=>e?dudd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd Zadd ZbdS )Vector3TypeTestc                 C   s~   t  | _t ddd| _t ddd| _t ddd| _d| _t| j| _t | j| _d| _	t| j	| _
t | j	| _d| _d| _d S )Nr   r   r0   r1   333333#@)r2   r3   g @r2   r3   )r   r4   r5   r6   e3r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   r   r   r   rA     s   
zVector3TypeTest.setUpc                 C   s4   t  }| |jd | |jd | |jd d S rB   r   r(   rD   rE   zrF   r   r   r   rH     s   z'Vector3TypeTest.testConstructionDefaultc                 C   s:   t ddd}| |jd | |jd | |jd d S )Nr0   r1   r  r  rF   r   r   r   testConstructionXYZ     z#Vector3TypeTest.testConstructionXYZc                 C   s6   t d}| |jd | |jd | |jd d S )Nr  r0   r1   r  r  rF   r   r   r   rV        z%Vector3TypeTest.testConstructionTuplec                 C   s:   t g d}| |jd | |jd | |jd d S )Nr0   r1   333333#r0   r1   r  r  rF   r   r   r   rW     r  z$Vector3TypeTest.testConstructionListc                 C   s>   t t ddd}| |jd | |jd | |jd d S )Nr0   r1   r  r  rF   r   r   r   testConstructionVector3  s   z'Vector3TypeTest.testConstructionVector3c                 C   s6   t d}| |jd | |jd | |jd d S rI   r  rF   r   r   r   rJ     r  z&Vector3TypeTest.testConstructionScalarc                 C   s8   t dd}| |jd | |jd | |jd d S rL   r  rF   r   r   r   rM     s   
z.Vector3TypeTest.testConstructionScalarKeywordsc                 C   s<   t dddd}| |jd | |jd | |jd d S )Nr   rO   r    )rD   rE   r  r   rQ   r   r  rF   r   r   r   rR     s   z(Vector3TypeTest.testConstructionKeywordsc                 C   s&   |  ttdd | j ttddd d S )Nr   rO   rP   )r   r   r   r@   r   r   r   testConstructionMissing  s   z'Vector3TypeTest.testConstructionMissingc                 C   s   | j j}| || j j | || j d  | j j}| || j j | || j d  | j j}| || j j | || j d  d| j _| | j jd d| j _| | j jd d| j _| | j jd dd }| t| d S )Nr   r   rO   rY   c                  S   rZ   r[   r]   r^   r   r   r   r_     r`   z<Vector3TypeTest.testAttributeAccess.<locals>.assign_nonfloat)r:   rD   r(   rE   r  r   r   ra   r   r   r   rc     s"   z#Vector3TypeTest.testAttributeAccessc                 C   sH   t ddd}| }| |j|j | |j|j | |j|j d S )Ng     x@g     @g     8@)r   ro   r(   rD   rE   r  rp   r   r   r   rq     s
   zVector3TypeTest.testCopyc                    s  t ddd | t d |  d d |  d d |  d d | t fdd	 |  d
 d |  d d |  d d | t fdd	 |  d d  g d |  dd  ddg |  d d dg |  d d
 ddg |  dd dg | t g d | t d d d< d d< d d< |  jd |  jd |  j	d g d d d < |  jd |  jd |  j	d dd }| t
| dd }| t
| dd }| t| d S )Nr0   r1   r  r    r   r   rO   c                      r   rM  r   r   r^   r   r   r   '  r   z.Vector3TypeTest.testSequence.<locals>.<lambda>rf   r   r   c                      r   )Nr  r   r   r^   r   r   r   +  r   r  r2   r3   g )r   r   R*r   r   r  c                  S   r   N)r   rO   r    r  r   r^   r   r   r   r   >  r   z2Vector3TypeTest.testSequence.<locals>.overpopulatec                  S   r   r   r  r^   r   r   r   r   D  r   z3Vector3TypeTest.testSequence.<locals>.underpopulatec                  S   r   r   r   r^   r   r   r   r_   J  r   z5Vector3TypeTest.testSequence.<locals>.assign_nonfloat)r   r(   r   r   r   r8   r   rD   rE   r  r   r   r   r   r^   r   r   !  sB   zVector3TypeTest.testSequencec                 C   s  ddd}t | j}| t||d d d | t||dd d | t||ddd t | j}ddg|d d d< | |d| jjdg t | j}ddg|d d d	< | |d| jjdg t | j}||d d d
< | || jj| jj| jjg t | j}t | j}t | j}dg|dd< dg|tdd< d|dd< | || | || | t	|t	| j | t	|t	| j | t	|t	| j d S )Nc                 S   r   r   r   r   r   r   r   r   R  r   z5Vector3TypeTest.testExtendedSlicing.<locals>.delSlicerO   r   re   gr      r   rf   r   r   r   )
r   r:   r   r   r(   rE   r  rD   r   rl   r   r   r   r   r   P  s2   







z#Vector3TypeTest.testExtendedSlicingc                    s   t ddd |  d | d v  | d v  | d v  | d v |  d | t fdd | t fdd d S )	Nr   r   rO   r    r   c                      r   r   r   r   r   r   r   r     r   z/Vector3TypeTest.test_contains.<locals>.<lambda>c                      r   r   r   r   r   r   r   r     r   )r   r   r   r   r   r   r@   r   r   r   r   u  s   zVector3TypeTest.test_containsc                 C   sL  | j | j }| t|t| j  | |j| j j| jj  | |j| j j| jj  | |j| j j| jj  | j | j	 }| t|t| j  | |j| j j| j	d   | |j| j j| j	d   | |j| j j| j	d   | j | j
 }| t|t| j  | |j| j j| j
d   | |j| j j| j
d   | |j| j j| j
d   | j| j }| t|t| j  | |j| jd | jj  | |j| jd | jj  | |j| jd | jj  | j| j }| t|t| j  | |j| jd | jj  | |j| jd | jj  | |j| jd | jj  d S Nr   r   rO   r:   r=   r   r   rl   r(   rD   rE   r  r;   r<   r7   r9   r   r   r   r   r     2    zVector3TypeTest.testAddc                 C   sL  | j | j }| t|t| j  | |j| j j| jj  | |j| j j| jj  | |j| j j| jj  | j | j	 }| t|t| j  | |j| j j| j	d   | |j| j j| j	d   | |j| j j| j	d   | j | j
 }| t|t| j  | |j| j j| j
d   | |j| j j| j
d   | |j| j j| j
d   | j| j }| t|t| j  | |j| jd | jj  | |j| jd | jj  | |j| jd | jj  | j| j }| t|t| j  | |j| jd | jj  | |j| jd | jj  | |j| jd | jj  d S r  r  r   r   r   r   r     r  zVector3TypeTest.testSubc                 C   s   | j | j }| t|t| j | |j| j | jj  | |j| j | jj  | |j| j | jj  | j| j	 }| |j| jj| j	  | |j| jj| j	  | |j| jj| j	  d S r   )
r>   r:   r   r   rl   r(   rD   rE   r  r?   rF   r   r   r   r     s   z(Vector3TypeTest.testScalarMultiplicationc                 C   s   | j | j }| t|t| j  | |j| j j| j  | |j| j j| j  | |j| j j| j  | j | j	 }| t|t| j  | 
|j| j j| j	  | 
|j| j j| j	  | 
|j| j j| j	  d S r   )r:   r>   r   r   rl   r   rD   rE   r  r?   r(   rF   r   r   r   r     s   z"Vector3TypeTest.testScalarDivisionc                 C   r   r   r   r@   r   r   r   r     r   zVector3TypeTest.testBoolc                 C   s   | j 
 }| t|t| j  | |j| j j | |j| j j | |j| j j | t	|t	| j  | j  }| t|t| j  | |j| j j  | |j| j j  | |j| j j  | t	|t	| j  d S r   )
r:   r   r   rl   r(   rD   rE   r  r   r   rF   r   r   r   r     s   zVector3TypeTest.testUnaryc                 C   s   t ddd}t ddd}t ddd}| ||kd | ||kd	 | ||kd | ||kd	 | |d
kd | |d
kd	 | |ddgkd | |ddgkd	 | |dkd | |dkd	 | |g dkd | |g dkd	 d S )Nr    r      r   r   g      *@r   TF)r    r   r  r   )r    r   r   r   r   r(   r   r   r   r   r     s   zVector3TypeTest.testComparec                 C   s    t ddd}| t|d d S )Nr0   r1   r2   z[1.2, 3.4, 5.6])r   r(   r   rF   r   r   r   r     s   zVector3TypeTest.testStrc                 C   s4   t ddd}| | d | |t |  d S )Nr0   r1   r  z<Vector3(1.2, 3.4, -9.6)>)r   r(   r   rF   r   r   r   r     s   zVector3TypeTest.testReprc                    s   | j  }|j |   | j d  |   | j d  |   | j d  | t fdd | j  }| j  }| t|t| | t|t|  | t|t| | t| j  | j	 d}| j D ]}| || j |  |d7 }qkd S )Nr   r   rO   c                      r   r   r   r   r   r   r   r     r   z*Vector3TypeTest.testIter.<locals>.<lambda>r   r   r   r   r   r     s"   




zVector3TypeTest.testIterc              	   C   s  |  ttdddtddd |  tttdddtj |  ttdddttddd |  ttdddttddd |  ttdddtddd |  ttdddtddd |  ttdddtddd |  ttdddtddd |  ttdddtddd |  ttd	d	d	td	d	d	 |  ttd
d
d
tddd |  ttdddtddd |  ttdddtddd |  ttdddtddd |  ttdddtddd |  ttdddtddd |  ttdddtddd |  ttdddtddd |  ttdddtddd |  ttdddtddd |  ttdddtddd |  ttdddtddd |  ttdddtddd |  ttddddtddd |  tttddddtj |  tttddddtj |  tttddddtj |  ttdddtddd |  ttdddtddd |  ttdddtd d d  |  ttd!d!d!td"d"d" |  ttd#d#d#td$d$d$ |  ttd%d%d%td"d"d" | tttdddd& | tttdddd' d S rd   )r(   rk   r   r   rl   r   r   r@   r   r   r   rm     s     $z$Vector3TypeTest.test___round___basicc              	   C   s  t ddd}t ddd}|d|}|d|}| |jd | |jd | |jd | |jd | |jd | |jd | |j|j | |j|j | |j|j t ddd}|d|}| |jd | |jd | |jd |d|}| |j|j | |j|j | |j|j |d|}| |j|j | |j|j | |j|j | t ddddt dddt ddd d S )	Nr   r   r   r   rf   r   r   g(v@)r   r   r(   rD   rE   r  )r   r:   axisr=   r   r   r   r   r     s:   $zVector3TypeTest.test_rotatec                 C   s~   t ddd}dtjfdtjd fdtj d fdtjd ff}|D ]\}}t |||}| |t|t|df q!d S Nr   r   r   r   r   rO   r  )r   r   r  r  r(   r  r  r   r  r  r  r  r   r   r   r   r	    s    zVector3TypeTest.test_rotate_radc                 C   s   t ddd}t ddd}| |d|d  | |jd | |jd | |jd t ddd}|d| | |jd | |jd | |jd d S r
  )r   r(   r  rD   rE   r  )r   rG   r  r   r   r   r    s   zVector3TypeTest.test_rotate_ipc                 C   s   t ddd}dtjfdtjd fdtj d fdtjd ff}|D ]\}}t |}||| | |t|t|df q!d S r  )r   r   r  r  r(   r  r  r  r   r   r   r    s    z"Vector3TypeTest.test_rotate_rad_ipc                 C   s\  t ddd}|d}|d}| |jd | |jd | |jd | |jd | |jd | |jd | |j|j | |j|j | |j|j t ddd}|d}| |jd | |jd | |jd |d}| |j|j | |j|j | |j|j |d}| |j|j | |j|j | |j|j d S Nr   r   r   r   rf   r   r   )r   Zrotate_xr(   rD   rE   r  r   r   r   r   r   test_rotate_x  2   




zVector3TypeTest.test_rotate_xc                 C   s,   t ddd}|tjd }| |d d S Nr   r   rO   )r   r   r   )r   Zrotate_x_radr   r  r(   r   r   r   r   r   r   test_rotate_x_rad     z!Vector3TypeTest.test_rotate_x_radc                 C   s   t ddd}| |dd  | |jd | |jd | |jd t ddd}|d | |jd | |jd | |jd d S r
  )r   r(   Zrotate_x_iprD   rE   r  r   rF   r   r   r   test_rotate_x_ip     
z Vector3TypeTest.test_rotate_x_ipc                 C   s,   t ddd}|tjd  | |d d S r  )r   Zrotate_x_rad_ipr   r  r(   r   r   r   r   r   test_rotate_x_rad_ip  r  z$Vector3TypeTest.test_rotate_x_rad_ipc                 C   s\  t ddd}|d}|d}| |jd | |jd | |jd | |jd | |jd | |jd | |j|j | |j|j | |j|j t ddd}|d}| |jd | |jd | |jd |d}| |j|j | |j|j | |j|j |d}| |j|j | |j|j | |j|j d S r  )r   Zrotate_yr(   rD   rE   r  r   r   r   r   r   test_rotate_y  r  zVector3TypeTest.test_rotate_yc                 C   ,   t ddd}|tjd }| |d d S Nr   r   rO   r   r   rf   )r   Zrotate_y_radr   r  r(   r  r   r   r   test_rotate_y_rad  r  z!Vector3TypeTest.test_rotate_y_radc                 C   s   t ddd}| |dd  | |jd | |jd | |jd t ddd}|d | |jd | |jd | |jd d S r
  )r   r(   Zrotate_y_ipr   rD   rE   r  rF   r   r   r   test_rotate_y_ip  r  z Vector3TypeTest.test_rotate_y_ipc                 C   ,   t ddd}|tjd  | |d d S r   )r   Zrotate_y_rad_ipr   r  r(   r  r   r   r   test_rotate_y_rad_ip+  r  z$Vector3TypeTest.test_rotate_y_rad_ipc                 C   s\  t ddd}|d}|d}| |jd | |jd | |jd | |jd | |jd | |jd | |j|j | |j|j | |j|j t ddd}|d}| |jd | |jd | |jd |d}| |j|j | |j|j | |j|j |d}| |j|j | |j|j | |j|j d S r  )r   Zrotate_zr(   rD   rE   r  r   r   r   r   r   test_rotate_z0  r  zVector3TypeTest.test_rotate_zc                 C   r  Nr   r   rO   r   r   r   )r   Zrotate_z_radr   r  r(   r  r   r   r   test_rotate_z_radK  r  z!Vector3TypeTest.test_rotate_z_radc                 C   s   t ddd}| |dd  | |jd | |jd | |jd t ddd}|d | |jd | |jd | |jd d S r
  )r   r(   Zrotate_z_ipr   rD   rE   r  rF   r   r   r   test_rotate_z_ipP  r  z Vector3TypeTest.test_rotate_z_ipc                 C   r  r  )r   Zrotate_z_rad_ipr   r  r(   r  r   r   r   test_rotate_z_rad_ip\  r  z$Vector3TypeTest.test_rotate_z_rad_ipc                    s    j  } |j|j |j|j  |j|j  d   j j jd    j j jd    j j jd   j j|j  j j|j  d  j j|j  j j|j  d   j j|j  j j|j  d  } |d  t	 fdd d S )Nr   r   r   rO   r   c                      r  r   r  r   r@   r   r   r   p  r  z0Vector3TypeTest.test_normalize.<locals>.<lambda>)
r:   r  r   rD   rE   r  r(   r9   r   r   r   rG   r  r   r@   r   r  a  s   
,zVector3TypeTest.test_normalizec                    s    j 
 } |j|j |j|j  |j|j  d  | d   |j|j |j|j  |j|j  d  j j|j  j j|j  d  j j|j  j j|j  d   j j|j  j j|j  d  } |d  t	 fdd d S )Nr   rO   r   c                      r  r   r  r   r@   r   r   r     r  z3Vector3TypeTest.test_normalize_ip.<locals>.<lambda>)
r:   r   rD   rE   r  r(   r  r   r   r   r  r   r@   r   r  r  s   ,,z!Vector3TypeTest.test_normalize_ipc                 C   r  r   r  rF   r   r   r   r    r  z"Vector3TypeTest.test_is_normalizedc                 C   s   dd }|  | j| j|| j| j |  | j| j|| j| j |  | j| j|| j| j |  | j| j| j| j  |  | j| j| j d S )Nc                 S   s`   t | d |d  | d |d   | d |d  | d |d   | d |d  | d |d   S Nr   rO   r   r  )rj   r   r   r   r   r    s
   z)Vector3TypeTest.test_cross.<locals>.cross)r(   r:   r  r=   r<   r;   r4   )r   r  r   r   r   r    s      "zVector3TypeTest.test_crossc                 C   s  |  | j| j| jj| jj | jj| jj  | jj| jj   |  | j| j| jj| jd  | jj| jd   | jj| jd    |  | j| j| jj| jd  | jj| jd   | jj| jd    |  | j| j| j| j |  | j| j| j| j  d S r  )	r   r:   r  r=   rD   rE   r  r<   r;   r@   r   r   r   r     s   .44 "zVector3TypeTest.test_dotc                 C   s   |  tddddd |  tddddd |  tddddd |  ttddddd	 |  | j| j| j| j| j | j  d S )
Nr   r   )rf   r   r   r   r  )rf   r   r   r!  )rf   r   rf   r"  )	r(   r   r#  r$  r:   r   r=   r  r  r@   r   r   r   r%    s   zVector3TypeTest.test_angle_toc                    sl   t ddd}|d  |t dddtd   t fdd  |dd   | j d S )Nr   r$   r    c                      r&  r   r'  r   r@   r   r   r     r)  z6Vector3TypeTest.test_scale_to_length.<locals>.<lambda>r   )r   r(  r(   r   r*  r   r   r4   rF   r   r@   r   r+    s   
z$Vector3TypeTest.test_scale_to_lengthc                 C   sR   |  tddd td |  tddd td |  | j d d S Nr    r  r   2   r   r   )r(   r   r-  r   r*  r4   r@   r   r   r   r.    s   zVector3TypeTest.test_lengthc                 C   sF   |  tddd d |  tddd d |  | j d d S r  )r(   r   r0  r4   r@   r   r   r   r1    s   z#Vector3TypeTest.test_length_squaredc                    s~   t dddt ddd} |t ddd  d| |      t fdd d S )Nr   rf   r   r    c                      r2  r   r3  r   rF   r   r   r     r)  z.Vector3TypeTest.test_reflect.<locals>.<lambda>)r   r(   r4  r   r   r5  r   rF   r   r7    s   zVector3TypeTest.test_reflectc                    s   t ddd}t |t ddd} |d   t ddd t |d|   || t ||   |   t fdd d S )Nr   rf   r   r    c                      r2  r   )r8  r4   r   r   r=   r   r   r     r)  z1Vector3TypeTest.test_reflect_ip.<locals>.<lambda>)r   r(   r8  r4  r   r   r:  r   r  r   r;    s   zVector3TypeTest.test_reflect_ipc                 C   s  | j | j }| | j| jtd | | jdtd | | jg dtd | | j | jt|j|j |j	|j	  |j
|j
   | | j | jt|j|j |j	|j	  |j
|j
   | | j | jt|j|j |j	|j	  |j
|j
   | | j | j d | | j | jd | | j | jd | | j | j| j| j  | | j | j| j| j | | j | j| j| j d S NrO   r  r   )r:   r=   r(   r5   r=  r6   r   r*  rD   rE   r  r;   r<   r7   r9   r>  r   r   r   r@    s,   (((  $z Vector3TypeTest.test_distance_toc                 C   sb  t dd}tddd}| t|j| | t|j| | t|jd | t|jd | t|jd | t|jg d | t|jg d | t|jdg | t|jd | t|jd | t|jd | t|jddg | t|jdg | t|jd | t|jg g f | t|jd | t|j | t|jdd	 | t|jdd	d d S 
Nr   r   r   r   r   )r   r   r   r  r[  )r   r%   )r   )r%   rG  )r   r   r   r   r=  r   )r   r=   r   r   r   r   test_distance_to_exceptions  s>   
	z+Vector3TypeTest.test_distance_to_exceptionsc                 C   sH  t dd}tddd}|j}|j}| t|| | t|| | t|d | t|d | t|d | t|g d | t|g d | t|dg | t|d | t|d | t|d | t|ddg | t|dg | t|d | t|g g f | t|d | t| | t|dd	 | t|dd	d d S r  )r   r   rA  r   r   r   )r   r=   r   Zdist_tZdist_t3r   r   r   #test_distance_squared_to_exceptions"  sB   
	z3Vector3TypeTest.test_distance_squared_to_exceptionsc                 C   s  | j | j }| | j| jd | | jdd | | jg dd | | j | j|j|j |j|j  |j	|j	   | | j | j
|j|j |j|j  |j	|j	   | | j | j|j|j |j|j  |j	|j	   | | j | j d | | j | jd | | j | jd | | j | j| j| j  | | j | j
| j| j | | j | j| j| j d S r  )r:   r=   r(   r5   rA  r6   r   rD   rE   r  r;   r<   r7   r9   r>  r   r   r   rB  O  s8   """z(Vector3TypeTest.test_distance_squared_toc                 C   s   |  | jj| jj| jj| jjf |  | jj| jj| jj| jj| jj| jj| jj| jj| jj| jjf	 | j| j_|  | j| j | j| j_	|  | j| jd | jd | jd f | jd d | j_
|  | j| jd | jd | jd f |  t| jt d S r  )r(   r:   ZyxzrE   rD   r  Z	xxyyzzxyzr;   xyzZzxyZyzrl   r   r@   r   r   r   rT  m  s*   "

&&zVector3TypeTest.test_swizzlezknown pypy failurec                 C   sh   dd }dd }dd }dd }|  t| |  t| |  t| |  t| d	d
 }|  t| d S )Nc                   S   rE  rF  )r   rH  r   r   r   r   rI    rJ  z=Vector3TypeTest.test_invalid_swizzle.<locals>.invalidSwizzleXc                   S   rE  rF  )r   rK  r   r   r   r   rL    rJ  z=Vector3TypeTest.test_invalid_swizzle.<locals>.invalidSwizzleYc                   S   rE  rF  )r   zzr   r   r   r   invalidSwizzleZ  rJ  z=Vector3TypeTest.test_invalid_swizzle.<locals>.invalidSwizzleZc                   S   rE  rF  )r   Zwwr   r   r   r   invalidSwizzleW  rJ  z=Vector3TypeTest.test_invalid_swizzle.<locals>.invalidSwizzleWc                   S   rE  rM  )r   rN  r   r   r   r   rO    rJ  z?Vector3TypeTest.test_invalid_swizzle.<locals>.invalidAssignment)r   rS  r   )r   rI  rL  r  r  rO  r   r   r   test_invalid_swizzle  s   z$Vector3TypeTest.test_invalid_swizzlec                 C   rU  r   )r(   rl   r:   rD   rV  rN  r   r  r   rW  r   rX  r@   r   r   r   rY    rZ  z)Vector3TypeTest.test_swizzle_return_typesc                 C   s&   h d}|  |tt| j d S )N>   r   ro  rD   rE   r4  r  r  )r   issubsetsetdirr:   )r   
attributesr   r   r   test_dir_works  s   zVector3TypeTest.test_dir_worksc                    s     j  j  jj j  jj j  jj j f    j  j  jj j  jj j  jj j f    j  j  jj j  jj j  jj j f    j  j  jj j  jj j  jj j f    j  j  jj j  jj j  jj j f    j  j  jj j  jj j  jj j f    j  j  jj j  jj j  jj j f    j  jk jj jko jj jko jj jk    j  jk  jj jk o jj jk o jj jk     j  jk jj jko1 jj jko1 jj jk    j  jk jj jkoR jj jkoR jj jk    j  jk jj jkos jj jkos jj jk    j  jk jj jko jj jko jj jk   d j  tddd j    d j  tddd j    d j  d j    d j  d jj d jj d jj f   d j  d jj d jj d jj f   d j   d jj  d jj  d jj  f   d j  d jj d jj d jj f   d j k d jjk oOd jjk oOd jjk    d j kd jjkold jjkold jjk   d j kd jjkod jjkod jjk   d j kd jjkod jjkod jjk   d j kd jjkod jjkod jjk   d j kd jjkod jjkod jjk   d j kd jjkod jjkod jjk   t	 j  j
 t	 j    j  j
  j j
     j  j
  j j
     j  j
  j j
     j  j
  jj j
j  jj j
j  jj j
j f    j  j
  jj j
j  jj j
j  jj j
j f    j  j
  jj j
j  jj j
j  jj j
j f    j  j
  jj j
j  jj j
j  jj j
j f    j  j
  jj j
j  jj j
j  jj j
j f    j  j
k jj j
jko jj j
jko jj j
jk    j  j
k  jj j
jk o+ jj j
jk o+ jj j
jk     j  j
k jj j
jkoO jj j
jkoO jj j
jk    j  j
k jj j
jkos jj j
jkos jj j
jk    j  j
k jj j
jko jj j
jko jj j
jk    j  j
k jj j
jko jj j
jko jj j
jk    j
 j   j
 j     j
 j   j
 j     j
 j   j
j jj  j
j jj  j
j jj f    j
 j   j
j jj  j
j jj  j
j jj f    j
 j   j
j jj  j
j jj  j
j jj f    j
 j   j
j jj  j
j jj  j
j jj f    j
 j   j
j jj  j
j jj  j
j jj f    j
 j k  j
j jjk o j
j jjk o j
j jjk     j
 j k j
j jjkoȈ j
j jjkoȈ j
j jjk    j
 j k j
j jjko j
j jjko j
j jjk    j
 j k j
j jjko j
j jjko j
j jjk    j
 j k j
j jjko4 j
j jjko4 j
j jjk    j
 j k j
j jjkoX j
j jjkoX j
j jjk    j
  j   j
 j     j
  j   j
 j     j
  j   j
j jj  j
j jj  j
j jj f    j
  j   j
j jj  j
j jj  j
j jj f    j
  j   j
j jj  j
j jj  j
j jj f    j
  j   j
j jj  j
j jj  j
j jj f    j
  j   j
j jj  j
j jj  j
j jj f    j
  j k  j
j jjk oQ j
j jjk oQ j
j jjk     j
  j k j
j jjkow j
j jjkow j
j jjk    j
  j k j
j jjko j
j jjko j
j jjk    j
  j k j
j jjkoÈ j
j jjkoÈ j
j jjk    j
  j k j
j jjko j
j jjko j
j jjk    j
  j k j
j jjko j
j jjko j
j jjk   t j t jjt jjt jjf    j   j     j 
  j
    t j t j   tt  tt     j d	 d
  tdd   t fdd  tdd   tdd   tdd   t fdd  t fdd  t fdd  t fdd  t fdd  t fdd d S )Nr   g      @g      @g      r    rO   r   ir   r  c                   S   s   t tddd dS r\  )r]  r   r^  r   r   r   r   r   	      z2Vector3TypeTest.test_elementwise.<locals>.<lambda>c                      r`  ra  rb  r   r@   r   r   r   	  rc  c                   S   s   t ddd d S r  r   r^  r   r   r   r   r   	  r_  c                   S   s   t ddd d S r  r!  r   r   r   r   r   	  r_  c                   S   s   t ddd d S r  r!  r   r   r   r   r   	  r_  c                      s   t ddd  j S r   r   r^  r4   r   r@   r   r   r   	  r   c                      s   t ddd  j S r   r"  r   r@   r   r   r   	  r   c                      s   t ddd  j S r   r"  r   r@   r   r   r   	  r   c                      rg  r   rb  r   r@   r   r   r   	  rc  c                      rh  r   rb  r   r@   r   r   r   	  rc  c                      ri  r   rb  r   r@   r   r   r   	  rc  )r(   r:   r^  r>   rD   rE   r  r?   r   rl   r=   r$  r   r4   r   r   rj  r@   r   r@   r   rk    s^  &&&&&&&(,,,,,$$  &,22&&&&&"   ,,,,,22  ,,,,,22,,,,,22,z Vector3TypeTest.test_elementwisec                    sz    t fdd   t fdd   t fdd d j j } fddtd D D ]\}} | d   j|||  q7 | j t	d	d
d
t	d
dd   }fddtd D D ]\}} |    t
|     qz |  d  d   tfdd d S )Nc                      rl  rm  rn  r   r@   r   r   r   	  rp  z,Vector3TypeTest.test_slerp.<locals>.<lambda>c                      rl  rm  rq  r   r@   r   r   r   	  rp  c                      rr  rm  rs  r   r@   r   r   r   	  rp  r   c                 3   s,    | ]}| j  j|t fV  qd S r   )r5   ro  r6   rV  ru  )r   ry  r   r   rz  	  s    
z-Vector3TypeTest.test_slerp.<locals>.<genexpr>r   r	   r   r  c                 3   r{  r   rt  ru  rx  r   r   rz  	  r|  r
   c                      r}  rm  r~  r   r  r   r   r   	  rc  )r   r   r5   r#  r6   r  r   r-  r(   r   rV  ro  r  r   r  r   r  	  s.   
&"zVector3TypeTest.test_slerpc                    sr   t ddd t ddd|  dd | t fdd t ddd	 t ddd	|  dd
 d S )Nr   r   r
   )r   r   r   c                      r  r  r  r   r  r   r   r   	  r)  z+Vector3TypeTest.test_lerp.<locals>.<lambda>r   ri   )r   r$   r#  )r   r(   r   r   r   r@   r   r  r   r   	  s   zVector3TypeTest.test_lerpc                    s  t    | j  | | j  | | jt | j  | | j d | | j d | | j d | d| j  d | t	 fdd | t	 fdd | t	 fd	d | t	 fd
d | t	 fdd | t	 fdd | t	dd  | t	dd  | t	dd  | t	dd  | t	dd  | t	dd   d |  d| j  | t dd| j  | t d  d S )N)r   r   r   )r   r   r   r  rO   )rO   r   r   c                      r  Nr   from_sphericalr   r^   r   r   r   
  r  z0Vector3TypeTest.test_spherical.<locals>.<lambda>c                      r  Nabcr%  r   r^   r   r   r   
  r  c                      r  Nr  r%  r   r^   r   r   r   
  r  c                      r  r  r%  r   r^   r   r   r   	
  r  c                      r  rF  r%  r   r^   r   r   r   

  r  c                      s     dddS Nr   rO   r    r%  r   r^   r   r   r   
  rc  c                   S   r  r$  r   r&  r   r   r   r   r   
  r  c                   S   r  r'  r+  r   r   r   r   r   
  r  c                   S   r  r)  r+  r   r   r   r   r   
  r  c                   S   r  r  r+  r   r   r   r   r   
  r  c                   S   r  rF  r+  r   r   r   r   r   
  r  c                   S   s   t dddS r*  r+  r   r   r   r   r   
  rc  )r
   r   r   r
   )
r   r&  r:   Zas_sphericalr(   r5   r6   r  r   r   r@   r   r^   r   test_spherical	  s0   
zVector3TypeTest.test_sphericalc                 C   s   t ddd}|d9 }| |d t ddd}|d }| |d t ddd}|d8 }| |d t ddd}|d7 }| |d d S )Nr   rO   )rQ   rQ   rQ   r  r   r        @r.  r.  r  rF   r   r   r   test_inplace_operators
  s   z&Vector3TypeTest.test_inplace_operatorsc                 C   sR   dd l }tdd}tddd}| |||| | |||| d S )Nr   r   rO   r    )pickler   r   r(   loadsdumps)r   r0  r=   r   r   r   r   test_pickle(
  s
   
zVector3TypeTest.test_picklec                 C   s8   G dd dt jj}|ddd}|d9 }| |d d S )Nc                   @   r  )z7Vector3TypeTest.test_subclass_operation.<locals>.VectorNr  r   r   r   r   r  1
  r  r  rQ   rO   r-  )r   r   r   r(   )r   r  rG   r   r   r   r  0
  s   z'Vector3TypeTest.test_subclass_operationc                 C      t dd}| |jd dS )z*We can get constant values from a swizzle.r  rg   )      @rh   r   N)r   r(   Zxy1rF   r   r   r   test_swizzle_constants8
  
   
z&Vector3TypeTest.test_swizzle_constantsc                 C   r4  )z,We can get 4 constant values from a swizzle.r  rg   )r5  rh   r   r   N)r   r(   Zxy01rF   r   r   r   test_swizzle_four_constants@
  r7  z+Vector3TypeTest.test_swizzle_four_constantsc                 C   s@   t dd}| t |j W d   dS 1 sw   Y  dS )z2An out-of-bounds swizzle raises an AttributeError.r  rg   N)r   r   rS  r  rF   r   r   r   test_swizzle_oobH
  s   
"z Vector3TypeTest.test_swizzle_oobc                 C   s@   t dd}| t d|_W d   dS 1 sw   Y  dS )z6An out-of-bounds swizzle set raises an AttributeError.r  rg   r[  N)r   r   rS  xzrF   r   r   r   test_swizzle_set_oobN
  s   
"z$Vector3TypeTest.test_swizzle_set_oobc                 C   sR   t ddd}t ddd}||}| |j|j | d|j | d|j dS )r  rO   r    r  r   r   Nr   r  r(   rD   rE   r  r  r   r   r   test_project_v3_onto_x_axisU
  s   
z+Vector3TypeTest.test_project_v3_onto_x_axisc                 C   sR   t ddd}t ddd}||}| d|j | |j|j | d|j dS )r  rO   r    r  r   r	   Nr<  r  r   r   r   test_project_v3_onto_y_axisc
  s   
z+Vector3TypeTest.test_project_v3_onto_y_axisc                 C   sR   t ddd}t ddd}||}| d|j | d|j | |j|j dS )zMProject onto z-axis, e.g. get the component pointing in the z-axis direction.rO   r    r  r   M   Nr<  r  r   r   r   test_project_v3_onto_z_axisq
  s   
z+Vector3TypeTest.test_project_v3_onto_z_axisc                 C   sn   t ddd}t ddd}||}|||| | }| |j|j | |j|j | |j|j dS )r  rO   r    r  r   r  N)r   r  r  r   rD   rE   r  r  r   r   r   test_project_v3_onto_other
  s   
z*Vector3TypeTest.test_project_v3_onto_otherc                 C   r   t ddd}t ddd}|t|}|||| | }| |j|j | |j|j | |j|j dS )r  rO   r    r  r   r  N)r   r  r   r  r   rD   rE   r  r  r   r   r   #test_project_v3_onto_other_as_tuple
     z3Vector3TypeTest.test_project_v3_onto_other_as_tuplec                 C   rB  )r  rO   r    r  r   r  N)r   r  r8   r  r   rD   rE   r  r  r   r   r   "test_project_v3_onto_other_as_list
  rD  z2Vector3TypeTest.test_project_v3_onto_other_as_listc                 C   s,   t ddd}t ddd}| t|j| dS )r  rO   r    r  r   N)r   r   r   r  r  r   r   r   /test_project_v3_raises_if_other_has_zero_length
  s   z?Vector3TypeTest.test_project_v3_raises_if_other_has_zero_lengthc                 C   s$   t ddd}d}| t|j| dS )r  rO   r    r  r   N)r   r   r   r  r  r   r   r   /test_project_v3_raises_if_other_is_not_iterable
  s   z?Vector3TypeTest.test_project_v3_raises_if_other_is_not_iterablec                 C   s0   t ddd}| t|t | t|t d S )Nr    r  r   )r   r   r   r   r   r   rF   r   r   r   r  
  s   z#Vector3TypeTest.test_collection_abcc                 C   sx   t ddd}|d}|dd}| || |d | || |dd | || t ddd}| || d S )Nr  rO   r   r   g;Y@giAH1?)r   r  r(   r  r  r   r   r   test_clamp_mag_v3_max
  s   

z%Vector3TypeTest.test_clamp_mag_v3_maxc                 C   sL   t ddd}|dd}|dd t ddd}| || | || d S )	Nr    r   rO   r   r   g!
!	@g4-a?g4-a@)r   r  r  r(   r  r   r   r   test_clamp_mag_v3_min
  s   z%Vector3TypeTest.test_clamp_mag_v3_minc              	   C   sz   t ddd}dD ]2}| j|d" |j| }|j|  | || | |t ddd W d    n1 s5w   Y  qd S )Nr   rO   r    )r  )r!   g333333@)r  gRQ@r  r  )r   r  r  r  r(   r  r   r   r   test_clamp_mag_v3_no_change
  s   

z+Vector3TypeTest.test_clamp_mag_v3_no_changec                 C   st   t ddd}|dd}|dd | || | | d |d}|dd | || | |t   d S r  )r   r  r  r(   r   r-  r  r   r   r   test_clamp_mag_v3_edge_cases
  s   
z,Vector3TypeTest.test_clamp_mag_v3_edge_casesc              	   C   s   t ddd}dD ].}| j|d | jt|jg|R   | jt|jg|R   W d    n1 s1w   Y  qdD ].}| j|d | jt|jg|R   | jt|jg|R   W d    n1 sbw   Y  q9t  }| t|jd | t|jd d S r  )r   r  r   r   r  r  r   r  r   r   r   test_clamp_mag_v3_errors
  s    z(Vector3TypeTest.test_clamp_mag_v3_errorsc                 C   s  t ddd}G dd dt }|ddd}| | d | t|| | t|t|  | |t|| | |t||d | |t||d | |t|	d| | |t|
d| | |t|| | |t||d | |t|d | |t|dd | |t| |  |ddd}| t|| | | t|| | | t|d	 | | t|d	 | | t| d	 | d
S )z Check if Vector3 is subclassabler  rO   r   c                   @   r  )z7Vector3TypeTest.test_subclassing_v3.<locals>.TestVectorc                 S   r  r  r   r@   r   r   r   r    r  zLVector3TypeTest.test_subclassing_v3.<locals>.TestVector.supermariobrosiscoolNr  r   r   r   r   r    r  r  r   r  r   r    N)r   r(   r  r   rl   ro   r4  r   ro  r   r  r  rw   r  r^  r  r   r   r   test_subclassing_v3  s,   z#Vector3TypeTest.test_subclassing_v3c                 C   `   t ddd}t ddd}t ddd	}| }||d
}||d
 | || | || d S )Ngxvk@g]Y@g%I fE@rs   rn   gq=
ףE@rt   ru   gK@r    r   ro   rw   rx   r(   ry   r   r   r   r   .     z'Vector3TypeTest.test_move_towards_basicc                 C   sT   t ddd}t ddd}| }||d}||d | || | || d S )Nrt   r   g     @E@rs   rn   g     1@r	   rO  )r   rz   r{   r}   r~   r   r   r   r   :     z.Vector3TypeTest.test_move_towards_max_distancec                 C   sT   t ddd}t ddd}| }||d}||d | || | || d S )Nrs   rn   g     8@rt   ru   g	@r   rO  )r   r{   r|   r}   r~   r   r   r   r   E  rQ  z!Vector3TypeTest.test_move_nowherec                 C   rN  )Ng,@gI@gH@rs   rn   gJ@rt   ru   g)\S@r   rO  ry   r   r   r   r   P  rP  zVector3TypeTest.test_move_awayc                 C   sN   t ddd}| }dD ]}| |||| ||| | || qd S )Nr   r   g)\^r   )r   ro   r(   rw   rx   r   r   r   r   r   \  s   z&Vector3TypeTest.test_move_towards_selfc                 C   s   t ddd}t ddd}| t|j|dd | t|j|dd | t|j|d	 | t|j|d
 | t|jdd | t|jdd d S )Nrs   rn   gffffff@rt   ru   g     Xzr    rO   rj   r   r   d)r   r   r   rw   rx   )r   r{   r|   r   r   r   r   d  s   z(Vector3TypeTest.test_move_towards_errorsN)cr*   r+   r,   rA   rH   r  rV   rW   r  rJ   rM   rR   r  rc   rq   r   r   r   r   r   r   r   r   r   r   r   r   r   rm   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  r7  r;  r@  r  r  rB  rT  unittestZskipIfIS_PYPYr  rY  r  rk  r  r   r,  r/  r3  r  r6  r8  r9  r;  r=  r>  r@  rA  rC  rE  rF  rG  r  rH  rI  rJ  rK  rL  rM  r   r   r   r   r   r   r   r   r   r   r    s    /%x ,-

  0


		 r  __main__)r   platformrS  collections.abcr   r   Zpygame.mathr   r   r   python_implementationrT  ZTestCaser   r.   r  r*   mainr   r   r   r   <module>   sD    C        y             =