
    \iI                         S r SSKrSSKrSSKJr  SSKrSSKrSSKJrJr  SS jr	 " S S\R                  5      rS rS	 rS
 rS rS rS rS rS rS rS rS rS rS rS r\S:X  a  \R6                  " 5         gg)zTransform unit tests    N)dedent)AffineEPSILONc                     [        U 5      [        U5      :X  d   U < SU< 35       e[        X5       H$  u  p4[        X4-
  5      U::  a  M   U < SU< 35       e   g )Nz != )lenzipabs)t1t2errorm1m2s        ^/var/www/html/kml_chatgpt/mouzaenv/lib/python3.13/site-packages/affine/tests/test_transform.pyseq_almost_equalr   )   s\    r7c"g2"tB622b+27|u$9d2&&99$     c                   (   \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S  r"S! r#S" r$S# r%S$ r&S% r'S& r(S' r)S( r*S) r+S* r,S+ r-S, r.S- r/S. r0S/ r1S0r2g1)2PyAffineTestCase/   c                     [         R                  " [        5         [        5         S S S 5        g ! , (       d  f       g = fNpytestraises	TypeErrorr   selfs    r   test_zero_argsPyAffineTestCase.test_zero_args0   s    ]]9%H &%%s   /
=c                     [         R                  " [        5         [        S 5        S S S 5        g ! , (       d  f       g = fr   r   r   s    r   test_wrong_arg_type$PyAffineTestCase.test_wrong_arg_type4   s!    ]]9%4L &%%s   0
>c                     [         R                  " [        5         [        SS5        S S S 5        g ! , (       d  f       g = f)N      r   r   s    r   test_args_too_few"PyAffineTestCase.test_args_too_few8   s#    ]]9%1aL &%%s   1
?c                     [         R                  " [        5         [        [	        S5      6   S S S 5        g ! , (       d  f       g = f)N
   )r   r   r   r   ranger   s    r   test_args_too_many#PyAffineTestCase.test_args_too_many<   s&    ]]9%E"I &%%s	   6
Ac           	          [         R                  " [        5         [        SSSS S S5        S S S 5        g ! , (       d  f       g = f)Nr   r$       r   r   s    r   test_args_members_wrong_type-PyAffineTestCase.test_args_members_wrong_type@   s,    ]]9%1aD$+ &%%s	   5
Ac                 F    [        SSSSSS5      n[        U5      S:X  d   eg )Nr#   r$   r-            	   )r   r   r   ts     r   test_lenPyAffineTestCase.test_lenD   s&    1aAq!$1v{{r   c                 :    [        SSSSSS5      nUSS  S:X  d   eg )	Nr#   r$   r-   r2   r3   r4   )r   r   r#   r   r6   s     r   test_slice_last_row$PyAffineTestCase.test_slice_last_rowH   s*    1aAq!$v"""r   c                     [        SSSSSS5      nU H(  n[        U[        5      (       a  M   [        U5      5       e   g Nr#   r$   r-   r2   r3   r4   )r   
isinstancefloatrepr)r   r7   ms      r   test_members_are_floats(PyAffineTestCase.test_members_are_floatsL   s<    1aAq!$Aa''0a0' r   c                     [        SSSSSS5      nUS   S:X  d   eUS   S:X  d   eUS   S:X  d   eUS   S:X  d   eUS   S:X  d   eUS   S:X  d   eUS   S:X  d   eUS   S:X  d   eUS	   S:X  d   eUS
   S:X  d   eg )Nr#   r$   r-   r2   r3   r4   r         r<   r6   s     r   test_getitemPyAffineTestCase.test_getitemQ   s    1aAq!$tqyytqyytqyytqyytqyytqyytqyytqyytqyyuzzr   c                     [        SSSSSS5      n[        R                  " [        5         US     S S S 5        g ! , (       d  f       g = f)Nr#   r$   r-   r2   r3   r4   foobar)r   r   r   r   r6   s     r   test_getitem_wrong_type(PyAffineTestCase.test_getitem_wrong_type^   s5    1aAq!$]]9%hK &%%s	   :
Ac                 X    [        SSSSSS5      n[        U5      [        S5      :X  d   eg )N-?-@gDl
@g-gQ8gDl@z_            | 1.11, 2.22, 3.33|
            |-4.44,-5.55, 6.67|
            | 0.00, 0.00, 1.00|)r   strr   r6   s     r   test_strPyAffineTestCase.test_strc   s8    5%>1v#
 
 	
 
r   c                 X    [        SSSSSS5      n[        U5      [        S5      :X  d   eg )NrR   rS   gS@g-@g      @g      @zL            Affine(1.111, 2.222, 3.456,
                   4.444, 5.5, 6.25))r   rC   r   r6   s     r   	test_reprPyAffineTestCase.test_reprl   s8    5%sD9Aw&(
 
 	
 
r   c                     [         R                  " 5       n[        U[         5      (       d   e[        U5      S:X  d   eUR                  (       d   eg )N	r#   r   r   r   r#   r   r   r   r#   )r   identityrA   tupleis_identity)r   idents     r   test_identity_constructor*PyAffineTestCase.test_identity_constructort   sC    !%((((U|::::    r   c                     [         R                  " 5       n[        U[         5      (       d   e[        U5      S:X  d   eX-  R                  (       d   eg )N)	r   r#   r   r#   r   r   r   r   r#   )r   permutationrA   r]   r^   )r   perms     r   test_permutation_constructor-PyAffineTestCase.test_permutation_constructorz   sG    !!#$''''T{9999((((r   c                     [         R                  " SS5      n[        U[         5      (       d   e[        U5      S:X  d   eg )Nr$   )	r#   r   r$   r   r#   rh   r   r   r#   )r   translationrA   r]   )r   transs     r   test_translation_constructor-PyAffineTestCase.test_translation_constructor   s:    ""1b)%((((U|;;;;r   c                 R   [         R                  " S5      n[        U[         5      (       d   e[        U5      S:X  d   e[         R                  " SS5      n[        U5      S:X  d   e[        [         R                  " S5      5      [        [         R                  " 5       5      :X  d   eg )Nr3   )	r3   r   r   r   r3   r   r   r   r#   rJ   r$   )	rJ   r   r   r   r$   r   r   r   r#   r#   )r   scalerA   r]   r\   )r   rn   s     r   test_scale_constructor'PyAffineTestCase.test_scale_constructor   s    Q%((((U|::::R#U|;;;;V\\!_%v/@)AAAAr   c                 R   [         R                  " S5      n[        U[         5      (       d   e[        R                  " [        R
                  " S5      5      n[        [        U5      SUSSSSSSS4	5        [         R                  " SS5      n[        R                  " [        R
                  " S5      5      n[        R                  " [        R
                  " S5      5      n[        [        U5      SUSUSSSSS4	5        [         R                  " SS9n[        [        U5      S5        g )	N   r#   r   i<   -   )y_angle)	r#   r   r   r#   r#   r   r   r   r#   )r   shearrA   mathtanradiansr   r]   )r   rv   mxmys       r   test_shear_constructor'PyAffineTestCase.test_shear_constructor   s    R %((((XXdll2&'u2q!Q1a'CDS"%XXdll3'(XXdll2&'u2q"aAq!'DER(u'BCr   c                 |   [         R                  " S5      n[        U[         5      (       d   e[        R                  " S5      n[        R
                  " U5      [        R                  " U5      pC[        U5      XC* SX4SSSS4	:X  d   e[         R                  " S5      n[        R                  " S5      n[        R
                  " U5      [        R                  " U5      pC[        [        U5      XC* SX4SSSS4	5        [        [         R                  " S5      5      [        [         R                  " 5       5      :X  d   eg )Nrs   r   r#   iQ  )
r   rotationrA   rw   ry   sincosr]   r   r\   r   rotrscs        r   test_rotation_constructor*PyAffineTestCase.test_rotation_constructor   s    oob!#v&&&&LLxx{DHHQK1SzaQaAq9999ooc"LLxx{DHHQK1saQaAq%ABV__Q'(E&//2C,DDDDr   c                    [        [        R                  " S5      5      S:X  d   e[        [        R                  " S5      5      S:X  d   e[        [        R                  " S5      5      S:X  d   e[        [        R                  " S5      5      S:X  d   e[        [        R                  " S5      5      S	:X  d   e[        [        R                  " S
5      5      S	:X  d   e[        [        R                  " S5      5      S:X  d   e[        [        R                  " S5      5      S:X  d   e[        [        R                  " S5      5      S	:X  d   eg )Nr   r[   Z   )	r   rJ   r   r#   r   r   r   r   r#      )	rJ   r   r   r   rJ   r   r   r   r#   iLi  )	r   r#   r   rJ   r   r   r   r   r#   iih  i  i>)r]   r   r   r   s    r   #test_rotation_constructor_quadrants4PyAffineTestCase.test_rotation_constructor_quadrants   s   V__Q'(,GGGGV__R()-IIIIV__S)*.KKKKV__T*+/LLLLV__S)*.JJJJV__S)*.JJJJV__S)*.IIIIV__S)*.JJJJV__T*+/KKKKr   c           
         [        [        R                  " S5      5      [        [        R                  " SSS95      :X  d   e[        R                  " SSS9n[        R                  " S5      n[        R
                  " U5      [        R                  " U5      pC[        U5      UU* SSU-  -
  SU-  -
  UUSSU-  -
  SU-  -   S	S	S
4	:X  d   e[        [        R                  " S	S5      5      [        [        R                  " 5       5      :X  d   eg )Nrs   )r   r   )pivot   )r$   r$   r2   r   r   r#   )r;   r$   )r]   r   r   rw   ry   r   r   r\   r   s        r   $test_rotation_constructor_with_pivot5PyAffineTestCase.test_rotation_constructor_with_pivot   s    V__R()U6??2V3T-UUUUoob0LLxx{DHHQK1SzBAIAQJQ

 

 
	
 

 V__Q01U6??;L5MMMMr   c                     [         R                  " [        5         [        R                  " SS5        S S S 5        g ! , (       d  f       g = f)Nr#   )r   r   r   r   r   r   s    r   (test_rotation_contructor_wrong_arg_types9PyAffineTestCase.test_rotation_contructor_wrong_arg_types   s(    ]]9%OOAq! &%%s	   <
A
c                    [         R                  " 5       R                  S:X  d   e[         R                  " S5      R                  S:X  d   e[         R                  " S5      R                  S:X  d   e[         R                  " SS5      R                  S:X  d   e[         R                  " SS5      R                  S:X  d   e[         R                  " SS5      R                  S:X  d   e[         R                  " S5      R                  [
        R                  " S5      :X  d   e[         R                  " SS	5      R                  [
        R                  " S5      :X  d   eg )
Nr#   r$   r2   r   r3   rJ   M       )r   r\   determinantrn   r   r   approxri   r   s    r   test_determinant!PyAffineTestCase.test_determinant   s    ,,111||A**a///||A**a///||Aq!--222||B".."444||B"..!333r"..&--2BBBB!!"c*66&--:JJJJr   c                    [         R                  " 5       R                  (       d   e[         R                  " SS5      R                  (       d   e[         R                  " SS5      R                  (       d   e[         R
                  " S5      R                  (       d   e[         R                  " SS5      R                  (       a   e[         R
                  " S5      R                  (       a   eg N      @ffffff@r2   rJ   r   )r   r\   is_rectilinearrn   ri   r   rv   r   s    r   test_is_rectilinear$PyAffineTestCase.test_is_rectilinear   s     ////||C%4444!!!R(7777r"1111<<2&5555??3'66666r   c                    [         R                  " 5       R                  (       d   e[         R                  " SS5      R                  (       d   e[         R                  " SS5      R                  (       d   e[         R
                  " S5      R                  (       d   e[         R
                  " S5      R                  (       d   e[         R                  " SS5      R                  (       a   eg r   )r   r\   is_conformalrn   ri   r   rv   r   s    r   test_is_conformal"PyAffineTestCase.test_is_conformal   s     ----||C%2222!!!R(5555r"////s#0000<<2&33333r   c                 ,   [         R                  " 5       R                  (       d   e[         R                  " SS5      R                  (       d   e[         R                  " S5      R                  (       d   e[         R                  " S5      R                  (       d   e[         R
                  " SS5      R                  (       a   e[         R
                  " SS5      R                  (       a   e[         R                  " SS5      R                  (       a   eg )	Nr2   rJ   r   r   r   r         ?r$   )r   r\   is_orthonormalri   r   rn   rv   r   s    r   test_is_orthonormal$PyAffineTestCase.test_is_orthonormal   s     ////!!!R(7777r"1111s#2222<<S)8888<<Q'6666<<2&55555r   c                    [         R                  " 5       R                  (       a   e[         R                  " SS5      R                  (       a   e[         R                  " SS5      R                  (       a   e[         R
                  " S5      R                  (       a   e[         R                  " S5      R                  (       a   e[         R                  " S5      R                  (       d   e[         R                  " SS5      R                  (       d   e[         R                  " SS5      R                  (       d   e[         R                  " S5      R                  (       d   e[         R                  " S5      R                  (       d   eg )	Nr$   rJ   r   g     6g,V@r   ii,  )r   r\   is_degenerateri   rv   r   rn   r   s    r   test_is_degenerate#PyAffineTestCase.test_is_degenerate   s    ??$2222%%a,::::<<5)7777??4(6666<<$2222||A,,,,||C#1111||As#1111||A,,,,||A,,,,r   c                     [        SSSSSS5      R                  u  pn[        U[        5      (       d   e[        U[        5      (       d   e[        U[        5      (       d   eUS:X  d   eUS:X  d   eUS	:X  d   eg )
Nr$   r-   r2   r3   r4   rH   )r$   r3   )r-   r4   )r2   rH   )r   column_vectorsrA   r]   )r   abr   s       r   test_column_vectors$PyAffineTestCase.test_column_vectors   s}    Aq!Q*99a!U####!U####!U####F{{F{{F{{r   c                    SnUS-  n[        SUSU* SU-   U5      nUR                  [         R                  " 5       5      (       d   e[         R                  " 5       R                  U5      (       d   eUR                  U5      (       d   e[        SSSU* SS5      nUR                  [         R                  " 5       5      (       a   e[         R                  " 5       R                  U5      (       a   eUR                  U5      (       d   eg )Nh㈵>r         ?r   r   almost_equalsr\   r   r   Er7   s       r   test_almost_equals#PyAffineTestCase.test_almost_equals   s    cM31qb#'1-v01111 ..q1111q!!!!31whQ/??6??#45555??$2215555q!!!!r   c                     SnUS-  n[        SUSU* SU-   U5      nUR                  [         R                  " 5       US9(       d   e[         R                  " 5       R                  X1S9(       d   eUR                  X1S9(       d   e[        SSSU* SS5      nUR                  [         R                  " 5       US9(       a   e[         R                  " 5       R                  X1S9(       a   eUR                  X1S9(       d   eg )N绽|=r   r   r   )	precisionr   r   s       r   test_almost_equals_2%PyAffineTestCase.test_almost_equals_2
  s    cM31qb#'1-v0GDDD ..q.DDDq44431whQ/??6??#4?HHH??$2212HHHq444r   c                     [        SSSSSS5      n[        SSSSSS5      n[        SSSSSS5      nX:X  d   eX:X  a   eX":X  d   eX:w  a   eX":w  a   eX:w  d   eUS:X  a   eUS:w  d   eg r@   r<   )r   r
   r   t3s       r   test_equalityPyAffineTestCase.test_equality  s    Aq!Q1%Aq!Q1%Aq!Q1%xx8|xx8|8|xx7{Qwwr   c           
          [         R                  " [        5         [        SSSSSS5      [        SSSSSS5      :    S S S 5        g ! , (       d  f       g = fr@   r   r   s    r   test_gtPyAffineTestCase.test_gt#  @    ]]9%1aAq!$vaAq!Q'?? &%%   "A
Ac           
          [         R                  " [        5         [        SSSSSS5      [        SSSSSS5      :    S S S 5        g ! , (       d  f       g = fr@   r   r   s    r   test_ltPyAffineTestCase.test_lt'  r   r   c           
          [         R                  " [        5         [        SSSSSS5      [        SSSSSS5      -     S S S 5        g ! , (       d  f       g = fr@   r   r   s    r   test_addPyAffineTestCase.test_add+  r   r   c           
          [         R                  " [        5         [        SSSSSS5      [        SSSSSS5      -
    S S S 5        g ! , (       d  f       g = fr@   r   r   s    r   test_subPyAffineTestCase.test_sub/  r   r   c                     [        SSSSSS5      n[        U[         R                  " 5       -  5      [        U5      :X  d   eg r@   )r   r]   r\   r6   s     r   test_mul_by_identity%PyAffineTestCase.test_mul_by_identity3  s9    1aAq!$Q**+uQx777r   c                 j   [         R                  " S5      [         R                  " S5      -  n[        U[         5      (       d   e[        U[         R                  " S5      5        [         R                  " SS5      [         R                  " S5      -  n[        U[         R                  " SS5      5        g )Nr3      "   r-   r$   r4   r(   )r   r   rA   r   rn   r6   s     r   test_mul_transform#PyAffineTestCase.test_mul_transform7  sv    OOA!44!V$$$$FOOB/0LLAa0FLLB/0r   c                    / SQn[         R                  " S5      R                  U5      nUb   U5       eU/ SQ:X  d   e[         R                  " S5      n/ SQnU Vs/ s H  oCU-  PM	     nnUR                  U5      nUb   eX:X  d   eg s  snf )N))r2   r#   )rJ   r   )r-   r$   ))ir   )r$   r   )ir   !   )r   rn   
itransformr   )r   ptsr   Apt
pts_expects         r   test_itransform PyAffineTestCase.test_itransform>  s    'LL'',y!y2222OOB''*+s"fs
+LLyy    ,s   B
c           	          [         R                  " [        5         [        SSSSSS5      S -    S S S 5        g ! , (       d  f       g = fr@   r   r   s    r   test_mul_wrong_type$PyAffineTestCase.test_mul_wrong_typeK  s1    ]]9%1aAq!$t+ &%%s	   8
Ac           	           " S S5      n[         R                  " [        5         [        SSSSSS5      U" 5       -    S S S 5        g ! , (       d  f       g = f)	Nc                   *    \ rS rSr\S 5       rS rSrg)GPyAffineTestCase.test_mul_sequence_wrong_member_types.<locals>.NotPtSeqiP  c                     [        U5        g r   )list)clspointss     r   from_pointsSPyAffineTestCase.test_mul_sequence_wrong_member_types.<locals>.NotPtSeq.from_pointsQ  s	    Vr   c              3      #    Sv   g 7fNr    r   s    r   __iter__PPyAffineTestCase.test_mul_sequence_wrong_member_types.<locals>.NotPtSeq.__iter__U  s
     s   r   N)__name__
__module____qualname____firstlineno__classmethodr   r   __static_attributes__r   r   r   NotPtSeqr   P  s     r   r  r#   r$   r-   r2   r3   r4   r   )r   r  s     r   $test_mul_sequence_wrong_member_types5PyAffineTestCase.test_mul_sequence_wrong_member_typesO  s?    	 	 ]]9%1aAq!$xz1 &%%s   A
Ac                     [         R                  " SS5      nU[         R                  " SS5      -  n[        U[         5      (       d   e[        U[         R                  " SS5      5        g )Nr-   r3   r   g      @r#   g      !@)r   ri   rA   r   r6   s     r   test_imul_transform$PyAffineTestCase.test_imul_transform[  sU    q!$	VC((!V$$$$F..q#67r   c                    [        [        R                  " 5       ) [        R                  " 5       5        [        [        R                  " SS5      ) [        R                  " SS5      5        [        [        R                  " S5      ) [        R                  " S5      5        [        SSSSS	S
5      n[        U) U-  [        R                  " 5       5        g )Nr$   r;   r   r-   gfffff@gfffff@@r#   r2   r3   r4   )r   r   r\   ri   r   r6   s     r   test_inversePyAffineTestCase.test_inversea  s    &//++V__->?&,,Q33V5G5GA5NO&//%00&//$2GH1aAq!$!a!23r   c                     [         R                  " S5      n[        R                  " [        R
                  5         U)   S S S 5        g ! , (       d  f       g = fr   )r   rn   r   r   affineTransformNotInvertibleErrorr6   s     r   test_cant_invert_degenerate,PyAffineTestCase.test_cant_invert_degenerateh  s2    LLO]]6==>B ?>>s   A
Ac                     [         R                  " [        5         [        R                  " / SQ5        SSS5        g! , (       d  f       g= f)z%wrong type, i.e don't use readlines())1.00.0r  r  r  r  N)r   r   r   r  loadswr   s    r   test_bad_type_world$PyAffineTestCase.test_bad_type_worldm  s'    ]]9%MMDE &%%s	   =
Ac                     [         R                  " [        5         [        R                  " S5        SSS5        g! , (       d  f       g= f)zWrong number of parameters.z1.0
0.0
0.0
1.0
0.0
0.0
0.0N)r   r   
ValueErrorr  r  r   s    r   test_bad_value_world%PyAffineTestCase.test_bad_value_worldr  s'    ]]:&MM=> '&&s	   ;
A	c           	          Sn[         R                  " U5      nU[        SSSSSS5      :X  d   e[         R                  " U5      U:X  d   eg )Nz1.0
0.0
0.0
-1.0
100.5
199.5
r           g      Y@g      g      i@)r  r  r   dumpsw)r   r   r   s      r   test_simple_world"PyAffineTestCase.test_simple_worldw  sI    1MM!F3UCu====}}Q1$$$r   c           
      H   [        S5      n[        R                  " U5      nUR                  [	        SSSSSS5      5      (       d   e[        R
                  " U5      n[        U[        5      (       d   e[        R                  " U5      nUR                  U5      (       d   eg )Nz                 39.9317755024
                 30.0907511581
                 30.0907511576
                -39.9317755019
            2658137.2266720217
            5990821.7039887439g`nkDC@gw;>@gGDAg`nkDCgjVA)r   r  r  r   r   r  rA   rT   )r   r   a1a1outa2s        r   test_real_world PyAffineTestCase.test_real_world}  s    "
 ]]1""""#!	
 	
 		
 	
 b!%%%%%]]5!####r   r   N)3r   r   r   r   r   r    r%   r*   r/   r8   r=   rE   rK   rO   rU   rX   r`   re   rk   ro   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r
  r  r  r  r  r$  r  r   r   r   r   r   /   s    ,#1



!)<
B
D
E	LN$"K746
-
"
5@@@@81!,
284
F
?
%$r   r   c                     [         R                  " SSSSSS5      n U R                  U R                  s=:X  a  S:X  d   e   eU R                  S:X  d   eU R
                  S:X  d   eU R                  U R                  s=:X  a  S:X  d   e   eU R                  S:X  d   eU R                  S:X  d   e[        U 5      S:X  d   eU R                  5       S:X  d   eg )N    L     z@r  3333A     z)	r(  r  r'  r  r*  r)  r   r   r#   )r'  r(  r  r)  r  r*  )r   	from_gdalr   xoffr   r   fyoffder]   to_gdalr7   s    r   	test_gdalr3    s    E3#vFA33!&&%I%%%%%33%<<33#::33!&&$H$$$$$33#::33&==8NNNN99;HHHHr   c                  P    [        SSSSSS5      n U R                  5       S:X  d   eg )Nr(  r  r'  r*  r)  )r(  r  r  iWr'  r)  )r   
to_shapelyr2  s    r   test_shapelyr6    s+    uc9c68<A<<>IIIIr   c                  P    [        SSSSSS5      n  U S-  n g ! [         a     g f = f)Nr#   r$   r-   r2   r3   r4          @)r   r   r2  s    r   test_imul_numberr9    s6    q!Q1a A	S s    
%%c                  .    [        SSSSSS5      n U S-    g Nr#   r$   r-   r2   r3   r4   )r8  r8  r<   r2  s    r   test_mul_tupler<    s    q!Q1a A
Nr   c            	          [         R                  " [        5         [        SSSSSS5      n SU -    S S S 5        g ! , (       d  f       g = fr;  )r   warnsDeprecationWarningr   r2  s    r   test_rmul_tupler@    s6    	(	)1aAq!$Q 
*	)	)s	   :
Ac                      [         R                  " S5      n U R                  [        :X  d   eSU l        U R                  S:X  d   e[         R                  " S5      R                  [        :X  d   eg )Ng     F@r   r  )r   r   r   r   r2  s    r   test_transform_precisionrB    sX    A;;'!!!AK;;%??3))W444r   c                      Sn [         R                  " SS5      n[         R                  " S5      nX!U -  -  nX!-  U -  n[        US5        [        X45        g )N   r3   g      $g      g     V@)r  r8  r   ri   r   r   )pointrj   rot90result1result2s        r   test_associativerK    sQ    Eud+EOOD!Eu}%G}%GWj)W&r   c                      Sn [         R                  " SS5      n[         R                  " S5      nX-  U -  nX-  ) U-  n[        X5        g )NrD  r-   r2   g     B@rF  )rG  rj   rot37point_primeroundtrip_points        r   test_roundtriprP    sJ    Eq!$EOOD!E=E)K&4OU,r   c                     [         R                  " 5       R                  S:X  d   e[         R                  " S5      R                  S:X  d   e[         R                  " SS5      R                  [        R
                  " [        R                  " S5      S-  5      :X  d   e[         R                  " SS5      R                  [        R
                  " [        R                  " S5      S-  5      :X  d   e[         R                  " SS5      R                  S:X  d   e[         R                  " S5      R                  [        R
                  " S5      :X  d   e[         R                  " S	S
5      R                  [        R
                  " S5      :X  d   e[         R                  " SS5      R                  [        R
                  " S5      :X  d   eg )Nr  r$   r#   r-   r3   r   r   r   r   r   rJ   )
r   r\   eccentricityrn   r   r   rw   sqrtr   ri   r   r   r   test_eccentricityrT    s:   ??))S000<<?''3...<<1**fmmDIIaL1<L.MMMM<<1**fmmDIIaL1<L.MMMM<<1**c111??2++v}}S/AAAAb#&33v}}S7IIII<<A++v}}S/AAAAr   c                     [         R                  " SS5      [         R                  " S5      -  R                  [        R
                  " [        R                  " S5      S-  5      :X  d   e[         R                  " S5      [         R                  " SS5      -  R                  [        R
                  " [        R                  " S5      S-  5      :X  d   e[         R                  " SS5      [         R                  " S5      -  [         R                  " SS5      -  R                  [        R
                  " [        R                  " S5      S-  5      :X  d   eg )Nr$   r-   r   r3   r   r   )	r   rn   r   rR  r   r   rw   rS  ri   r   r   r   test_eccentricity_complexrV    s    LLA!44BBfmm		!qG    OOB&,,q!"44BBfmm		!qG    	2s#foob&99FLLA<NNlfmmDIIaL1$456 6 6r   c                  F   [         R                  " 5       R                  S:X  d   e[         R                  " S5      R                  S:X  d   e[         R                  " SS5      R                  S:X  d   e[         R                  " SS5      R                  [
        R                  " S5      :X  d   e[         R                  " S5      R                  [
        R                  " S5      :X  d   e[         R                  " S5      R                  [
        R                  " S5      :X  d   eg )Nr  r$   r#   r   r   rr   ij)r   r\   rotation_anglern   ri   r   r   r   r   r   r   test_rotation_anglerY    s    ??++s222<<?))S000<<1,,333b#&55s9KKKK??2--r1BBBB??4 //6==3FFFFr   c                      [         R                  " [        R                  5         [        R
                  " SS5      R                    S S S 5        g ! , (       d  f       g = f)NrJ   r#   )r   r   r  UndefinedRotationErrorr   rn   rX  r   r   r   test_rotation_improperr\    s4    	v44	5R** 
6	5	5s   "A
Ac                  ^     " S S5      n [         R                  " 5       U " 5       -  S:X  d   eg)z7Support fallback in case that other is a single object.c                       \ rS rSrSrS rSrg)+test_mul_fallback_unpack.<locals>.TextPointi  z8Not iterable, will trigger ValueError in Affine.__mul__.c                     US-  $ Nr#   r$   r   r   others     r   __rmul__4test_mul_fallback_unpack.<locals>.TextPoint.__rmul__      6>!r   r   N)r   r   r   r   __doc__re  r  r   r   r   	TextPointr_    s
    F	"r   ri  rb  Nr   r\   ri  s    r   test_mul_fallback_unpackrl    s*    " " ??y{*f444r   c                  ^     " S S5      n [         R                  " 5       U " 5       -  S:X  d   eg)z:Support fallback in case that other is an unexpected type.c                   $    \ rS rSrSrS rS rSrg)/test_mul_fallback_type_error.<locals>.TextPointi  z9Iterable, but values trigger TypeError in Affine.__mul__.c                     g)N)12r   r   s    r   r   8test_mul_fallback_type_error.<locals>.TextPoint.__iter__  s    r   c                     US-  $ ra  r   rc  s     r   re  8test_mul_fallback_type_error.<locals>.TextPoint.__rmul__  rg  r   r   N)r   r   r   r   rh  r   re  r  r   r   r   ri  ro    s    G		"r   ri  rb  Nrj  rk  s    r   test_mul_fallback_type_errorrv    s*    " " ??y{*f444r   __main__)r   )rh  rw   unittesttextwrapr   r   r  r   r   r   TestCaser   r3  r6  r9  r<  r@  rB  rK  rP  rT  rV  rY  r\  rl  rv  r   mainr   r   r   <module>r|     s   :       ":f$x(( f$Z	IJ

5'-	B	6G+	55 zMMO r   