ó
    †ñ:iN�  ã                  óp  • S SK J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rS SKrS SKrS SKrS SKrS SKrS SKJrJrJr  SSKJr  SS	KJr  SS
KJr  \" S5      r \
(       a  S SKJr  \ " S S5      5       r! " S S\"5      r# " S S\#S9r$SS jr%SS jr&S r'SS jr( " S S5      r)SS jr*S r+g)é    )ÚannotationsN)ÚCallable)Ú	dataclassÚfield)ÚTYPE_CHECKINGÚAnyÚcast)ÚAliasÚObjÚSliceré   )Úhclust_ordering)ÚDimensionError)ÚOpChainzshap.Explanationc                  ó`   • \ rS rSr% SrS\S'   S\S'   SrS\S	'   \" \S
9r	S\S'   Sr
S\S'   Srg)ÚOpHistoryItemé   z<An operation that has been applied to an Explanation object.ÚstrÚnameútuple[int, ...]Ú
prev_shape© ztuple[Any, ...]Úargs)Údefault_factoryzdict[str, Any]ÚkwargsFÚboolÚcollapsed_instancesN)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__r   r   Údictr   r   Ú__static_attributes__r   ó    ÚT/srv/projetos/modelo_ml_acdoc/venv/lib/python3.13/site-packages/shap/_explanation.pyr   r      s4   ‡ áFà
ƒIØÓØ€Dˆ/ÓÙ"°4Ñ8€FˆNÓ8Ø %Ð˜Ö%r&   r   c                  óæ   • \ rS rSrSrS r\SS j5       r\SS j5       r\SS j5       r	\SS j5       r
\SS j5       r\SS	 j5       r\SS
 j5       r\SS j5       r\SS j5       r\SS j5       rSrg)ÚMetaExplanationé&   z^This metaclass exposes the Explanation object's class methods for creating template op chains.c                ó,   • [         R                  U5      $ ©N)Úop_chain_rootÚ__getitem__)ÚclsÚitems     r'   r.   ÚMetaExplanation.__getitem__)   s   € Ü×(Ñ(¨Ó.Ð.r&   c                ó"   • [         R                  $ )zElement-wise absolute value op.)r-   Úabs©r/   s    r'   r3   ÚMetaExplanation.abs,   ó   € ô × Ñ Ð r&   c                ó"   • [         R                  $ )zA no-op.)r-   Úidentityr4   s    r'   r8   ÚMetaExplanation.identity1   s   € ô ×%Ñ%Ð%r&   c                ó"   • [         R                  $ )zNumpy style argsort.)r-   Úargsortr4   s    r'   r;   ÚMetaExplanation.argsort6   s   € ô ×$Ñ$Ð$r&   c                ó"   • [         R                  $ )zNumpy style flip.)r-   Úflipr4   s    r'   r>   ÚMetaExplanation.flip;   ó   € ô ×!Ñ!Ð!r&   c                ó"   • [         R                  $ )zNumpy style sum.)r-   Úsumr4   s    r'   rB   ÚMetaExplanation.sum@   r6   r&   c                ó"   • [         R                  $ )zNumpy style max.)r-   Úmaxr4   s    r'   rE   ÚMetaExplanation.maxE   r6   r&   c                ó"   • [         R                  $ )zNumpy style min.)r-   Úminr4   s    r'   rH   ÚMetaExplanation.minJ   r6   r&   c                ó"   • [         R                  $ )zNumpy style mean.)r-   Úmeanr4   s    r'   rK   ÚMetaExplanation.meanO   r@   r&   c                ó"   • [         R                  $ )zNumpy style sample.)r-   Úsampler4   s    r'   rN   ÚMetaExplanation.sampleT   ó   € ô ×#Ñ#Ð#r&   c                ó"   • [         R                  $ )zHierarchical clustering op.)r-   Úhclustr4   s    r'   rR   ÚMetaExplanation.hclustY   rP   r&   r   N)Úreturnr   )r   r   r    r!   r"   r.   Úpropertyr3   r8   r;   r>   rB   rE   rH   rK   rN   rR   r%   r   r&   r'   r)   r)   &   sÒ   † Ùhò/ð ó!ó ð!ð ó&ó ð&ð ó%ó ð%ð ó"ó ð"ð ó!ó ð!ð ó!ó ð!ð ó!ó ð!ð ó"ó ð"ð ó$ó ð$ð ó$ó ó$r&   r)   c                  ó†  • \ rS rSrSr              S:S jr\S 5       r\R                  S 5       r\S 5       r	\	R                  S 5       r	\S	 5       r
\
R                  S
 5       r
\S 5       r\R                  S 5       r\S 5       r\S 5       r\R                  S 5       r\S 5       r\S 5       r\R                  S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\R                  S 5       r\S 5       r\R                  S 5       r\S 5       r\R                  S 5       rS rS;S jr\S<S j5       rS rS;S  jrS! rS" rS# rS$ rS% rS& r S' r!S( r"S) r#\S* 5       r$\S+ 5       r%\S, 5       r&\S- 5       r'S=S. jr(S=S/ jr)S=S0 jr*S>S?S1 jjr+S@S;S2 jjr,SASBS3 jjr-SCSDS4 jjr.SES5 jr/SFS6 jr0SGS7 jr1S8 r2S9r3g)HÚExplanationé_   aH  A sliceable set of parallel arrays representing a SHAP explanation.

Notes
-----
The *instance* methods such as `.max()` return new Explanation objects with the
operation applied.

The *class* methods such as `Explanation.max` return OpChain objects that represent
a set of dot chained operations without actually running them.
Nc                ó:  • / U l         Xðl        [        U[        5      (       a&  UnUR                  nUR
                  nUR                  n[        XX75      U l        [        U5      nUcS  [        U R                  5      S:X  a:  UU R                  S      nUc   S5       e[        U5       Vs/ s H  nSU 3PM
     nn[        [        U5      5      S:X  am  [        U5      S:¼  a(  [        U5      US   :X  a  [        [        U5      S5      nO6[        U5      S:¼  a'  [        U5      US   :X  a  [        [        U5      S5      n[        [        U5      5      S:X  a"  [        [        U5      U R                  S   5      nUb�  [        U[        5      (       dl  [        [        U5      5      nUS:X  a  OQUS:X  a  [        XpR                  5      nO5US:X  a$  [        US/[        U R                  5      -   5      nO[        S5      e[!        US5      (       a  [        U5      S:X  a  On[        [        U5      5      [        U R                  5      :X  a   [        U[        U R                  5      5      nO#[        US/[        U R                  5      -   5      n[#        UU[%        U5      [%        U5      Uc  S O[        US5      UUUc  S OU R                  U4[%        U	5      [%        U
5      [%        U5      [%        U5      [%        U5      Uc  S O[        US/5      S9U l        g s  snf )	Nr   r   zUnexpected shape of valueszOutput é   zKshap.Explanation does not yet support output_names of order greater than 3!Ú__len__©ÚvaluesÚbase_valuesÚdataÚdisplay_dataÚinstance_namesÚfeature_namesÚoutput_namesÚoutput_indexesÚlower_boundsÚupper_boundsÚ	error_stdÚmain_effectsÚhierarchical_valuesÚ
clustering)Ú
op_historyÚcompute_timeÚ
isinstancerW   r]   r^   r_   Úcompute_output_dimsÚoutput_dimsÚ_compute_shapeÚlenÚranger
   Úlistr   Ú
ValueErrorÚhasattrr   Ú	list_wrapÚ_s)Úselfr]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rl   ÚeÚvalues_shapeÚ	num_namesÚiÚoutput_names_orders                        r'   Ú__init__ÚExplanation.__init__k   sÒ  € ð$ 02ˆŒà(Ôô �fœk×*Ñ*ØˆAØ—X‘XˆFØŸ-™-ˆKØ—6‘6ˆDä.¨vÀDÓWˆÔÜ% fÓ-ˆàÑ¤C¨×(8Ñ(8Ó$9¸QÓ$>Ø$ T×%5Ñ%5°aÑ%8Ñ9ˆIØÑ(ÐFÐ*FÓFÐ(Ü38¸Ô3CÓDÒ3C¨a˜g a S›MÑ3CˆLÐDô ”˜}Ó-Ó.°!Ó3ä�<Ó  AÓ%¬#¨mÓ*<ÀÈQÁÓ*OÜ %¤d¨=Ó&9¸1Ó =‘Ü�\Ó" aÓ'¬C°Ó,>À,ÈqÁ/Ó,QÜ %¤d¨=Ó&9¸1Ó =�ô ”˜|Ó,Ó-°Ó2ä ¤ lÓ!3°T×5EÑ5EÀaÑ5HÓIˆLð Ñ#¬J°|ÄU×,KÑ,KÜ!$¤^°LÓ%AÓ!BÐØ! QÓ&ØØ# qÓ(Ü" <×1AÑ1AÓB‘Ø# qÓ(Ü" <°!°´t¸D×<LÑ<LÓ7MÑ1MÓN‘ä Ð!nÓoÐoä�{ I×.Ñ.´#°kÓ2BÀaÓ2GØÜ” Ó,Ó-´°T×5EÑ5EÓ1FÓFÜ˜k¬4°×0@Ñ0@Ó+AÓB‰Kä˜k¨A¨3´°d×6FÑ6FÓ1GÑ+GÓHˆKäØØ#Ü˜4“Ü" <Ó0Ø#1Ñ#9™4¼uÀ^ÐUVÓ?WØ'Ø%Ø#1Ñ#9™4À×@PÑ@PÐR`Ð?aÜ" <Ó0Ü" <Ó0Ü 	Ó*Ü" <Ó0Ü )Ð*=Ó >Ø)Ñ1‘t´s¸:ÈÀsÓ7Kñ
ˆ�ùòK Es   Â*Lc                ó.   • U R                   R                  $ ©z/Pass-through from the underlying slicer object.©rw   r]   ©rx   s    r'   r]   ÚExplanation.valuesÆ   s   € ð �w‰w�~‰~Ðr&   c                ó$   • XR                   l        g r,   r‚   )rx   Ú
new_valuess     r'   r]   r„   Ë   s   € à#�‰�r&   c                ó.   • U R                   R                  $ r�   ©rw   r^   rƒ   s    r'   r^   ÚExplanation.base_valuesÏ   s   € ð �w‰w×"Ñ"Ð"r&   c                ó$   • XR                   l        g r,   rˆ   )rx   Únew_base_valuess     r'   r^   r‰   Ô   s   € à-�‰Õr&   c                ó.   • U R                   R                  $ r�   ©rw   r_   rƒ   s    r'   r_   ÚExplanation.dataØ   s   € ð �w‰w�|‰|Ðr&   c                ó$   • XR                   l        g r,   r�   )rx   Únew_datas     r'   r_   rŽ   Ý   s   € à�‰�r&   c                ó.   • U R                   R                  $ r�   )rw   r`   rƒ   s    r'   r`   ÚExplanation.display_dataá   ó   € ð �w‰w×#Ñ#Ð#r&   c                óz   • [        U[        R                  5      (       a  UR                  nXR                  l        g r,   )rm   ÚpdÚ	DataFramer]   rw   r`   )rx   Únew_display_datas     r'   r`   r’   æ   s*   € äÐ&¬¯©×5Ñ5Ø/×6Ñ6ÐØ/�‰Õr&   c                ó.   • U R                   R                  $ r�   )rw   ra   rƒ   s    r'   ra   ÚExplanation.instance_namesì   ó   € ð �w‰w×%Ñ%Ð%r&   c                ó.   • U R                   R                  $ r�   ©rw   rc   rƒ   s    r'   rc   ÚExplanation.output_namesñ   r“   r&   c                ó$   • XR                   l        g r,   rœ   )rx   Únew_output_namess     r'   rc   r�   ö   ó   € à/�‰Õr&   c                ó.   • U R                   R                  $ r�   )rw   rd   rƒ   s    r'   rd   ÚExplanation.output_indexesú   rš   r&   c                ó.   • U R                   R                  $ r�   ©rw   rb   rƒ   s    r'   rb   ÚExplanation.feature_namesÿ   s   € ð �w‰w×$Ñ$Ð$r&   c                ó$   • XR                   l        g r,   r¤   )rx   Únew_feature_namess     r'   rb   r¥     s   € à 1�‰Õr&   c                ó.   • U R                   R                  $ r�   )rw   re   rƒ   s    r'   re   ÚExplanation.lower_bounds  r“   r&   c                ó.   • U R                   R                  $ r�   )rw   rf   rƒ   s    r'   rf   ÚExplanation.upper_bounds  r“   r&   c                ó.   • U R                   R                  $ r�   )rw   rg   rƒ   s    r'   rg   ÚExplanation.error_std  s   € ð �w‰w× Ñ Ð r&   c                ó.   • U R                   R                  $ r�   ©rw   rh   rƒ   s    r'   rh   ÚExplanation.main_effects  r“   r&   c                ó$   • XR                   l        g r,   r¯   )rx   Únew_main_effectss     r'   rh   r°     r    r&   c                ó.   • U R                   R                  $ r�   ©rw   ri   rƒ   s    r'   ri   ÚExplanation.hierarchical_values   s   € ð �w‰w×*Ñ*Ð*r&   c                ó$   • XR                   l        g r,   r´   )rx   Únew_hierarchical_valuess     r'   ri   rµ   %  s   € à&=�‰Õ#r&   c                ó.   • U R                   R                  $ r�   ©rw   rj   rƒ   s    r'   rj   ÚExplanation.clustering)  s   € ð �w‰w×!Ñ!Ð!r&   c                ó$   • XR                   l        g r,   r¹   )rx   Únew_clusterings     r'   rj   rº   .  s   € à+�‰Õr&   c                ó¦   • SU R                   < 3nU R                  b  USU R                  < 3-  nU R                  b  USU R                  < 3-  nU$ )z6Display some basic printable info, but not everything.z
.values =
z

.base_values =
z


.data =
)r]   r^   r_   )rx   Úouts     r'   Ú__repr__ÚExplanation.__repr__3  s[   € à˜DŸK™K™?Ð+ˆØ×ÑÑ'ØÐ)¨$×*:Ñ*:Ñ)=Ð>Ñ>ˆCØ�9‰9Ñ Ø�] 4§9¡9¡-Ð0Ñ0ˆCØˆ
r&   c                óä  • Sn[        U[        5      (       d  U4nSnU GH<  nUS-  nU[        L a&  U[        U R                  5      [        U5      -
  -  nM8  Un[        U[
        5      (       a‰  UR                  U 5      n[        U[        R                  [        R                  45      (       a  [        U5      nGO&[        U[        R                  5      (       a  U Vs/ s H  n[        U5      PM     nnGOê[        U[        5      (       a  UR                  nGOÇ[        U[        5      (       Ga±  / nSU R                  R                   ;   a$  U R                  R                   S   R"                  nO=SU R                  R$                  ;   a#  U R                  R$                  S   R"                  nUS:w  Ga*  X7;   Ga$  [        U5      S:X  a?  [        R&                  " [        R(                  " U R*                  5      U:H  5      S   S   nGOÖ[        U5      S:X  GaÆ  / n/ n	/ n
[,        R.                  " U 5      n[1        U R                  5       H¬  u  p¶[1        U R*                  U   5       H‹  u  pÍXÔ:X  d  M  UR3                  [        R(                  " USS2U4   5      5        U
R3                  [        R(                  " U R4                  U   5      5        U	R3                  U R6                  U   U   5        M�     M®     [        [        R(                  " U5      [        R(                  " U	5      [        R(                  " U
5      U R8                  U R:                  [        R(                  " U
5      UU R<                  U R>                  U R@                  U RB                  U RD                  U RF                  U RH                  S9n[,        R,                  " U RJ                  5      Ul%        / nSU R                  R                   ;   a#  U R                  R                   S   R"                  nUS:w  a¾  X>;   a¹  [        U5      S:X  aª  / n/ n
[1        U R                  5       H^  u  p¿[M        U RN                  U   XðR4                  U   5       H/  u  pÖnXÔ:X  d  M  UR3                  U5        U
R3                  U5        M1     M`     [,        R.                  " U 5      nX‚l        X¢l        XBl'        SUl$        [        U[        RP                  [        RR                  [        R                  [        R                  45      (       a  [        U5      nXELd  GM!  [U        U5      nUUU'   [        U5      nGM?     [        S	 U 5       5      n[        U5      S:X  a  U$ Uc  [,        R,                  " U 5      nUR                  RW                  U5      Ul        URJ                  R3                  [Y        S
U4U R                  S95        U$ s  snf )z'This adds support for OpChain indexing.Néÿÿÿÿr   rc   r   rZ   ©r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rb   c              3  ó$   #   • U  H  ov •  M     g 7fr,   r   )Ú.0Úvs     r'   Ú	<genexpr>Ú*Explanation.__getitem__.<locals>.<genexpr>   s   é € Ð%¢˜1”Q¢ùs   ‚r.   ©r   r   r   )-rm   ÚtupleÚEllipsisrq   Úshaper   ÚapplyÚnpÚint64Úint32ÚintÚndarrayrW   r]   r   rw   Ú_objectsÚdimÚ_aliasesÚargwhereÚarrayrc   ÚcopyÚdeepcopyÚ	enumerateÚappendr_   r^   r`   ra   rd   re   rf   rg   rh   ri   rj   rk   Úziprb   Úint8Úint16rs   r.   r   )rx   r0   Únew_selfÚposÚtÚorig_trÆ   Úoutput_names_dimsr†   r‹   r�   r|   ÚjÚsÚfeature_names_dimsÚval_iÚdÚtmps                     r'   r.   ÚExplanation.__getitem__<  sž  € àˆÜ˜$¤×&Ñ&Ø�7ˆDð ˆÜˆAØ�1‰HˆCð ”HŠ}Ø”s˜4Ÿ:™:“¬¨T«Ñ2Ñ2�ÙàˆFÜ˜!œW×%Ñ%Ø—G‘G˜D“M�Ü˜a¤"§(¡(¬B¯H©HÐ!5×6Ñ6Ü˜A›’AÜ ¤2§:¡:×.Ñ.Ù)*Ó+ª Aœ˜Qž©�AÐ+ùÜ˜Aœ{×+Ñ+Ø—H‘H’Ü˜Aœs×#Ò#à$&Ð!Ø! T§W¡W×%5Ñ%5Ó5Ø(,¯©×(8Ñ(8¸Ñ(H×(LÑ(LÑ%Ø# t§w¡w×'7Ñ'7Ó7Ø(,¯©×(8Ñ(8¸Ñ(H×(LÑ(LÐ%Ø˜!”8 Ô 8ÜÐ,Ó-°Ó2ÜŸKšK¬¯ª°×1BÑ1BÓ(CÀqÑ(HÓIÈ!ÑLÈQÑOšÜÐ.Ó/°1Ô4Ø%'˜
Ø*,˜Ø#%˜Ü#'§=¢=°Ó#6˜Ü$-¨d¯k©kÖ$:™D˜AÜ(1°$×2CÑ2CÀAÑ2FÖ(G¡ Ø#$¥6Ø$.×$5Ñ$5´b·h²h¸qÂÀAÀ¹wÓ6GÔ$HØ$,§O¡O´B·H²H¸T¿Y¹YÀq¹\Ó4JÔ$KØ$3×$:Ñ$:¸4×;KÑ;KÈAÑ;NÈqÑ;QÖ$Ró	 )Hñ %;ô $/ÜŸHšH ZÓ0Ü(*¯ª°Ó(AÜ!#§¢¨(Ó!3Ø)-×):Ñ):Ø+/×+>Ñ+>Ü*,¯(ª(°8Ó*<Ø)*Ø+/×+>Ñ+>Ø)-×):Ñ):Ø)-×):Ñ):Ø&*§n¡nØ)-×):Ñ):Ø04×0HÑ0HØ'+§¡ñ$˜ô  /3¯iªi¸¿¹Ó.H˜Ô+ð &(Ð"Ø" d§g¡g×&6Ñ&6Ó6Ø)-¯©×)9Ñ)9¸/Ñ)J×)NÑ)NÐ&Ø˜!“8 Ó 9¼cÐBTÓ>UÐYZÓ>ZØ!#�JØ!�HÜ$-¨d¯k©kÖ$:™˜Ü'*¨4×+=Ñ+=¸aÑ+@À%ÏÉÐSTÉÖ'V™G˜A !Ø �vØ *× 1Ñ 1°!Ô 4Ø (§¡°Ö 2ó (Wñ %;ô
  $Ÿ}š}¨TÓ2�HØ&0”OØ$,”MØ-.Ô*Ø*.�HÔ'ô ˜!œbŸg™g¤r§x¡x´·±¼2¿8¹8ÐD×EÑEÜ˜“F�à�Ü˜4“j�Ø��C‘Ü˜S“z“ñs ôx Ñ%¡Ó%Ó%ˆÜˆt‹9˜‹>ØˆOØÑÜ—y’y “ˆHØ—k‘k×-Ñ-¨dÓ3ˆŒØ×Ñ×"Ñ"¤=°mÈ4È'Ð^b×^hÑ^hÑ#iÔjàˆùòm ,s   ÃW-c                óX   • [        U R                  R                  5      n[        SU5      $ )z8Compute the shape over potentially complex data nesting.r   )rp   rw   r]   r	   )rx   Úshap_values_shapes     r'   rÌ   ÚExplanation.shapeª  s(   € ô +¨4¯7©7¯>©>Ó:Ðô Ð%Ð'8Ó9Ð9r&   c                ó    • U R                   S   $ ©Nr   )rÌ   rƒ   s    r'   r[   ÚExplanation.__len__²  s   € Ø�z‰z˜!‰}Ðr&   c                ó”  • [        U R                  U R                  U R                  U R                  U R
                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  S9n[        R                  " U R                   5      Ul        U$ )NrÃ   )rW   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rØ   rk   )rx   Únew_exps     r'   Ú__copy__ÚExplanation.__copy__µ  sž   € ÜØ�K‰KØ×(Ñ(Ø—‘Ø×*Ñ*Ø×.Ñ.Ø×,Ñ,Ø×*Ñ*Ø×.Ñ.Ø×*Ñ*Ø×*Ñ*Ø—n‘nØ×*Ñ*Ø $× 8Ñ 8Ø—‘ñ
ˆô  "ŸYšY t§¡Ó7ˆÔØˆr&   c                ót  • U R                  5       nUR                  R                  [        X14U R                  S95        [        U[        5      (       a‚  U" UR                  UR                  5      Ul        UR                  b"  U" UR                  UR                  5      Ul        UR                  b"  U" UR                  UR                  5      Ul	        U$ U" UR                  U5      Ul        UR                  b  U" UR                  U5      Ul        UR                  b  U" UR                  U5      Ul	        U$ )NrÉ   )
ró   rk   rÛ   r   rÌ   rm   rW   r]   r_   r^   )rx   ÚotherÚ	binary_opÚop_namerò   s        r'   Ú_apply_binary_operatorÚ"Explanation._apply_binary_operatorË  sø   € Ø—-‘-“/ˆØ×Ñ×!Ñ!¤-°WÀ8ÐX\×XbÑXbÑ"cÔdä�eœ[×)Ñ)Ù& w§~¡~°u·|±|ÓDˆGŒNØ�|‰|Ñ'Ù(¨¯©°u·z±zÓB�”Ø×"Ñ"Ñ.Ù&/°×0CÑ0CÀU×EVÑEVÓ&W�Ô#ð ˆñ ' w§~¡~°uÓ=ˆGŒNØ�|‰|Ñ'Ù(¨¯©°uÓ=�”Ø×"Ñ"Ñ.Ù&/°×0CÑ0CÀUÓ&K�Ô#Øˆr&   c                óD   • U R                  U[        R                  S5      $ ©NÚ__add__©rù   ÚoperatorÚadd©rx   rö   s     r'   rý   ÚExplanation.__add__Ý  ó   € Ø×*Ñ*¨5´(·,±,À	ÓJÐJr&   c                óD   • U R                  U[        R                  S5      $ rü   rþ   r  s     r'   Ú__radd__ÚExplanation.__radd__à  r  r&   c                óD   • U R                  U[        R                  S5      $ ©NÚ__sub__©rù   rÿ   Úsubr  s     r'   r	  ÚExplanation.__sub__ã  r  r&   c                óD   • U R                  U[        R                  S5      $ r  r
  r  s     r'   Ú__rsub__ÚExplanation.__rsub__æ  r  r&   c                óD   • U R                  U[        R                  S5      $ ©NÚ__mul__©rù   rÿ   Úmulr  s     r'   r  ÚExplanation.__mul__é  r  r&   c                óD   • U R                  U[        R                  S5      $ r  r  r  s     r'   Ú__rmul__ÚExplanation.__rmul__ì  r  r&   c                óD   • U R                  U[        R                  S5      $ )NÚ__truediv__)rù   rÿ   Útruedivr  s     r'   r  ÚExplanation.__truediv__ï  s   € Ø×*Ñ*¨5´(×2BÑ2BÀMÓRÐRr&   c           	     óÐ  • [         R                   " U 5      nUR                  SS5      nUS;   a  X4   nUR                  SS Ul        U R                  bº  [	        U R                  5      (       d   US:X  aš  U R                  5       n[        R                  " [        UR                  5       5      5      Ul        [        R                  " UR                  5        Vs/ s H  n[        [        U5      " US5      PM     sn5      Ul
        SUl        GO
[        [        U5      " [        R                  " U R                  5      40 UD6Ul
        UR                  b;   [        [        U5      " [        R                  " U R                  5      40 UD6Ul        UR                  b_  [!        U["        5      (       aJ  [%        U R                  R&                  5      U:”  a'  [        [        U5      " U R                  40 UD6Ul        O[!        U["        5      (       a  SUl        US:X  ay  U R                  bl  [%        U R                  R&                  5      S:X  aI  U R                  R)                  S5      R+                  5       S:  a  U R                  S   Ul        OSUl        UR                  R-                  [/        UUU R&                  US:H  S95        U$ s  snf ! [         a    SUl         GNTf = f)	z1Apply a numpy-style function to this Explanation.ÚaxisN)r   r   rZ   rÂ   r   é   g:Œ0âŽyE>)r   r   r   r   )rØ   Úgetrk   rb   Úis_1dÚ_flatten_feature_namesrÎ   r×   rs   Úkeysr]   Úgetattrrj   r_   Ú	Exceptionr^   rm   rÑ   rq   rÌ   ÚstdrB   rÛ   r   )rx   Úfnamer   rß   r  r†   rÆ   s          r'   Ú_numpy_funcÚExplanation._numpy_funcò  sK  € ä—9’9˜T“?ˆØ�z‰z˜& $Ó'ˆð �9ÓØ‘~ˆHØ"*×"5Ñ"5°c°rÐ":ˆHÔà×ÑÑ)´%¸×8JÑ8J×2KÑ2KÐPTÐXYÓPYØ×4Ñ4Ó6ˆJÜ%'§X¢X¬d°:·?±?Ó3DÓ.EÓ%FˆHÔ"Ü ŸhšhÈ*×J[ÑJ[ÔJ]Ó'^ÒJ]ÀQ¬´°EÔ(:¸1¸aÖ(@ÑJ]Ñ'^Ó_ˆHŒOØ"&ˆHÖä%¤b¨%Ô0´·²¸$¿+¹+Ó1FÑQÈ&ÑQˆHŒOØ�}‰}Ñ(ð)Ü$+¬B°Ô$6´r·x²xÀÇ	Á	Ó7JÑ$UÈfÑ$U�H”Mð ×#Ñ#Ñ/´J¸tÄS×4IÑ4IÌcÐRV×RbÑRb×RhÑRhÓNiÐlpÓNpÜ'.¬r°5Ô'9¸$×:JÑ:JÑ'UÈfÑ'U�Õ$Ü˜D¤#×&Ñ&Ø'+�Ô$à�1‹9˜Ÿ™Ñ4¼¸T¿_¹_×=RÑ=RÓ9SÐWXÓ9XØ�‰×"Ñ" 1Ó%×)Ñ)Ó+¨dÓ2Ø&*§o¡o°aÑ&8�Õ#à&*�Ô#à×Ñ×"Ñ"ÜØØØŸ:™:Ø$(¨A¡Iñ	ô	
ð ˆùò; (_øô !ó )Ø$(�H—Mð)ús   Ã!KÅ:K ËK%Ë$K%c                ó$   • U R                  S5      $ )Nr3   ©r(  rƒ   s    r'   r3   ÚExplanation.abs  s   € à×Ñ Ó&Ð&r&   c                ó   • U $ r,   r   rƒ   s    r'   r8   ÚExplanation.identity"  s   € àˆr&   c                ó$   • U R                  S5      $ )Nr;   r+  rƒ   s    r'   r;   ÚExplanation.argsort&  s   € à×Ñ 	Ó*Ð*r&   c                ó$   • U R                  S5      $ )Nr>   r+  rƒ   s    r'   r>   ÚExplanation.flip*  s   € à×Ñ Ó'Ð'r&   c                ó"   • U R                  SUS9$ )úNumpy-style mean function.rK   ©r  r+  ©rx   r  s     r'   rK   ÚExplanation.mean.  s   € à×Ñ ¨TÐÐ2Ð2r&   c                ó"   • U R                  SUS9$ )r4  rE   r5  r+  r6  s     r'   rE   ÚExplanation.max2  ó   € à×Ñ ¨DÐÐ1Ð1r&   c                ó"   • U R                  SUS9$ )r4  rH   r5  r+  r6  s     r'   rH   ÚExplanation.min6  r:  r&   c                ó’   • Uc  U R                  SUS9$ US:X  d  [        U R                  5      S:X  a  [        X5      $ [	        S5      e)zNumpy-style sum function.rB   r5  r   z4Only axis = 1 is supported for grouping right now...)r(  rq   rÌ   Úgroup_featuresr   )rx   r  Úgroupings      r'   rB   ÚExplanation.sum:  sK   € àÑØ×#Ñ# E°Ð#Ð5Ð5Ø�1‹9œ˜DŸJ™J›¨1Ó,Ü! $Ó1Ð1ÜÐSÓTÐTr&   c           	     óÄ  • [         R                  " U 5      nU R                  b¸  [        U R                  5      (       dž  US:X  a˜  U R	                  5       n[
        R                  " [        UR                  5       5      5      Ul        [
        R                  " UR                  5        Vs/ s H  n[
        R                  " XQ5      PM     sn5      Ul	        S Ul        OL[
        R                  " UR                  X5      Ul	        [
        R                  " UR                  X5      Ul        UR                  R                  [        SU4U R                   US:H  S95        U$ s  snf )Nr   Ú
percentile)r   r   r   r   )rØ   rÙ   rb   r!  r"  rÎ   r×   rs   r#  r]   rB  rj   r_   rk   rÛ   r   rÌ   )rx   Úqr  rß   r†   rÆ   s         r'   rB  ÚExplanation.percentileB  s  € Ü—=’= Ó&ˆØ×ÑÑ)´%¸×8JÑ8J×2KÑ2KÐPTÐXYÓPYØ×4Ñ4Ó6ˆJÜ%'§X¢X¬d°:·?±?Ó3DÓ.EÓ%FˆHÔ"Ü ŸhšhÀZ×EVÑEVÔEXÓ'YÒEXÀ¬¯ª°aÖ(;ÑEXÑ'YÓZˆHŒOØ"&ˆHÕä Ÿmšm¨H¯O©O¸QÓEˆHŒOÜŸMšM¨(¯-©-¸ÓAˆHŒMà×Ñ×"Ñ"ÜØ!Ø�WØŸ:™:Ø$(¨A¡Iñ	ô	
ð ˆùò (Zs   Â( Ec                ó¸   • [         R                  R                  U5      nU R                  S   nUc   eUR	                  U[        X5      US9nU [        U5         $ )a‚  Randomly samples the instances (rows) of the Explanation object.

Parameters
----------
max_samples : int
    The number of rows to sample. Note that if ``replace=False``, then
    fewer than max_samples will be drawn if ``len(explanation) < max_samples``.

replace : bool
    Sample with or without replacement.

random_state : int
    Random seed to use for sampling, defaults to 0.

r   )ÚsizeÚreplace)rÎ   ÚrandomÚRandomStaterÌ   ÚchoicerH   rs   )rx   Úmax_samplesrG  Úrandom_stateÚrngÚlengthÚindss          r'   rN   ÚExplanation.sampleW  sY   € ô  �i‰i×#Ñ# LÓ1ˆØ—‘˜A‘ˆØÑ!Ð!Ð!Ø�z‰z˜&¤s¨;Ó'?ÈˆzÐQˆØ”D˜“JÑÐr&   c                ó˜   • U R                   n[        UR                  5      S:w  a  [        S5      eUS:X  a  UR                  n[        X1S9$ )zõComputes an optimal leaf ordering sort order using hclustering.

hclust(metric="sqeuclidean")

Parameters
----------
metric : str
    A metric supported by scipy clustering. Defaults to "sqeuclidean".

axis : int
    The axis to cluster along.

rZ   z3The hclust order only supports 2D arrays right now!r   )ÚXÚmetric)r]   rq   rÌ   r   ÚTr   )rx   rS  r  r]   s       r'   rR   ÚExplanation.hclustm  sE   € ð —‘ˆäˆv�|‰|Ó Ó!Ü Ð!VÓWÐWà�1‹9Ø—X‘XˆFä Ñ7Ð7r&   c                óL  • U R                   S   UR                   S   :X  d   S5       e[        R                  " U R                  UR                  SS9(       d  [	        S5      e[        [        R                  " U R                  UR                  /5      U R                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  U R                   U R"                  U R$                  U R&                  S9nU$ )zñStack two explanations column-wise.

Parameters
----------
other : shap.Explanation
    The other Explanation object to stack with.

Returns
-------
exp : shap.Explanation
    A new Explanation object representing the stacked explanations.

r   z9Can't hstack explanations with different numbers of rows!g�íµ ÷Æ°>)Úatolz5Can't hstack explanations with different base values!r\   )rÌ   rÎ   Úallcloser^   rt   rW   Úhstackr]   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   )rx   rö   rò   s      r'   rY  ÚExplanation.hstack‡  sé   € ð �z‰z˜!‰} §¡¨A¡Ó.ÐkÐ0kÓkÐ.Ü�{Š{˜4×+Ñ+¨U×->Ñ->ÀT×JÜÐTÓUÐUäÜ—9’9˜dŸk™k¨5¯<©<Ð8Ó9Ø×(Ñ(Ø—‘Ø×*Ñ*Ø×.Ñ.Ø×,Ñ,Ø×*Ñ*Ø×.Ñ.Ø×*Ñ*Ø×*Ñ*Ø—n‘nØ×*Ñ*Ø $× 8Ñ 8Ø—‘ñ
ˆð  ˆr&   c                ó’  • U R                   R                  S:”  a  [        S5      e[        U[        5      (       a	  [        XS9$ [        U[        [        [        R                  45      (       aK  [        R                  " U5      n[        S0 [        R                  " U5       Vs0 s H
  o"XU:H     _M     snD6$ [        S5      es  snf )a0  Split this explanation into several cohorts.

Parameters
----------
cohorts : int or array
    If this is an integer then we auto build that many cohorts using a decision tree. If this is
    an array then we treat that as an array of cohort names/ids for each instance.

Returns
-------
Cohorts object

rZ   zÑCohorts cannot be calculated on multiple outputs at once. Please make sure to specify the output index on which cohorts should be build, e.g. for a multi-class output shap_values[..., cohort_class].cohorts(2).)Úmax_cohortszRThe given set of cohort indicators is not recognized! Please give an array or int.r   )r]   Úndimrt   rm   rÑ   Ú_auto_cohortsrs   rÊ   rÎ   rÒ   r×   ÚCohortsÚuniqueÚ	TypeError)rx   Úcohortsr   s      r'   rb  ÚExplanation.cohorts«  s­   € ð �;‰;×Ñ˜aÓÜð=óð ô
 �gœs×#Ñ#Ü  Ñ;Ð;Ü�g¤¤e¬R¯Z©ZÐ8×9Ñ9Ü—h’h˜wÓ'ˆGÜÑZÄbÇiÂiÐPWÔFXÓYÒFX¸d D°D©Ñ$9Ò9ÑFXÑYÑZÐZÜÐlÓmÐmùò Zs   Â#Cc                óê   • 0 n[        [        U R                  5      5       HN  n[        U R                  U   U R                  U   5       H!  u  p4X1;  a  / X'   X   R                  U5        M#     MP     U$ r,   )rr   rq   r]   rÜ   rb   rÛ   ©rx   r†   r|   rå   rÆ   s        r'   r"  Ú"Explanation._flatten_feature_namesÆ  sk   € Ø%'ˆ
Ü”s˜4Ÿ;™;Ó'Ö(ˆAÜ˜D×.Ñ.¨qÑ1°4·;±;¸q±>ÖB‘�ØÓ&Ø$&�J‘MØ‘×$Ñ$ QÖ'ó Cñ )ð
 Ðr&   c                óê   • 0 n[        [        U R                  5      5       HN  n[        U R                  U   U R                  U   5       H!  u  p4X1;  a  / X'   X   R                  U5        M#     MP     U$ r,   )rr   rq   r]   rÜ   r_   rÛ   re  s        r'   Ú_use_data_as_feature_namesÚ&Explanation._use_data_as_feature_namesÏ  sg   € Ø%'ˆ
Ü”s˜4Ÿ;™;Ó'Ö(ˆAÜ˜DŸI™I a™L¨$¯+©+°a©.Ö9‘�ØÓ&Ø$&�J‘MØ‘×$Ñ$ QÖ'ó :ñ )ð
 Ðr&   )rw   rl   rk   ro   )NNNNNNNNNNNNNN©rT   rW   ©rT   r   )r  rÑ   )NN)r  z
int | Noner,   )Fr   )rK  rÑ   rG  r   rL  rÑ   rT   rW   )Úsqeuclideanr   )rS  r   r  rÑ   )rö   rW   rT   rW   )rb  z)int | list[int] | tuple[int] | np.ndarrayrT   r_  )rT   r$   )4r   r   r    r!   r"   r~   rU   r]   Úsetterr^   r_   r`   ra   rc   rd   rb   re   rf   rg   rh   ri   rj   r¿   r.   rÌ   r[   ró   rù   rý   r  r	  r  r  r  r  r(  r3   r8   r;   r>   rK   rE   rH   rB   rB  rN   rR   rY  rb  r"  rh  r%   r   r&   r'   rW   rW   _   s!  † ñ	ð ØØØØØØØØØØØ ØØô!W
ðv ñó ðð ‡]�]ñ$ó ð$ð ñ#ó ð#ð ×Ññ.ó ð.ð ñó ðð 
‡[�[ñ ó ð ð ñ$ó ð$ð ×Ññ0ó ð0ð
 ñ&ó ð&ð ñ$ó ð$ð ×Ññ0ó ð0ð ñ&ó ð&ð ñ%ó ð%ð ×Ññ2ó ð2ð ñ$ó ð$ð ñ$ó ð$ð ñ!ó ð!ð ñ$ó ð$ð ×Ññ0ó ð0ð ñ+ó ð+ð ×Ññ>ó  ð>ð ñ"ó ð"ð ×Ññ,ó ð,òôlð\ ó:ó ð:òôò,ò$KòKòKòKòKòKòSò*ðX ñ'ó ð'ð ñó ðð ñ+ó ð+ð ñ(ó ð(ô3ô2ô2öUöö* ö,8ô4"ôHnô6õr&   rW   )Ú	metaclassc                óî  • 0 nU H   nUR                  X   / 5      U/-   X!U   '   M"     U R                  n[        R                  " U 5      n0 nSn[	        U R
                  5      S:H  nU GH8  nUR                  X35      n	X–;   a  M  SXi'   UR                  X35      n	UR                  X™/5      n
U
 Vs/ s H  o´R                  U5      PM     nnU(       aU  U R                  U   R                  5       UR                  U'   U R                  U   R                  5       UR                  U'   OfU R                  S S 2U4   R                  S5      UR                  S S 2U4'   U R                  S S 2U4   R                  S5      UR                  S S 2U4'   X•R                  U'   US-  nGM;     [        U(       a  UR                  S U OUR                  S S 2S U24   UR                  U(       a  UR                  S U OUR                  S S 2S U24   UR                  c  S O0U(       a  UR                  S S 2S U24   OUR                  S S 2S U24   S UR                  c  S OUR                  S U S S S S S S S S S9$ s  snf )Nr   r   TrÃ   )r   rb   rØ   rÙ   rq   rÌ   Úindexr]   rB   r_   rW   r^   r`   )Úshap_valuesÚfeature_mapÚreverse_mapr   Ú
curr_namesÚsv_newÚfoundr|   Úrank1Únew_nameÚcols_to_sumrÆ   Úold_indss                r'   r>  r>  Ù  sa  € à(*€KÛˆØ)4¯©¸Ñ9JÈBÓ)OÐSWÐRXÑ)Xˆ Ñ%Ó&ñ ð ×*Ñ*€JÜ�]Š]˜;Ó'€FØ€EØ	€AÜ�×!Ñ!Ó" aÑ'€EÜˆØ—?‘? 4Ó.ˆØÓÙØˆ‰à—?‘? 4Ó.ˆØ!—o‘o h°
Ó;ˆÙ1<Ó=²¨A×$Ñ$ QÖ'±ˆÐ=æØ*×1Ñ1°(Ñ;×?Ñ?ÓAˆF�M‰M˜!ÑØ(×-Ñ-¨hÑ7×;Ñ;Ó=ˆF�K‰K˜ŠNà"-×"4Ñ"4²Q¸°[Ñ"A×"EÑ"EÀaÓ"HˆF�M‰Mš!˜Q˜$ÑØ +× 0Ñ 0²°H°Ñ =× AÑ AÀ!Ó DˆF�K‰Kš˜1˜ÑØ"*×Ñ˜QÑØ	ˆQ‰‹ñ# ô& Þ"ˆ�‰�b�qÑ¨¯©²a¸¸!¸°eÑ(<Ø×&Ñ&Þ %ˆV�[‰[˜˜!‰_¨6¯;©;²q¸"¸1¸"°uÑ+=à×ÑÑ&ñ æ,1ˆf×!Ñ!¢! R a R %Ò(°v×7JÑ7JÊ1ÈbÈqÈbÈ5Ñ7QØØ$×2Ñ2Ñ:‘dÀ×@TÑ@TÐUWÐVWÐ@XØØØØØØØ Øñ!ð ùò >s   Â0I2c                ó¨  • [        U 5      nUb  [        U5      nOUnUbI  [        U5      nU[        U5      * S U:w  a*  U[        U5      * S-   S USS :X  a  US   US   :X  a  USS nOUb  [        U5      SS nO
[        5       n[        U5      [        U5      -
  [        U5      -
  n[        [        U5      U-   [        U5      5      n[        U5      $ )zPUses the passed data to infer which dimensions correspond to the model's output.Nr   r   )rp   rq   rÊ   rr   )	r]   r^   r_   rc   rz   Ú
data_shapeÚoutput_shapeÚinteraction_orderro   s	            r'   rn   rn     sô   € ä! &Ó)€Lð ÑÜ# DÓ)‰
ð "ˆ
ð ÑÜ% lÓ3ˆð œ#˜lÓ+Ð+Ð-Ð.°,Ó>Øœc ,Ó/Ð/°!Ñ3Ð5Ð6¸,ÀqÀrÐ:JÓJØ˜Q‘ <°¡?Ó2à'¨¨Ð+ˆLøà	Ñ	 Ü% kÓ2°1°2Ð6‰ä“wˆä˜LÓ)¬C°
«OÑ;¼cÀ,Ó>OÑOÐÜœ˜J›Ð*;Ñ;¼SÀÓ=NÓO€KÜ�ÓÐr&   c                óR   • [        U S   [        [        R                  45      (       + $ rï   )rm   rs   rÎ   rÒ   )Úvals    r'   r!  r!  -  s   € Ü˜3˜q™6¤D¬"¯*©*Ð#5Ó6Ô7Ð7r&   c           	     ó,  ^• S n[        U S5      (       a  [        U [        5      (       a
  [        5       $ [        R
                  R                  U 5      (       d+  [        U 5      S:”  a  [        U" U 5      [        5      (       a  g[        U [        5      (       a-  [        U 5      4[        U [        [        U 5      5         5      -   $ [        [        U S[        5       5      5      S:”  a  U R                  $ [        U 5      S:X  a  g[        U 5      S:X  a  S[        U" U 5      5      -   $ [        U" U 5      5      mT[        5       :X  a  [        U 5      4$ [        R                  " [        T5      [         S	9n[#        S[        U 5      5       H^  n[        X   5      n[        U5      [        T5      :X  d   S
5       e[#        [        U5      5       H  nX%==   XE   TU   :H  -  ss'   M     M`     [        U 5      4[        U4S j[%        U5       5       5      -   $ )z-Computes the shape of a generic object ``x``.c                ó   • U  H  nUs  $    g r,   r   )Úiterabler0   s     r'   Ú_first_itemÚ#_compute_shape.<locals>._first_item4  s   € ÛˆDØŠKñ àr&   r[   r   r,   rÌ   r   )r   )r   )ÚdtypezDArrays in Explanation objects must have consistent inner dimensions!c              3  óD   >#   • U  H  u  pU(       a  TU   OS v •  M     g 7fr,   r   )rÅ   rä   ÚmatchÚfirst_shapes      €r'   rÇ   Ú!_compute_shape.<locals>.<genexpr>T  s    øé € ÐbÒOaÁ8À1®u˜[¨š^¸$Ô>ÒOaùs   ƒ )ru   rm   r   rÊ   ÚscipyÚsparseÚissparserq   r$   rp   ÚnextÚiterr$  rÌ   rÎ   Úonesr   rr   rÚ   )Úxr„  Úmatchesr|   rÌ   rä   r‰  s         @r'   rp   rp   1  s¦  ø€ òô
 �1�i× Ñ ¤J¨q´#×$6Ñ$6Ü‹wˆÜ�<‰<× Ñ  ×#Ñ#¬¨A«°«
´zÁ+ÈaÃ.ÔRU×7VÑ7VØÜ�!”T×ÑÜ�A“ˆyœ>¨!¬D´°a³«MÑ*:Ó;Ñ;Ð;ô Œ7�1�gœu›wÓ'Ó(¨1Ó,Ø�w‰wˆô ˆ1ƒv�ƒ{ØÜ
ˆ1ƒv�ƒ{Ø”n¡[°£^Ó4Ñ4Ð4Ü ¡¨Q£Ó0€KØ”e“gÓÜ�A“ˆyÐô �gŠg”c˜+Ó&¬dÑ3€GÜ�1”c˜!“fÖˆÜ˜q™tÓ$ˆÜ�5‹zœS Ó-Ó-ÐuÐ/uÓuÐ-Ü”s˜5“zÖ"ˆAØ‹J˜%™( k°!¡nÑ4Ñ4�Jó #ñ ô
 �‹Fˆ9”uÔbÌyÐY`ÔOaÓbÓbÑbÐbr&   c                  ó~   • \ rS rSrSrSS jr\SS j5       r\R                  S 5       rSS jr	SS jr
SS jrS	 rS
rg)r_  iW  a'  A collection of :class:`.Explanation` objects, typically each explaining a cluster of similar samples.

Examples
--------
A ``Cohorts`` object can be initialized in a variety of ways.

By explicitly specifying the cohorts:

>>> exp = Explanation(
...     values=np.random.uniform(low=-1, high=1, size=(500, 5)),
...     data=np.random.normal(loc=1, scale=3, size=(500, 5)),
...     feature_names=list("abcde"),
... )
>>> cohorts = Cohorts(
...     col_a_neg=exp[exp[:, "a"].data < 0],
...     col_a_pos=exp[exp[:, "a"].data >= 0],
... )
>>> cohorts
<shap._explanation.Cohorts object with 2 cohorts of sizes: [(198, 5), (302, 5)]>

Or using the :meth:`.Explanation.cohorts` method:

>>> cohorts2 = exp.cohorts(3)
>>> cohorts2
<shap._explanation.Cohorts object with 3 cohorts of sizes: [(182, 5), (12, 5), (306, 5)]>

Most of the :class:`.Explanation` interface is also exposed in ``Cohorts``. For example, to retrieve the
SHAP values corresponding to column 'a' across all cohorts, you can use:

>>> cohorts[..., 'a'].values
<shap._explanation.Cohorts object with 2 cohorts of sizes: [(198,), (302,)]>

To actually retrieve the values of a particular :class:`.Explanation`, you'll need to access it via the
:meth:`.Cohorts.cohorts` property:

>>> cohorts.cohorts["col_a_neg"][..., 'a'].values
array([...])  # truncated

c                ó   • Xl         0 U l        g r,   )rb  Ú
_callables)rx   r   s     r'   r~   ÚCohorts.__init__€  s   € ØŒØ/1ˆ�r&   c                ó   • U R                   $ )z7Internal collection of cohorts, stored as a dictionary.)Ú_cohortsrƒ   s    r'   rb  ÚCohorts.cohorts„  s   € ð �}‰}Ðr&   c                óÞ   • [        U[        5      (       d  Sn[        U5      eUR                  5        H1  n[        U[        5      (       a  M  S[        U5       3n[        U5      e   Xl        g )Nz"self.cohorts must be a dictionary!zBArguments to a Cohorts set must be Explanation objects, but found )rm   r$   ra  r]   rW   Útyper˜  )rx   ÚcvalÚemsgÚexps       r'   rb  r™  ‰  s`   € ä˜$¤×%Ñ%Ø7ˆDÜ˜D“/Ð!Ø—;‘;–=ˆCÜ˜c¤;×/Ó/Ø[Ô\`ÐadÓ\eÐ[fÐg�Ü “oÐ%ñ !ð
 15�r&   c                ó‚   • 0 nU R                    H#  nU R                   U   R                  U5      X#'   M%     [        S0 UD6$ )Nr   )r˜  r.   r_  )rx   r0   Únew_cohortsÚks       r'   r.   ÚCohorts.__getitem__•  s>   € ØˆØ—”ˆAØ!Ÿ]™]¨1Ñ-×9Ñ9¸$Ó?ˆK‹Nñ äÑ%˜Ñ%Ð%r&   c                óÎ   • [        5       nU R                   HJ  n[        U R                  U   U5      n[        U5      (       a  XBR                  U'   M<  XBR                  U'   ML     U$ r,   )r_  r˜  r$  Úcallabler•  )rx   r   r   r¡  Úresults        r'   Ú__getattr__ÚCohorts.__getattr__›  s[   € Ü“iˆØ—”ˆAÜ˜TŸ]™]¨1Ñ-¨tÓ4ˆFÜ˜×ÑØ,2×&Ñ& qÓ)à*0×$Ñ$ QÓ'ñ ð Ðr&   c                ó²   • U R                   (       d  Sn[        U5      e0 nU R                   R                  5        H  u  pVU" U0 UD6XE'   M     [        S0 UD6$ )a¼  Call the bound methods on the Explanation objects retrieved during attribute access.

For example,
``Cohorts(...).mean(axis=0)`` would first run ``__getattr__("mean")`` and return a bound method
``Explanation.mean`` for all the :class:`Explanation` objects inside the ``Cohorts``, returned as a
new ``Cohorts`` object. Then the ``(axis=0)`` call would be executed on that returned ``Cohorts``
object, which is why we need ``__call__`` defined.
zNo methods to __call__!r   )r•  rt   Úitemsr_  )rx   r   r   r�  r   r¡  Úbound_methods          r'   Ú__call__ÚCohorts.__call__¥  sX   € ð ��Ø,ˆDÜ˜TÓ"Ð"àˆØ#Ÿ™×4Ñ4Ö6‰OˆAÙ)¨4Ð:°6Ñ:ˆK‹Nñ  7äÑ%˜Ñ%Ð%r&   c                ó¨   • S[        U R                  5       SU R                  R                  5        Vs/ s H  oR                  PM     sn S3$ s  snf )Nz'<shap._explanation.Cohorts object with z cohorts of sizes: Ú>)rq   r˜  r]   rÌ   )rx   rÆ   s     r'   r¿   ÚCohorts.__repr__·  s{   € Ø8¼¸T¿]¹]Ó9KÐ8LÐL_Ðrv×rÑr÷  sGñ  sGô  sIó  aJò  sIÐmn×ahÔahñ  sIñ  aJð  `Kð  KLð  Mð  	Mùò  aJs   ´A
)r•  r˜  rb  N)r   rW   rT   ÚNone)rT   zdict[str, Explanation]©rT   r_  )r   r   rT   r_  )r   r   r    r!   r"   r~   rU   rb  rm  r.   r¦  r«  r¿   r%   r   r&   r'   r_  r_  W  sN   † ñ&ôP2ð óó ðð ‡^�^ñ	5ó ð	5ô&ôô&õ$Mr&   r_  c                ó8  • [         R                  R                  US9nUR                  U R                  U R
                  5        UR                  U R                  5      R                  5       n/ n[        U R                  S   5       HÈ  nSn[        [        X5   5      5       H•  nX5U4   S:”  d  M  UR                  R                  U   nUR                  R                  U   n	U R                  XX4   n
US:¼  d  MY  U[        U R                  U   5      -  nX©:  a  US-  nOUS-  nU[        U	5      S-   -  nM—     UR!                  USS 5        MÊ     ["        R$                  " U5      n0 n["        R&                  " U5       H  nXU:H     XÆ'   M     [)        S	0 UD6$ )
zWThis uses a DecisionTreeRegressor to build a group of cohorts with similar SHAP values.)Úmax_leaf_nodesr   Ú z < z >= z & Néýÿÿÿr   )ÚsklearnÚtreeÚDecisionTreeRegressorÚfitr_   r]   Údecision_pathÚtoarrayrr   rÌ   rq   Útree_ÚfeatureÚ	thresholdr   rb   rÛ   rÎ   r×   r`  r_  )rq  r\  ÚmÚpathsÚ
path_namesr|   r   rä   r½  r¾  r€  Úpath_names_arrrb  s                r'   r^  r^  »  s~  € ô 	�‰×*Ñ*¸+Ð*ÐF€AØ‡E�Eˆ+×
Ñ
˜K×.Ñ.Ô/ð �O‰O˜K×,Ñ,Ó-×5Ñ5Ó7€EØ€Jô �;×$Ñ$ QÑ'Ö(ˆØˆÜ”s˜5™8“}Ö%ˆAØ˜�T‰{˜Q�ØŸ'™'Ÿ/™/¨!Ñ,�ØŸG™G×-Ñ-¨aÑ0�	Ø!×&Ñ& q zÑ2�Ø˜a•<ØœC × 9Ñ 9¸'Ñ BÓCÑC�DØ“Ø ™™à ™˜ØœC 	›N¨UÑ2Ñ2’Dñ &ð 	×Ñ˜$˜s ˜)Ö$ñ )ô —X’X˜jÓ)€Nð €GÜ—	’	˜.Ö)ˆØ#°dÑ$:Ñ;ˆ‹ñ *ô Ñ�WÑÐr&   c                óè   • [        U [        R                  5      (       aM  [        U R                  5      S:X  a4  [        U S   [        R                  5      (       a  U  Vs/ s H  oPM     sn$ U $ s  snf )zfA helper to patch things since slicer doesn't handle arrays of arrays (it does handle lists of arrays)r   r   )rm   rÎ   rÒ   rq   rÌ   )r‘  rÆ   s     r'   rv   rv   ß  sS   € ä�!”R—Z‘Z× Ñ ¤S¨¯©£\°QÓ%6¼:ÀaÈÁdÌBÏJÉJ×;WÑ;WÙ‹~š1�a’™1‰~Ðàˆùò s   ÁA/rj  rk  )rT   ztuple[int | None, ...]r±  ),Ú
__future__r   rØ   rÿ   Úcollections.abcr   Údataclassesr   r   Útypingr   r   r	   ÚnumpyrÎ   Úpandasr•   Úscipy.clusterr‹  Úscipy.sparseÚscipy.spatialr¶  Úslicerr
   r   r   Úutils._clusteringr   Úutils._exceptionsr   Úutils._generalr   r-   r   r›  r)   rW   r>  rn   r!  rp   r_  r^  rv   r   r&   r'   Ú<module>rÑ     s³   ðÝ "ã Û Ý $ß (ß +Ñ +ã Û Û Û Û Û ß %Ñ %å .Ý -Ý #áÐ*Ó+€æÝ(ð ÷&ð &ó ð&ô6$�dô 6$ôrw	˜Oò w	ôt/ôdòD8ô#c÷LaMñ aMôH!óHr&   