ó
    †ñ:i˜~  ã                   ó    • S SK r S SKrS SKrS SKJr  S SKJr  SSKJ	r	J
r
  SSKJr  SSKJrJrJrJr  SS	KJr   " S
 S\5      rS r\S 5       rg)é    N)Únjit)Útqdmé   )ÚExplanationÚlinks)ÚModel)ÚMaskedModelÚOpChainÚ
make_masksÚsafe_isinstanceé   )Ú	Explainerc                   óŽ   ^ • \ rS rSrSrS\R                  SSS.U 4S jjrSSSSS	SSS
.U 4S jjrS	S.S jr	S r
S rS rSrU =r$ )ÚPartitionExplaineré   aÆ  Uses the Partition SHAP method to explain the output of any function.

Partition SHAP computes Shapley values recursively through a hierarchy of features, this
hierarchy defines feature coalitions and results in the Owen values from game theory.

The PartitionExplainer has two particularly nice properties:

1) PartitionExplainer is model-agnostic but when using a balanced partition tree only has
   quadratic exact runtime (in term of the number of input features). This is in contrast to the
   exponential exact runtime of KernelExplainer or SamplingExplainer.
2) PartitionExplainer always assigns to groups of correlated features the credit that set of features
   would have had if treated as a group. This means if the hierarchical clustering given to
   PartitionExplainer groups correlated features together, then feature correlations are
   "accounted for" in the sense that the total credit assigned to a group of tightly dependent features
   does not depend on how they behave if their correlation structure was broken during the explanation's
   perturbation process.

Note that for linear models the Owen values that PartitionExplainer returns are the same as the standard
non-hierarchical Shapley values.
NT)Úoutput_namesÚlinkÚlinearize_linkÚfeature_namesc          
      óÎ  >^ • [         TT ]  UUUUSUUS9  [        US5      (       a)  [        UR                  5      (       d  UR                  SS OST l        [        T R                  S5      (       d  [        T R                  5      T l        ST l	        ST l
        [        T R                  SS5      c  [        S5      eT R
                  b%  [        T R
                  5      S:”  a  U 4S	 jT l        OT R                  T l        [        T R                  R                   5      (       d5  T R                  R                   T l        [%        T R"                  5      T l        [        U5      S
:”  a~   " S ST R(                  5      nT R(                  R*                  R,                  UR*                  l        UT l        UR/                  5        H  u  pšU
T R*                  R0                  U	'   M      gg)a[  Build a PartitionExplainer for the given model with the given masker.

Parameters
----------
model : function
    User supplied function that takes a matrix of samples (# samples x # features) and
    computes the output of the model for those samples.

masker : function or numpy.array or pandas.DataFrame or tokenizer
    The function used to "mask" out hidden features of the form `masker(mask, x)`. It takes a
    single input sample and a binary mask and returns a matrix of masked samples. These
    masked samples will then be evaluated using the model function and the outputs averaged.
    As a shortcut for the standard masking using by SHAP you can pass a background data matrix
    instead of a function and that matrix will be used for masking. Domain specific masking
    functions are available in shap such as shap.maksers.Image for images and shap.maskers.Text
    for text.

partition_tree : None or function or numpy.array
    A hierarchical clustering of the input features represented by a matrix that follows the format
    used by scipy.cluster.hierarchy (see the notebooks_html/partition_explainer directory an example).
    If this is a function then the function produces a clustering matrix when given a single input
    example. If you are using a standard SHAP masker object then you can pass masker.clustering
    to use that masker's built-in clustering of the features, or if partition_tree is None then
    masker.clustering will be used by default.

Examples
--------
See `Partition explainer examples <https://shap.readthedocs.io/en/latest/api_examples/explainers/PartitionExplainer.html>`_

Ú	partition)r   r   Ú	algorithmr   r   Úshaper   Nzshap.models.ModelÚ
clusteringzjThe passed masker must have a .clustering attribute defined! Try shap.maskers.Partition(data) for example.c                 óv   >• TR                  U R                  " U R                  S   /TR                  Q76 5      $ )Nr   )ÚmodelÚreshaper   Úinput_shape)ÚxÚselfs    €Ú]/srv/projetos/modelo_ml_acdoc/venv/lib/python3.13/site-packages/shap/explainers/_partition.pyÚ<lambda>Ú-PartitionExplainer.__init__.<locals>.<lambda>u   s*   ø€ ¨T¯Z©Z¸¿	º	À!Ç'Á'È!Á*Ð8`Èt×O_ÑO_Ò8`Ô-aó    r   c                   ó<   ^ • \ rS rSrSSSSSSSS.U 4S jjrSrU =r$ )	Ú7PartitionExplainer.__init__.<locals>.PartitionExplaineréƒ   éô  NFÚauto©Ú	max_evalsÚfixed_contextÚmain_effectsÚerror_boundsÚ
batch_sizeÚoutputsÚsilentc                ó0   >• [         T	U ]  " UUUUUUUUS.6$ )Nr*   ©ÚsuperÚ__call__©
r    r+   r,   r-   r.   r/   r0   r1   ÚargsÚ	__class__s
            €r!   r5   Ú@PartitionExplainer.__init__.<locals>.PartitionExplainer.__call__…   s/   ø€ ô !™7Ò+ØØ"+Ø&3Ø%1Ø%1Ø#-Ø 'Ø%ò	ð 	r$   © )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r5   Ú__static_attributes__Ú__classcell__©r8   s   @r!   r   r&   ƒ   s$   ø† ð
 "Ø"&Ø!&Ø!&Ø%Ø Ø ÷ö r$   r   )r4   Ú__init__ÚhasattrÚcallabler   r   r   r   r   Úexpected_valueÚ_curr_base_valueÚgetattrÚmaskerÚ
ValueErrorÚlenÚ_reshaped_modelr   Ú_clusteringr   Ú_mask_matrixr8   r5   Ú__doc__ÚitemsÚ__kwdefaults__)r    r   rH   r   r   r   r   Ú	call_argsr   ÚkÚvr8   s   `          €r!   rB   ÚPartitionExplainer.__init__$   sš  ù€ ôR 	‰ÑØØØØ)Ø!Ø%Ø'ð 	ñ 	
ô* 07°v¸w×/GÑ/GÔPXÐY_×YeÑYe×PfÑPf˜6Ÿ<™<¨¨Ñ+ÐlpˆÔä˜tŸz™zÐ+>×?Ñ?Ü˜tŸz™zÓ*ˆDŒJØ"ˆÔØ $ˆÔÜ�4—;‘; ¨dÓ3Ñ;ÜØ|óð ð ×ÑÑ'¬C°×0@Ñ0@Ó,AÀAÓ,EÜ#aˆDÕ à#'§:¡:ˆDÔ ô ˜Ÿ™×.Ñ.×/Ñ/Ø#Ÿ{™{×5Ñ5ˆDÔÜ *¨4×+;Ñ+;Ó <ˆDÔô ˆy‹>˜AÓô T§^¡^ô ð0 37·.±.×2IÑ2I×2QÑ2QÐ×'Ñ'Ô/Ø/ˆDŒNØ!Ÿ™Ö)‘�Ø23�—‘×,Ñ,¨QÓ/ò *ð9 r$   r(   Fr)   r*   c                ó0   >• [         T	U ]  " UUUUUUUUS.6$ )z7Explain the output of the model on the given arguments.r*   r3   r6   s
            €r!   r5   ÚPartitionExplainer.__call__¡   s/   ø€ ô ‰wÒØØØ'Ø%Ø%Ø!ØØò	
ð 		
r$   )r,   c                óì  • US:X  a  SnOUS;  a  [        SU 35      e[        U R                  U R                  U R                  U R
                  /UQ76 n	[        U	5      n
[        R                  " U
[        S9nU R                  b  [        U R                  SS5      (       d  U	" UR                  SS	5      S
S9S
   U l
        U	" UR                  SS	5      ) 5      S
   n[        U R                  R                  5      (       a8  U R                  R                  " U6 U l        [!        U R                  5      U l        [%        U R                  S5      (       a´  [        U R                  R&                  5      S
:”  a‘  Uc*  [        R(                  " [        U R                  5      5      nO9[+        U[,        5      (       a$  UR/                  [1        U5      5      R2                  nSU R                  R&                  S
   -  S-   [        U5      4nO SU R                  R&                  S
   -  S-   4nUS:X  a  Sn[        R                  " U5      U l        [        R                  " U5      U l        U R7                  X�R                  XÁS-
  XWXF5        U R4                  U R2                  SS& [9        [        U R4                  5      S-
  S
X R2                  U R                  5        U R2                  SU
 R;                  5       Uc  U R                  OU R                  U   U	R<                   Vs/ s H
  oîUSS -   PM     snSU R4                  R;                  5       U R                  U[        U R                  SS5      S.$ s  snf )z_Explains a single row and returns the tuple (row_values, row_expected_values, row_mask_shapes).r)   N)r   r   Nz;Unknown fixed_context value passed (must be 0, 1 or None): ©ÚdtypeÚfixed_backgroundFr   éÿÿÿÿr   )Ú
zero_indexr   r   r(   r   )ÚvaluesÚexpected_valuesÚmask_shapesr-   Úhierarchical_valuesr   Úoutput_indicesr   )rI   r	   r   rH   r   r   rJ   ÚnpÚzerosÚboolrF   rG   r   rD   r   rL   r   rM   rC   r   ÚarangeÚ
isinstancer
   Úapplyr   r]   ÚdvaluesÚowenÚlower_creditÚcopyr_   )r    r+   r-   r.   r/   r0   r1   r,   Úrow_argsÚfmÚMÚm00Úf11Ú	out_shapeÚss                  r!   Úexplain_rowÚPartitionExplainer.explain_row¸   så  € ð ˜FÓ"ð !‰MØ ,Ó.ÜÐZÐ[hÐZiÐjÓkÐkô ˜Ÿ™ T§[¡[°$·)±)¸T×=PÑ=PÐ\ÐS[Ò\ˆô �‹GˆÜ�hŠh�q¤Ñ%ˆà× Ñ Ñ(´¸¿¹ÐEWÐY^×0_Ñ0_Ù$& s§{¡{°1°bÓ'9ÀaÑ$HØñ%ˆDÔ!ñ �#—+‘+˜a Ó$Ð$Ó% aÑ(ˆä�D—K‘K×*Ñ*×+Ñ+Ø#Ÿ{™{×5Ò5°xÐ@ˆDÔÜ *¨4×+;Ñ+;Ó <ˆDÔä�4×(Ñ(¨'×2Ñ2´s¸4×;PÑ;P×;VÑ;VÓ7WÐZ[Ó7[Ø‰ÜŸ)š)¤C¨×(=Ñ(=Ó$>Ó?‘Ü˜G¤W×-Ñ-Ø!Ÿ-™-¬°CÓ(8Ó9×@Ñ@�à˜T×-Ñ-×3Ñ3°AÑ6Ñ6¸Ñ:¼CÀ»LÐI‰Ià˜T×-Ñ-×3Ñ3°AÑ6Ñ6¸Ñ:Ð<ˆIà˜ÓØˆIä—h’h˜yÓ)ˆŒÜ—x’x 	Ó*ˆŒà�	‰	�"×+Ñ+¨S¸a±-ÀÐYcÔlð Ÿ™ˆ�‰‘Aˆä”S˜Ÿ™Ó&¨Ñ*¨A¨q·+±+¸t×?OÑ?OÔPð —k‘k " 1�o×*Ñ*Ó,Ø8?¹˜t×4Ò4ÈT×MbÑMbÐcjÑMkØ79·~²~ÓF²~°! 	¨!¨" Ô-±~ÑFØ Ø#'§<¡<×#4Ñ#4Ó#6Ø×*Ñ*Ø%Ü# D§J¡J°ÀÓEñ	
ð 		
ùò Gs   ÌM1c                 ó   • g)Nz$shap.explainers.PartitionExplainer()r:   )r    s    r!   Ú__str__ÚPartitionExplainer.__str__ý   s   € Ø5r$   c	                 ó   • [        U5      n	[        R                  " U	[        S9n
Un[        U R                  5      S-
  nUb  X%   nX5   n[
        R                  " 5       nUR                  SSX¢X<S445        Sn[        XIS-
  U	-  5      nSn[        R                  " 5       nUR                  5       (       Gd.  Xä:¼  aa  UR                  5       (       dJ  UR                  5       S   u  p¢p<nU R                  U==   X2-
  U-  -  ss'   UR                  5       (       d  MJ  GOÈ/ n/ nUR                  5       (       Gd±  [        U5      U:  Ga¡  U[        U5      -   U:  GaŽ  UR                  5       S   u  p¢p<nXÉ:¼  a  [        U R                  XÉ-
  S4   5      OSnXÉ:¼  a  [        U R                  XÉ-
  S4   5      OSnXÉ:  a  SnO3U R                  R                  S   S:¼  a  U R                  XÉ-
  S4   nOSnUS:  a  U R                  U==   X2-
  U-  -  ss'   Mõ  U
R                  5       nUSS=== U R                   USS24   -  sss& U
R                  5       nUSS=== U R                   USS24   -  sss& UR#                  U
UUX#UUUU4	5        UR#                  U5        UR#                  U5        UR                  5       (       d$  [        U5      U:  a  U[        U5      -   U:  a  GMŽ  [        R$                  " U5      n[        U5      S:”  ay  U" U5      nUb	  USS2U4   nU[        U5      -  nUc7  [        R                  " 5       U-
  S	:”  a  ['        XøS
S9nUR)                  U5        Ub  UR)                  [        U5      5        [+        [        U5      5       GH.  nUU   u	  n
nnp#nnnnWSU-     nUSU-  S-      nUnUc  US-  nOSUS:X  a$  U R                  U==   UU-
  U-
  U-   U-  -  ss'   O)US:X  a#  U R                  U==   UU-
  U-
  U-   U-  -  ss'   Ub  US:X  aÊ  X¢UUU4nUR                  [        R,                  " [        R.                  " UU-
  5      5      * U-  [        R0                  R3                  5       U45        X¢UUU4nUR                  [        R,                  " [        R.                  " UU-
  5      5      * U-  [        R0                  R3                  5       U45        Ub	  US:X  d  GMb  UUUUU4nUR                  [        R,                  " [        R.                  " UU-
  5      5      * U-  [        R0                  R3                  5       U45        UUUUU4nUR                  [        R,                  " [        R.                  " UU-
  5      5      * U-  [        R0                  R3                  5       U45        GM1     UR                  5       (       d  GM.  Ub  UR5                  5         Xàl        X[4$ )úMCompute a nested set of recursive Owen values based on an ordering recursion.rX   r   Nr   ç      ð?r   r[   é   é   F©ÚtotalÚdisableÚleave)rJ   rb   rc   rd   rh   ÚqueueÚPriorityQueueÚputÚminÚtimeÚemptyÚgetÚintrL   r   rk   rM   ÚappendÚarrayr   ÚupdateÚrangeÚmaxÚabsÚrandomÚrandnÚcloseÚlast_eval_count) r    rm   Úf00rp   r+   Úoutput_indexesr,   r/   r1   rn   ro   Ú
base_valueÚindÚqÚ
eval_countÚtotal_evalsÚpbarÚ
start_timeÚweightÚ
batch_argsÚbatch_masksÚlindÚrindÚdistanceÚm10Úm01ÚfoutÚiÚf10Úf01Ú
new_weightr7   s                                    r!   ri   ÚPartitionExplainer.owen   s–  € ô
 �‹GˆÜ�hŠh�q¤Ñ%ˆàˆ
ô �$—,‘,Ó !Ñ#ˆð Ñ%ð Ñ%ˆCØÑ%ˆCä×ÒÓ!ˆØ	�‰ˆq�!�c ¨#Ð.Ð/Ô0Øˆ
ÜØ˜A™ ‘{ó
ˆð ˆÜ—Y’Y“[ˆ
Ø—'‘'—)’)àÓ&ØŸ'™'Ÿ)™)Ø12·±³¸±Ñ.�C˜c¨Ø—L‘L Ó%¨#©)°vÑ)=Ñ=Ó%ð Ÿ'™'Ÿ)›)ñ ð ˆJØˆKØ—g‘g—i’i¤C¨Ó$4°zÔ$AÀjÔSVÐWbÓScÑFcÐfoÔFoà-.¯U©U«W°Q©ZÑ*�˜# Fð =@»H”s˜4×+Ñ+¨C©G°Q¨JÑ7Ô8È"�Ø<?»H”s˜4×+Ñ+¨C©G°Q¨JÑ7Ô8È"�ð “7Ø!‘Hà×'Ñ'×-Ñ-¨aÑ0°AÓ5Ø#'×#3Ñ#3°C±G¸Q°JÑ#?™à#$˜ð ˜a“<Ø—L‘L Ó%¨#©)°vÑ)=Ñ=Ó%Ùð —h‘h“j�Ø‘A“˜$×+Ñ+¨D²!¨GÑ4Ñ4“Ø—h‘h“j�Ø‘A“˜$×+Ñ+¨D²!¨GÑ4Ñ4“à×!Ñ! 3¨¨S°#¸CÀÀtÈVÐ"TÔUØ×"Ñ" 3Ô'Ø×"Ñ" 3Ô'ð= —g‘g—i‘i¤C¨Ó$4°zÓ$AÀjÔSVÐWbÓScÑFcÐfoÖFoô@ Ÿ(š( ;Ó/ˆKô �:‹ Ó"Ù˜+“�Ø!Ñ-Ø¢ >Ð 1Ñ2�Dàœc +Ó.Ñ.�
à‘<¤D§I¢I£K°*Ñ$<¸qÓ$@Ü kÈÑO�DØ—K‘K 
Ô+ØÑ#Ø—K‘K¤ KÓ 0Ô1ô œ3˜z›?×+�ØCMÈaÁ=Ñ@��S˜#˜s¨¨d°D¸&ð ˜1˜q™5‘k�Ø˜1˜q™5 1™9‘o�à#�
Ø Ñ(Ø !‘O‘JØ" aÓ'Ø—L‘L Ó%Ø˜c™	 C™¨#Ñ-Øñ*ñ Ô%ð # aÓ'Ø—L‘L Ó%Ø˜c™	 C™¨#Ñ-Øñ*ñ Ó%ð !Ñ(¨M¸QÓ,>à c¨4°Ð<�DØ—E‘EœBŸFšF¤2§6¢6¨#°©)Ó#4Ó5Ð5¸
ÑBÄBÇIÁIÇOÁOÓDUÐW[Ð\Ô]ð   c¨4°Ð<�DØ—E‘EœBŸFšF¤2§6¢6¨#°©)Ó#4Ó5Ð5¸
ÑBÄBÇIÁIÇOÁOÓDUÐW[Ð\Ô]à Ñ(¨M¸QÖ,>à  c¨4°Ð<�DØ—E‘EœBŸFšF¤2§6¢6¨#°©)Ó#4Ó5Ð5¸
ÑBÄBÇIÁIÇOÁOÓDUÐW[Ð\Ô]ð    c¨4°Ð<�DØ—E‘EœBŸFšF¤2§6¢6¨#°©)Ó#4Ó5Ð5¸
ÑBÄBÇIÁIÇOÁOÓDUÐW[Ð\×]ñG ,ðy —'‘'—)”)ðB ÑØ�J‰JŒLà)ÔàÐ)Ð)r$   c	                 óL  • [        U5      n	[        R                  " U	[        S9n
Un[        U R                  5      S-
  nUb  X%   nX5   nU	n[
        R                  " 5       nUR                  SSX¢X<SU445        Sn[        XIS-
  U	-  5      nSn[        R                  " 5       nUR                  5       (       GdQ  Xô:¼  ab  UR                  5       (       dK  UR                  5       S   u  p¢p<nnU R                  U==   X2-
  U-  -  ss'   UR                  5       (       d  MK  GOê/ n/ nUR                  5       (       Gdy  [        U5      U:  Gai  Xô:  Gac  UR                  5       S   u  p¢p<nnXÉ:¼  a  [        U R                  XÉ-
  S4   5      OSnXÉ:¼  a  [        U R                  XÉ-
  S4   5      OSnXÉ:  a  SnOU R                  XÉ-
  S4   nUS:  a  U R                  U==   X2-
  U-  -  ss'   MÉ  U
R                  5       nUSS=== U R                  USS24   -  sss& U
R                  5       nUSS=== U R                  USS24   -  sss& UR!                  U
UUX#UUUUU4
5        UR!                  U5        UR!                  U5        UR                  5       (       d  [        U5      U:  a  Xô:  a  GMc  [        R"                  " U5      n[        U5      S:”  az  U" U5      nUb	  USS2U4   nU[        U5      -  nUc8  [        R                  " 5       U-
  S:”  a  [%        UUS	S
9nUR'                  U5        Ub  UR'                  [        U5      5        [)        [        U5      5       GH‡  nUU   u
  n
nnp#nnnnnXÉ:  a  SnOU R                  XÉ-
  S4   nWSU-     n USU-  S-      n!XM-
  U:”  a  UU-  nSn"OS	n"Un#Ub  U"(       a  U#S-  n#Ub  US:X  d  U"(       aÿ  U R                  U==   UU -
  U!-
  U-   U-  -  ss'   X¢U UU#US:X  a  SOU4n$UR                  [        R*                  " [        R,                  " U U-
  5      5      * U#-  [        R.                  R1                  5       U$45        X¢U!UU#US:X  a  SOU4n$UR                  [        R*                  " [        R,                  " U!U-
  5      5      * U#-  [        R.                  R1                  5       U$45        Ub  US:X  d
  U"(       d  GM†  U R                  U==   UU -
  U!-
  U-   U-  -  ss'   UU!UUU#US:X  a  SOU4n$UR                  [        R*                  " [        R,                  " UU!-
  5      5      * U#-  [        R.                  R1                  5       U$45        UU UUU#US:X  a  SOU4n$UR                  [        R*                  " [        R,                  " UU -
  5      5      * U#-  [        R.                  R1                  5       U$45        GMŠ     UR                  5       (       d  GMQ  Ub  UR3                  5         Xðl        X[4$ )ry   rX   r   Nr   rz   r   r[   r|   Fr}   r{   T)rJ   rb   rc   rd   rh   r�   r‚   rƒ   r„   r…   r†   r‡   rˆ   rL   rk   rM   r‰   rŠ   r   r‹   rŒ   r�   rŽ   r�   r�   r‘   r’   )%r    rm   r“   rp   r+   r”   r,   r/   r1   rn   ro   r•   r–   Úevals_plannedr—   r˜   r™   rš   r›   rœ   Ú_r�   rž   ÚcontextrŸ   r    r¡   r¢   r£   r¤   r¥   Ú
num_leavesr¦   r§   Úignore_contextr¨   r7   s%                                        r!   Úowen3ÚPartitionExplainer.owen3Œ  sÐ  € ô
 �‹GˆÜ�hŠh�q¤Ñ%ˆàˆ
ô �$—,‘,Ó !Ñ#ˆð Ñ%ð Ñ%ˆCØÑ%ˆCð ˆä×ÒÓ!ˆØ	�‰ˆq�!�c ¨#¨}Ð=Ð>Ô?Øˆ
ÜØ˜A™ ‘{ó
ˆð ˆÜ—Y’Y“[ˆ
Ø—'‘'—)’)àÓ&ØŸ'™'Ÿ)™)Ø45·E±E³G¸A±JÑ1�C˜c¨°Ø—L‘L Ó%¨#©)°vÑ)=Ñ=Ó%ð Ÿ'™'Ÿ)›)ñ ð ˆJØˆKØ—g‘g—i’i¤C¨Ó$4°zÔ$AÀjÔF\à67·e±e³g¸a±jÑ3�˜# F¨Gð =@»H”s˜4×+Ñ+¨C©G°Q¨JÑ7Ô8È"�Ø<?»H”s˜4×+Ñ+¨C©G°Q¨JÑ7Ô8È"�ð “7Ø!‘Hà#×/Ñ/°±¸°
Ñ;�Hð ˜a“<Ø—L‘L Ó%¨#©)°vÑ)=Ñ=Ó%Ùð —h‘h“j�Ø‘A“˜$×+Ñ+¨D²!¨GÑ4Ñ4“Ø—h‘h“j�Ø‘A“˜$×+Ñ+¨D²!¨GÑ4Ñ4“à×!Ñ! 3¨¨S°#¸CÀÀtÈVÐU\Ð"]Ô^Ø×"Ñ" 3Ô'Ø×"Ñ" 3Ô'ð7 —g‘g—i‘i¤C¨Ó$4°zÓ$AÀjÖF\ô: Ÿ(š( ;Ó/ˆKô �:‹ Ó"Ù˜+“�Ø!Ñ-Ø¢ >Ð 1Ñ2�Dàœc +Ó.Ñ.�
à‘<¤D§I¢I£K°*Ñ$<¸qÓ$@Ü k¸6ÈÑO�DØ—K‘K 
Ô+ØÑ#Ø—K‘K¤ KÓ 0Ô1ô œ3˜z›?×+�ØLVÐWXÉMÑI��S˜#˜s¨¨d°D¸&À'ð “7Ø!"‘Jà!%×!1Ñ!1°#±'¸1°*Ñ!=�Jð ˜1˜q™5‘k�Ø˜1˜q™5 1™9‘o�ð Ñ,¨zÓ9Ø! ZÑ/�MØ%)‘Nà%*�Nà#�
Ø‘?¦nØ !‘O�Jà‘? g°£l¶nØ—L‘L Ó%Ø˜c™	 C™¨#Ñ-Øñ*ñ Ó%ð
   c¨4°À'ÈQÃ,¹QÐT[Ð\�DØ—E‘EœBŸFšF¤2§6¢6¨#°©)Ó#4Ó5Ð5¸
ÑBÄBÇIÁIÇOÁOÓDUÐW[Ð\Ô]ð   c¨4°À'ÈQÃ,¹QÐT[Ð\�DØ—E‘EœBŸFšF¤2§6¢6¨#°©)Ó#4Ó5Ð5¸
ÑBÄBÇIÁIÇOÁOÓDUÐW[Ð\Ô]à‘? g°£l·n±nØ—L‘L Ó%Ø˜c™	 C™¨#Ñ-Øñ*ñ Ó%ð
    c¨4°À'ÈQÃ,¹QÐT[Ð\�DØ—E‘EœBŸFšF¤2§6¢6¨#°©)Ó#4Ó5Ð5¸
ÑBÄBÇIÁIÇOÁOÓDUÐW[Ð\Ô]ð    c¨4°À'ÈQÃ,¹QÐT[Ð\�DØ—E‘EœBŸFšF¤2§6¢6¨#°©)Ó#4Ó5Ð5¸
ÑBÄBÇIÁIÇOÁOÓDUÐW[Ð\×]ña ,ðs —'‘'—)”)ðV ÑØ�J‰JŒLà)ÔàÐ)Ð)r$   )r8   rL   rF   rM   rK   rh   rE   r   r’   r   r]   )r;   r<   r=   r>   rN   r   ÚidentityrB   r5   rs   rv   ri   r°   r?   r@   rA   s   @r!   r   r      sn   ø† ñð4 Ø�^‰^ØØ÷z4ð z4ð@ ØØØØØØ÷
ð 
ð0 lrõC
òJ6òJ*÷XW*ð W*r$   r   c                 ó  • U R                  S5      (       a  [        U SS 5      $ U R                  S5      (       a  [        U SS 5      $ U R                  S5      (       a  [        U SS 5      $ [        U [        5      (       d  [	        U 5      $ g )Nzmax(é   r[   zmin(zmax(abs(é   éþÿÿÿ)Ú
startswithrˆ   rf   ÚstrrJ   )r”   s    r!   Úoutput_indexes_lenr¹   Ä  sˆ   € Ø× Ñ  ×(Ñ(Ü�> ! BÐ'Ó(Ð(Ø	×	"Ñ	" 6×	*Ñ	*Ü�> ! BÐ'Ó(Ð(Ø	×	"Ñ	" :×	.Ñ	.Ü�> ! BÐ'Ó(Ð(Ü˜¬×,Ñ,Ü�>Ó"Ð"ð -r$   c                 ó|  • X:  a  X0==   U-  ss'   g [        X@U-
  S4   5      n[        X@U-
  S4   5      n[        X@U-
  S4   5      nXR:¼  a  [        XEU-
  S4   5      OSnXb:¼  a  [        XFU-
  S4   5      OSn	X‰-   U:X  d   eX0==   U-  ss'   [        XSU    U-  U-  X#U5        [        XcU    U	-  U-  X#U5        g )Nr   r   r{   )rˆ   rj   )
r¥   Úvaluern   r]   r   ÚliÚriÚ
group_sizeÚlsizeÚrsizes
             r!   rj   rj   Ï  sÛ   € àƒuØ‹	�UÑ‹	ØÜ	ˆZ˜A™˜q˜Ñ!Ó	"€BÜ	ˆZ˜A™˜q˜Ñ!Ó	"€BÜ�Z A¡ q Ñ)Ó*€JØ*,«'ŒC�
 ™6 1˜9Ñ%Ô&°q€EØ*,«'ŒC�
 ™6 1˜9Ñ%Ô&°q€EØ‰=˜JÓ&Ð&Ð&Ø
ƒI�ÑƒIÜ�˜A‘Y Ñ&¨Ñ3°QÀ
ÔKÜ�˜A‘Y Ñ&¨Ñ3°QÀ
ÕKr$   )r�   r…   Únumpyrb   Únumbar   Ú	tqdm.autor   Ú r   r   Úmodelsr   Úutilsr	   r
   r   r   Ú
_explainerr   r   r¹   rj   r:   r$   r!   Ú<module>rÈ      sM   ðÛ Û ã Ý Ý ç !Ý ß EÓ EÝ !ôU*˜ô U*òl#ð ñLó ñLr$   