Ë
    \;j/  ã                   ó   — d Z ddlmZmZmZ ddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlmZ 	 ddlmZ 	 ddlZddlZddlmZ ddlmZ  G d„ dej8                  «      Zdd„Zd„ Zd	„ Z d
„ Z!dd„Z"dd„Z#dd„Z$d„ Z% G d„ de&«      Z'd„ Z( G d„ d«      Z) G d„ de)«      Z* G d„ de*«      Z+d„ Z,y# e$ r ddlZY Œƒw xY w# e$ r ddlZY Œ�w xY w)zœ
Some utility functions that are only used for unittests.
Placing them in test/ directory seems to be against convention, so they are part of the library.

é    )Úprint_functionÚdivisionÚabsolute_importN)ÚKeypointsOnImagec                   ó"   ‡ — e Zd ZdZˆ fd„Zˆ xZS )ÚArgCopyingMagicMockzÞA MagicMock that copies its call args/kwargs before storing the call.

    This is useful for imgaug as many augmentation methods change data
    in-place.

    Taken from https://stackoverflow.com/a/23264042/3760780

    c                 ó~   •— t        j                  |«      }t        j                  |«      }t        t        | �  |i |¤ŽS ©N)ÚcopyÚdeepcopyÚsuperr   Ú
_mock_call)ÚselfÚargsÚkwargsÚ	args_copyÚkwargs_copyÚ	__class__s        €úYG:\00. PROJECTS\API\Inventory\templateJSON\kerjaOCR\Lib\site-packages\imgaug/testutils.pyr   zArgCopyingMagicMock._mock_call+   s?   ø€ Ü—M‘M $Ó'ˆ	Ü—m‘m FÓ+ˆÜÔ(¨$Ñ:Øð'Ø%ñ'ð 	'ó    )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__classcell__)r   s   @r   r   r   !   s   ø„ ñ÷'ð 'r   r   c                 óü  — t        | t        «      st        |t        «      r`t        | t        «      sJ ‚t        |t        «      sJ ‚t        | «      t        |«      k(  sJ ‚t        | |«      D ]  \  }}t	        |||¬«       Œ y t        | «      t        |«      k(  sJ ‚t        | j                  «      t        |j                  «      k(  sJ ‚| j                  |j                  k(  sJ ‚t        | j                  |j                  «      D ]  \  }}|j                  ||¬«      rŒJ ‚ t        |t        j                  «      rDt        | j                  |j                  «      D ]   \  }}|j                  sŒ|j                  rŒ J ‚ y y )N)Úmax_distance)Ú
isinstanceÚlistÚlenÚzipÚassert_cbaois_equalÚtypeÚitemsÚshapeÚcoords_almost_equalsÚiaÚPolygonsOnImageÚis_valid)	ÚobservedÚexpectedr   Ú
observed_iÚ
expected_iÚitem_aÚitem_bÚitem_obsÚitem_exps	            r   r"   r"   3   sO  € ä�(œDÔ!¤Z°¼$Ô%?Ü˜(¤DÔ)Ð)Ð)Ü˜(¤DÔ)Ð)Ð)Ü�8‹}¤ H£Ò-Ð-Ð-Ü&)¨(°HÖ&=Ñ"ˆJ˜
Ü 
¨JØ-9ö;ñ '>ô �H‹~¤ h£Ò/Ð/Ð/Ü�8—>‘>Ó"¤c¨(¯.©.Ó&9Ò9Ð9Ð9Ø�~‰~ §¡Ò/Ð/Ð/Ü! (§.¡.°(·.±.ÖA‰NˆF�FØ×.Ñ.¨vØ<Hð /õ Jð Jð Jð Bô �h¤× 2Ñ 2Ô3Ü&)¨(¯.©.¸(¿.¹.Ö&IÑ"�˜(Ø×$Ó$Ø#×,Ó,Ð,Ð,ñ 'Jð 4r   c                 ó~   — t         j                  j                  dd| «      j                  t         j                  «      S )Nr   éÿ   )ÚnpÚrandomÚuniformÚastypeÚuint8)Úsizes    r   Úcreate_random_imagesr:   I   s*   € Ü�9‰9×Ñ˜Q  TÓ*×1Ñ1´"·(±(Ó;Ð;r   c           	      óº  — g }t        j                  | d   «      D ]½  }g }| d   | d   }}t        j                  |«      D ]n  }t        j                  j	                  d|dz
  «      }t        j                  j	                  d|dz
  «      }|j                  t        j                  ||¬«      «       Œp |j                  t        j                  || dd  ¬«      «       Œ¿ |S )Nr   é   é   )ÚxÚy)r%   )	ÚsmÚxranger4   r5   ÚrandintÚappendr'   ÚKeypointr   )	Úsize_imagesÚnb_keypoints_per_imgÚresultÚ_ÚkpsÚheightÚwidthr>   r?   s	            r   Úcreate_random_keypointsrL   M   s»   € Ø€FÜ�Y‰Y�{ 1‘~Ö&ˆØˆØ# A™¨°A©�ˆÜ—‘Ð/Ö0ˆAÜ—	‘	×!Ñ! ! U¨1¡WÓ-ˆAÜ—	‘	×!Ñ! ! V¨A¡XÓ.ˆAØ�J‰J”r—{‘{ Q¨!Ô,Õ-ð 1ð 	�‰”b×)Ñ)¨#°[ÀÀ°_ÔEÕFð 'ð €Mr   c                 ó  — t        | t        «      sJ dt        | «      ›d�«       ‚t        |t        «      sJ dt        |«      ›d�«       ‚t        | «      t        |«      k7  ryt	        | |«      D ]  \  }}t        j                  ||«      rŒ y y)Nz&Expected list1 to be a list, got type Ú.z&Expected list2 to be a list, got type FT)r   r   r#   r    r!   r4   Úarray_equal)Úlist1Úlist2Úarr1Úarr2s       r   Úarray_equal_listsrT   Z   sˆ   € Ü�eœTÔ"ñ FÜ7;¸Eµ{ÐDóFÐ"ä�eœTÔ"ñ FÜ7;¸Eµ{ÐDóFÐ"ô ˆ5ƒz”S˜“ZÒØä˜% Ö'‰
ˆˆdÜ�~‰~˜d DÕ)Ùð (ð r   c                 ó€  — t        | t        «      rt        |t        «      sJ ‚| g} |g}t        | «      t        |«      k7  ryt        | |«      D ]ï  \  }}|j                  }|j                  }t        |«      t        |«      k7  r yt        ||«      D ]ª  \  }}t        |j                  «      |z
  t        |j                  «      cxk  xr t        |j                  «      |z   k  nc }	t        |j                  «      |z
  t        |j                  «      cxk  xr t        |j                  «      |z   k  nc }
|	r|
rŒ©  y Œñ y)NFT)r   r   r    r!   Ú	keypointsÚfloatr>   r?   )Úkpsois1Úkpsois2ÚepsÚkpsoi1Úkpsoi2Úkps1Úkps2Úkp1Úkp2Úx_equalÚy_equals              r   Úkeypoints_equalrc   j   s  € Ü�'Ô+Ô,Ü˜'Ô#3Ô4Ð4Ð4Ø�)ˆØ�)ˆä
ˆ7ƒ|”s˜7“|Ò#Øä˜g wÖ/‰ˆ�Ø×ÑˆØ×ÑˆÜˆt‹9œ˜D›	Ò!Ùä˜D $ž‰HˆC�Ü˜SŸU™U“| cÑ)Ü §¡›,ö-ä §¡›,¨Ñ,ô-ˆGô ˜SŸU™U“| cÑ)Ü §¡›,ö-ä §¡›,¨Ñ,ô-ˆGñ ¢'Úñ (ð 0ð  r   c                 ó–   — t        j                  | «       t        j                  j                  | «       t        j                  | «       y r
   )ÚiarandomÚseedr4   r5   )rf   s    r   Úreseedrg   †   s*   € Ü‡M�M�$ÔÜ‡I�I‡N�N�4ÔÜ
‡K�K�Õr   c           	      óÆ  — t        j                  t        j                  t        t        j                  |«      «      «      d«      j                  t         j                  «      }|j                  |«      }t        j                  t        j                  | d¬«      «      }t        j                  |«      D ],  } | |¬«      } ||¬«      }t        j                  ||«      rŒ,J ‚ y )Né   éÿÿÿÿ)Úprotocol)Úimage)r4   ÚmodÚarangeÚintÚprodr7   r8   ÚreshapeÚpickleÚloadsÚdumpsrO   )Ú	augmenterr%   Ú
iterationsrl   Úaugmenter_pklrH   Ú	image_augÚimage_aug_pkls           r   Úruntest_pickleable_uint8_imgrz   �   s™   € Ü�F‰F”2—9‘9œS¤§¡¨£Ó0Ó1°3Ó7×>Ñ>¼r¿x¹xÓH€EØ�M‰M˜%Ó €EÜ—L‘L¤§¡¨iÀ"Ô!EÓF€Mä�Y‰Y�zÖ"ˆÙ EÔ*ˆ	Ù%¨EÔ2ˆÜ�~‰~˜i¨Õ7Ð7Ð7ñ #r   c                 ó$  — g d¢}t        |D �cg c]  }||v ‘Œ c}«      s | «       S t        j                  d¬«      5 }t        j                  d«        | «       }dt	        |d   j
                  «      v sJ ‚|cddd«       S c c}w # 1 sw Y   yxY w)zEHelper for tests of CBA shift() functions.

    Added in 0.4.0.

    )ÚtopÚrightÚbottomÚleftT©ÚrecordÚalwaysz.These are deprecated. Use `x` and `y` instead.rj   N)ÚanyÚwarningsÚcatch_warningsÚsimplefilterÚstrÚmessage)Úfuncr   r   Údeprecated_kwargsÚkwnameÚcaught_warningsrG   s          r   Úwrap_shift_deprecationr�   ˜   sš   € ò ;ÐÜÑ/@ÓAÑ/@ V�˜&Ò Ð/@ÑAÔBÙ‹vˆô 
×	 Ñ	 ¨Õ	-°Ü×Ñ˜hÔ'á“ˆð =Ü�? 2Ñ&×.Ñ.Ó/ñ0ð	
ð0ð ÷ 
.Ñ	-ùò B÷
 
.Ð	-ús   ŽB½:BÂBc                   ó$   — e Zd ZdZdd„Zd„ Zd„ Zy)ÚTemporaryDirectoryzæCreate a context for a temporary directory.

    The directory is automatically removed at the end of the context.
    This context is available in ``tmpfile.TemporaryDirectory``, but only
    from 3.2+.

    Added in 0.4.0.

    Nc                 ó<   — t        j                  |||«      | _        y r
   )ÚtempfileÚmkdtempÚname)r   ÚsuffixÚprefixÚdirs       r   Ú__init__zTemporaryDirectory.__init__½   s   € ä×$Ñ$ V¨V°SÓ9ˆ�	r   c                 ó   — | j                   S r
   )r“   )r   s    r   Ú	__enter__zTemporaryDirectory.__enter__Á   s   € Ø�y‰yÐr   c                 óB   — t        j                  | j                  «       y r
   )ÚshutilÚrmtreer“   )r   Úexc_typeÚexc_valÚexc_tbs       r   Ú__exit__zTemporaryDirectory.__exit__Ä   s   € Ü�‰�d—i‘iÕ r   )Ú ÚtmpN)r   r   r   r   r—   r™   r    © r   r   r�   r�   ²   s   „ ñó:òó!r   r�   c                 óˆ   ‡— t        | t        «      rt        ˆfd„| D «       «      S t        | t        «      xr t	        | ‰«      S )Nc              3   ó6   •K  — | ]  }t        |‰«      –— Œ y ­wr
   )Ú_is_subtype)Ú.0ÚeÚbasetypes     €r   Ú	<genexpr>z_is_subtype.<locals>.<genexpr>Ï   s   øè ø€ Ð>±X°”;˜q (×+±Xùs   ƒ)r   ÚtupleÚallr#   Ú
issubclass)r+   r©   s    `r   r¦   r¦   Í   s7   ø€ Ü�(œEÔ"ÜÓ>±XÓ>Ó>Ð>Ü�h¤Ó%ÒH¬*°X¸xÓ*HÐHr   c                   ó   — e Zd Zd„ Zd„ Zy)Ú_BaseTestCaseContextc                 ó   — || _         y r
   )Ú	test_case)r   r±   s     r   r—   z_BaseTestCaseContext.__init__Ú   s	   € Ø"ˆ�r   c                 ó„   — | j                   j                  | j                  |«      }| j                   j                  |«      ‚r
   )r±   Ú_formatMessageÚmsgÚfailureException)r   ÚstandardMsgr´   s      r   Ú_raiseFailurez"_BaseTestCaseContext._raiseFailureÞ   s1   € à�n‰n×+Ñ+¨D¯H©H°kÓBˆØ�n‰n×-Ñ-¨cÓ2Ð2r   N)r   r   r   r—   r·   r£   r   r   r¯   r¯   Ø   s   „ ò#ó3r   r¯   c                   ó   — e Zd Zdd„Zd„ Zy)Ú_AssertRaisesBaseContextNc                 ó¤   — t         j                  | |«       || _        || _        |�t	        j
                  |«      }|| _        d | _        d | _        y r
   )	r¯   r—   r+   r±   ÚreÚcompileÚexpected_regexÚobj_namer´   )r   r+   r±   r½   s       r   r—   z!_AssertRaisesBaseContext.__init__ë   sJ   € Ü×%Ñ% d¨IÔ6Ø ˆŒØ"ˆŒØÐ%ÜŸZ™Z¨Ó7ˆNØ,ˆÔØˆŒØˆ�r   c                 óÂ  — 	 t        | j                  | j                  «      st        |›d| j                  ›�«      ‚|s=|j                  dd«      | _        |r t        t        t        |«      «      ›d�«      ‚| d} S |d   }|dd }	 |j                  | _
        | 5   ||i |¤Ž ddd«       d} y# t        $ r t        |«      | _
        Y Œ1w xY w# 1 sw Y   d} yxY w# d} w xY w)zî
        If args is empty, assertRaises/Warns is being used as a
        context manager, so check for a 'msg' kwarg and return self.
        If args is not empty, call a callable passing positional and keyword
        arguments.
        z() arg 1 must be r´   Nz1 is an invalid keyword argument for this functionr   r<   )r¦   r+   Ú
_base_typeÚ	TypeErrorÚ_base_type_strÚpopr´   ÚnextÚiterr   r¾   ÚAttributeErrorr‡   )r   r“   r   r   Úcallable_objs        r   Úhandlez_AssertRaisesBaseContext.handle÷   sì   € ð	Ü˜tŸ}™}¨d¯o©oÔ>ÜÚ!% t×':Ò':ð!<ó =ð =áØ!Ÿ:™: e¨TÓ2�”ÙÜ#Ü7;¼DÀ»LÕ7Ið%Ló Mð Màð ‰Dð   ™7ˆLØ˜˜�8ˆDð2Ø ,× 5Ñ 5�”ò Ù˜dÐ- fÒ-÷ ð ‰Døô "ò 2Ü # LÓ 1�–ð2úçð ‰Dû�4‰DúsT   ‚A6C Á;
C ÂB- ÂC Â	CÂ"C Â-C	ÃC ÃC	Ã	C ÃCÃC ÃC ÃCr
   )r   r   r   r—   rÈ   r£   r   r   r¹   r¹   é   s   „ óór   r¹   c                   ó$   — e Zd ZdZeZdZd„ Zd„ Zy)Ú_AssertWarnsContextzBA context manager used to implement TestCase.assertWarns* methods.z(a warning type or tuple of warning typesc                 ó*  — t         j                  j                  «       D ]  }t        |dd «      sŒi |_        Œ t        j                  d¬«      | _        | j                  j                  «       | _        t        j                  d| j                  «       | S )NÚ__warningregistry__Tr€   r‚   )ÚsysÚmodulesÚvaluesÚgetattrrÌ   r„   r…   Úwarnings_managerr™   r†   r+   )r   Úvs     r   r™   z_AssertWarnsContext.__enter__%  st   € ô —‘×#Ñ#Ö%ˆAÜ�qÐ/°Õ6Ø(*�Õ%ð &ô !)× 7Ñ 7¸tÔ DˆÔØ×-Ñ-×7Ñ7Ó9ˆŒÜ×Ñ˜h¨¯©Ô6Øˆr   c                 ó  — | j                   j                  |||«       |�y 	 | j                  j                  }d }| j                  D ]„  }|j                  }t        || j                  «      sŒ&|€|}| j                  �%| j                  j                  t        |«      «      sŒ[|| _        |j                  | _        |j                  | _         y  |�>| j                  dj                  | j                  j                   t        |«      «      «       | j"                  r,| j                  dj                  || j"                  «      «       y | j                  dj                  |«      «       y # t        $ r t        | j                  «      }Y �ŒOw xY w)Nz"{}" does not match "{}"z{} not triggered by {}z{} not triggered)rÑ   r    r+   r   rÆ   r‡   r„   rˆ   r   r½   ÚsearchÚwarningÚfilenameÚlinenor·   ÚformatÚpatternr¾   )r   r�   Ú	exc_valueÚtbÚexc_nameÚfirst_matchingÚmÚws           r   r    z_AssertWarnsContext.__exit__2  s]  € à×Ñ×&Ñ& x°¸BÔ?ØÐàð	*Ø—}‘}×-Ñ-ˆHð ˆØ—”ˆAØ—	‘	ˆAÜ˜a §¡Ô/ØØÐ%Ø!"�Ø×#Ñ#Ð/Ø×+Ñ+×2Ñ2´3°q³6Ô:ØàˆDŒLØŸJ™JˆDŒMØŸ(™(ˆDŒKÙð ð Ð%Ø×ÑÐ9×@Ñ@Ø×#Ñ#×+Ñ+¬S°Ó-@ó Bô Cà�=Š=Ø×ÑÐ7×>Ñ>¸xØ?C¿}¹}ó Nõ Oð ×ÑÐ1×8Ñ8¸ÓBÕCøô3 ò 	*Ü˜4Ÿ=™=Ó)‹Hð	*ús   ¢E& Å&FÆFN)	r   r   r   r   ÚWarningrÀ   rÂ   r™   r    r£   r   r   rÊ   rÊ     s   „ ÙLà€JØ?€Nò
ó!Dr   rÊ   c                 ó@   — t        || «      }|j                  d||«      S )zŸContext with same functionality as ``assertWarns`` in ``unittest``.

    Note that ``assertWarns`` is only available in python 3.2+.

    Added in 0.4.0.

    ÚassertWarns)rÊ   rÈ   )ÚtestcaseÚexpected_warningr   r   Úcontexts        r   râ   râ   Z  s$   € ô "Ð"2°HÓ=€GØ�>‰>˜-¨¨vÓ6Ð6r   )g-Cëâ6?)gü©ñÒMbP?)r   ))é   ræ   é   rç   )-r   Ú
__future__r   r   r   r5   r   r„   r‘   r›   r»   rÍ   Únumpyr4   Ú	six.movesÚmovesr@   Úunittest.mockÚmockÚImportErrorÚcPicklerr   Úimgaugr'   Úimgaug.randomre   Úimgaug.augmentables.kpsr   Ú	MagicMockr   r"   r:   rL   rT   rc   rg   rz   r�   Úobjectr�   r¦   r¯   r¹   rÊ   râ   r£   r   r   Ú<module>rõ      sè   ðñ÷
 AÑ @ã Û Û Û Û Û 	Û 
ã Ý ðÝ ðÛó Ý  Ý 4ô'˜$Ÿ.™.ô 'ó$-ò,<ò
òó ó8ó8òô4!˜ô !ò6I÷	3ñ 	3ô",Ð3ô ,ôj5DÐ2ô 5Dóx
7øðK
 ò Ýðûð ò Ýðús"   ´B2 »C Â2	B>Â=B>Ã	CÃC