ó
    †ñ:i>R  ã                   ón   • S r SSKrSSKrSSKJr   " S S5      rS rS r	S	 r
 " S
 S5      rSS jrS rg)z¯This module is a pure python implementation of Tree SHAP.
It is primarily for illustration since it is slower than the 'tree'
module which uses a compiled C++ implementation.
é    Né   )ÚExplainerErrorc                   ó<   • \ rS rSrSrS rS	S jrS	S jrS
S jrSr	g)ÚTreeExplaineréŒ   z1A pure Python (slow) implementation of Tree SHAP.c                 ó®  • SU l         [        [        U5      5      R                  S5      (       a6  UR                   Vs/ s H  n[        UR                  5      PM     snU l        Oé[        [        U5      5      R                  S5      (       a5  UR                   Vs/ s H  n[        UR                  SS9PM     snU l        OŒ[        [        U5      5      R                  S5      (       a  SU l         Xl        OV[        [        U5      5      R                  S5      (       a  S	U l         Xl        O [        S
[        [        U5      5      -   5      eU R                   S:X  aè  [        R                  " U R                   Vs/ s H  oDR                  PM     sn5      S-   nXUS-   -  S-  n[        R                  " U[        R                  S9U l        [        R                  " U[        R                  S9U l        [        R                  " U[        R                  S9U l        [        R                  " U[        R                  S9U l        g g s  snf s  snf s  snf )NÚinternalz/sklearn.ensemble.forest.RandomForestRegressor'>z0sklearn.ensemble.forest.RandomForestClassifier'>T)Ú	normalizezxgboost.core.Booster'>Úxgboostzlightgbm.basic.Booster'>Úlightgbmz+Model type not supported by TreeExplainer: r   é   ©Údtype)Ú
model_typeÚstrÚtypeÚendswithÚestimators_ÚTreeÚtree_Útreesr   ÚnpÚmaxÚ	max_depthÚzerosÚint32Úfeature_indexesÚfloat64Úzero_fractionsÚone_fractionsÚpweights)ÚselfÚmodelÚkwargsÚeÚtÚmaxdÚss          ÚY/srv/projetos/modelo_ml_acdoc/venv/lib/python3.13/site-packages/shap/explainers/pytree.pyÚ__init__ÚTreeExplainer.__init__�   s­  € Ø$ˆŒäŒt�E‹{Ó×$Ñ$Ð%V×WÑWØ16×1BÒ1BÓCÒ1B¨Aœ$˜qŸw™wž-Ñ1BÑCˆD�JÜ”�e“Ó×&Ñ&Ð'Y×ZÑZØAF×ARÒARÓSÒAR¸Aœ$˜qŸw™w°$Ô7ÑARÑSˆD�JÜ”�e“Ó×&Ñ&Ð'?×@Ñ@Ø'ˆDŒOØ�JÜ”�e“Ó×&Ñ&Ð'A×BÑBØ(ˆDŒOØ�Jä Ð!NÔQTÔUYÐZ_ÓU`ÓQaÑ!aÓbÐbà�?‰?˜jÓ(ä—6’6°·
²
Ó;²
¨1Ÿ;œ;±
Ñ;Ó<¸qÑ@ˆDØ ™Ñ" qÑ(ˆAÜ#%§8¢8¨A´R·X±XÑ#>ˆDÔ Ü"$§(¢(¨1´B·J±JÑ"?ˆDÔÜ!#§¢¨!´2·:±:Ñ!>ˆDÔÜŸHšH Q¬b¯j©jÑ9ˆD�Mð )ùò DùâSùò <s   ¾IÂIÅ=Ic                 óÐ  • U R                   S:X  a_  SS Kn[        [        U5      5      R	                  S5      (       d  UR                  U5      nUS:X  a  SnU R                  R                  XSS9$ U R                   S:X  a  U R                  R                  XSS9$ [        U[        R                  [        R                  45      (       a  UR                  n[        U[        R                  5      (       d   S	[        [        U5      5      -   5       e[        UR                   5      S
:X  d   [        UR                   5      S:X  d   S5       eU R                  S   R                  R                   S
   n[        UR                   5      S
:X  a»  [        R"                  " UR                   S   S
-   U5      n[        R"                  " UR                   S   [$        S9nU R                   H  nU R'                  X�Xv5        M     U[        U R                  5      -  nUS
:X  a	  US S 2S4   $ [)        U5       V	s/ s H  o–S S 2U	4   PM     sn	$ [        UR                   5      S:X  Ga   [        R"                  " UR                   S   UR                   S
   S
-   U45      n[        R"                  " UR                   S
   [$        S9n[)        UR                   S   5       H9  n	U R                   H&  nU R'                  X�U	S S 24   XvU	S S 2S S 24   5        M(     M;     U[        U R                  5      -  nUS
:X  a  US S 2S S 2S4   $ [)        U5       V	s/ s H  o–S S 2S S 2U	4   PM     sn	$ g s  sn	f s  sn	f )Nr   r   úxgboost.core.DMatrix'>éÿÿÿÿT)Úntree_limitÚpred_contribsr   )Únum_iterationÚpred_contribzUnknown instance type: r   r   z%Instance must have 1 or 2 dimensions!r   )r   r   r   r   r   ÚDMatrixr   ÚpredictÚ
isinstanceÚpdÚSeriesÚ	DataFrameÚvaluesr   ÚndarrayÚlenÚshaper   ÚboolÚ	tree_shapÚrange)
r"   ÚXÚ
tree_limitr$   r   Ú	n_outputsÚphiÚ	x_missingr&   Úis
             r)   Úshap_valuesÚTreeExplainer.shap_values¨   sÁ  € ð �?‰?˜iÓ'Ûä”t˜A“w“<×(Ñ(Ð)A×BÑBØ—O‘O AÓ&�Ø˜RÓØ�
Ø—:‘:×%Ñ% aÈtÐ%ÐTÐTØ�_‰_ 
Ó*Ø—:‘:×%Ñ% aÐPTÐ%ÐUÐUô �aœ"Ÿ)™)¤R§\¡\Ð2×3Ñ3Ø—‘ˆAä˜!œRŸZ™Z×(Ñ(ÐRÐ*CÄcÌ$ÈqË'ÃlÑ*RÓRÐ(Ü�1—7‘7‹|˜qÓ ¤C¨¯©£L°AÓ$5Ð^Ð7^Ó^Ð5à—J‘J˜q‘M×(Ñ(×.Ñ.¨qÑ1ˆ	ô ˆq�w‰w‹<˜1ÓÜ—(’(˜1Ÿ7™7 1™:¨™>¨9Ó5ˆCÜŸš §¡¨¡´4Ñ8ˆIØ—Z”Z�Ø—‘˜q YÖ4ñ  à”3�t—z‘z“?Ñ"ˆCà˜A‹~Øš1˜a˜4‘yÐ ä+0°Ô+;Ó<Ò+; ašA˜q˜Dœ	Ñ+;Ñ<Ð<ä�—‘‹\˜QÔÜ—(’(˜AŸG™G A™J¨¯©°©
°Q©¸	ÐBÓCˆCÜŸš §¡¨¡´4Ñ8ˆIÜ˜1Ÿ7™7 1™:Ö&�ØŸœ�AØ—N‘N 1¨ª1¨¡g¨y¸aÂÂA¸g¹,ÖGó $ñ 'ð ”3�t—z‘z“?Ñ"ˆCà˜A‹~Øš1ša ˜7‘|Ð#ä.3°IÔ.>Ó?Ò.>¨šAšq !˜GœÑ.>Ñ?Ð?ð ùò =ùò @s   È.MÍM#c                 ó   • U R                   S:X  a_  SS Kn[        [        U5      5      R	                  S5      (       d  UR                  U5      nUS:X  a  SnU R                  R                  XSS9$ [        S[        [        U5      5      -   5      e)Nr   r   r-   r.   T)r/   Úpred_interactionsz5Interaction values not yet supported for model type: )	r   r   r   r   r   r3   r   r4   ÚNotImplementedError)r"   r@   rA   r$   r   s        r)   Úshap_interaction_valuesÚ%TreeExplainer.shap_interaction_valuesÙ   s   € à�?‰?˜iÓ'Ûä”t˜A“w“<×(Ñ(Ð)A×BÑBØ—O‘O AÓ&�Ø˜RÓØ�
Ø—:‘:×%Ñ% aÐSWÐ%ÐXÐXä%Ð&]Ô`cÔdhÐijÓdkÓ`lÑ&lÓmÐmó    c                 óp  • US:X  a"  USS S 24==   UR                   SS S 24   -  ss'   [        UR                  UR                  UR                  UR
                  UR                  UR                   UR                  UUUSSU R                  U R                  U R                  U R                  SSSUUS5        g )Nr   r.   r   )r9   Útree_shap_recursiveÚchildren_leftÚchildren_rightÚchildren_defaultÚfeaturesÚ
thresholdsÚnode_sample_weightr   r   r    r!   )r"   ÚtreeÚxrD   rC   Ú	conditionÚcondition_features          r)   r>   ÚTreeExplainer.tree_shapæ   s°   € ð ˜‹>Ø�’A�‹J˜$Ÿ+™+ aª dÑ+Ñ+‹Jô 	Ø×ÑØ×ÑØ×!Ñ!Ø�M‰MØ�O‰OØ�K‰KØ×#Ñ#ØØØØØØ× Ñ Ø×ÑØ×ÑØ�M‰MØØØØØØõ-	
rM   )r   r   r    r!   r   r   N)r.   )r   r   )
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r*   rF   rK   r>   Ú__static_attributes__© rM   r)   r   r   Œ   s   † Ù;ò:ô2/@ôbn÷
rM   r   c                 óÐ   • XpU'   XQU'   XbU'   US:X  a  SX4'   OSX4'   [        US-
  SS5       H7  nX8S-   ==   XcU   -  US-   -  US-   -  -  ss'   XSU   -  XH-
  -  US-   -  X8'   M9     g )Nr   ç      ð?ç        r   r.   ©r?   )	r   r   r    r!   Úunique_depthÚzero_fractionÚone_fractionÚfeature_indexrE   s	            r)   Úextend_pathrj   	  s˜   € ð %2�LÑ!Ø#0�<Ñ Ø".�,ÑØ�qÓØ!$ˆÒà!$ˆÑä�< !Ñ# R¨Ö,ˆØ�Q‘‹˜<°1©+Ñ5¸¸S¹ÑAÀ\ÐTWÑEWÑXÑX‹Ø#¨q¡kÑ1°\Ñ5EÑFÈ,ÐY\ÑJ\Ñ]ˆ‹ò -rM   c                 ó2  • X%   nX   nX4   n[        US-
  SS5       HJ  n	US:w  a-  X9   n
X„S-   -  U	S-   U-  -  X9'   X£U	   U-  XI-
  -  US-   -  -
  nM6  X9   US-   -  XtU	-
  -  -  X9'   ML     [        XT5       H  n	X	S-      X	'   XS-      X'   X)S-      X)'   M      g )Nr   r.   rd   rc   re   )r   r   r    r!   rf   Ú
path_indexrh   rg   Únext_one_portionrE   Útmps              r)   Úunwind_pathro     så   € Ø Ñ,€LØ"Ñ.€MØÑ-Ðä�< !Ñ# R¨Ö,ˆØ˜3ÓØ‘+ˆCØ*¸SÑ.@ÑAÀaÈ#ÁgÐQ]ÑE]Ñ^ˆH‰KØ"¨a¡[°=Ñ%@ÀLÑDTÑ%UÐYeÐhkÑYkÑ%lÑlÒà#™;¨,¸Ñ*:Ñ;ÀÐ`aÑQaÑ@bÑcˆH‹Kñ -ô �:Ö,ˆØ,°©UÑ3ˆÑØ*¨q©5Ñ1ˆÑØ(¨Q©Ñ/ˆÓò -rM   c                 óÚ   • X%   nX   nX4   nSn	[        US-
  SS5       HH  n
US:w  a*  X„S-   -  U
S-   U-  -  nX›-  n	X:   X·-  XJ-
  US-   -  -  -
  nM3  X“U
   U-  XJ-
  US-   -  -  -  n	MJ     U	$ )Nr   r   r.   rd   rc   re   )r   r   r    r!   rf   rl   rh   rg   rm   ÚtotalrE   rn   s               r)   Úunwound_path_sumrr   1  s±   € Ø Ñ,€LØ"Ñ.€MØÑ-ÐØ€Eä�< !Ñ# R¨Ö,ˆØ˜3ÓØ"°SÑ&8Ñ9¸aÀ#¹gÈÑ=UÑVˆCØ‰LˆEØ'™{¨SÑ-@À\ÑEUÐZfÐilÑZlÑDmÑ-nÑnÒà˜q‘k MÑ1°|Ñ7GÈLÐ[^ÑL^Ñ6_Ñ`Ñ`ŠEñ -ð €LrM   c                   ó   • \ rS rSrSS jrSrg)r   iB  c                 óF  • [        [        U5      5      R                  S5      (       Gaø  UR                  R	                  [
        R                  5      U l        UR                  R	                  [
        R                  5      U l        U R                  U l        [        US5      (       a;  [
        R                  " UR                  U R                  U R                  5      U l        UR                  R	                  [
        R                  5      U l        UR                  R	                  [
        R                  5      U l        U(       aV  UR"                  S S 2SS S 24   R$                  UR"                  S S 2SS S 24   R'                  S5      -  R$                  U l        OUR"                  S S 2SS S 24   U l        UR*                  R	                  [
        R                  5      U l        [/        U R                  U R                  U R,                  U R(                  S5      U l        g g )Nz'sklearn.tree._tree.Tree'>Úmissing_go_to_leftr   r   )r   r   r   rP   Úastyper   r   rQ   rR   ÚhasattrÚwhereru   ÚfeaturerS   Ú	thresholdr   rT   ÚvalueÚTÚsumr9   Úweighted_n_node_samplesrU   Úcompute_expectationsr   )r"   rV   r
   s      r)   r*   ÚTree.__init__Q  s~  € ÜŒt�D‹z‹?×#Ñ#Ð$@×AÒAØ!%×!3Ñ!3×!:Ñ!:¼2¿8¹8Ó!DˆDÔØ"&×"5Ñ"5×"<Ñ"<¼R¿X¹XÓ"FˆDÔØ$(×$6Ñ$6ˆDÔ!Ü�tÐ1×2Ñ2Ü(*¯ª°×1HÑ1HÈ$×J\ÑJ\Ð^b×^qÑ^qÓ(r�Ô%Ø ŸL™L×/Ñ/´·±Ó9ˆDŒMØ"Ÿn™n×3Ñ3´B·J±JÓ?ˆDŒOÞØ#Ÿz™zª!¨Q²¨'Ñ2×4Ñ4°t·z±zÂ!ÀQÊÀ'Ñ7J×7NÑ7NÈqÓ7QÑQ×TÑT�•à"Ÿj™jª¨Aªq¨Ñ1�”à&*×&BÑ&B×&IÑ&IÌ"Ï*É*Ó&UˆDÔ#ô 2Ø×"Ñ" D×$7Ñ$7¸×9PÑ9PÐRV×R]ÑR]Ð_`óˆD�Nð! BrM   )rR   rP   rQ   rS   r   rU   rT   r9   N)F)r[   r\   r]   r^   r*   r`   ra   rM   r)   r   r   B  s   † ÷rM   r   c           	      óô   • X   S:X  a  X4S S 24   X4S S 24'   gX   nX   n[        XX#XeS-   5      n[        XX#XuS-   5      n	X&   n
X'   nX£US S 24   -  X³US S 24   -  -   X«-   -  nXÃUS S 24'   [        X‰5      S-   $ )Nr.   r   r   )r   r   )rP   rQ   rU   r9   rE   ÚdepthÚliÚriÚ
depth_leftÚdepth_rightÚleft_weightÚright_weightÚvs                r)   r   r   h  s°   € ØÑ˜BÓØ¢˜d‘|ˆ’!ˆt‰ØàÑˆØÑˆÜ)¨-ÐI[ÐegÐqrÑirÓsˆ
Ü*¨=ÐJ\ÐfhÐrsÑjsÓtˆØ(Ñ,ˆØ)Ñ-ˆØ "¢a %™=Ñ(¨<ÀÂQÀ¹-Ñ+GÑGÈKÑLfÑgˆØˆq’!ˆt‰Ü�:Ó+¨aÑ/Ð/rM   c                 óÔ  • US:X  a  g XËS-   S  nUS US-    US US-   & XÛS-   S  nUS US-    US US-   & XëS-   S  nUS US-    US US-   & XûS-   S  nUS US-    US US-   & US:X  d  UU:w  a  [        UUUUUUUU5        X:   nX   S:X  aS  [        SUS-   5       H?  n[        UUUUUU5      nU	UU   S S 24==   UUU   UU   -
  -  XZS S 24   -  U-  -  ss'   MA     g SnX
   nX   nUU   S:X  a  X*   nOUU   XJ   :  a  UnOUnUU:X  a  UOUn Xj   nUU   U-  n!UU    U-  n"Sn#Sn$Sn%U%U::  a  UU%   U:X  a  OU%S-  n%U%U::  a  M  U%US-   :w  a  UU%   n#UU%   n$[        UUUUUU%5        US-  nUn&Un'US:”  a  UU:X  a  Sn'US-  nOUS:  a  UU:X  a  U&U!-  n&U'U"-  n'US-  n[	        U UUUUUUUUU	UUS-   UUUUU!U#-  U$UUUU&5        [	        U UUUUUUUUU	U US-   UUUUU"U#-  SUUUU'5        g )Nrd   r   r   r.   rc   )rj   r?   rr   ro   rO   )(rP   rQ   rR   rS   rT   r9   rU   rW   rD   rC   Ú
node_indexrf   Úparent_feature_indexesÚparent_zero_fractionsÚparent_one_fractionsÚparent_pweightsÚparent_zero_fractionÚparent_one_fractionÚparent_feature_indexrX   rY   Úcondition_fractionr   r   r    r!   Úsplit_indexrE   ÚwÚ	hot_indexÚcleftÚcrightÚ
cold_indexÚhot_zero_fractionÚcold_zero_fractionÚincoming_zero_fractionÚincoming_one_fractionrl   Úhot_condition_fractionÚcold_condition_fractions(                                           r)   rO   rO   z  s�  € ð2 ˜SÓ Øð -¸AÑ-=Ð-?Ð@€OØ*@ÐASÀ<ÐRSÑCSÐ*T€OÐ&�l QÑ&Ð'Ø*¸!Ñ+;Ð+=Ð>€NØ)>Ð?QÀÐPQÑAQÐ)R€NÐ%�\ AÑ%Ð&Ø(¸Ñ)9Ð);Ð<€MØ(<Ð=O¸|ÈaÑ?OÐ(P€MÐ$�L 1Ñ$Ð%Ø¨aÑ/Ð1Ð2€HØ#2Ð3E°\ÀAÑ5EÐ#F€HÐˆ|˜aÑÐ à�Aƒ~Ð*Ð.BÓBÜØØØØØØ ØØ ô		
ð Ñ&€Kð Ñ! RÓ'Ü�q˜,¨Ñ*Ö+ˆAÜ  °.À-ÐQYÐ[gÐijÓkˆAØ� Ñ"¢AÐ%Ó&Ø�] 1Ñ%¨°qÑ(9Ñ9Ñ:¸VÒPQÀMÑ=RÑRÐUgÑgñÕ&ò ,ð ˆ	ØÑ)ˆØÑ+ˆØ�[Ñ! QÓ&Ø(Ñ4‰IØˆ{‰^˜jÑ4Ó4Ø‰IàˆIØ(¨EÓ1‘V°uˆ
ØÑ*ˆØ.¨yÑ9¸AÑ=ÐØ/°
Ñ;¸aÑ?ÐØ!$ÐØ #Ðð ˆ
Ø˜LÓ(Ø˜zÑ*¨kÓ9ØØ˜!‰OˆJð ˜LÕ(ð
 ˜¨Ñ)Ó)Ø%3°JÑ%?Ð"Ø$1°*Ñ$=Ð!Ü˜¨¸ÈÐR^Ð`jÔkØ˜AÑˆLð "4ÐØ"4ÐØ�q‹=˜[Ð,=Ó=Ø&)Ð#Ø˜AÑ‰LØ˜‹]˜{Ð.?Ó?Ø"Ð&7Ñ7Ð"Ø#Ð'9Ñ9Ð#Ø˜AÑˆLäØØØØØØØØØØØØ˜1ÑØØØØØÐ 6Ñ6Ø!ØØØØ"ô-	
ô2 	ØØØØØØØØØØØØ˜1ÑØØØØØÐ!7Ñ7ØØØØØ#õ-	
rM   )r   )r_   Únumpyr   Úpandasr6   Úutils._exceptionsr   r   rj   ro   rr   r   r   rO   ra   rM   r)   Ú<module>r£      sK   ðñó
 Û õ /÷Dx
ñ x
òz^ò$0ò,÷""ñ "ôL0ó$X
rM   