ó
    †ñ:i$  ã                   óÎ   • S SK r S SKrS SKrS SKJr  SSKJrJr  SSK	J
r
JrJr  SSKJr  SSKJr   S SKr " S S\5      r\S 5       rg! \ a  r\" S	S
\5         SrCN)SrCff = f)é    N)Únjité   )ÚDeserializerÚ
Serializer)Úassert_importÚrecord_import_errorÚsafe_isinstance)ÚDimensionErroré   )ÚMaskerÚcv2zcv2 could not be imported!c                   ób   ^ • \ rS rSrSrS
S jrS rS rS rU 4S jr	\
SU 4S jj5       rS	rU =r$ )ÚImageé   z4Masks out image regions with blurring or inpainting.c                 óD  • Uc2  [        U[        5      (       a  [        S5      eUR                  U l        OX l        Xl        S[        R                  " U R                  5      4U l        SU l        SU l	        SU l
        [        [        U5      [        R                  5      (       a  UR                  5       U l        O£[        U[        5      (       aX  [!        S5        Xl        UR#                  S5      (       a0  [%        ['        [(        USS R+                  S	5      5      5      U l	        O6[        R,                  " U R                  5      R                  5       U-  U l        U R/                  5         [        U R                  [        5      (       + U l        SU l        SU l        g)
au  Build a new Image masker with the given masking value.

Parameters
----------
mask_value : np.array, "blur(kernel_xsize, kernel_xsize)", "inpaint_telea", or "inpaint_ns"
    The value used to mask hidden regions of the image.
shape : None or tuple
    If the mask_value is an auto-generated masker instead of a dataset then the input
    image shape needs to be provided.

NzBWhen the mask_value is a string the shape parameter must be given!r   Tr   zblur(é   éÿÿÿÿÚ,)Ú
isinstanceÚstrÚ	TypeErrorÚshapeÚinput_shapeÚinput_mask_valueÚnpÚprodÚ
image_dataÚblur_kernelÚ_blur_value_cacheÚ
issubclassÚtypeÚndarrayÚflattenÚ
mask_valuer   Ú
startswithÚtupleÚmapÚintÚsplitÚonesÚbuild_partition_treeÚfixed_backgroundÚlast_xidÚimmutable_outputs)Úselfr$   r   s      ÚV/srv/projetos/modelo_ml_acdoc/venv/lib/python3.13/site-packages/shap/maskers/_image.pyÚ__init__ÚImage.__init__   sM  € ð ‰=Ü˜*¤c×*Ñ*ÜÐ dÓeÐeà× Ñ ð Õð  %Ôà *Ôð Ü�GŠG�D×$Ñ$Ó%ð
ˆŒ
ð
 ˆŒàˆÔØ!%ˆÔÜ”d˜:Ó&¬¯
©
×3Ñ3Ø(×0Ñ0Ó2ˆD�OÜ˜
¤C×(Ñ(Ü˜%Ô Ø(ŒOØ×$Ñ$ W×-Ñ-Ü#(¬¬S°*¸Q¸rÐ2B×2HÑ2HÈÓ2MÓ)NÓ#O�Ô øä Ÿgšg d×&6Ñ&6Ó7×?Ñ?ÓAÀJÑNˆDŒOØ×!Ñ!Ô#ô %/¨t¯©ÄÓ$DÔ DˆÔð ˆŒð "&ˆÕó    c                 ó¦  • [        US5      (       a  UR                  5       R                  5       n[        R                  " UR
                  5      [        R                  " U R                  5      :w  az  [        SSR                  UR
                   Vs/ s H  n[        U5      PM     sn5      -   S-   SR                  U R                   Vs/ s H  n[        U5      PM     sn5      -   5      e[        U[        5      (       a  [        U5      S:X  a  US   nUR
                  n[        UR
                  5      S:”  a  UR                  5       nUc7  [        R                  " [        R                  " UR
                  5      [        S9n[        U R                   [        5      (       aï  U R"                  bš  U R$                  ['        U5      :w  a]  [(        R*                  " UR-                  U R                  5      U R"                  5      R                  5       U l        ['        U5      U l        UR1                  5       nU R.                  U)    XQ) '   OkU R                   S:X  a  U R3                  X!) S	5      nOGU R                   S
:X  a  U R3                  X!) S5      nO#UR1                  5       nU R                   U)    XQ) '   WR,                  " S/UQ76 4$ s  snf s  snf )Nztorch.Tensorz`The length of the image to be masked must match the shape given in the ImageMasker constructor: z * z != r   r   )ÚdtypeÚinpaint_teleaÚINPAINT_TELEAÚ
inpaint_nsÚ
INPAINT_NS)r	   ÚcpuÚnumpyr   r   r   r   r
   Újoinr   r   ÚlistÚlenÚravelÚzerosÚboolr$   r   r-   Úidr   ÚblurÚreshaper   ÚcopyÚinpaint)r/   ÚmaskÚxÚiÚin_shapeÚouts         r0   Ú__call__ÚImage.__call__K   s*  € Ü˜1˜n×-Ñ-Ø—‘“—‘“ˆAä�7Š7�1—7‘7ÓœrŸwšw t×'7Ñ'7Ó8Ó8Ü ð,à—*‘*¨a¯gªgÓ6ªg¨œc !žf©gÑ6Ó7ñ8ð ñð —*‘*¨d×.>Ò.>Ó?Ò.>¨œc !žfÑ.>Ñ?Ó@ñ	Aóð ô �aœ×Ñ¤3 q£6¨Q£;Ø�!‘ˆAð —7‘7ˆÜˆq�w‰w‹<˜!ÓØ—‘“	ˆAð ‰<Ü—8’8œBŸGšG A§G¡GÓ,´DÑ9ˆDä�d—o‘o¤s×+Ñ+Ø×ÑÑ+Ø—=‘=¤B q£EÓ)Ü-0¯XªX°a·i±iÀ×@PÑ@PÓ6QÐSW×ScÑScÓ-d×-jÑ-jÓ-l�DÔ*Ü$& q£E�D”MØ—f‘f“h�Ø!×3Ñ3°T°EÑ:��E’
à—‘ OÓ3Ø—l‘l 1 e¨_Ó=‘Ø—‘ LÓ0Ø—l‘l 1 e¨\Ó:�øà—&‘&“(ˆCØŸ™¨$¨Ñ/ˆC�‰Jà—’˜AÐ) Ò)Ð+Ð+ùòE 7ùâ?s   ÂK	Ã
Kc           	      ó˜  • UR                  U R                  5      R                  [        R                  5      R                  S5      nUR                  5       [        R                  " U R                  SS 5      :X  aM  UR                  U R                  5      R                  5       nUR                  S5      USS& UR                  5       $ [        R                  " UR                  U R                  5      R                  [        R                  5      US[        [        U5      S9R                  UR                  5      R                  5       $ )z9Fill in the masked parts of the image through inpainting.r   Nr   )r   r   é   )ÚinpaintRadiusÚflags)rD   r   Úastyper   Úuint8ÚmaxÚsumr   rE   Úmeanr?   r   rF   Úgetattrr5   )r/   rH   rG   ÚmethodÚreshaped_maskrK   s         r0   rF   ÚImage.inpaintw   sí   € àŸ™ T×%5Ñ%5Ó6×=Ñ=¼b¿h¹hÓG×KÑKÈAÓNˆØ×ÑÓ¤"§'¢'¨$×*:Ñ*:¸3¸BÐ*?Ó"@Ó@Ø—)‘)˜D×,Ñ,Ó-×2Ñ2Ó4ˆCØ—X‘X˜fÓ%ˆC‘ˆFØ—9‘9“;Ðô �KŠKØ—	‘	˜$×*Ñ*Ó+×2Ñ2´2·8±8Ó<¸mÐ[\ÔdkÔloÐqwÓdxñ÷ ‰V�A—G‘G‹_ß‰U‹Wð	
r3   c                 óV  • SnU R                   S   nSnU R                   S   nSnU R                   S   nXC-
  nXe-
  n[        R                  R                  SXX4XVSS4	/5      n	[	        X!-
  XC-
  -  Xe-
  -  5      n
[
        R                  " U
S-
  S45      n[        XX4XVXxX«U	5        X°l        g)úTThis partitions an image into a herarchical clustering based on axis-aligned splits.r   r   r   r   Fé   N)	r   ÚnumbaÚtypedÚListr(   r   r@   Ú_jit_build_partition_treeÚ
clustering)r/   ÚxminÚxmaxÚyminÚymaxÚzminÚzmaxÚtotal_ywidthÚtotal_zwidthÚqÚMrb   s               r0   r+   ÚImage.build_partition_tree‡   s¼   € àˆØ×Ñ Ñ"ˆØˆØ×Ñ Ñ"ˆØˆØ×Ñ Ñ"ˆà‘{ˆØ‘{ˆÜ�K‰K×Ñ˜q $¨d¸$ÀbÈ%ÐPÐQÓRˆÜ�‘ ¡Ñ-°±Ñ=Ó>ˆÜ—X’X˜q 1™u a˜jÓ)ˆ
Ü! $¨d¸$ÀlÐbcÐqrÔsØ$�r3   c                 óÞ   >• [         TU ]  U5        [        USSS9 nUR                  SU R                  5        UR                  SU R                  5        SSS5        g! , (       d  f       g= f)z&Write a Image masker to a file stream.úshap.maskers.Imager   )Úversionr$   r   N)ÚsuperÚsaver   r   r   )r/   Úout_fileÚsÚ	__class__s      €r0   rr   Ú
Image.save˜   sU   ø€ ä‰‰�XÔô ˜Ð"6ÀÒBÀaØ�F‰F�< ×!6Ñ!6Ô7Ø�F‰F�7˜D×,Ñ,Ô-÷ C×BÖBús   œ9AÁ
A,c                 óò   >• U(       a  U R                  U5      $ [        TU ]	  USS9n[        USSSS9 nUR                  S5      US'   UR                  S5      US'   SSS5        U$ ! , (       d  f       U$ = f)	z'Load a Image masker from a file stream.F)Úinstantiatero   r   )Úmin_versionÚmax_versionr$   r   N)Ú_instantiated_loadrq   Úloadr   )ÚclsÚin_filerx   Úkwargsrt   ru   s        €r0   r|   Ú
Image.load¡   s€   ø€ ö Ø×)Ñ)¨'Ó2Ð2ä‘‘˜g°5�Ð9ˆÜ˜'Ð#7ÀQÐTUÒVÐZ[Ø#$§6¡6¨,Ó#7ˆF�<Ñ ØŸf™f W›oˆF�7‰O÷ Wð ˆ÷ WÔVð ˆús   ´)A'Á'
A6)r   r   rb   r,   r   r.   r   r   r-   r$   r   )N)T)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r1   rL   rF   r+   rr   Úclassmethodr|   Ú__static_attributes__Ú__classcell__)ru   s   @r0   r   r      s5   ø† Ù>ô3&òj*,òX
ò %õ".ð ö	ó ö	r3   r   c                 óˆ  • [        U	5      S-
  n[        U
5      S:”  Ga;  [        R                  " U
5      u	  pÀpp4p]nUS:¼  a  X¸-   X�U(       a  SOS4'   US:  a  U* S-
  X-  U-  X'-  -   U-   :X  d   eX-
  nX2-
  nXT-
  nUS:X  a  US:X  a  US:X  a  O³U =nnU=nnU=nnU=nnU=nnU=nnUU:¼  a  US:”  a  XS-  -   nUnUnOUS:”  a  UUS-  -   nUnUnOUUS-  -   n U nU nUU-
  UU-
  -  UU-
  -  n!UU-
  UU-
  -  UU-
  -  n"[        R                  " U
U!* UUUUUUUS4	5        [        R                  " U
U"* UUUUUUUS4	5        US-  n[        U
5      S:”  a  GM;  [	        [        U	5      5       HQ  n#[        U	U#S4   5      n$[        U	U#S4   5      n%U$U:  a  SO	U	U$U-
  S4   n!U%U:  a  SO	U	U%U-
  S4   n"U!U"-   U	U#S4'   MS     g)r\   r   r   r   TFrO   N)r>   ÚheapqÚheappopÚheappushÚranger(   )&rc   rd   re   rf   rg   rh   ri   rj   rl   rb   rk   ÚindÚ_Ú
parent_indÚis_leftÚxwidthÚywidthÚzwidthÚlxminÚrxminÚlxmaxÚrxmaxÚlyminÚryminÚlymaxÚrymaxÚlzminÚrzminÚlzmaxÚrzmaxÚxmidÚymidÚzmidÚlsizeÚrsizerI   ÚliÚris&                                         r0   ra   ra   ®   sk  € ô ˆj‹/˜AÑ
€CÜ
ˆa‹&�1Œ*ÜEJÇ]Â]ÐSTÓEUÑBˆ�˜T¨¸7ð ˜‹?Ø:=¹'ˆJ®¡1°QÐ6Ñ7ð �‹7Ø�4˜!‘8˜tÑ2°\ÑAÀDÑDWÑWÐZ^Ñ^Ó^Ð^Ð^à‘ˆØ‘ˆØ‘ˆØ�Q‹;˜6 Q›;¨6°Q«;Øð !Ð ˆE�EØ Ð ˆE�EØ Ð ˆE�EØ Ð ˆE�EØ Ð ˆE�EØ Ð ˆE�Eð ˜Ó F¨Q£JØ¨™kÑ)�Ø�Ø‘ð ˜!“Ø˜f¨™kÑ)�Ø�Ø‘ð ˜f¨™kÑ)�Ø�Ø�à˜U‘] u¨u¡}Ñ5¸À¹ÑGˆEØ˜U‘] u¨u¡}Ñ5¸À¹ÑGˆEä�NŠN˜1 ˜v u¨e°U¸EÀ5È%ÐQTÐVZÐ[Ô\Ü�NŠN˜1 ˜v u¨e°U¸EÀ5È%ÐQTÐV[Ð\Ô]ð 	ˆq‰ˆôg ˆa‹&�1Ž*ôl ”3�z“?Ö#ˆÜ�˜A˜q˜DÑ!Ó"ˆÜ�˜A˜q˜DÑ!Ó"ˆØ˜!“V‘ ¨B°©F°A¨IÑ!6ˆØ˜!“V‘ ¨B°©F°A¨IÑ!6ˆØ  5™=ˆ
�1�a�4Óò $r3   )rŠ   Únumba.typedr^   r;   r   r   Ú_serializabler   r   Úutilsr   r   r	   Úutils._exceptionsr
   Ú_maskerr   r   ÚImportErrorÚer   ra   © r3   r0   Ú<module>r°      ss   ðã ã Û Ý ç 4ß GÑ GÝ .Ý ð@Ûô
XˆFô Xðv ñA)ó ñA)øðA ó @Ù˜Ð;¸Q×?Ñ?ûð@ús   ²A
 Á
A$Á
AÁA$