ó
    †ñ:iä¹ ã                  óJ  • S SK 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	  S SK
r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  SSKJrJrJr  SS	KJrJrJrJrJ r   SS
K!J"r"  SSK#J$r$  SSK%J&r&  SSK'J(r(   SSKJ)r)   S SK,r,\-" 5       r.S SSSS.r/S SSS.r0S(S jr1S)S jr2S*S jr3S r4 " S S\&5      r5 " S S5      r6 " S S 5      r7 " S! S"\75      r8S# r9 " S$ S%5      r: " S& S'5      r;g! \* a  r+\" SS\+5         Sr+C+N‚Sr+C+ff = f! \* a  r+\" SS\+5         Sr+C+NšSr+C+ff = f)+é    )ÚannotationsN)ÚAny)Úversioné   )Úmaskers)ÚExplanation)Úassert_importÚrecord_import_errorÚsafe_isinstance)ÚDimensionErrorÚExplainerErrorÚInvalidFeaturePerturbationErrorÚInvalidMaskerErrorÚInvalidModelError)Ú	DenseData)ÚExperimentalWarningé   )Ú	Explainer)Údecode_ubjson_buffer)Ú_cextÚcextz)C extension was not built during install!ÚpysparkzPySpark could not be imported!é   )ÚidentityÚlogisticÚlogistic_nloglossÚsquared_loss)ÚinterventionalÚtree_path_dependentÚglobal_path_dependentc           
     ó   • SS0nSn[        U S5      (       a  [        U R                  S5      (       a  U nU(       at  UR                  R                  R                  S5      S   nUR	                  U5      (       a5  [
        R                  " SU S	U S
UR	                  U5       S3[        5        gg[
        R                  " SU  S3[        5        g)a[  
This function checks if a tree instance has an experimental integration with shap TreeExplainer class.

To add experimental message support for your library add package name and its versions
verified to be used with shap to the 'experimental' dictionary below.

Parameters
----------
tree_instance: object, tree instance from an external library
Úcausalmlz0.15.3NÚ	__class__Ú
__module__Ú.r   z,You are using experimental integration with z. The z1 support is verified for the following versions: z¿. As experimental functionality, this integration may be removed or significantly changed in future releases without following semantic versioning. Use in production systems at your own risk.z4Unable to check experimental integration status for z object)Úhasattrr#   r$   ÚsplitÚgetÚwarningsÚwarnr   )Útree_instanceÚexperimentalÚsafe_instanceÚlibrarys       ÚX/srv/projetos/modelo_ml_acdoc/venv/lib/python3.13/site-packages/shap/explainers/_tree.pyÚ&_safe_check_tree_instance_experimentalr0   :   sÙ   € ð 	�Hð€Lð €MÜˆ}˜k×*Ñ*Ü�=×*Ñ*¨L×9Ñ9Ø)ˆMæØ×)Ñ)×4Ñ4×:Ñ:¸3Ó?ÀÑBˆØ×Ñ˜G×$Ñ$Ü�MŠMØ>¸w¸ið HØ�iÐPÐQ]×QaÑQaÐbiÓQjÐPkð lPðQô $õ	ð %ô 	�ŠØBÀ=À/ÐQXÐYÔ[nõ	
ó    c                ó~   • [         R                  " U 5      [         R                  " S5      :  a  [        SU  S35      eg )Nz1.6z2SHAP requires XGBoost >= v1.6 , but found version z. Please upgrade XGBoost.)r   ÚparseÚRuntimeError)Úvs    r/   Ú_check_xgboost_versionr6   ]   s8   € Ü‡}‚}�QÓœ'Ÿ-š-¨Ó.Ó.ÜÐOÐPQÈsÐRkÐlÓmÐmð /r1   c                ó   • U S:X  a  Sn X-  nU$ )zCConvert number of trees to number of iterations for XGBoost models.éÿÿÿÿr   © )Ú
tree_limitÚnum_stacked_modelsÚn_iterationss      r/   Ú_xgboost_n_iterationsr=   b   s   € à�RÓØˆ
ØÑ3€LØÐr1   c                óV   • U R                   S:X  a  U R                  b  [        S5      eg g )NÚxgboostzxCategorical split is not yet supported. You can still use TreeExplainer with `feature_perturbation=tree_path_dependent`.)Ú
model_typeÚcat_feature_indicesÚNotImplementedError)Úmodels    r/   Ú_xgboost_cat_unsupportedrD   j   s7   € Ø×Ñ˜9Ó$¨×)BÑ)BÑ)NÜ!ðNó
ð 	
ð *OÐ$r1   c                  óÐ   ^ • \ rS rSrSrSSSS\SS4U 4S jjrS r    S           SS jjrS	 r	     S           SS
 jjr
S rSS jrS rS r\S 5       rSrU =r$ )ÚTreeExplainerér   aè  Uses Tree SHAP algorithms to explain the output of ensemble tree models.

Tree SHAP is a fast and exact method to estimate SHAP values for tree models
and ensembles of trees, under several different possible assumptions about
feature dependence. It depends on fast C++ implementations either inside an
external model package or in the local compiled C extension.

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

NÚrawÚautoc	                óZ
  >• U[         La  [        R                  " S[        5        Ub  XPl        O9[        U[        R                  5      (       a  [        UR                  5      U l        Un	[        TU ]-  XUS9  [        U R                  5      [        R                  L a  U R                  R                   nO.U	b+  [#        S[%        [        U R                  5      5       S35      e['        U R                  SS5      b  [)        S5      e[        U[        R                  5      (       a  UR*                  U l        O-[        U[,        5      (       a  UR                   U l        OX l        US:X  a  U R                   b  S	OS
nOœUS	:X  a+  U R                   c  [        R                  " S[.        5        S
nOkUS
:w  a  [1        SU S35      eUS	:X  aP  U R                   R2                  S   S:”  a3  SU R                   R2                  S    S3n
[        R                  " U
5        [5        U5        U R                   c  SO[        R6                  " U R                   5      U l        X@l        SU l        [?        XR                   U R8                  U5      U l         X0l!        US
:X  a&  U R@                  RB                  S:w  a  [E        S5      eOUc  [E        S5      eU R@                  RB                  S:w  a;  U R@                  RF                  c$  U R@                  RH                  c  Sn[K        U5      eU R@                  RL                  S:X  a  SSK'n[Q        URR                  5        U R@                  RB                  S:X  a  U RT                  U l        GOJUbƒ   U R@                  RW                  U R                   5      RY                  S5      U l        [[        U R<                  S5      (       a-  []        U R<                  5      S:X  a  U R<                  S   U l        OÄ[[        U R@                  S5      (       a©  U R@                  R*                  SS2S4   R_                  S5      U l        U R<                  R`                  S:X  a  U R<                  S   U l        U =R<                  U R@                  Rb                  -  sl        U R@                  RB                  S:w  a  SU l        U R@                  RB                  S:X  a/  U R<                  b!  SU R<                  -
  U R<                  /U l        ggg! [D         a    [)        S5      ef = f)uù  Build a new Tree explainer for the passed model.

Parameters
----------
model : model object
    The tree based machine learning model that we want to explain.
    XGBoost, LightGBM, CatBoost, Pyspark and most tree-based
    scikit-learn models are supported.

data : numpy.array or pandas.DataFrame
    The background dataset to use for integrating out features.

    This argument is optional when
    ``feature_perturbation="tree_path_dependent"``, since in that case
    we can use the number of training samples that went down each tree
    path as our background dataset (this is recorded in the ``model``
    object).

feature_perturbation : "auto" (default), "interventional" or "tree_path_dependent"
    Since SHAP values rely on conditional expectations, we need to
    decide how to handle correlated (or otherwise dependent) input
    features.

    - if ``"interventional"``, a background dataset ``data`` is required. The
      dependencies between features are handled according to the rules dictated
      by causal inference [1]_. The runtime scales linearly with the size of the
      background dataset you use: anywhere from 100 to 1000 random background
      samples are good sizes to use.
    - if ``"tree_path_dependent"``, no background dataset is required and the
      approach is to just follow the trees and use the number of training
      examples that went down each leaf to represent the background
      distribution.
    - if ``"auto"``, the "interventional" approach will be used when a
      background is provided, otherwise the "tree_path_dependent" approach will
      be used.

    .. versionadded:: 0.47
       The `"auto"` option was added.

    .. versionchanged:: 0.47
       The default behaviour will change from `"interventional"` to `"auto"` in 0.47.
       In the future, passing `feature_pertubation="interventional"` without providing
       a background dataset will raise an error.


model_output : "raw", "probability", "log_loss", or model method name
    What output of the model should be explained.

    * If "raw", then we explain the raw output of the trees, which
      varies by model. For regression models, "raw" is the standard
      output. For binary classification in XGBoost, this is the log odds
      ratio.
    * If "probability", then we explain the output of the model
      transformed into probability space (note that this means the SHAP
      values now sum to the probability output of the model).
    * If "log_loss", then we explain the natural logarithm of the model
      loss function, so that the SHAP values sum up to the log loss of
      the model for each sample. This is helpful for breaking down model
      performance by feature.
    * If ``model_output`` is the name of a supported prediction method
      on the ``model`` object, then we explain the output of that model
      method name. For example, ``model_output="predict_proba"``
      explains the result of calling ``model.predict_proba``.

    Currently the "probability" and "log_loss" options are only
    supported when ``feature_perturbation="interventional"``.

approximate : bool
    Deprecated, will be deprecated in v0.47.0 and removed in version v0.49.0.
    Please use the ``approximate`` argument in the :meth:`.shap_values` or ``__call__`` methods instead.

References
----------
.. [1] Janzing, Dominik, Lenon Minorics, and Patrick BlÃ¶baum.
       "Feature relevance quantification in explainable AI: A causal problem."
       International Conference on artificial intelligence and statistics. PMLR, 2020.

z¾The approximate argument has been deprecated in version v0.47.0 and will be removed in version v0.48.0. Please use the approximate argument in the shap_values or the __call__ method instead.N)Úfeature_nameszUnsupported masker type: Ú!Ú
clusteringznTreeExplainer does not support clustered data inputs! Please use shap.Explainer or pass an unclustered masker!rI   r   r   a  In the future, passing feature_perturbation='interventional' without providing a background dataset will raise an error. Please provide a background dataset to continue using the interventional approach or set feature_perturbation='auto' to automatically switch approaches.zUfeature_perturbation must be 'auto', 'interventional', or 'tree_path_dependent'. Got z	 instead.r   iè  zPassing z} background samples may lead to slow runtimes. Consider using shap.sample(data, 100) to create a smaller background data set.rH   zSOnly model_output="raw" is supported for feature_perturbation="tree_path_dependent"zfA background dataset must be provided unless you are using feature_perturbation="tree_path_dependent"!z‘Model does not have a known objective or output type! When model_output is not "raw" then we need to know the model's objective or link function.r?   Úlog_losszöCurrently TreeExplainer can only handle models with categorical splits when feature_perturbation="tree_path_dependent" and no background data is passed. Please try again using shap.TreeExplainer(model, feature_perturbation="tree_path_dependent").Ú__len__r   Únode_sample_weightÚprobability_doubled)2ÚDEPRECATED_APPROXr)   r*   ÚDeprecationWarningÚdata_feature_namesÚ
isinstanceÚpdÚ	DataFrameÚlistÚcolumnsÚsuperÚ__init__ÚtypeÚmaskerr   ÚIndependentÚdatar   ÚstrÚgetattrr   Úvaluesr   ÚFutureWarningr   Úshaper0   ÚisnaÚdata_missingÚfeature_perturbationÚexpected_valueÚTreeEnsemblerC   Úmodel_outputÚ
ValueErrorÚ	objectiveÚtree_outputÚ	Exceptionr@   r?   r6   Ú__version__Ú&_TreeExplainer__dynamic_expected_valueÚpredictÚmeanr&   ÚlenÚsumÚsizeÚbase_offset)ÚselfrC   r_   rj   rg   rK   ÚapproximateÚlinkÚlinearize_linkr]   ÚwmsgÚemsgr?   r#   s                €r/   r[   ÚTreeExplainer.__init__€   s}  ø€ ðt Ô/Ò/Ü�MŠMðiä"ôð
 Ñ$Ø&3Õ#Ü˜œbŸl™l×+Ñ+Ü&*¨4¯<©<Ó&8ˆDÔ#àˆÜ‰Ñ˜°mÐÑDä�—‘Ó¤× 3Ñ 3Ò3Ø—;‘;×#Ñ#‰DØÑÜ$Ð'@ÄÄTÈ$Ï+É+ÓEVÓAWÐ@XÐXYÐ%ZÓ[Ð[ä�4—;‘; ¨dÓ3Ñ?Ü ð Aóð ô �dœBŸL™L×)Ñ)ØŸ™ˆD�IÜ˜œi×(Ñ(ØŸ	™	ˆD�IàŒIà 6Ó)Ø7;·y±yÑ7LÑ#3ÐRgÑ Ø!Ð%5Ó5Ø�y‰yÑ ä—’ðfô "ô	ð (=Ð$øØ!Ð%:Ó:Ü1ðØ+Ð,¨Ið7óð ð
 "Ð%5Ó5¸$¿)¹)¿/¹/È!Ñ:LÈuÓ:Tà˜4Ÿ9™9Ÿ?™?¨1Ñ-Ð.ð /Xð Xð ô �MŠM˜$Ôä.¨uÔ5à$(§I¡IÑ$5™D¼2¿7º7À4Ç9Á9Ó;MˆÔØ$8Ô!Ø"ˆÔÜ! %¯©°D×4EÑ4EÀ|ÓTˆŒ
Ø(Ôð  Ð#8Ó8Ø�z‰z×&Ñ&¨%Ó/Ü Ð!vÓwÐwð 0à‰\ÜØxóð ð �:‰:×"Ñ" eÓ+Ø�z‰z×#Ñ#Ñ+°·
±
×0FÑ0FÑ0Nð^ð ô   “oÐ%ð �:‰:× Ñ  IÓ-Ûä" 7×#6Ñ#6Ô7ð �:‰:×"Ñ" jÓ0Ø"&×"?Ñ"?ˆDÖØÑðØ&*§j¡j×&8Ñ&8¸¿¹Ó&C×&HÑ&HÈÓ&K�Ô#ô �t×*Ñ*¨I×6Ñ6¼3¸t×?RÑ?RÓ;SÐWXÓ;XØ&*×&9Ñ&9¸!Ñ&<�Ô#øÜ�T—Z‘ZÐ!5×6Ñ6Ø"&§*¡*×"3Ñ"3²A°q°DÑ"9×"=Ñ"=¸aÓ"@ˆDÔØ×"Ñ"×'Ñ'¨1Ó,Ø&*×&9Ñ&9¸!Ñ&<�Ô#Ø×Ò 4§:¡:×#9Ñ#9Ñ9ÕØ�z‰z×&Ñ&¨%Ó/Ø&*�Ô#ð �:‰:×"Ñ"Ð&;Ó;À×@SÑ@SÑ@_Ø#$ t×':Ñ':Ñ#:¸D×<OÑ<OÐ"PˆDÕð A`Ð;øô# ó Ü$ð]óð ðús   Î9T ÔT*c                óÈ   • U R                   R                  U R                  [        R                  " U R                  R
                  S   5      U-  5      R                  S5      $ )zFThis computes the expected value conditioned on the given label value.r   )rC   rq   r_   ÚnpÚonesrd   rr   )rw   Úys     r/   Ú__dynamic_expected_valueÚ&TreeExplainer.__dynamic_expected_valueM  sD   € à�z‰z×!Ñ! $§)¡)¬R¯WªW°T·Y±Y·_±_ÀQÑ5GÓ-HÈ1Ñ-LÓM×RÑRÐSTÓUÐUr1   c                óŠ  • [         R                   " 5       n[        U[        R                  5      (       a  [	        UR
                  5      nO[        U SS5      nU(       d<  U R                  XSXES9n[        U[        5      (       a  [        R                  " USS9nO#U(       a  [        S5      eU R                  U5      n[        U R                  S5      (       at  [        U R                  5      S	:”  a[  [        U[        5      (       a  US
   R                  S
   n	OUR                  S
   n	[        R                   " U R                  U	S	45      n
O.[        R                   " U R                  UR                  S
   5      n
[        U[        R                  5      (       a  UR"                  nO{[%        US5      (       ah  S
SKn[(        R*                  " UR,                  5      [(        R*                  " S5      :  a  Sn[.        R0                  " U5        SnOUR3                  5       nOUn[5        UU
UU[         R                   " 5       U-
  S9$ )aØ  Calculate the SHAP values for the model applied to the data.

Parameters
----------
X : Any
    Can be a dataframe like object e.g. numpy.array, pandas.DataFrame or catboost.Pool (for catboost).
    A matrix of samples (# samples x # features) on which to explain the model's output.

y : numpy.array, optional
    An array of label values for each sample. Used when explaining loss functions.

approximate : bool
    Run fast, but only roughly approximate the Tree SHAP values. This runs a method
    previously proposed by Saabas which only considers a single feature ordering. Take care
    since this does not have the consistency guarantees of Shapley values and places too
    much weight on lower splits in the tree.

interactions: bool
    Whether to compute the SHAP interaction values.

check_additivity: bool
    Check if the sum of the SHAP values equals the output of the model.

Returns
-------
    shap.Explanation object containing the given data and the SHAP values.
rT   NT)r�   Ú	from_callÚcheck_additivityrx   r8   ©ÚaxiszBApproximate computation not yet supported for interaction effects!rO   r   r   zxgboost.core.DMatrixz1.7.0aR  `shap.Explanation` does not support `xgboost.DMatrix` objects for xgboost < 1.7, so the `data` attribute of the `Explanation` object will be set to None. If you require the `data` attribute (e.g. using `shap.plots`), then either update your xgboost to >=1.7.0 or explicitly set `Explanation.data = X`, where `X` is a numpy or scipy array.)Úbase_valuesr_   rK   Úcompute_time)ÚtimerU   rV   rW   rX   rY   ra   Úshap_valuesr   ÚstackrB   Úshap_interaction_valuesr&   rh   rs   rd   Útilerb   r   r?   r   r3   ro   r)   r*   Úget_datar   )rw   ÚXr�   Úinteractionsr†   rx   Ú
start_timerK   r5   Únum_rowsÚev_tiledÚX_datar?   r{   s                 r/   Ú__call__ÚTreeExplainer.__call__Q  sÇ  € ôF —Y’Y“[ˆ
ô �aœŸ™×&Ñ&Ü  §¡›O‰Mä# DÐ*>ÀÓEˆMæØ× Ñ  °4ÐJZÐ ÐtˆAÜ˜!œT×"Ñ"Ü—H’H˜Q RÑ(�øæÜ)Ð*nÓoÐoØ×,Ñ,¨QÓ/ˆAô �4×&Ñ&¨	×2Ñ2´s¸4×;NÑ;NÓ7OÐRSÓ7Sô ˜!œT×"Ñ"Ø˜Q™4Ÿ:™: a™=‘àŸ7™7 1™:�Ü—w’w˜t×2Ñ2°X¸q°MÓB‰Hô —w’w˜t×2Ñ2°A·G±G¸A±JÓ?ˆHô
 �aœŸ™×&Ñ&Ø—X‘X‰FÜ˜QÐ 6×7Ñ7Ûä�}Š}˜W×0Ñ0Ó1´G·M²MÀ'Ó4JÓJð5ð ô —’˜dÔ#Ø‘àŸ™›‘àˆFäØØ ØØ'ÜŸš› zÑ1ñ
ð 	
r1   c                ó8  • Uc/  U R                   R                  c  SOU R                   R                  nUS:  d&  X0R                   R                  R                  S   :”  a#  U R                   R                  R                  S   n[	        U[
        R                  [
        R                  45      (       a  UR                  nSn[        UR                  5      S:X  a!  SnUR                  SUR                  S   5      nUR                  U R                   R                  :w  a%  UR                  U R                   R                  5      n[        R                  " U[        S9n[	        U[        R                   5      (       d   S[#        [%        U5      5      -   5       e[        UR                  5      S:X  d   S	5       eU R                   R&                  S
:X  aV  Uc  Sn[)        U5      eUR                  S   [        U5      :w  a*  S[        U5       SUR                  S    S3n[+        U5      eU R,                  S:X  a(  U R                   R.                  (       d  Sn[)        U5      eU(       a2  U R                   R0                  S:X  a  [2        R4                  " S5        SnXXeX44$ )Nr8   r   Fr   T©ÚdtypeúUnknown instance type: r   ú7Passed input data matrix X must have 1 or 2 dimensions!rN   zmBoth samples and labels must be provided when model_output = "log_loss" (i.e. `explainer.shap_values(X, y)`)!úThe number of labels (ú3) does not match the number of samples to explain (ú)!r   a  The background dataset you provided does not cover all the leaves in the model, so TreeExplainer cannot run with the feature_perturbation="tree_path_dependent" option! Try providing a larger background dataset, no background dataset, or using feature_perturbation="interventional".r   zŽcheck_additivity requires us to run predictions which is not supported with spark, ignoring. Set check_additivity=False to remove this warning)rC   r:   rb   rd   rU   rV   ÚSeriesrW   rs   Úreshaper›   Úinput_dtypeÚastyper   ÚisnanÚboolÚndarrayr`   r\   rj   r   r   rg   Úfully_defined_weightingr@   r)   r*   )rw   r‘   r�   r:   r†   Úflat_outputÚ	X_missingr|   s           r/   Ú_validate_inputsÚTreeExplainer._validate_inputs³  s$  € àÑØ#Ÿz™z×4Ñ4Ñ<™À$Ç*Á*×BWÑBWˆJà˜‹>˜Z¯*©*×*;Ñ*;×*AÑ*AÀ!Ñ*DÓDØŸ™×*Ñ*×0Ñ0°Ñ3ˆJä�aœ"Ÿ)™)¤R§\¡\Ð2×3Ñ3Ø—‘ˆAØˆÜˆq�w‰w‹<˜1ÓØˆKØ—	‘	˜!˜QŸW™W Q™ZÓ(ˆAØ�7‰7�d—j‘j×,Ñ,Ó,Ø—‘˜Ÿ™×/Ñ/Ó0ˆAÜ—H’H˜Q¤dÑ+ˆ	Ü˜!œRŸZ™Z×(Ñ(ÐRÐ*CÄcÌ$ÈqË'ÃlÑ*RÓRÐ(Ü�1—7‘7‹|˜qÓ Ð[Ð"[Ó[Ð à�:‰:×"Ñ" jÓ0Ø‰yð<ð ô % TÓ*Ð*Ø�w‰w�q‰zœS ›VÓ#à,¬S°«V¨HÐ4gÐhi×hoÑhoÐpqÑhrÐgsÐsuÐvð ô % TÓ*Ð*à×$Ñ$Ð(=Ó=Ø—:‘:×5×5ð=ð ô % TÓ*Ð*æ §
¡
× 5Ñ 5¸Ó BÜ�MŠMðEôð  %Ðà�Y¨ZÐIÐIr1   c                óÎ  • Uc/  U R                   R                  c  SOU R                   R                  nU R                  S:X  GaÏ  U R                   R                  S:w  Ga´  U R                  Gc¦  SnSnU R                   R                  S:X  aå  SSKn	[        X0R                   R                  5      n
[        XR                  R                  5      (       d*  [        U R                   S0 5      nU	R                  " U40 UD6nU R                   R                  R                  USU
4SUS	S
9nU(       aB  U R                   R                  S:X  a(  U R                   R                  R                  USU
4SS	S9nGOÅU R                   R                  S:X  Ga  U(       a   S5       eU R                   R                  R                  XSS9nSU R                   R                  R                  ;   aD  U R                   R                  R                  S   S:X  a  U(       d  [         R"                  " S5        UR$                  S   UR$                  S   S-   :w  aR   UR'                  UR$                  S   UR$                  S   UR$                  S   S-   -  UR$                  S   S-   5      nO›OšU R                   R                  S:X  a€  U(       a   S5       eUS:X  d   S5       eSSKn[        XR,                  5      (       d#  UR-                  XR                   R.                  S9nU R                   R                  R1                  USS9nUbÛ  [3        UR$                  5      S:X  ae  [5        UR$                  S   5       Vs/ s H
  oøSUS4   PM     snU l        [5        UR$                  S   5       Vs/ s H  oøSS2USS24   PM     nnOUS   U l        USS2SS24   nU(       a  Ub  U R9                  UU5        [        U[:        5      (       a  [<        R>                  " USS9nU$ U RA                  XX55      u  pnnp5U R                   RC                  5       n[E        U R                   5        [G        S5        [<        RH                  " UR$                  S   UR$                  S   S-   U R                   RJ                  45      nU(       Gd  [L        RN                  " U R                   RP                  U R                   RR                  U R                   RT                  U R                   RV                  U R                   RX                  U R                   RZ                  U R                   R\                  U R                   R^                  U R                   R`                  UUUU R                  U Rb                  UU R                   Rd                  U[f        U R                     [h        U   S	5        Oß[L        Rj                  " U R                   RP                  U R                   RR                  U R                   RT                  U R                   RV                  U R                   RX                  U R                   RZ                  U R                   R\                  U R                   R`                  UU R                   Rd                  [h        U   UUUU5        U Rm                  UU5      nU(       aE  U R                   R                  S:X  a+  U R9                  UU R                   R                  U5      5        [        U[:        5      (       a  [<        R>                  " USS9nU$ ! [(         a  nSn[)        U5      UeSnAff = fs  snf s  snf )a'  Estimate the SHAP values for a set of samples.

Parameters
----------
X : Any
    Can be a dataframe like object, e.g. numpy.array, pandas.DataFrame or catboost.Pool (for catboost).
    A matrix of samples (# samples x # features) on which to explain the model's output.

y : numpy.array
    An array of label values for each sample. Used when explaining loss functions.

tree_limit : None (default) or int
    Limit the number of trees used by the model. By default, the limit of the original model
    is used (``None``). ``-1`` means no limit.

approximate : bool
    Run fast, but only roughly approximate the Tree SHAP values. This runs a method
    previously proposed by Saabas which only considers a single feature ordering. Take care
    since this does not have the consistency guarantees of Shapley values and places too
    much weight on lower splits in the tree.

check_additivity : bool
    Run a validation check that the sum of the SHAP values equals the output of the model. This
    check takes only a small amount of time, and will catch potential unforeseen errors.
    Note that this check only runs right now when explaining the margin of the model.

Returns
-------
np.array
    Estimated SHAP values, usually of shape ``(# samples x # features)``.

    Each row sums to the difference between the model output for that
    sample and the expected value of the model output (which is stored
    as the ``expected_value`` attribute of the explainer).

    The shape of the returned array depends on the number of model outputs:

    * one output: array of shape ``(#num_samples, *X.shape[1:])``.
    * multiple outputs: array of shape ``(#num_samples, *X.shape[1:],
      #num_outputs)``.

    .. versionchanged:: 0.45.0
        Return type for models with multiple outputs changed from list to np.ndarray.

Nr8   r   Úinternalr?   r   Ú_xgb_dmatrix_propsTF)Úiteration_rangeÚpred_contribsÚapprox_contribsÚvalidate_featuresrH   )r°   Úoutput_marginr³   Úlightgbmz6approximate=True is not supported for LightGBM models!)Únum_iterationÚpred_contribrl   ÚbinaryzaLightGBM binary classifier with TreeExplainer shap values output has changed to a list of ndarrayr   zuThis reshape error is often caused by passing a bad data matrix to SHAP. See https://github.com/shap/shap/issues/580.Úcatboostz6approximate=True is not supported for CatBoost models!ú4tree_limit is not yet supported for CatBoost models!©Úcat_featuresÚ
ShapValues©r_   Ú	fstr_typer   )r   r8   r‡   r   )7rC   r:   rg   r@   r_   r?   r=   r;   rU   ÚcoreÚDMatrixra   Úoriginal_modelrq   rj   Úparamsr)   r*   rd   r¢   rk   r¹   ÚPoolrA   Úget_feature_importancers   Úrangerh   Úassert_additivityrX   r   r�   r«   Úget_transformrD   r	   ÚzerosÚnum_outputsr   Údense_tree_shapÚchildren_leftÚchildren_rightÚchildren_defaultÚfeaturesÚ
thresholdsÚthreshold_typesrb   rP   Ú	max_depthrf   rv   Úfeature_perturbation_codesÚoutput_transform_codesÚdense_tree_saabasÚ_get_shap_output)rw   r‘   r�   r:   rx   r†   r…   Úmodel_output_valsÚphir?   r<   Údmatrix_propsÚer|   r¹   ÚiÚoutrª   r©   Ú	transforms                       r/   rŒ   ÚTreeExplainer.shap_valuesì  s  € ðn ÑØ#Ÿz™z×4Ñ4Ñ<™À$Ç*Á*×BWÑBWˆJð ×%Ñ%Ð)>Ô>Ø—
‘
×%Ñ%¨Ô3Ø—	‘	Ò!à $ÐØˆCØ�z‰z×$Ñ$¨	Ó1Ûä4°ZÇÁ×A^ÑA^Ó_�Ü! !§\¡\×%9Ñ%9×:Ñ:ä$+¨D¯J©JÐ8LÈbÓ$Q�MØŸš¨Ñ;¨]Ñ;�AØ—j‘j×/Ñ/×7Ñ7ØØ%&¨Ð$5Ø"&Ø$/Ø&+ð 8ð �ö $¨¯
©
×(?Ñ(?À5Ó(HØ(,¯
©
×(AÑ(A×(IÑ(IØ¨A¨|Ð+<ÈDÐdið )Jð )Ð%ùð —‘×&Ñ&¨*Ô4Þ&Ð`Ð(`Ó`�Ø—j‘j×/Ñ/×7Ñ7¸ÐbfÐ7Ðg�ð   4§:¡:×#<Ñ#<×#CÑ#CÓCØŸ
™
×1Ñ1×8Ñ8¸ÑEÈÓQæ$Ü ŸšØôð —9‘9˜Q‘< 1§7¡7¨1¡:°¡>Ó1ð6Ø!Ÿk™k¨!¯'©'°!©*°c·i±iÀ±lÀqÇwÁwÈqÁzÐTUÁ~Ñ6VÐXY×X_ÑX_Ð`aÑXbÐefÑXfÓg™ð 2ð —‘×&Ñ&¨*Ó4Þ&Ð`Ð(`Ó`�Ø! RÓ'Ð_Ð)_Ó_Ð'Ûä! !§]¡]×3Ñ3Ø Ÿ™ a·j±j×6TÑ6T˜ÐU�AØ—j‘j×/Ñ/×FÑFÈAÐYeÐFÐf�ð ‰Ü�s—y‘y“> QÓ&ÜBGÈÏ	É	ÐRSÉÔBUÓ*VÒBU¸Q¨q°!°R¨x¬=ÑBUÑ*V�DÔ'Ü38¸¿¹À1¹Ô3FÓGÒ3F¨ašq ! S b S˜yœ>Ñ3F�CÐG�Cà*-¨e©*�DÔ'Øša  " ˜f™+�Cæ#Ð(9Ñ(EØ×*Ñ*¨3Ð0AÔBÜ˜c¤4×(Ñ(ÜŸ(š( 3¨RÑ0�CØ�
àEI×EZÑEZØ�*óF
ÑBˆˆi˜ jð —J‘J×,Ñ,Ó.ˆ	Ü  §¡Ô,ô 	�fÔÜ�hŠh˜Ÿ™ ™
 A§G¡G¨A¡J°¡N°D·J±J×4JÑ4JÐKÓLˆçÜ×!Ò!Ø—
‘
×(Ñ(Ø—
‘
×)Ñ)Ø—
‘
×+Ñ+Ø—
‘
×#Ñ#Ø—
‘
×%Ñ%Ø—
‘
×*Ñ*Ø—
‘
×!Ñ!Ø—
‘
×-Ñ-Ø—
‘
×$Ñ$ØØØØ—	‘	Ø×!Ñ!ØØ—
‘
×&Ñ&ØÜ*¨4×+DÑ+DÑEÜ& yÑ1Øõ)ô. ×#Ò#Ø—
‘
×(Ñ(Ø—
‘
×)Ñ)Ø—
‘
×+Ñ+Ø—
‘
×#Ñ#Ø—
‘
×%Ñ%Ø—
‘
×*Ñ*Ø—
‘
×!Ñ!Ø—
‘
×$Ñ$ØØ—
‘
×&Ñ&Ü& yÑ1ØØØØôð$ ×#Ñ# C¨Ó5ˆÞ §
¡
× 7Ñ 7¸5Ó @Ø×"Ñ" 3¨¯
©
×(:Ñ(:¸1Ó(=Ô>ô
 �cœ4× Ñ Ü—(’(˜3 RÑ(ˆCØˆ
øôy &ó 6ðKð ô )¨Ó.°AÐ5ûð6üò& +WùÚGs%   É	A\= Í+]Î]"Ü=
]Ý]Ý]c                óÖ  • U R                   R                  S:X  aP  U R                  c$  U R                   R                  S:w  a
  US   U l        U(       a  USSS2S4   nOÝUSS2SS2S4   nOÐU R                  cM  U R                   R                  S:w  a3  [	        UR
                  S   5       Vs/ s H
  oASSU4   PM     snU l        U(       a7  [	        U R                   R                  5       Vs/ s H  oASSS2U4   PM     nnO8[	        U R                   R                  5       Vs/ s H  oASS2SS2U4   PM     nnU R                   R                  S:X  a  U* U/nU$ s  snf s  snf s  snf )	zFPull off the last column of ``phi`` and keep it as our expected_value.r   NrN   )r   r8   r   r   r8   r   rQ   )rC   rÊ   rh   rj   rÆ   rd   ©rw   rØ   r©   rÜ   rÛ   s        r/   rÖ   ÚTreeExplainer._get_shap_output¯  sI  € à�:‰:×!Ñ! QÓ&Ø×"Ñ"Ñ*¨t¯z©z×/FÑ/FÈ*Ó/TØ&)¨(¡m�Ô#ÞØ˜!˜S˜b˜S !˜)‘n‘àš!˜S˜b˜S !˜)‘n‘à×"Ñ"Ñ*¨t¯z©z×/FÑ/FÈ*Ó/TÜ>CÀCÇIÁIÈaÁLÔ>QÓ&RÒ>Q¸¨1¨b°!¨8¤}Ñ>QÑ&R�Ô#ÞÜ/4°T·Z±Z×5KÑ5KÔ/LÓMÒ/L¨!˜1˜c˜r˜c 1˜9”~Ñ/L�ÐM�ä/4°T·Z±Z×5KÑ5KÔ/LÓMÒ/L¨!š1˜c˜r˜c 1˜9”~Ñ/L�ÐMð �:‰:×"Ñ"Ð&;Ó;Ø�4˜�+ˆCØˆ
ùò 'SùâMùâMs   Â,EÃ-E!Ä$E&c                ó(	  • U R                   R                  S:X  d   S5       eSnUc/  U R                   R                  c  SOU R                   R                  nU R                   R                  S:X  Ga  U R                  S:X  Ga
  SSKn[        XR                  R                  5      (       d  UR                  U5      n[        X0R                   R                  5      nU R                   R                  R                  USU4S	S
S9n[        UR                  5      S:X  aY  [        UR                  S   5       Vs/ s H  o‡SUSS4   PM     snU l        ["        R$                  " USS2SS2SS2SS24   SSS9$ US   U l        USS2SS2SS24   $ U R                   R                  S:X  Ga3  U R                  S:X  Ga"  US:X  d   S5       eSSKn	[        XR(                  5      (       d#  U	R)                  XR                   R*                  S9nU R                   R                  R-                  USS9n[        UR                  5      S:X  at  [/        U S[        UR                  S   5       Vs/ s H  o‡SUSS4   PM     sn5      U l        [        UR                  S   5       Vs/ s H  o‡SS2USS2SS24   PM     sn$ [/        U SUS   5      U l        USS2SS2SS24   $ U R1                  XUS
5      u  pp«p<[3        S5        ["        R4                  " UR                  S   UR                  S   S-   UR                  S   S-   U R                   R6                  45      n[8        R:                  " U R                   R<                  U R                   R>                  U R                   R@                  U R                   RB                  U R                   RD                  U R                   RF                  U R                   RH                  U R                   RJ                  U R                   RL                  UU
UU RN                  U RP                  UU R                   RR                  U[T        U R                     [V        U   S	5        U RY                  X{5      $ s  snf s  snf s  snf )a!  Estimate the SHAP interaction values for a set of samples.

Parameters
----------
X : numpy.array, pandas.DataFrame or catboost.Pool (for catboost)
    A matrix of samples (# samples x # features) on which to explain the model's output.

y : numpy.array
    An array of label values for each sample. Used when explaining loss functions (not yet supported).

tree_limit : None (default) or int
    Limit the number of trees used by the model. By default, the limit of the original model
    is used (``None``). ``-1`` means no limit.

Returns
-------
np.array
    Returns a matrix. The shape depends on the number of model outputs:

    * one output: matrix of shape (#num_samples, #features, #features).
    * multiple outputs: matrix of shape (#num_samples, #features, #features, #num_outputs).

    The matrix (#num_samples, # features, # features) for each sample sums
    to the difference between the model output for that sample and the expected value of the model output
    (which is stored in the ``expected_value`` attribute of the explainer). Each row of this matrix sums to the
    SHAP value for that feature for that sample. The diagonal entries of the matrix represent the
    "main effect" of that feature on the prediction. The symmetric off-diagonal entries represent the
    interaction effects between all pairs of features for that sample.
    For models with vector outputs, this returns a list of tensors, one for each output.

    .. versionchanged:: 0.45.0
        Return type for models with multiple outputs changed from list to np.ndarray.

rH   zMOnly model_output = "raw" is supported for SHAP interaction values right now!r   Nr8   r?   r   r   TF)r°   Úpred_interactionsr³   é   r   r   )Úaxis1Úaxis2)r   r8   r8   r¹   rº   r»   ÚShapInteractionValuesr¾   rh   r   )-rC   rj   r:   r@   rg   r?   rU   rÀ   rÁ   r=   r;   rÂ   rq   rs   rd   rÆ   rh   r   Úswapaxesr¹   rÄ   rA   rÅ   ra   r«   r	   rÉ   rÊ   r   rË   rÌ   rÍ   rÎ   rÏ   rÐ   rÑ   rb   rP   rÒ   r_   rf   rv   rÓ   rÔ   Ú_get_shap_interactions_output)rw   r‘   r�   r:   rÝ   r?   r<   rØ   rÛ   r¹   rª   r©   Ú_s                r/   rŽ   Ú%TreeExplainer.shap_interaction_valuesÅ  s  € ðF �z‰z×&Ñ&¨%Ó/ð 	
Ø[ó	
Ð/ð ˆ	ð ÑØ#Ÿz™z×4Ñ4Ñ<™À$Ç*Á*×BWÑBWˆJð �:‰:× Ñ  IÔ-°$×2KÑ2KÐOdÔ2dÛä˜a§¡×!5Ñ!5×6Ñ6Ø—O‘O AÓ&�ä0°¿Z¹Z×=ZÑ=ZÓ[ˆLØ—*‘*×+Ñ+×3Ñ3Ø A |Ð#4ÈÐ`eð 4ð ˆCô �3—9‘9‹~ Ó"ÜBGÈÏ	É	ÐRSÉÔBUÓ&VÒBU¸Q¨1¨a°°R¨<Ô'8ÑBUÑ&V�Ô#ô —{’{ 3¢qª!¨S¨b¨S°#°2°# ~Ñ#6¸aÀqÑIÐIð '*¨)¡n�Ô#Øš1˜c˜r˜c 3 B 3˜;Ñ'Ð'Ø�j‰j×#Ñ# zÔ1Ø×%Ñ%Ð)>Ô>à Ó#Ð[Ð%[Ó[Ð#Ûä˜a§¡×/Ñ/Ø—M‘M !·*±*×2PÑ2P�MÐQ�Ø—*‘*×+Ñ+×BÑBÈÐUlÐBÐmˆCä�3—9‘9‹~ Ó"Ü&-¨dÐ4DÔbgÐhk×hqÑhqÐrsÑhtÔbuÓFvÒbuÐ]^È1ÈaÐQSÐUWÈ<ÔGXÑbuÑFvÓ&w�Ô#Ü5:¸3¿9¹9ÀQ¹<Ô5HÓIÒ5H°šA˜q # 2 # s¨ s˜NÔ+Ñ5HÑIÐIä&-¨dÐ4DÀcÈ)ÁnÓ&U�Ô#Øš1˜c˜r˜c 3 B 3˜;Ñ'Ð'à6:×6KÑ6KÈAÐR\Ð^cÓ6dÑ3ˆˆi jä�fÔÜ�hŠh˜Ÿ™ ™
 A§G¡G¨A¡J°¡N°A·G±G¸A±JÀ±NÀDÇJÁJ×DZÑDZÐ[Ó\ˆÜ×ÒØ�J‰J×$Ñ$Ø�J‰J×%Ñ%Ø�J‰J×'Ñ'Ø�J‰J×ÑØ�J‰J×!Ñ!Ø�J‰J×&Ñ&Ø�J‰J×ÑØ�J‰J×)Ñ)Ø�J‰J× Ñ ØØØØ�I‰IØ×ÑØØ�J‰J×"Ñ"ØÜ& t×'@Ñ'@ÑAÜ" 9Ñ-Øô)	
ð. ×1Ñ1°#ÓCÐCùòi 'Wùò& GwùÚIs   Ä5RÉ$R
ÊRc           
     ó„  • U R                   R                  S:X  a=  [        U SUS   5      U l        U(       a  USSS2SS2S4   nU$ USS2SS2SS2S4   n U$ [	        UR
                  S   5       Vs/ s H  oASSSU4   PM     snU l        U(       aO  [        R                  " [	        U R                   R                  5       Vs/ s H  oASSS2SS2U4   PM     snSS9nU$ [        R                  " [	        U R                   R                  5       Vs/ s H  oASS2SS2SS2U4   PM     snSS9nU$ s  snf s  snf s  snf )	z:Pull off the last column and keep it as our expected_valuer   rh   )r   r8   r8   r   r   Nr8   r   r‡   )rC   rÊ   ra   rh   rÆ   rd   r   r�   rà   s        r/   ré   Ú+TreeExplainer._get_shap_interactions_output7  sK  € à�:‰:×!Ñ! QÓ&ä")¨$Ð0@À#ÀlÑBSÓ"TˆDÔÞØ˜!˜S˜b˜S # 2 # q˜.Ñ)�ð ˆ
ð š!˜S˜b˜S # 2 # q˜.Ñ)‘ð ˆ
ô ?DÀCÇIÁIÈaÁLÔ>QÓ"RÒ>Q¸ q¨"¨b°! |Ô#4Ñ>QÑ"RˆDÔÞÜ—h’h¼UÀ4Ç:Á:×CYÑCYÔ=ZÓ[Ò=Z¸ A s¨ s¨C¨R¨C° NÔ 3Ñ=ZÑ[ÐbdÑe�ð ˆ
ô —h’h¼UÀ4Ç:Á:×CYÑCYÔ=ZÓ[Ò=Z¸¢A s¨ s¨C¨R¨C° NÔ 3Ñ=ZÑ[ÐbdÑe�Øˆ
ùò #Sùâ[ùâ[s   Á2D3ÃD8ÄD=c                ó   ^ • U 4S jn[        U[        5      (       aM  [        [        U5      5       H4  nU" T R                  U   X   R                  S5      -   US S 2U4   5        M6     g U" T R                  UR                  S5      -   U5        g )Nc                ó   >• [         R                  " X-
  5      n[         R                  " XSSS9(       dJ  [         R                  " U5      nSnTR                  S:w  a  US-  nUSX   S SX   S S	3-  n[        U5      eg )
Ng{®Gáz„?)ÚatolÚrtolzÕAdditivity check failed in TreeExplainer! Please ensure the data matrix you passed to the explainer is the same shape that the model was trained on. If your data shape is correct then please report this on GitHub.r   zI Consider retrying with the feature_perturbation='interventional' option.zQ This check failed because for one of the samples the sum of the SHAP values was Úfz, while the model output was z\. If this difference is acceptable you can set check_additivity=False to disable this check.)r   ÚabsÚallcloseÚargmaxrg   r   )Úsum_valrj   ÚdiffÚindÚerr_msgrw   s        €r/   Ú	check_sumÚ2TreeExplainer.assert_additivity.<locals>.check_sumI  s    ø€ Ü—6’6˜'Ñ0Ó1ˆDô —;’;˜w¸4Àd×KÜ—i’i “o�ð9ð ð
 ×,Ñ,Ð0@Ó@ØÐjÑj�GØðØ#™L¨Ð+Ð+HÈÑIZÐ[\ÐH]ð ^jðjñ�ô
 % WÓ-Ð-ð Lr1   r8   )rU   rX   rÆ   rs   rh   rt   )rw   rØ   rj   rú   rÛ   s   `    r/   rÇ   ÚTreeExplainer.assert_additivityH  sx   ø€ õ	.ô( �cœ4× Ñ Üœ3˜s›8–_�Ù˜$×-Ñ-¨aÑ0°3±6·:±:¸b³>ÑAÀ<ÒPQÐSTÐPTÑCUÖVò %ñ �d×)Ñ)¨C¯G©G°B«KÑ7¸ÕFr1   c                ó‚   • [        U[        R                  5      (       d  Ub  g [        U 5        g! [         a     gf = f)z†Determines if this explainer can handle the given model.

This is an abstract static method meant to be implemented by each subclass.
FT)rU   r   r^   ri   rn   )rC   r]   s     r/   Úsupports_model_with_maskerÚ(TreeExplainer.supports_model_with_maskerc  sE   € ô ˜&¤7×#6Ñ#6×8Ñ8¸VÑ=OØð	Ü˜Ôð øô ó 	Ùð	ús   ¥1 ±
>½>)r_   rT   rf   rh   rg   rC   rj   )NFTF)r‘   r   r�   únp.ndarray | pd.Series | Noner’   r¦   r†   r¦   rx   r¦   Úreturnr   )NNFTF)r‘   r   r�   r   r:   z
int | Nonerx   r¦   r†   r¦   r…   r¦   ©NN)Ú__name__r$   Ú__qualname__Ú__firstlineno__Ú__doc__rR   r[   rp   r—   r«   rŒ   rÖ   rŽ   ré   rÇ   Ústaticmethodrþ   Ú__static_attributes__Ú__classcell__©r#   s   @r/   rF   rF   r   s  ø† ñð  ØØ#ØØ%àØ÷KQòZVð ,0Ø"Ø!%Ø!ð`
àð`
ð )ð`
ð ð	`
ð
 ð`
ð ð`
ð 
õ`
òD7Jðx ,0Ø!%Ø!Ø!%ØðAàðAð )ðAð ð	Að
 ðAð ðAð õAòFô,pDòdò"Gð6 ñó ör1   rF   c                  óL   • \ rS rSrSrS
S jrS r\SS j5       rS r	S
S jr
S	rg)ri   is  zkAn ensemble of decision trees.

This object provides a common interface to many different types of models.
Nc                óøF  • SU l         S U l        SU l        X@l        S U l        S U l        [        R                  U l        [        R                  U l	        X l
        X0l        SU l        S U l        SU l        S U l        SSSSSSSSSSSSSSS.nS	SS	S	S
S
S
S
S.n[!        U["        5      (       a{  SU;   au  SU;   a
  US   U l        SU;   a
  US   U l	        SU;   a
  US   U l        SU;   a
  US   U l        SU;   a
  US   U l        US    Vs/ s H  n[%        XrUS9PM     snU l        GO,[!        U[&        5      (       a   [!        US   [$        5      (       a  Xl        GO÷[)        U/ SQ5      (       aà  [+        US5      (       d   S5       eUR,                  S   R.                  R0                  R2                  R4                  U l        [        R6                  U l	        S[9        UR,                  5      -  nUR,                   V	s/ s H  n	[%        U	R.                  X‚US9PM     sn	U l        UR;                  UR<                  S 5      U l        S	U l        GO[)        USS/5      (       aƒ  [        R6                  U l        S[9        UR,                  5      -  n[?        UR,                  UR@                  5       V	V
s/ s H  u  pš[C        U	R.                  X¨X#S9PM     sn
n	U l        S	U l        GOn[)        US/5      (       a—  [        R6                  U l        S[9        UR,                  5      -  n[?        URD                  R,                  URD                  R@                  5       V	V
s/ s H  u  pš[C        U	R.                  X¨X#S9PM     sn
n	U l        S	U l        GOÅ[)        U/ SQ5      (       aà  [+        US5      (       d   S5       eUR,                  S   R.                  R0                  R2                  R4                  U l        [        R6                  U l	        S[9        UR,                  5      -  nUR,                   V	s/ s H  n	[%        U	R.                  X‚US9PM     sn	U l        UR;                  UR<                  S 5      U l        S	U l        GOÒ[)        U/ SQ5      (       aˆ  UR.                  R0                  R2                  R4                  U l        [        R6                  U l	        [%        UR.                  X#S9/U l        UR;                  UR<                  S 5      U l        S	U l        GO7[)        USS/5      (       a‰  UR.                  R0                  R2                  R4                  U l        [        R6                  U l	        [%        UR.                  SX#S9/U l        UR;                  UR<                  S 5      U l        S U l        GO›[)        U/ S!Q5      (       aá  [+        US5      (       d   S5       eUR,                  S   R.                  R0                  R2                  R4                  U l        [        R6                  U l	        S[9        UR,                  5      -  nUR,                   V	s/ s H  n	[%        U	R.                  SX‚US"9PM     sn	U l        UR;                  UR<                  S 5      U l        S U l        GO§[)        US#S$/5      (       GaT  [        R6                  U l	        [)        URF                  S%S&/5      (       a  URF                  RH                  U l        O–[)        URF                  S'S(/5      (       a  URF                  RJ                  U l        O][)        URF                  S)5      (       a  URF                  RL                  S   U l        O#S*[5        URF                  5       3n[O        U5      eUR,                  S S 2S4    V	s/ s H"  n	[%        U	R.                  URP                  X#S9PM$     sn	U l        UR;                  UR<                  S 5      U l        S	U l        GO?[)        US+/5      (       GaU  SS K)nU R                  S,:X  a  S-U l        URT                  RV                  RX                  RZ                  U l	        UR\                  U l        / U l        UR^                   GH¸  nUS   R`                  n[        Rb                  " U Vs/ s H  oÿS.   (       a  S/OUS0   PM     sn5      [        Rb                  " U Vs/ s H  oÿS.   (       a  S/OUS1   PM     sn5      [        Rb                  " U Vs/ s H"  oÿS.   (       a  S/OUS2   (       a  US0   OUS1   PM$     sn5      [        Rb                  " U Vs/ s H  oÿS.   (       a  S3OUS4   PM     sn5      [        Rb                  " U Vs/ s H  oÿS5   PM	     sn[        R                  S69[        Rb                  " U Vs/ s H  oÿS   /PM
     sn[        R                  S69[        Rb                  " U Vs/ s H  oÿS   PM	     sn[        R                  S69S7.nU R                  Re                  [%        UX#S95        GM»     UR;                  URf                  S 5      U l        S	U l        GO×[)        US8/5      (       Ga  SS K)nUR\                  U l        [+        U R                  S95      nU(       a0  U R                  Rh                  S::X  a  U R                  S;   U l        S<nU(       a  U R                  S-:w  a  S=n[k        U5      eURT                  RV                  RX                  RZ                  U l	        [9        UR^                  S   5      U l        U R                  S>:X  a  U R                  S:X  a  S?U l        OS U l        / U l        UR^                   GHÖ  n[m        U R                  5       GH¸  nUU   R`                  n[        Rb                  " U Vs/ s H  oÿS.   (       a  S/OUS0   PM     sn5      [        Rb                  " U Vs/ s H  oÿS.   (       a  S/OUS1   PM     sn5      [        Rb                  " U Vs/ s H"  oÿS.   (       a  S/OUS2   (       a  US0   OUS1   PM$     sn5      [        Rb                  " U Vs/ s H  oÿS.   (       a  S3OUS4   PM     sn5      [        Rb                  " U Vs/ s H  oÿS5   PM	     sn[        R                  S69[        Rb                  " U Vs/ s H  oÿS   /PM
     sn[        R                  S69[        Rb                  " U Vs/ s H  oÿS   PM	     sn[        R                  S69S7.nU R                  Re                  [%        UX#S95        GM»     GMÙ     UR;                  URf                  S 5      U l        S
U l        GO«[)        U/ S@Q5      (       Gai  [        R6                  U l	        UR,                  Rh                  S   S:”  a  SAn[O        U5      e[)        URF                  SBSC/5      (       a#  URF                  Rn                  U l        S
U l        O�[)        URF                  SD5      (       aC  [p        Rr                  Ru                  URF                  Rv                  S   5      U l        S
U l        O#S*[5        URF                  5       3n[O        U5      eUR,                  S S 2S4    V	s/ s H"  n	[%        U	R.                  URP                  X#S9PM$     sn	U l        UR;                  UR<                  S 5      U l        GO.SE[y        [5        U5      5      ;   Ga‡  [{        SF5        SFU l         UR;                  UR|                  R                  5       S 5      U l        SG[y        [5        U5      5      ;   a
  SnS U l        O	S<nS	U l        [)        USHSI/5      (       a`  [�        UR‚                  5      n[…        UR                  5       VVs/ s H!  u  nn[%        UUUR‚                  U   U-  SJ9PM#     snnU l        GO6[)        USKSL/5      (       aV  SU l        S	U l        […        UR                  5       VVs/ s H  u  nn[%        US<UR‚                  U   SJ9PM      snnU l        G
OÍ[)        USMSN/5      (       a  [%        UUSSJ9/U l        G
O§SO[5        U5       3n[k        U5      e[)        USP5      (       a  XlC        U R‰                  UUUU5        G
Oa[)        USQ5      (       a  [        R6                  U l	        UR‹                  5       U lC        U R‰                  UUUU5        U R                  S>:X  a  U R                  S:X  a  S?U l        OS U l        [�        U5      U lG        G	OÑ[)        USRSS/5      (       a;  UR‹                  5       U lC        U R‰                  UUUU5        [�        U5      U lG        G	Oƒ[)        UST5      (       aº  [{        SU5        SUU l         XlC        U R†                  R‘                  5       SV   n U V	s/ s H  n	[%        X’US9PM     sn	U l        UR;                  UR”                  R;                  SSW5      S 5      U l        UR;                  UR”                  R;                  SSW5      S 5      U l        GO¸[)        USX5      (       aº  [{        SY5        SYU l         XlC        U R†                  R‘                  5       SV   n U V	s/ s H  n	[%        X’US9PM     sn	U l        UR;                  UR”                  R;                  SSW5      S 5      U l        UR;                  UR”                  R;                  SSW5      S 5      U l        GOí[)        USZ5      (       aÀ  [{        SU5        SUU l         UR–                  U lC        U R†                  R‘                  5       SV   n U V	s/ s H  n	[%        X’US9PM     sn	U l        UR;                  UR                  S 5      U l        UR;                  UR                  S 5      U l        UR                  c  SU l        S	U l        GO[)        US[5      (       ac  [{        SU5        SUU l         UR–                  U lC        U R†                  R‘                  5       SV   n U V	s/ s H  n	[%        X’US9PM     sn	U l        GO¨[)        US\5      (       aá  [{        SU5        SUU l         UR˜                  S4:”  a  UR˜                  U l        UR–                  U lC        U R†                  R‘                  5       SV   n U V	s/ s H  n	[%        X’US9PM     sn	U l        UR;                  UR                  S 5      U l        UR;                  UR                  S 5      U l        UR                  c  SU l        S
U l        GO¶[)        US]5      (       aO  [{        S^5        S^U l         XlC        UR›                  5       U l         [�        U5      nURŸ                  X#S9U l        GOV[)        US_5      (       ar  [{        S^5        S^U l         XlC        [        R6                  U l	         [�        U5      nURŸ                  X#S9U l        S
U l        SU l        UR›                  5       U l        GOÓ[)        US`5      (       a/  [{        S^5        S^U l         XlC        UR›                  5       U l        GO“[)        USa5      (       a�  [        R6                  U l	        S[9        UR,                  5      -  nUR,                   V	s/ s H  n	[%        U	R.                  SX‚US"9PM     sn	U l        UR;                  UR<                  S 5      U l        S U l        GOõ[)        U/ SbQ5      (       GaÁ  UR                   (       d   Sc5       eU R                  S-:X  a  Sn[¢        R¤                  " Sd5        O2[!        U R                  [¦        5      (       a  U R                  nS-U l        [)        UR                   S   W   SeSf/5      (       d   Sg5       eUR                    Vs/ s H  nUU   PM
     nnUS   R.                  R0                  R2                  R4                  U l        [        R6                  U l	        URP                  * [        Rb                  " UR¨                  5      -  nURª                   VVs/ s H1  n[m        UR¬                  5       Vs/ s H  nUU;  d  M  UPM     snPM3     nnn[?        URª                  U5       VVVVs/ s H4  u  nn[…        ['        U5      U-   5       VVs0 s H	  u  nnUU_M     snnPM6     nnnnn/ U l        […        U5       GH”  u  nn U R.                  n!U!R0                  R¯                  U!R0                  Rh                  S   U!R0                  Rh                  S   U!R0                  Rh                  S4   -  5      n"U"UU   -  n"U!R°                  R³                  [        R´                  5      U!R¶                  R³                  [        R´                  5      U!R°                  [        Rb                  " U!R¸                   Vs/ s H  nUU   R;                  UU5      PM     sn5      U!Rº                  R³                  [        R                  5      U"U!R¼                  R³                  [        R                  5      S7.nU R                  Re                  [%        UX#S95        GM—     UR;                  US   R<                  S 5      U l        S	U l        UR¾                  U   U l        O [O        Sh[y        [5        U5      5      -   5      eU R                  Gb   U R                  (       Ga�  [        RÀ                  " U R                   Vs/ s H  n[9        URÂ                  5      PM     sn5      n#[9        [        RÄ                  " U R                   Vs/ s H  owRÂ                  Rh                  S   PM     sn5      5      S:X  d   Si5       e[9        U R                  5      n$[        RÆ                  " U$U#4[        R´                  S69* U lX        [        RÆ                  " U$U#4[        R´                  S69* U l[        [        RÆ                  " U$U#4[        R´                  S69* U ld        [        RÆ                  " U$U#4[        R´                  S69* U le        [        RÌ                  " U$U#4U R                  S69U lg        [        RÌ                  " U$U#4[        R´                  S69U lh        [        RÌ                  " U$U#U RÒ                  4U R                  S69U la        [        RÌ                  " U$U#4U R                  S69U lj        [m        U$5       GH  nU R                  U   R°                  U R°                  US [9        U R                  U   R°                  5      24'   U R                  U   R¶                  U R¶                  US [9        U R                  U   R¶                  5      24'   U R                  U   RÈ                  U RÈ                  US [9        U R                  U   RÈ                  5      24'   U R                  U   RÊ                  U RÊ                  US [9        U R                  U   RÊ                  5      24'   U R                  U   RÎ                  U RÎ                  US [9        U R                  U   RÎ                  5      24'   U R                  U   RÐ                  U RÐ                  US [9        U R                  U   RÐ                  5      24'   U R                   Sj:X  a  U RÒ                  n%OU R                  n%U%S:”  a_  UU%-  n&U R                  U   RÂ                  S S 2S4   U RÂ                  US [9        U R                  U   RÂ                  S S 2S4   5      2U&4'   OJU R                  U   RÂ                  U RÂ                  US [9        U R                  U   RÂ                  5      24'   U R                  U   RÔ                  U RÔ                  US [9        U R                  U   RÔ                  5      24'   [        RÖ                  " U R                  U   RÔ                  5      S::  d  GM  S<U l        GM      [        Rb                  " U R                   Vs/ s H  n[9        URÂ                  5      PM     sn[        R´                  S69U ll        [        RÀ                  " U R                   Vs/ s H  owRÚ                  PM     sn5      U lm        [+        U R                  S95      (       a  [9        U R                  5      S:X  aK  [        RÆ                  " U RÒ                  5      U R                  -  R³                  U R                  5      U l        U R                  RÝ                  5       U l        [9        U R                  5      U RÒ                  :X  d   eg g g s  snf s  sn	f s  sn
n	f s  sn
n	f s  sn	f s  sn	f s  sn	f s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  sn	f s  snnf s  snnf s  sn	f ! [’         a    S U l         GN`f = fs  sn	f ! [’         a    S U l         GN²f = fs  sn	f ! [’         a    S U l         GNùf = fs  sn	f ! [’         a    S U l         GN›f = fs  sn	f ! [’         a    S U l         GNÍf = f! [’         a    S U l         GNÐf = f! [’         a    S U l         GNàf = fs  sn	f s  snf s  snf s  snnf s  snnf s  snnnnf s  snf s  snf s  snf s  snf s  snf )kNr®   r   Tr   Úsquared_errorÚabsolute_errorÚbinary_crossentropy)ÚmseÚvarianceÚfriedman_mseú
reg:linearúreg:squarederrorÚ
regressionÚregression_l2ÚmaeÚginiÚentropyúreg:logisticúbinary:logisticÚbinary_loglossr¸   Ú	raw_valueÚlog_odds)r  r  r  r  r  r  r  r¸   ÚtreesÚinternal_dtyper£   rl   rm   rv   ©r_   rf   )z&sklearn.ensemble.RandomForestRegressorz-sklearn.ensemble.forest.RandomForestRegressorzeconml.grf._base_grf.BaseGRFz3causalml.inference.tree.CausalRandomForestRegressorÚestimators_z8Model has no `estimators_`! Have you called `model.fit`?ç      ð?)Úscalingr_   rf   z sklearn.ensemble.IsolationForestz)sklearn.ensemble._iforest.IsolationForestzpyod.models.iforest.IForest)z$sklearn.ensemble.ExtraTreesRegressorz+sklearn.ensemble.forest.ExtraTreesRegressorz+skopt.learning.forest.RandomForestRegressorz)skopt.learning.forest.ExtraTreesRegressor)ú"sklearn.tree.DecisionTreeRegressorú'sklearn.tree.tree.DecisionTreeRegressorz econml.grf._base_grftree.GRFTreez=causalml.inference.tree.causal.causaltree.CausalTreeRegressorz#sklearn.tree.DecisionTreeClassifierz(sklearn.tree.tree.DecisionTreeClassifier)Ú	normalizer_   rf   Úprobability)z%sklearn.ensemble.ExtraTreesClassifierz,sklearn.ensemble.forest.ExtraTreesClassifierz'sklearn.ensemble.RandomForestClassifierz.sklearn.ensemble.forest.RandomForestClassifier)r'  r$  r_   rf   z*sklearn.ensemble.GradientBoostingRegressorz<sklearn.ensemble.gradient_boosting.GradientBoostingRegressorzsklearn.ensemble.MeanEstimatorz0sklearn.ensemble.gradient_boosting.MeanEstimatorz"sklearn.ensemble.QuantileEstimatorz4sklearn.ensemble.gradient_boosting.QuantileEstimatorzsklearn.dummy.DummyRegressorzUnsupported init model type: z.sklearn.ensemble.HistGradientBoostingRegressorrq   rH   é	   r8   é   é   rä   éþÿÿÿr   r   rš   )rÌ   rÍ   rÎ   rÏ   rÐ   rb   rP   z/sklearn.ensemble.HistGradientBoostingClassifierrO   )r   r   )r   r   Fz{Multi-output HistGradientBoostingClassifier models are not yet supported unless model_output="raw". See GitHub issue #1028.Úpredict_probarQ   )z+sklearn.ensemble.GradientBoostingClassifierz/sklearn.ensemble._gb.GradientBoostingClassifierz=sklearn.ensemble.gradient_boosting.GradientBoostingClassifierzQGradientBoostingClassifier is only supported for binary classification right now!z!sklearn.ensemble.LogOddsEstimatorz3sklearn.ensemble.gradient_boosting.LogOddsEstimatorzsklearn.dummy.DummyClassifierz
pyspark.mlr   ÚClassificationz9pyspark.ml.classification.RandomForestClassificationModelz1pyspark.ml.regression.RandomForestRegressionModel)r'  r$  z0pyspark.ml.classification.GBTClassificationModelz(pyspark.ml.regression.GBTRegressionModelú9pyspark.ml.classification.DecisionTreeClassificationModelú1pyspark.ml.regression.DecisionTreeRegressionModelzUnsupported Spark model type: zxgboost.core.Boosterzxgboost.sklearn.XGBClassifierzxgboost.sklearn.XGBRegressorzxgboost.sklearn.XGBRankerzlightgbm.basic.Boosterrµ   Ú	tree_infor  zgpboost.basic.BoosterÚgpboostzlightgbm.sklearn.LGBMRegressorzlightgbm.sklearn.LGBMRankerzlightgbm.sklearn.LGBMClassifierzcatboost.core.CatBoostRegressorr¹   z catboost.core.CatBoostClassifierzcatboost.core.CatBoostz8imblearn.ensemble._forest.BalancedRandomForestClassifier)zngboost.ngboost.NGBoostzngboost.api.NGBRegressorzngboost.api.NGBClassifierzGThe NGBoost model has empty `base_models`! Have you called `model.fit`?z�Translating model_output="raw" to model_output=0 for the 0-th parameter in the distribution. Use model_output=0 directly to avoid this warning.r%  r&  z"You must use default_tree_learner!z/Model type not yet supported by TreeExplainer: z>All trees in the ensemble must have the same output dimension!r?   )or@   r  rv   rj   rl   rm   r   Úfloat64r   r£   r_   rf   r¨   r:   r;   rA   rU   ÚdictÚ
SingleTreerX   r   r&   r"  Útree_Úvaluer›   r\   Úfloat32rs   r(   Ú	criterionÚzipÚestimators_features_ÚIsoTreeÚ	detector_Úinit_rr   ÚquantileÚ	constant_r   Úlearning_rateÚsklearnÚensembleÚ_hist_gradient_boostingÚcommonÚX_DTYPEÚ_baseline_predictionÚ_predictorsÚnodesÚarrayÚappendÚlossrd   rB   rÆ   ÚpriorÚscipyÚspecialÚlogitÚclass_prior_r`   r	   Ú	_java_objÚgetImpurityrt   ÚtreeWeightsÚ	enumeraterÂ   Ú_set_xgboost_model_attributesÚget_boosterÚget_xgboost_dmatrix_propertiesr¯   Ú
dump_modelrn   rÃ   Úbooster_Ú
n_classes_Úget_cat_feature_indicesÚCatBoostTreeModelLoaderÚ	get_treesÚbase_modelsr)   r*   ÚintÚscalingsÚcol_idxsÚ
n_featuresr¢   rÌ   r¤   Úint32rÍ   ÚfeatureÚ	thresholdÚweighted_n_node_samplesÚinit_paramsÚmaxrb   Úuniquer€   rÎ   rÏ   rÉ   rÐ   rÑ   rÊ   rP   ÚminÚ	num_nodesrÒ   Úflatten)'rw   rC   r_   rf   rj   Úobjective_name_mapÚtree_output_name_mapÚtr$  rÚ   rò   r|   rB  ÚprI  ÚnÚtreeÚhas_lenrÛ   r'  Ú
sum_weightr1  Ú	cb_loaderÚ	param_idxr  Ú
shap_treesÚcol_idxÚmissing_col_idxsrb  Úmissing_col_idxÚfeature_mappingÚidxÚ	shap_treer6  rb   Ú	max_nodesÚ	num_treesÚn_stacksÚ	stack_poss'                                          r/   r[   ÚTreeEnsemble.__init__y  sr  € Ø$ˆŒØˆŒ
ØˆÔØ(ÔØˆŒØˆÔÜ Ÿj™jˆÔä�J‰Jð 	Ôð Œ	Ø(Ôàð 	Ô$ð ˆŒØ"#ˆÔØ#'ˆÔ ð #Ø'Ø+Ø)Ø /Ø)Ø,Ø#Ø)Ø,Ø1Ø4Ø3Ø+ñ
Ðð$ &Ø,Ø%Ø +Ø&Ø)Ø(Ø ñ	 
Ðô �eœT×"Ñ" w°%Ó'7ð   5Ó(Ø&+Ð,<Ñ&=�Ô#Ø Ó%Ø#(¨Ñ#7�Ô Ø˜eÓ#Ø!& {Ñ!3�”Ø Ó%Ø#(¨Ñ#7�Ô Ø Ó%Ø#(¨Ñ#7�Ô ØW\Ð]dÒWeÓfÒWeÐRSœ* QÀÔMÑWeÑfˆDŽJÜ˜œt×$Ñ$¬°E¸!±H¼j×)IÑ)IØŽJÜØò÷
ñ 
ô ˜5 -×0Ñ0ÐlÐ2lÓlÐ0Ø"'×"3Ñ"3°AÑ"6×"<Ñ"<×"BÑ"B×"HÑ"H×"MÑ"MˆDÔÜ!Ÿz™zˆDÔØœC × 1Ñ 1Ó2Ñ2ˆGàdi×duÒduóÚduÐ_`”
˜1Ÿ7™7¨GÈ\ÔZÑduñˆDŒJð 0×3Ñ3°E·O±OÀTÓJˆDŒNØ*ˆDÖÜØà2Ø;ð÷
ñ 
ô Ÿ™ˆDŒJØœC × 1Ñ 1Ó2Ñ2ˆGô   × 1Ñ 1°5×3MÑ3MÔNôâN‘D�Aô ˜Ÿ™ ¸$ÔZÙNòˆDŒJð  +ˆDÖÜ˜UÐ%BÐ$C×DÑDÜŸ™ˆDŒJØœC × 1Ñ 1Ó2Ñ2ˆGô   §¡× ;Ñ ;¸U¿_¹_×=aÑ=aÔbôâb‘D�Aô ˜Ÿ™ ¸$ÔZÙbòˆDŒJð  +ˆDÖÜØò÷
ñ 
ô ˜5 -×0Ñ0ÐlÐ2lÓlÐ0Ø"'×"3Ñ"3°AÑ"6×"<Ñ"<×"BÑ"B×"HÑ"H×"MÑ"MˆDÔÜ!Ÿz™zˆDÔØœC × 1Ñ 1Ó2Ñ2ˆGàdi×duÒduóÚduÐ_`”
˜1Ÿ7™7¨GÈ\ÔZÑduñˆDŒJð 0×3Ñ3°E·O±OÀTÓJˆDŒNØ*ˆDÖÜØò÷
ñ 
ð #(§+¡+×"3Ñ"3×"9Ñ"9×">Ñ">ˆDÔÜ!Ÿz™zˆDÔÜ$ U§[¡[°tÑWÐXˆDŒJØ/×3Ñ3°E·O±OÀTÓJˆDŒNØ*ˆDÖÜØà5Ø:ð÷
ñ 
ð #(§+¡+×"3Ñ"3×"9Ñ"9×">Ñ">ˆDÔÜ!Ÿz™zˆDÔÜ$ U§[¡[¸DÀtÑgÐhˆDŒJØ/×3Ñ3°E·O±OÀTÓJˆDŒNØ,ˆDÖÜØò÷
ñ 
ô ˜5 -×0Ñ0ÐlÐ2lÓlÐ0Ø"'×"3Ñ"3°AÑ"6×"<Ñ"<×"BÑ"B×"HÑ"H×"MÑ"MˆDÔÜ!Ÿz™zˆDÔØœC × 1Ñ 1Ó2Ñ2ˆGð ×*Ò*óâ*�Aô ˜1Ÿ7™7¨d¸GÐ]iÔjÙ*ñˆDŒJð 0×3Ñ3°E·O±OÀTÓJˆDŒNØ,ˆDÖÜØà<ØNð÷
ò 
ô  "Ÿz™zˆDÔô Ø—‘à4ØFð÷ñ ð $)§;¡;×#3Ñ#3�Õ Ü Ø—‘à8ØJð÷ñ ð $)§;¡;×#7Ñ#7�Õ Ü  §¡Ð.L×MÑMØ#(§;¡;×#8Ñ#8¸Ñ#;�Õ à6´t¸E¿K¹KÓ7HÐ6IÐJ�Ü'¨Ó-Ð-ð ×*Ñ*ª1¨a¨4Ò0óâ0�Aô ˜1Ÿ7™7¨E×,?Ñ,?ÀdÔfÙ0ñˆDŒJð 0×3Ñ3°E·O±OÀTÓJˆDŒNØ*ˆDÖÜ˜UÐ%UÐ$V×WÒWãà× Ñ  IÓ-Ø$)�Ô!Ø&×/Ñ/×GÑG×NÑN×VÑVˆDÔØ$×9Ñ9ˆDÔØˆDŒJØ×&Õ&�Ø˜!™Ÿ
™
�ô &(§X¢XÉUÓ.SÊUÈ°q·T©r¸qÀ¹tÒ/CÉUÑ.SÓ%TÜ&(§h¢hÉeÓ/TÊeÈ¸·d±ÀÀ!ÁÒ0DÉeÑ/TÓ&UÜ(*¯ªÑdiÓ1jÒdiÐ_`¸!¿±"È1ÈQÏ4À1ÀQÂ4ÐUVÐWXÑUYÒ2ZÑdiÑ1jÓ(kÜ "§¢ÉÓ)NÊÀ1°!·©"¸!¸A¹$Ò*>ÉÑ)NÓ OÜ"$§(¢(¹%Ó+@º%°Q¨a¬D¹%Ñ+@ÌÏ
É
Ñ"SÜ Ÿhšh¹Ó'>º°1¨1©«¹Ñ'>ÄbÇjÁjÑQÜ*,¯(ª(Á%Ó3HÂ%¸Q°a´DÁ%Ñ3HÔPR×PZÑPZÑ*[ñ�ð —
‘
×!Ñ!¤*¨T¸Ñ"X×Yñ 'ð 0×3Ñ3°E·J±JÀÓEˆDŒNØ*ˆDÖÜ˜UÐ%VÐ$W×XÒXãà$×9Ñ9ˆDÔÜ˜d×.Ñ.°	Ó:ˆGæ˜4×+Ñ+×1Ñ1°VÓ;Ø#'×#3Ñ#3°DÑ#9�Ô Ø�Þ˜4×,Ñ,°Ó5ðBð ô *¨$Ó/Ð/Ø&×/Ñ/×GÑG×NÑN×VÑVˆDÔÜ&)¨%×*;Ñ*;¸AÑ*>Ó&?ˆDÔ#Ø× Ñ  OÓ3Ø×*Ñ*¨aÓ/à-ð Õ%ð )6�DÔ%ØˆDŒJØ×&Õ&�Ü˜t×6Ñ6×7�AØ˜a™DŸJ™J�Eô *,¯ªÑQVÓ2WÒQVÈA¸1¿±2À1ÀQÁ4Ò3GÑQVÑ2WÓ)XÜ*,¯(ª(ÑRWÓ3XÒRWÈQ¸A¿$±BÀAÀaÁDÒ4HÑRWÑ3XÓ*YÜ,.¯HªHÑhmÓ5nÒhmÐcd¸a¿D±bÈqÐQRÏtÀqÈÂtÐYZÐ[\ÑY]Ò6^ÑhmÑ5nÓ,oÜ$&§H¢HÉEÓ-RÊEÀq°a·D©b¸aÀ¹dÒ.BÉEÑ-RÓ$SÜ&(§h¢h¹eÓ/Dºe¸°!´¹eÑ/DÌBÏJÉJÑ&WÜ"$§(¢(¹EÓ+BºE°q¨q©T«F¹EÑ+BÌ"Ï*É*Ñ"UÜ.0¯hªhÁeÓ7LÂeÀ¸!¼ÁeÑ7LÔTV×T^ÑT^Ñ._ñ�Dð —J‘J×%Ñ%¤j°¸DÑ&\×]ô 8ñ 'ð 0×3Ñ3°E·J±JÀÓEˆDŒNØ)ˆDÖÜØò÷
ò 
ô  "Ÿz™zˆDÔð × Ñ ×&Ñ& qÑ)¨AÓ-Øj�Ü'¨Ó-Ð-ô Ø—‘à7ØIð÷ñ ð $)§;¡;×#4Ñ#4�Ô Ø#-�Õ Ü  §¡Ð.M×NÑNÜ#(§=¡=×#6Ñ#6Ø—K‘K×,Ñ,¨QÑ/ó$�Ô ð $.�Õ à6´t¸E¿K¹KÓ7HÐ6IÐJ�Ü'¨Ó-Ð-ð ×*Ñ*ª1¨a¨4Ò0óâ0�Aô ˜1Ÿ7™7¨E×,?Ñ,?ÀdÔfÙ0ñˆDŒJð 0×3Ñ3°E·O±OÀTÓJˆDŽNØœS¤ e£Ó-Ô-Ü˜)Ô$Ø'ˆDŒOà/×3Ñ3°E·O±O×4OÑ4OÓ4QÐSWÓXˆDŒNØ¤3¤t¨E£{Ó#3Ó3Ø �	Ø#0�Õ à!�	Ø#.�Ô äØàOØGð÷ñ ô ! ×!2Ñ!2Ó3�
ô $-¨U¯[©[Ô#9ôâ#9™˜˜4ô ˜t¨yÀ%×BSÑBSÐTUÑBVÐYcÑBcÔdÙ#9ò�–
ô
 !ØàFØ>ð÷ñ ð "1�”Ø#.�Ô ô $-¨U¯[©[Ô#9ôâ#9™˜˜4ô ˜t¨u¸e×>OÑ>OÐPQÑ>RÔSÙ#9ò�–
ô
 !ØàOØGð÷ñ ô )¨¸)ÈQÑOÐP�–
à7¼¸U»°}ÐE�Ü)¨$Ó/Ð/Ü˜UÐ$:×;Ñ;Ø"'ÔØ×.Ñ.ØØØ"Ø$ö	ô ˜UÐ$C×DÑDÜ!Ÿz™zˆDÔØ"'×"3Ñ"3Ó"5ˆDÔØ×.Ñ.ØØØ"Ø$ô	ð × Ñ  OÓ3Ø×*Ñ*¨aÓ/à(=�DÕ%à(5�DÔ%ô 'EÀUÓ&KˆDÖ#Ü˜UÐ%CÐE`Ð$a×bÑbØ"'×"3Ñ"3Ó"5ˆDÔØ×.Ñ.ØØØ"Ø$ô	ô 'EÀUÓ&KˆDÖ#Ü˜UÐ$<×=Ñ=Ü˜*Ô%Ø(ˆDŒOØ"'ÔØ×+Ñ+×6Ñ6Ó8¸ÑEˆIð"Ù[dÓeÒ[dÐVWœj¨ÀLÔQÑ[dÑe�”
ð 0×3Ñ3°E·L±L×4DÑ4DÀ[ÐR^Ó4_ÐaeÓfˆDŒNØ3×7Ñ7¸¿¹×8HÑ8HÈÐVbÓ8cÐeiÓjˆDÖä˜UÐ$;×<Ñ<Ü˜)Ô$Ø'ˆDŒOØ"'ÔØ×+Ñ+×6Ñ6Ó8¸ÑEˆIð"Ù[dÓeÒ[dÐVWœj¨ÀLÔQÑ[dÑe�”
ð 0×3Ñ3°E·L±L×4DÑ4DÀ[ÐR^Ó4_ÐaeÓfˆDŒNØ3×7Ñ7¸¿¹×8HÑ8HÈÐVbÓ8cÐeiÓjˆDÖä˜UÐ$D×EÑEÜ˜*Ô%Ø(ˆDŒOØ"'§.¡.ˆDÔØ×+Ñ+×6Ñ6Ó8¸ÑEˆIð"Ù[dÓeÒ[dÐVWœj¨ÀLÔQÑ[dÑe�”
ð 0×3Ñ3°E·O±OÀTÓJˆDŒNØ3×7Ñ7¸¿¹ÈÓNˆDÔØ�‰Ñ&Ø!0�”Ø#.�Ô ùÜ˜UÐ$A×BÑBÜ˜*Ô%Ø(ˆDŒOØ"'§.¡.ˆDÔØ×+Ñ+×6Ñ6Ó8¸ÑEˆIð"Ù[dÓeÒ[dÐVWœj¨ÀLÔQÑ[dÑe�–
ô
 ˜UÐ$E×FÑFÜ˜*Ô%Ø(ˆDŒOØ×Ñ !Ó#Ø*/×*:Ñ*:�Ô'Ø"'§.¡.ˆDÔØ×+Ñ+×6Ñ6Ó8¸ÑEˆIð"Ù[dÓeÒ[dÐVWœj¨ÀLÔQÑ[dÑe�”
ð 0×3Ñ3°E·O±OÀTÓJˆDŒNØ3×7Ñ7¸¿¹ÈÓNˆDÔØ�‰Ñ&Ø!6�”Ø#-�Ô ùÜ˜UÐ$E×FÑFÜ˜*Ô%Ø(ˆDŒOØ"'ÔØ',×'DÑ'DÓ'FˆDÔ$ð"Ü3°EÓ:�	Ø&×0Ñ0°dÐ0ÐV�–
ô ˜UÐ$F×GÑGÜ˜*Ô%Ø(ˆDŒOØ"'ÔÜ!Ÿz™zˆDÔð"Ü3°EÓ:�	Ø&×0Ñ0°dÐ0ÐV�”
ð  *ˆDÔØ2ˆDŒNØ',×'DÑ'DÓ'FˆDÖ$Ü˜UÐ$<×=Ñ=Ü˜*Ô%Ø(ˆDŒOØ"'ÔØ',×'DÑ'DÓ'FˆDÖ$Ü˜UÐ$^×_Ñ_Ü!Ÿz™zˆDÔØœC × 1Ñ 1Ó2Ñ2ˆGð ×*Ò*óâ*�Aô ˜1Ÿ7™7¨d¸GÐ]iÔjÙ*ñˆDŒJð 0×3Ñ3°E·O±OÀTÓJˆDŒNØ,ˆDÖÜØò÷
ò 
ð ×$×$ÐoÐ&oÓoÐ$Ø× Ñ  EÓ)Ø�	Ü—’ð fõô ˜D×-Ñ-¬s×3Ñ3Ø ×-Ñ-�	Ø$)�Ô!Ü"Ø×!Ñ! !Ñ$ YÑ/Ø5Ð7`Ða÷ñ ð 4ð 4ó4ð ð 9>×8IÒ8IÓJÒ8I¨u˜% 	Ô*Ñ8IˆJÐJØ",¨Q¡-×"5Ñ"5×";Ñ";×"AÑ"A×"FÑ"FˆDÔÜ!Ÿz™zˆDÔØ×*Ñ*Ð*¬R¯XªX°e·n±nÓ-EÑEˆGàhm×hvÒhvÔwÒhvÐ]d¬E°%×2BÑ2BÔ,CÓ XÒ,C qÀqÐPWÑGW§Ñ,CÔ XÑhvÐÑwô 25°U·^±^ÐEUÔ1Vöâ1VÑ-�H˜oô /8¼¸X»ÈÑ8XÔ.YÔZÒ.Y¡
  7��G’Ñ.YÕZÙ1Vð ó ð ˆDŒJÜ"+¨J×"7‘��YØ!Ÿ™�ØŸ™×,Ñ,¨U¯[©[×->Ñ->¸qÑ-AÀ5Ç;Á;×CTÑCTÐUVÑCWÐZ_×ZeÑZe×ZkÑZkÐlmÑZnÑCnÓo�Ø '¨#¡,Ñ.�à%*×%8Ñ%8×%?Ñ%?ÄÇÁÓ%IØ&+×&:Ñ&:×&AÑ&AÄ"Ç(Á(Ó&KØ(-×(;Ñ(;Ü "§¢ÐRW×R_ÒR_Ó)`ÒR_ÈQ¨/¸#Ñ*>×*BÑ*BÀ1ÀaÖ*HÑR_Ñ)`Ó aØ"'§/¡/×"8Ñ"8¼¿¹Ó"DØ$Ø*/×*GÑ*G×*NÑ*NÌrÏzÉzÓ*Zñ�ð —
‘
×!Ñ!¤*¨T¸Ñ"X×Yñ #8ð 0×3Ñ3°J¸q±M×4KÑ4KÈTÓRˆDŒNØ*ˆDÔØ$×0Ñ0°Ñ;ˆDÕä#Ð$UÔX[Ô\`ÐafÓ\gÓXhÑ$hÓiÐið �:‰:Ò! d§j§j jÜŸš°t·z²zÓB²z°!¤ A§H¡H¦±zÑBÓCˆIÜ”r—y’y¸T¿ZºZÓ!HºZ¸§(¡(§.¡.°Ô"3¹ZÑ!HÓIÓJÈaÓOð ØPóÐOô ˜DŸJ™J›ˆIä"$§'¢'¨9°iÐ*@ÌÏÉÑ"QÐ!QˆDÔÜ#%§7¢7¨I°yÐ+AÌÏÉÑ#RÐ"RˆDÔÜ%'§W¢W¨i¸Ð-CÌ2Ï8É8Ñ%TÐ$TˆDÔ!ÜŸWšW i°Ð%;Ä2Ç8Á8ÑLÐLˆDŒMä Ÿhšh¨	°9Ð'=ÀT×EXÑEXÑYˆDŒOÜ#%§8¢8¨Y¸	Ð,BÌ"Ï(É(Ñ#SˆDÔ ÜŸ(š( I¨y¸$×:JÑ:JÐ#KÐSW×SfÑSfÑgˆDŒKÜ&(§h¢h°	¸9Ð/EÈT×M`ÑM`Ñ&aˆDÔ#ä˜9×%�ØLPÏJÉJÐWXÉM×LgÑLg�×"Ñ" 1Ð&H¬¨D¯J©J°q©M×,GÑ,GÓ(HÐ&HÐ#HÑIØNRÏjÉjÐYZÉm×NjÑNj�×#Ñ# AÐ'J¬¨T¯Z©Z¸©]×-IÑ-IÓ)JÐ'JÐ$JÑKØRV×R\ÑR\Ð]^ÑR_×RpÑRp�×%Ñ% aÐ)N¬3¨t¯z©z¸!©}×/MÑ/MÓ+NÐ)NÐ&NÑOØBFÇ*Á*ÈQÁ-×BXÑBX�—‘˜aÐ!>¤3 t§z¡z°!¡}×'=Ñ'=Ó#>Ð!>Ð>Ñ?ØFJÇjÁjÐQRÁm×F^ÑF^�—‘ Ð#B¤S¨¯©°A©×)AÑ)AÓ%BÐ#BÐ BÑCØPT×PZÑPZÐ[\ÑP]×PmÑPm�×$Ñ$ QÐ(L¬#¨d¯j©j¸©m×.KÑ.KÓ*LÐ(LÐ%LÑMð
 —?‘? iÓ/Ø#×/Ñ/‘Hà#×6Ñ6�Hà˜a“<Ø ! H¡�IØSW×S]ÑS]Ð^_ÑS`×SgÑSgÒhiÐklÐhlÑSm�D—K‘K Ð#D¤S¨¯©°A©×)=Ñ)=ºaÀ¸dÑ)CÓ%DÐ#DÀiÐ OÒPàBFÇ*Á*ÈQÁ-×BVÑBV�D—K‘K Ð#>¤S¨¯©°A©×)=Ñ)=Ó%>Ð#>Ð >Ñ?ØVZ×V`ÑV`ÐabÑVc×VvÑVv�×'Ñ'¨Ð+R¬S°·±¸A±×1QÑ1QÓ-RÐ+RÐ(RÑSô —6’6˜$Ÿ*™* Q™-×:Ñ:Ó;¸qÖ@Ø38�D×0ñ3 &ô6  ŸXšX¸d¿jºjÓ&Iºj¸¤s¨1¯8©8¦}¹jÑ&IÔQS×QYÑQYÑZˆDŒNÜŸVšV¸$¿*º*Ó$Eº*°Q§[¤[¹*Ñ$EÓFˆDŒNô ˜4×+Ñ+¨Y×7Ñ7¼3¸t×?OÑ?OÓ;PÐTUÓ;UÜ$&§G¢G¨D×,<Ñ,<Ó$=À×@PÑ@PÑ$P×#XÑ#XÐY]×YlÑYlÓ#m�Ô Ø#×/Ñ/×7Ñ7Ó9ˆDÔÜ�t×'Ñ'Ó(¨D×,<Ñ,<Ó<Ð<Ñ<ðg '1Ð!ùò] gùò ùóùóùò$ùòXùòLùò& /TùÚ/TùÚ1jùÚ)NùÚ+@ùÚ'>ùÚ3HùòH 3XùÚ3XùÚ5nùÚ-RùÚ/DùÚ+BùÚ7LùòNùó2ùóùòx føÜó "Ø!�—
ð"üò føÜó "Ø!�—
ð"üò føÜó "Ø!�—
ð"üò føÜó "Ø!�—
ð"üò føÜó "Ø!�—
ð"ûô ó "Ø!�—
ð"ûô ó "Ø!�—
ð"üòùò6 Kùò
 !YùÓwùãZùõùò *aùò  CùÚ!HùòT 'JùÚ$EsI  Ä
BHÇ?BHÊ3!BHÍ!BHÐ1BHÙ BHÞ:)BH#â=BH(
ã1BH-ä%)BH2å(BH7æBH<çBIèBIï$BIðBIñ)BIòBIóBIó8BI$ô.BI)û)BI.ÿ+(BI3ÁA%BI9ÁHBJ ÁHBI?ÁH0BJ ÁK#BJ! ÁK'BJÁK;BJ! ÁN9BJ> ÁN=BJ9ÁOBJ> ÁR
BK ÁRBKÁR"BK ÁTBK8 ÁT#BK3ÁT7BK8 ÁWBL ÁX=BL( Á\ BM Á`BMÁb3BMÁc
BM
ÁcBM
Ác$BMÁd	#BM
Ád,BMÁd<BM
ÁiBM#ÁnBM(Áo"BM-ÂCBM2ÂDBM7ÂI?BJ ÂJBJÂJBJÂJBJ! ÂJ!BJ6ÂJ5BJ6ÂJ9BJ> ÂJ>BKÂKBKÂKBK ÂKBK0ÂK/BK0ÂK3BK8 ÂK8BLÂLBLÂLBL%ÂL$BL%ÂL(BL=ÂL<BL=ÂM
BMÂMBM
c                ó  • SU l         [        U R                  5      nUR                  XS9U l        UR
                  U l        UR                  UR                  S 5      U l	        UR                  UR                  S 5      U l
        UR                  U l        UR                  U l        [        U R                  SU R                  R                  5       S-
  5      nUS-   U R                  -  U l        UR"                  U l        g )Nr?   r!  Úbest_iterationr   )r@   ÚXGBTreeModelLoaderrÂ   r^  r  Ú
base_scorerv   r(   Úname_objrl   rm   Ún_trees_per_iterr;   rA   ra   Únum_boosted_roundsr:   Ú	n_targetsÚ_xgboost_n_outputs)rw   r_   rf   rn  ro  Úloaderr…  s          r/   rV  Ú*TreeEnsemble._set_xgboost_model_attributesÛ  sß   € ð $ˆŒÜ# D×$7Ñ$7Ó8ˆà×%Ñ%¨4Ð%ÐKˆŒ
Ø!×,Ñ,ˆÔØ+×/Ñ/°·±ÀÓFˆŒØ/×3Ñ3°F·O±OÀTÓJˆÔà"(×"9Ñ"9ˆÔØ#)×#=Ñ#=ˆÔ Ü Ø×ÑØØ×Ñ×2Ñ2Ó4°qÑ8ó
ˆð
 *¨AÑ-°×1HÑ1HÑHˆŒØ"(×"2Ñ"2ˆÕr1   c                ó°  • U R                   S:X  a  [        U S5      (       d   eU R                  $ U R                  S:”  ar  [	        U R
                  5      U R                  -  S:w  a  [        S5      eU R
                  S   R                  R                  S   S:w  a  [        S5      eU R                  $ U R
                  S   R                  R                  S   $ )Nr?   rŒ  r   r   z>Only stacked models with equal numbers of trees are supported!z@Only stacked models with single outputs per model are supported!)	r@   r&   rŒ  r;   rs   r  rk   rb   rd   ©rw   s    r/   rÊ   ÚTreeEnsemble.num_outputsô  s½   € ð �?‰?˜iÓ'Ü˜4Ð!5×6Ñ6Ð6Ð6Ø×*Ñ*Ð*à×"Ñ" QÓ&Ü�4—:‘:‹ ×!8Ñ!8Ñ8¸AÓ=Ü Ð!aÓbÐbØ�z‰z˜!‰}×#Ñ#×)Ñ)¨!Ñ,°Ó1Ü Ð!cÓdÐdØ×*Ñ*Ð*à—:‘:˜a‘=×'Ñ'×-Ñ-¨aÑ0Ð0r1   c                óê  • U R                   S:X  a  SnU$ U R                   S;   aC  U R                  S:X  a  SnU$ U R                  S:X  a  SnU$ SU R                   S3n[        U5      eU R                   S	:X  aC  U R                  S
:X  a  SnU$ U R                  S:X  a  SnU$ SU R                   S3n[        U5      eS[	        U R                   5       S[	        U R                   5       S3n[        U5      e)z;A consistent interface to make predictions from this model.rH   r   )r(  rQ   r  r   r(  zLmodel_output = "probability" is not yet supported when model.tree_output = "z"!rN   r  r   r  r   zGmodel_output = "log_loss" is not yet supported when model.objective = "z+Unrecognized model_output parameter value: z! If `model.zŒ` is a valid function, open a Github issue to ask that this method be supported. If you want 'predict_proba' just use 'probability' for now.)rj   rm   rB   rl   r`   rk   )rw   rÝ   r|   s      r/   rÈ   ÚTreeEnsemble.get_transform  sB  € à×Ñ Ó%Ø"ˆIð6 Ðð5 ×ÑÐ"HÓHØ×Ñ :Ó-Ø&�	ð0 Ðð/ ×!Ñ! ]Ó2Ø&�	ð, Ðð' cÐcg×csÑcsÐbtÐtvÐwð ô *¨$Ó/Ð/Ø×Ñ *Ó,Ø�~‰~ Ó0Ø*�	ð Ðð —‘Ð#8Ó8Ø/�	ð Ðð aÐae×aoÑaoÐ`pÐprÐs�Ü)¨$Ó/Ð/ð >¼cÀ$×BSÑBSÓ>TÐ=Uð VÜ  ×!2Ñ!2Ó3Ð4ð 5mðmð ô
 ˜TÓ"Ð"r1   c                óä  • Uc  U R                   nU R                  S:X  a  [        S5      eU R                  S:X  a%  U R                  U R                  :w  a  [        S5      eUc  U R
                  c  SOU R
                  n[        U[        R                  [        R                  45      (       a  UR                  nSn[        UR                  5      S:X  a!  SnUR                  SUR                  S	   5      nUR                  R                  U R                   :w  a  UR#                  U R                   5      n[$        R&                  " U[(        S
9n[        U[$        R*                  5      (       d   S[-        [        U5      5      -   5       e[        UR                  5      S:X  d   S5       eUS	:  d  X@R                  R                  S	   :”  a  U R                  R                  S	   nUS:X  aR  Uc  [/        S5      eUR                  S	   [        U5      :w  a(  [/        S[        U5       SUR                  S	    S35      eU R1                  5       n[3        S5        [$        R4                  " UR                  S	   U R                  45      n[6        R8                  " U R:                  U R<                  U R>                  U R@                  U RB                  U RD                  U R                  U RF                  UU RH                  [J        U   UUUU5        U(       a?  U R                  S:X  a  URM                  5       S	   $ UR                  SU R                  5      $ U R                  S:X  a  URM                  5       $ U$ )a  A consistent interface to make predictions from this model.

Parameters
----------
tree_limit : None (default) or int
    Limit the number of trees used by the model. By default None means no use the limit of the
    original model, and -1 means no limit.

r   z[Predict with pyspark isn't implemented. Don't run 'interventional' as feature_perturbation.r?   z8XGBoost with boosted random forest is not yet supported.r8   Fr   Tr   rš   rœ   r   r�   ÚloglosszgBoth samples and labels must be provided when explaining the loss (i.e. `explainer.shap_values(X, y)`)!rž   rŸ   r    r   )'rj   r@   rB   r;   rÊ   r:   rU   rV   r¡   rW   rb   rs   rd   r¢   r›   r\   r£   r¤   r   r¥   r¦   r§   r`   rk   rÈ   r	   rÉ   r   Údense_tree_predictrÌ   rÍ   rÎ   rÏ   rÐ   rÑ   rÒ   rv   rÔ   rm  )rw   r‘   r�   Úoutputr:   r©   rª   rÝ   s           r/   rq   ÚTreeEnsemble.predict%  sì  € ð ‰>Ø×&Ñ&ˆFà�?‰?˜iÓ'ô &Ømóð ð �?‰?˜iÓ'¨D×,CÑ,CÀt×GWÑGWÓ,Wä%Ð&`ÓaÐað ÑØ#Ÿ™Ñ6™¸D¿O¹OˆJô �aœ"Ÿ)™)¤R§\¡\Ð2×3Ñ3Ø—‘ˆAØˆÜˆq�w‰w‹<˜1ÓØˆKØ—	‘	˜!˜QŸW™W Q™ZÓ(ˆAØ�7‰7�<‰<˜4×+Ñ+Ó+Ø—‘˜×)Ñ)Ó*ˆAÜ—H’H˜Q¤dÑ+ˆ	Ü˜!œRŸZ™Z×(Ñ(ÐRÐ*CÄcÌ$ÈqË'ÃlÑ*RÓRÐ(Ü�1—7‘7‹|˜qÓ Ð[Ð"[Ó[Ð à˜‹>˜Z¯+©+×*;Ñ*;¸AÑ*>Ó>ØŸ™×*Ñ*¨1Ñ-ˆJà�YÓØ‰yÜ ð=óð ð �w‰w�q‰zœS ›VÓ#Ü Ø,¬S°«V¨HÐ4gÐhi×hoÑhoÐpqÑhrÐgsÐsuÐvóð ð ×&Ñ&Ó(ˆ	Ü�fÔÜ—’˜1Ÿ7™7 1™: t×'7Ñ'7Ð8Ó9ˆÜ× Ò Ø×ÑØ×ÑØ×!Ñ!Ø�M‰MØ�O‰OØ× Ñ Ø�K‰KØ�N‰NØØ×ÑÜ" 9Ñ-ØØØØô	
ö& Ø×Ñ 1Ó$Ø—~‘~Ó'¨Ñ*Ð*à—~‘~ b¨$×*:Ñ*:Ó;Ð;à×Ñ 1Ó$Ø—~‘~Ó'Ð'à�r1   )r¯   rŒ  rv   rA   rÎ   rÌ   rÍ   r_   rf   r›   rÏ   r¨   r£   r   rÒ   rj   r@   rP   rl  r;   rl   rÂ   rÑ   rÐ   r:   rm   r  rb   )NNN)r  r`  )r  r$   r  r  r  r[   rV  ÚpropertyrÊ   rÈ   rq   r  r9   r1   r/   ri   ri   s  s3   † ñô
`	=òD3ð2 ó1ó ð1ò ÷@Ur1   ri   c                  ó"   • \ rS rSrSrSS jrSrg)r5  i}  aÏ  A single decision tree.

The primary point of this object is to parse many different tree types into a common format.

Attributes
----------
children_left : numpy.array
    A 1d array of length #nodes. The index ``i`` of this array contains the index of
    the left-child of the ``i-th`` node in the tree. An index of -1 is used to
    represent that the ``i-th`` node is a leaf/terminal node.

children_right : numpy.array
    Same as ``children_left``, except it contains the index of the right child of
    each ``i-th`` node in the tree.

children_default : numpy.array
    A 1d numpy array of length #nodes. The index ``i`` of this array contains either
    the index of the left-child / right-child of the ``i-th`` node in the tree,
    depending on whether the default split (for handling missing values) is left /
    right. An index of -1 is used to represent that the ``i-th`` node is a leaf
    node.

features : numpy.array
    A 1d numpy array of length #nodes. The value at the ``i-th`` position is the
    index of the feature chosen for the split at node ``i``. Leaf nodes have no
    splits, so is -1.

thresholds : numpy.array
    A 1d numpy array of length #nodes. The value at the ``i-th`` position is the
    threshold used for the split at node ``i``. Leaf nodes have no thresholds, so is
    -1.

values : numpy.array
    A 1d numpy array of length #nodes. The index ``i`` of this array contains the
    raw predicted value that would be produced by node ``i`` if it were a leaf node.

node_sample_weight : numpy.array
    A 1d numpy array of length #nodes. The index ``i`` contains the number of
    records (usually from the training data) that falls into node ``i``.

max_depth : int
    The max depth of the tree.

Nc                óú#  ^ ^^^0^1^2^3• [        S5        [        T/ SQ5      (       Ga<  TR                  R                  [        R
                  5      T l        TR                  R                  [        R
                  5      T l        T R                  T l        [        TS5      (       a;  [        R                  " TR                  T R                  T R                  5      T l        TR                  R                  [        R
                  5      T l        TR                  R                  [        R                  5      T l        [        R                   " T R                  [        R
                  S9T l        TR$                  R'                  TR$                  R(                  S   TR$                  R(                  S   TR$                  R(                  S   -  5      T l        U(       aA  T R*                  R,                  T R*                  R/                  S5      -  R,                  T l        T R*                  T-  T l        TR0                  R                  [        R                  5      T l        GO³[5        T[6        5      (       a÷  ST;   añ  TS	   R                  [        R
                  5      T l        TS
   R                  [        R
                  5      T l        TS   R                  [        R
                  5      T l        TS   R                  [        R
                  5      T l        TS   T l        [        R                   " T R                  [        R
                  S9T l        TS   T-  T l        TS   T l        GO§[5        T[6        5      (       a÷  S	T;   añ  TS	   R                  [        R
                  5      T l        TS
   R                  [        R
                  5      T l        TS   R                  [        R
                  5      T l        TS   R                  [        R
                  5      T l        TS   T l        [        R                   " T R                  [        R
                  S9T l        TS   T-  T l        TS   T l        GO›[        TSS/5      (       Ga  U24S jm2T2" TR8                  R;                  5       S5      n[        R<                  " US[        R
                  S9T l        [        R<                  " US[        R
                  S9T l        [        R<                  " US[        R
                  S9T l        [        R<                  " US[        R
                  S9T l        [        R<                  " US[        R                  S9T l        [        R                   " T R                  [        R
                  S9T l        S/U-  T l        [        R<                  " US[        R                  S9T l        U0U U4S jm0T0" STR8                  R;                  5       5        T R                  T l        [        R>                  " T R*                  5      T l        U(       aA  T R*                  R,                  T R*                  R/                  S5      -  R,                  T l        T R*                  T-  T l        G
Op[5        T[6        5      (       Ga¾  ST;   Ga·  TS   nTS   S-
  nSU-  S-   n[        R@                  " U[        R
                  S9T l        [        R@                  " U[        R
                  S9T l        [        R@                  " U[        R
                  S9T l        [        R@                  " U[        R
                  S9T l        [        R@                  " U[        R                  S9T l        [        R                   " T R                  [        R
                  S9T l        [C        U5       V	s/ s H  n	SPM     sn	T l        [        R@                  " U[        R                  S9T l        / U/pºU(       Ga  URE                  S5      nSU;   nU(       Ga  US   nXê;   a  M2  US   nUS   nSU;   nU(       a  US   T R                  U'   OUS   U-   T R                  U'   SU;   nU(       a  US   T R                  U'   OUS   U-   T R                  U'   US   (       a  T R                  U   T R                  U'   OT R                  U   T R                  U'   US   T R                  U'   [5        US   [F        [H        45      (       a"  US   T R                  U'   ST R"                  U'   O•[5        US   [J        5      (       ab  S nUS   RM                  S!5       Vs/ s H  n[G        U5      PM     nnU H  nUSUS-
  -  -  nM     UT R                  U'   ST R"                  U'   O[O        S"[Q        US   5       S#35      eUS$   /T R*                  U'   US%   T R2                  U'   U
RS                  U5        URS                  U5        URS                  U5        OÝURU                  SS5      U-   nST R                  U'   ST R                  U'   ST R                  U'   ST R                  U'   ST R                  U'   ST R                  U'   ST R                  U'   ST R                  U'   ST R                  U'   ST R"                  U'   US&   /T R*                  U'   URU                  S'S5      T R2                  U'   U(       a  GM  [        R>                  " T R*                  5      T l        [        RV                  " T R*                  T5      T l        GOœ[5        T[6        5      (       Ga{  S(T;   Gat   U34S) jm3T3" T5      S-   n[        RX                  " U[        R
                  S9* T l        [        RX                  " U[        R
                  S9* T l        [        RX                  " U[        R
                  S9* T l        [        RX                  " U[        R
                  S9* T l        [        RZ                  " U[        R                  S9T l        [        R                   " T R                  [        R
                  S9T l        [        RZ                  " US4[        R                  S9T l        [        R@                  " U[        R                  S9T l        U1U4S* jm1T1" TT 5        GO[5        T[J        5      (       GaÞ   TS S RM                  S+5       Vs/ s H  nUR]                  5       PM     nn0 nU H5  nURM                  S,5      S   U[G        URM                  S,5      S   5      '   M7     [_        URa                  5       5      S-   nS[        RX                  " US-S9-  nS[        RX                  " US-S9-  nS[        RX                  " US-S9-  nS[        RX                  " US-S9-  n S[        RX                  " US.S9-  n!S[        RX                  " US.S9-  n"[        RZ                  " US.S9n#[c        UR+                  5       5      n$[c        URa                  5       5      n%[C        [e        U%5      5       GHæ  n&U$U&   n'U%U&   n(S/U';   aX  [I        U'RM                  S05      S   RM                  S15      S   5      n)[I        U'RM                  S25      S   5      n*U)U"U('   U*U#U('   Ml  [G        U'RM                  S35      S   RM                  S15      S   5      n+[G        U'RM                  S45      S   RM                  S15      S   5      n,[G        U'RM                  S55      S   RM                  S15      S   5      n-U'RM                  S65      S   n.S7U.;   a@  [G        U.RM                  S75      S   SS  5      n/[I        U.RM                  S75      S   S S 5      nS8U.;   a@  [G        U.RM                  S85      S   SS  5      n/[I        U.RM                  S85      S   S S 5      n[I        U'RM                  S25      S   RM                  S15      S   5      n*U+UU('   U,UU('   U-UU('   W/U U('   WU!U('   U*U#U('   GMé     UT l        UT l        UT l        U T l        U!T l        [        R                   " T R                  [        R
                  S9T l        U"S S 2[        Rf                  4   T-  T l        U#T l        O[O        S9[K        T5      -   5      eUbŽ  Ub‹  T R2                  Ri                  S 5        [j        Rl                  " T R                  T R                  T R                  T R                  T R                  T R"                  T R*                  ST R2                  UU5        [j        Rn                  " T R                  T R                  T R2                  T R*                  5      T l8        g s  sn	f s  snf s  snf ):Nr   )úsklearn.tree._tree.Treezeconml.tree._tree.Treez(causalml.inference.tree._tree._tree.TreeÚmissing_go_to_leftrš   r   r   r   rÏ   rÌ   rÍ   rÎ   rÐ   rb   rP   re  rf  r7  r/  r0  c                ó–   >• US-   nU R                  5       S:X  a  U$ T" U R                  5       U5      nT" U R                  5       U5      $ )Nr   r   )ÚsubtreeDepthÚ	leftChildÚ
rightChild)Únoderu   ÚgetNumNodess     €r/   r£  Ú(SingleTree.__init__.<locals>.getNumNodesá  sI   ø€ Ø˜a‘x�Ø×$Ñ$Ó&¨!Ó+Ø�Ká& t§~¡~Ó'7¸Ó>�DÙ& t§¡Ó'8¸$Ó?Ð?r1   r,  c                óf  >• U S-   n TR                   R                  5       S:X  a  UR                  5       /TR                  U '   O;UR	                  5       R                  5        Vs/ s H  o"PM     snTR                  U '   UR	                  5       R                  5       TR                  U '   UR                  5       S:X  a  U $ UR                  5       R                  5       TR                  U '   [        UR                  5       R                  5       5      R                  S5      (       a  [        S5      eUR                  5       R!                  5       TR"                  U '   U S-   TR$                  U '   T" XR'                  5       5      nUS-   TR(                  U '   T" X1R+                  5       5      nU$ s  snf )Nr   r  r   ztree.CategoricalSplitz(CategoricalSplit are not yet implemented)rR  rS  Ú
predictionrb   ÚimpurityStatsÚstatsÚcountrP   rŸ  r'   ÚfeatureIndexrÏ   r`   ÚgetClassÚendswithrB   rf  rÐ   rÌ   r   rÍ   r¡  )Úindexr¢  rÚ   r}  Ú	buildTreerw   rs  s       €€€r/   r®  Ú&SingleTree.__init__.<locals>.buildTreeó  s{  ø€ Ø ™	�Ø—>‘>×-Ñ-Ó/°:Ó=Ø*.¯/©/Ó*;Ð)<�D—K‘K Ò&ð $(×#5Ñ#5Ó#7×#=Ñ#=Ô#?ó*Ú#?˜ašÑ#?ñ*�D—K‘K Ñ&ð ×&Ñ&Ó(×.Ñ.Ó0ð ×'Ñ'¨Ñ.ð ×$Ñ$Ó&¨!Ó+Ø �Lð Ÿ
™
›×1Ñ1Ó3ð —M‘M %Ñ(ô ˜4Ÿ:™:›<×0Ñ0Ó2Ó3×<Ñ<Ð=T×UÑUä1Ð2\Ó]Ð]àŸ
™
›×.Ñ.Ó0ð —O‘O EÑ*ð 16¸±	�D×&Ñ& uÑ-Ù# E¯>©>Ó+;Ó<�CØ14°q±�D×'Ñ'¨Ñ.Ù# C¯©Ó):Ó;�CØ�Jùò1*s   Á$F.r8   Útree_structureÚ
num_leavesÚsplit_indexÚ
left_childÚright_childÚ
leaf_indexÚdefault_leftÚsplit_featureç        z||zThreshold type z not supportedÚinternal_valueÚinternal_countÚ
leaf_valueÚ
leaf_countÚnodeidc           	     óv   >• SU ;   a)  [        U S   /U S    Vs/ s H  nT" U5      PM     snQ76 $ U S   $ s  snf )NÚchildrenr½  )ri  )r¢  rr  Úmax_ids     €r/   rÀ  Ú#SingleTree.__init__.<locals>.max_idq  sI   ø€ Ø Ó%Ü˜t H™~ÐVÀDÈÒDTÓ0UÒDT¸q±¸¶ÑDTÑ0UÒVÐVà ™>Ð)ùò 1Vs   ™6
c                óV  >• U S   nU S   UR                   U'   SU ;   ao  U S   UR                  U'   U S   UR                  U'   U S   UR                  U'   U S   UR                  U'   U S   UR
                  U'   U S    H  nT" X15        M     g S	U ;   a  U S	   T-  UR                  U'   g g )
Nr½  Úcoverr¿  ÚyesÚnoÚmissingr'   Úsplit_conditionÚleaf)rP   rÌ   rÍ   rÎ   rÏ   rÐ   rb   )r¢  rs  rÛ   rr  Úextract_datar$  s       €€r/   rÉ  Ú)SingleTree.__init__.<locals>.extract_data�  sÃ   ø€ Ø˜‘N�Ø-1°'©]�×'Ñ'¨Ñ*à Ó%Ø,0°©K�D×&Ñ& qÑ)Ø-1°$©Z�D×'Ñ'¨Ñ*Ø/3°I©�D×)Ñ)¨!Ñ,Ø'+¨G¡}�D—M‘M !Ñ$Ø)-Ð.?Ñ)@�D—O‘O AÑ&à! *Ô-˜Ù$ QÖ-ò .à˜t“^Ø%)¨&¡\°GÑ%;�D—K‘K ’Nð $r1   Ú
Ú:rd  r3  rÈ  zleaf=Ú,zcover=zyes=zno=zmissing=Ú Ú<Ú=z)Unknown input to SingleTree constructor: )9r	   r   rÌ   r¤   r   rd  rÍ   rÎ   r&   Úwherer�  re  rÏ   rf  r3  rÐ   Ú
zeros_likerÑ   r7  r¢   rd   rb   ÚTrt   rg  rP   rU   r4  rR  ÚrootNodeÚfullÚasarrayÚemptyrÆ   Úpopr`  Úfloatr`   r'   Ú	TypeErrorr\   rK  r(   Úmultiplyr€   rÉ   Úlstripri  ÚkeysrX   rs   ÚnewaxisÚfillr   Údense_tree_update_weightsÚcompute_expectationsrÒ   )4rw   rs  r'  r$  r_   rf   rl  ÚstartÚnum_parentsrê   ÚvisitedÚqueueÚvertexÚis_branch_nodeÚ
vsplit_idxr³  r´  Úleft_is_branch_nodeÚright_is_branch_noderf  ÚxÚ
categoriesÚcatÚ	vleaf_idxÚmrp  rI  Ú
nodes_dictrr  rÌ   rÍ   rÎ   rÏ   rÐ   rb   rP   Ú
values_lstÚkeys_lstrÛ   r7  ÚkeyÚvalÚnode_sample_weight_valÚc_leftÚc_rightÚ	c_defaultÚ
feat_thresre  r®  rÉ  r£  rÀ  s4   `` `                                            @@@@r/   r[   ÚSingleTree.__init__«  s‚  þ€ Ü�fÔäØò÷
ò 
ð "&×!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Ü#%§=¢=°·±ÌÏÉÑ#QˆDÔ ØŸ*™*×,Ñ,¨T¯Z©Z×-=Ñ-=¸aÑ-@À$Ç*Á*×BRÑBRÐSTÑBUÐX\×XbÑXb×XhÑXhÐijÑXkÑBkÓlˆDŒKÞØ#Ÿ{™{Ÿ}™}¨t¯{©{¯©¸qÓ/AÑA×DÑD�”ØŸ+™+¨Ñ/ˆDŒKØ&*×&BÑ&B×&IÑ&IÌ"Ï*É*Ó&UˆDÖ#ä˜œd×#Ñ#¨
°dÓ(:Ø!% oÑ!6×!=Ñ!=¼b¿h¹hÓ!GˆDÔØ"&Ð'7Ñ"8×"?Ñ"?ÄÇÁÓ"IˆDÔØ$(Ð);Ñ$<×$CÑ$CÄBÇHÁHÓ$MˆDÔ!Ø  Ñ,×3Ñ3´B·H±HÓ=ˆDŒMØ" <Ñ0ˆDŒOÜ#%§=¢=°·±ÌÏÉÑ#QˆDÔ Ø˜x™.¨7Ñ2ˆDŒKØ&*Ð+?Ñ&@ˆDÖ#ô ˜œd×#Ñ#¨¸4Ó(?Ø!% oÑ!6×!=Ñ!=¼b¿h¹hÓ!GˆDÔØ"&Ð'7Ñ"8×"?Ñ"?ÄÇÁÓ"IˆDÔØ$(Ð);Ñ$<×$CÑ$CÄBÇHÁHÓ$MˆDÔ!Ø  ™O×2Ñ2´2·8±8Ó<ˆDŒMØ" ;Ñ/ˆDŒOÜ#%§=¢=°·±ÌÏÉÑ#QˆDÔ Ø˜w™-¨'Ñ1ˆDŒKØ&*Ð+?Ñ&@ˆDÖ#äØàKØCð÷
ò 
õ@ñ $ D§N¡N×$;Ñ$;Ó$=¸qÓAˆIÜ!#§¢¨°B¼b¿h¹hÑ!GˆDÔÜ"$§'¢'¨)°R¼r¿x¹xÑ"HˆDÔÜ$&§G¢G¨I°rÄÇÁÑ$JˆDÔ!ÜŸGšG I¨r¼¿¹ÑBˆDŒMÜ Ÿgšg i°¼2¿:¹:ÑFˆDŒOÜ#%§=¢=°·±ÌÏÉÑ#QˆDÔ Ø˜$ Ñ*ˆDŒKÜ&(§g¢g¨i¸Ä2Ç:Á:Ñ&NˆDÔ#÷ñ> �b˜$Ÿ.™.×1Ñ1Ó3Ô4à$(×$6Ñ$6ˆDÔ!ÜŸ*š* T§[¡[Ó1ˆDŒKÞØ#Ÿ{™{Ÿ}™}¨t¯{©{¯©¸qÓ/AÑA×DÑD�”ØŸ+™+¨Ñ/ˆDŽKô ˜œd×#Ò#Ð(8¸DÔ(@ØÐ)Ñ*ˆEØ˜|Ñ,¨qÑ0ˆKØ˜K™¨!Ñ+ˆIÜ!#§¢¨)¼2¿8¹8Ñ!DˆDÔÜ"$§(¢(¨9¼B¿H¹HÑ"EˆDÔÜ$&§H¢H¨Y¼b¿h¹hÑ$GˆDÔ!ÜŸHšH Y´b·h±hÑ?ˆDŒMÜ Ÿhšh y¼¿
¹
ÑCˆDŒOÜ#%§=¢=°·±ÌÏÉÑ#QˆDÔ Ü',¨YÔ'7Ó8Ò'7 !›2Ñ'7Ñ8ˆDŒKÜ&(§h¢h¨yÄÇ
Á
Ñ&KˆDÔ#ð   % �UßØŸ™ 1›�Ø!.°&Ñ!8�ß!Ø&,¨]Ñ&;�JØ!Ó,Ù à'-¨lÑ';�JØ(.¨}Ñ(=�KØ*7¸:Ñ*EÐ'Þ*Ø9CÀMÑ9R˜×*Ñ*¨:Ò6à9CÀLÑ9QÐT_Ñ9_˜×*Ñ*¨:Ñ6Ø+8¸KÑ+GÐ(Þ+Ø:EÀmÑ:T˜×+Ñ+¨JÒ7à:EÀlÑ:SÐVaÑ:a˜×+Ñ+¨JÑ7Ø˜n×-Ø<@×<NÑ<NÈzÑ<Z˜×-Ñ-¨jÒ9à<@×<OÑ<OÐPZÑ<[˜×-Ñ-¨jÑ9à06°Ñ0G�D—M‘M *Ñ-Ü! &¨Ñ"5¼¼U°|×DÑDØ6<¸[Ñ6I˜Ÿ™¨
Ñ3Ø;<˜×,Ñ,¨ZÒ8Ü# F¨;Ñ$7¼×=Ñ=Ø$'˜	Ø6<¸[Ñ6I×6OÑ6OÐPTÔ6UÓ%VÒ6U°¤c¨!¦fÑ6U˜
Ð%VÛ#-˜CØ%¨¨s°Q©w©Ñ7šIñ $.à6?˜Ÿ™¨
Ñ3Ø;<˜×,Ñ,¨ZÒ8ä'¨/¼$¸vÀkÑ?RÓ:SÐ9TÐTbÐ(cÓdÐdØ/5Ð6FÑ/GÐ.H�D—K‘K 
Ñ+Ø:@ÐAQÑ:R�D×+Ñ+¨JÑ7Ø—N‘N :Ô.Ø—L‘L Ô,Ø—L‘L Õ-ð &,§Z¡Z°¸aÓ%@À;Ñ%N�IØ46�D×&Ñ& yÑ1Ø57�D×'Ñ'¨	Ñ2Ø79�D×)Ñ)¨)Ñ4Ø/1�D—M‘M )Ñ,Ø46�D×&Ñ& yÑ1Ø57�D×'Ñ'¨	Ñ2Ø79�D×)Ñ)¨)Ñ4Ø/1�D—M‘M )Ñ,Ø13�D—O‘O IÑ.Ø68�D×(Ñ(¨Ñ3Ø.4°\Ñ.BÐ-C�D—K‘K 	Ñ*ð :@¿¹ÀLÐRSÓ9T�D×+Ñ+¨IÑ6÷ ‘%ô@ Ÿ*š* T§[¡[Ó1ˆDŒKÜŸ+š+ d§k¡k°7Ó;ˆDŽKä˜œd×#Ò#¨°DÔ(8ðõ*ñ �t“˜qÑ ˆAÜ"$§'¢'¨!´2·8±8Ñ"<Ð!<ˆDÔÜ#%§7¢7¨1´B·H±HÑ#=Ð"=ˆDÔÜ%'§W¢W¨Q´b·h±hÑ%?Ð$?ˆDÔ!ÜŸWšW Q¬b¯h©hÑ7Ð7ˆDŒMÜ Ÿhšh q´·
±
Ñ;ˆDŒOÜ#%§=¢=°·±ÌÏÉÑ#QˆDÔ ÜŸ(š( A q 6´·±Ñ<ˆDŒKÜ&(§h¢h¨q¼¿
¹
Ñ&CˆDÔ#ö<ñ  ˜˜tÖ$ä˜œc×"Ò"ðð *.¨c¨r¨¯©¸Ô)>Ó?Ò)> A�Q—X‘X–ZÑ)>ˆEÐ?ØˆJÛ�Ø34·7±7¸3³<À±?�
œ3˜qŸw™w s›|¨A™Ó/Ó0ñ ä�J—O‘OÓ%Ó&¨Ñ*ˆAØ¤§¢¨°'Ñ!:Ñ:ˆMØ¤"§'¢'¨!°7Ñ";Ñ;ˆNØ!¤B§G¢G¨A°WÑ$=Ñ=ÐØœBŸGšG A¨WÑ5Ñ5ˆHØœbŸgšg a¨yÑ9Ñ9ˆJØœŸš ¨)Ñ4Ñ4ˆFÜ!#§¢¨!°9Ñ!=ÐÜ˜j×/Ñ/Ó1Ó2ˆJÜ˜JŸO™OÓ-Ó.ˆHÜœ3˜x›=×)�Ø" 1™�Ø˜q‘k�Ø˜U“?ä §¡¨GÓ 4°QÑ 7× =Ñ =¸cÓ BÀ1Ñ EÓF�CÜ-2°5·;±;¸xÓ3HÈÑ3KÓ-LÐ*à"%�F˜3‘KØ.DÐ& sÓ+ä  §¡¨VÓ!4°QÑ!7×!=Ñ!=¸cÓ!BÀ1Ñ!EÓF�FÜ! %§+¡+¨eÓ"4°QÑ"7×"=Ñ"=¸cÓ"BÀ1Ñ"EÓF�GÜ # E§K¡K°
Ó$;¸AÑ$>×$DÑ$DÀSÓ$IÈ!Ñ$LÓ M�IØ!&§¡¨SÓ!1°!Ñ!4�JØ˜jÓ(Ü"% j×&6Ñ&6°sÓ&;¸AÑ&>¸q¸rÐ&BÓ"C˜Ü$)¨*×*:Ñ*:¸3Ó*?ÀÑ*BÀ3ÀBÐ*GÓ$H˜	Ø˜jÓ(Ü"% j×&6Ñ&6°sÓ&;¸AÑ&>¸q¸rÐ&BÓ"C˜Ü$)¨*×*:Ñ*:¸3Ó*?ÀÑ*BÀ3ÀBÐ*GÓ$H˜	Ü-2°5·;±;¸xÓ3HÈÑ3K×3QÑ3QÐRUÓ3VÐWXÑ3YÓ-ZÐ*Ø)/�M #Ñ&Ø*1�N 3Ñ'Ø,5Ð$ SÑ)Ø$+�H˜S‘MØ&/�J˜s‘OØ.DÐ& sÔ+ñ7 *ð: "/ˆDÔØ"0ˆDÔØ$4ˆDÔ!Ø$ˆDŒMØ(ˆDŒOÜ#%§=¢=°·±ÌÏÉÑ#QˆDÔ Ø ¢¤B§J¡J Ñ/°'Ñ9ˆDŒKØ&8ˆDÕ#äÐGÌ#ÈdË)ÑSÓTÐTð Ñ Ñ 8Ø×#Ñ#×(Ñ(¨Ô-Ü×+Ò+Ø×"Ñ"Ø×#Ñ#Ø×%Ñ%Ø—‘Ø—‘Ø×$Ñ$Ø—‘ØØ×'Ñ'ØØôô ×3Ò3Ø×Ñ × 3Ñ 3°T×5LÑ5LÈdÏkÉkó
ˆ�ùòu 9ùòH &Wùò\ @s   ßAG.æAG3ô8AG8)	rÎ   rÌ   rÍ   rÏ   rÒ   rP   rÑ   rÐ   rb   ©Fr#  NN)r  r$   r  r  r  r[   r  r9   r1   r/   r5  r5  }  s   † ñ+÷Zv
r1   r5  c                  ó0   ^ • \ rS rSrSrSU 4S jjrSrU =r$ )r<  iä  zNIn sklearn the tree of the Isolation Forest does not calculated in a good way.c                ó¼  >^ ^^• [         T	T ]  XXEU5        [        US5      (       a¶  SSKJm  UUU 4S jmT" USS5        U(       aA  T R
                  R                  T R
                  R                  S5      -  R                  T l        T R
                  U-  T l        [        R                  " T R                  S:¬  UT R                     T R                  5      T l
        g g )Nrœ  r   )Ú_average_path_lengthc                ó¦  >• U R                   U   S:X  ae  U R                  U   S:X  aR  UT" [        R                  " U R                  U   /5      5      S   -   nUTR
                  US4'   X0R                  U   -  $ T" X R                   U   US-   5      nT" X R                  U   US-   5      nXE-   U R                  U   -  TR
                  US4'   XE-   $ )Nr8   r   r   )rÌ   rÍ   r   rJ  Ún_node_samplesrb   )	rs  rÛ   Úlevelr7  Ú
value_leftÚvalue_rightrþ  Ú_recalculate_valuerw   s	         €€€r/   r  Ú,IsoTree.__init__.<locals>._recalculate_valueì  sç   ø€ Ø×%Ñ% aÑ(¨BÓ.°4×3FÑ3FÀqÑ3IÈRÓ3OØ!Ñ$8¼¿ºÀ4×CVÑCVÐWXÑCYÐBZÓ9[Ó$\Ð]^Ñ$_Ñ_�EØ(-�D—K‘K  1 Ñ%Ø ×#6Ñ#6°qÑ#9Ñ9Ð9á!3°D×:LÑ:LÈQÑ:OÐQVÐYZÑQZÓ![�JÙ"4°T×;NÑ;NÈqÑ;QÐSXÐ[\ÑS\Ó"]�KØ)3Ñ)AÀT×EXÑEXÐYZÑE[Ñ([�D—K‘K  1 Ñ%Ø%Ñ3Ð3r1   r   )rZ   r[   r   Úsklearn.ensemble._iforestrþ  rb   rÓ  rt   r   rÑ  rÏ   )
rw   rs  Útree_featuresr'  r$  r_   rf   rþ  r  r#   s
   `      @@€r/   r[   ÚIsoTree.__init__ç  s¤   û€ Ü‰Ñ˜¨'¸ÔFÜ˜4Ð!:×;Ñ;ÝF÷	4ñ ˜t Q¨Ô*ÞØ#Ÿ{™{Ÿ}™}¨t¯{©{¯©¸qÓ/AÑA×DÑD�”ØŸ+™+¨Ñ/ˆDŒKäŸHšH T§]¡]°aÑ%7¸ÀtÇ}Á}Ñ9UÐW[×WdÑWdÓeˆD�Mð' <r1   )rÏ   rb   rû  )r  r$   r  r  r  r[   r  r	  r
  s   @r/   r<  r<  ä  s   ø† ÙX÷fõ fr1   r<  c                ó–   • / SQn0 nU H"  n[        X5      (       d  M  [        X5      X#'   M$     SU;   a  UR                  S5      US'   U$ )zžRetrieves properties from an xgboost.sklearn.XGBModel instance that should be
passed to the xgboost.core.DMatrix object before calling predict on the model.

)rÆ  Ún_jobsÚenable_categoricalÚfeature_typesr
  Únthread)r&   ra   rØ  )rC   Úproperties_to_passÚdmatrix_attributesÚ	attributes       r/   rX  rX  ÿ  s[   € ò
 VÐØÐÛ'ˆ	Ü�5×$Ó$Ü,3°EÓ,EÐÓ)ñ (ð
 Ð%Ó%Ø(:×(>Ñ(>¸xÓ(HÐ˜9Ñ%ØÐr1   c                  óf   • \ rS rSrSrS	S jr\            S
S j5       rSSS jjrS	S jr	Sr
g)r†  i  z<This loads an XGBoost model directly from a raw memory dump.c                ó   • SS K n[        UR                  5        UnUR                  SS9n[        R
                  " U5       n[        U5      nS S S 5        WS   nUS   nUS   n	US   n
[        [        US   5      S	5      n[        [        US
   5      S	5      n[        XË5      nSU
;   a  SU
;  a  U
S   n
U
S   R                  SS 5      b@  [        R                  " U
S   S   [        R                  S9n[        R                  " U5      nO;[        U
S   S   S   5      n[        R                  " XÏ-  UR                  5       5      n[        R                   " XîS   :g  5      (       a  [#        SU5      e[        US   5      U l        XÀl        U R$                  S:”  d   eU	S   U l        U
S   U l        US   n[-        U[.        5      (       aR   [0        R2                  " U5      n[-        U[4        [6        [        [8        [        R:                  45      (       d  ["        e [-        U[4        [8        [        R:                  45      (       a  US   n[7        U5      nUU l        U R(                  S;   a%  [>        R@                  RC                  U5      U l        O=U R(                  S;   a&  [        RD                  " U R<                  5      U l        OUU l        [        US   5      U l#        [        US   5      U l$        U
S   S   n[K        U5      U l&        / U l'        / U l(        / U l)        / U l*        / U l+        / U l,        / U l-        / U l.        / U l/        / U l0        / U l1        / U l2        URf                  nUbO  [        Rh                  " [        R                  " U5      S:H  5      S   n[K        U5      S:X  a  S U l5        OUU l5        OS U l5        S+S jn[m        U RL                  5       GH4  nUU   n[        R                  " US   5      nU RN                  Ro                  U5        U RP                  Ro                  [        R                  " US   [        R                  S95        U RR                  Ro                  [        R                  " US   [        R                  S95        U RT                  Ro                  [        R                  " US   [        Rp                  S95        [        R                  " US   [        Rr                  S9nURt                  U RP                  S    Rt                  :w  a  [#        S!5      eU" US"   5      n[        Rh                  " US	:H  U RP                  S    U RR                  S    5      Rw                  [        Rx                  5      nU RV                  Ro                  U5        U RX                  Ro                  [        R                  " US#   [        Rz                  S95        U RP                  S    S :H  n[        R                  " US$   [        Rr                  S9n[        Rh                  " UUS%5      n[        Rh                  " US%U5      n [        Rh                  " US%[        R|                  " U [        Rr                  " [        R~                  5      * 5      5      n [        R€                  " U [        R                  S9n!U RZ                  Ro                  URƒ                  URt                  S	5      5        U R\                  Ro                  U 5        U R^                  Ro                  U!5        [        R                  " US   [        Rx                  S9n"U R`                  Ro                  U"5        U" US&   5      n#U Rb                  Ro                  U#5        US'   n$US(   n%US)   n&[K        U$5      [K        U%5      s=:X  a  [K        U&5      :X  d   e   eUS*   n'U R…                  U&U$U%U'U RP                  S    5      n(U Rd                  Ro                  U(5        GM7     g ! , (       d  f       GNÕ= f! ["         a  nSU 3n[#        U5      UeS nAff = f),Nr   Úubj)Ú
raw_formatÚlearnerÚlearner_model_paramrl   Úgradient_boosterÚ	num_classr   Ú
num_targetÚgbtreerC   Úiteration_indptrrš   Úgbtree_model_paramÚnum_parallel_treez"vector-leaf is not yet supported.:Únamer‡  z=Expected the base_score to contain a list or float, received )r  r  )z	reg:gammazreg:tweediezcount:poissonzsurvival:coxzsurvival:aftÚnum_featurer  Úcc                óv   • [        U [        5      (       d   e[        R                  " U [        R                  S9$ )zHandle u8 array from UBJSON.rš   )rU   rX   r   Ú
asanyarrayÚuint8)r_   s    r/   Úto_integersÚ0XGBTreeModelLoader.__init__.<locals>.to_integersy  s*   € ä˜d¤D×)Ñ)Ð)Ð)Ü—=’= ¬R¯X©XÑ6Ð6r1   ÚparentsÚleft_childrenÚright_childrenÚsplit_indicesÚbase_weightsr8   z!vector-leaf is not yet supported.r¶  Úsum_hessianÚsplit_conditionsr¸  Ú
split_typeÚcategories_segmentsÚcategories_sizesÚcategories_nodesrì  )r_   ú	list[int]r  ú
np.ndarray)Cr?   r6   ro   Úsave_rawÚioÚBytesIOr   ri  r`  r(   r   rÖ  rd  r÷   ÚrepeatrŠ  Úanyrk   r‰  r‹  rˆ  Úname_gbmrU   r`   ÚastÚliteral_evalrX   rÙ  Útupler§   r‡  rN  rO  rP  Úlogr  r  rs   r€  Únode_parentsÚ
node_cleftÚnode_crightÚnode_sindexrÎ   Úsum_hessrb   rÐ   rÑ   rÏ   Úsplit_typesrì  r  rÑ  rA   rÆ   rK  Úuint32r8  ru   r¤   Úint64r3  Ú	nextafterÚinfrÒ  r¢   Úparse_categories))rw   Ú	xgb_modelÚxgbrC   rH   ÚfdÚjmodelr  r  rl   ÚboosterÚ	n_classesr‹  r  r÷   Ún_parallel_treesr‡  rÚ   r|   r  r  rA   r$  rÛ   rs  r&  Úbase_weightr¶  Údefault_childÚis_leafÚ
split_condÚleaf_weightrÐ   rÑ   Ú	split_idxrB  Úcat_segmentsÚ	cat_sizesÚ	cat_nodesÚcatsÚtree_categoriess)                                            r/   r[   ÚXGBTreeModelLoader.__init__  sû  € Ûä˜sŸ™Ô/Ø&ˆà× Ñ ¨EÐ Ð2ˆÜ�ZŠZ˜Œ_ Ü)¨"Ó-ˆF÷ ð ˜Ñ#ˆØ%Ð&;Ñ<ÐØ˜KÑ(ˆ	àÐ,Ñ-ˆÜœÐ/°Ñ<Ó=¸qÓAˆ	ÜœÐ/°Ñ=Ó>ÀÓBˆ	Ü˜	Ó-ˆ	ð �wÓ 7°'Ó#9Ø˜hÑ'ˆGà�7Ñ×ÑÐ 2°DÓ9ÑEä!Ÿzšz¨'°'Ñ*:Ð;MÑ*NÔVX×V^ÑV^Ñ_ÐÜ—7’7Ð+Ó,‰Dä" 7¨7Ñ#3Ð4HÑ#IÐJ]Ñ#^Ó_ÐÜ—9’9˜YÑ9¸5×;SÑ;SÓ;UÓVˆDÜ�6Š6�$˜q™'‘/×"Ñ"ÜÐAÀ4ÓHÐHô !$ D¨¡G£ˆÔØ"ŒØ×$Ñ$ qÓ(Ð(Ð(à! &Ñ)ˆŒØ ™ˆŒà(¨Ñ6ˆ
Ü�j¤#×&Ñ&ð.Ü ×-Ò-¨jÓ9�
Ü! *¬t´U¼CÄÌÏ
É
Ð.S×TÑTÜ$Ð$ð Uô
 �j¤4¬´·
±
Ð";×<Ñ<Ø# A™ˆJÜ˜:Ó&ˆ
Ø$ˆŒØ�=‰=Ð?Ó?Ü#Ÿm™m×1Ñ1°*Ó=ˆD�OØ�]‰]ð 
ó 
ô !Ÿfšf T§_¡_Ó5ˆD�Oà(ˆDŒOäÐ2°=ÑAÓBˆÔÜÐ0°Ñ=Ó>ˆŒà˜Ñ  Ñ)ˆÜ˜U›ˆŒàˆÔØˆŒØˆÔØˆÔØ24ˆÔØˆŒàˆŒØˆŒØ!ˆÔØˆŒð ˆÔØˆŒà×+Ñ+ˆØÑ$Ü.0¯hªh´r·z²zÀ-Ó7PÐTWÑ7WÓ.XÐYZÑ.[ÐÜÐ&Ó'¨1Ó,Ø>B�Õ(à+>�Õ(à'+ˆDÔ$ô	7ô
 �t—~‘~×&ˆAØ˜‘8ˆDÜ—j’j  i¡Ó1ˆGØ×Ñ×$Ñ$ WÔ-Ø�O‰O×"Ñ"¤2§:¢:¨d°?Ñ.CÌ2Ï8É8Ñ#TÔUØ×Ñ×#Ñ#¤B§J¢J¨tÐ4DÑ/EÌRÏXÉXÑ$VÔWØ×Ñ×#Ñ#¤B§J¢J¨t°OÑ/DÌBÏIÉIÑ$VÔWäŸ*š* T¨.Ñ%9ÄÇÁÑLˆKØ×Ñ 4§?¡?°2Ñ#6×#;Ñ#;Ó;Ü Ð!DÓEÐEá& t¨NÑ';Ó<ˆLÜŸHšH \°QÑ%6¸¿¹ÈÑ8KÈT×M]ÑM]Ð^`ÑMaÓb×iÑiÔjl×jrÑjrÓsˆMØ×!Ñ!×(Ñ(¨Ô7Ø�M‰M× Ñ ¤§¢¨D°Ñ,?ÄrÇzÁzÑ!RÔSà—o‘o bÑ)¨RÑ/ˆGô Ÿš DÐ);Ñ$<ÄBÇJÁJÑOˆJÜŸ(š( 7¨J¸Ó<ˆKÜŸš '¨3°
Ó;ˆJô Ÿš '¨3´·²¸ZÌ"Ï*Ê*ÔUW×U[ÑU[ÓJ\ÐI\Ó0]Ó^ˆJÜ Ÿmšm¨J¼b¿h¹hÑGˆOà�K‰K×Ñ˜{×2Ñ2°;×3CÑ3CÀQÓGÔHØ�O‰O×"Ñ" :Ô.Ø× Ñ ×'Ñ'¨Ô8äŸ
š
 4¨Ñ#8ÄÇÁÑIˆIØ�M‰M× Ñ  Ô+ñ & d¨<Ñ&8Ó9ˆKØ×Ñ×#Ñ# KÔ0ð '+Ð+@Ñ&AˆLØ#'Ð(:Ñ#;ˆIà#'Ð(:Ñ#;ˆIÜ�|Ó$¬¨I«ÕH¼#¸i».ÓHÐHÑHÐHÐHØ˜Ñ%ˆDà"×3Ñ3°I¸|ÈYÐX\Ð^b×^mÑ^mÐnpÑ^qÓrˆOØ�O‰O×"Ñ" ?×3òe '÷I Ž_ûôT ó .ØVÐWaÐVbÐc�Ü  Ó&¨AÐ-ûð.ús%   Á`ÇA`- à
`*à-
aà7aáac                ó`  • SnU (       a  X   nOSn/ n[        [        U5      5       Hƒ  nX†:X  aj  X   n	X%   n
Xš-   nX9U n[        [        U5      5      [        U5      :X  d   eUS-  nU[        U 5      :X  a  SnOX   nU(       d   eUR                  U5        Mr  UR                  / 5        M…     U$ )zÿParse the JSON model to extract partitions of categories for each
node. Returns a list, in which each element is a list of categories for tree
split. For a numerical split, the list is empty.

This is not used yet, only implemented for future reference.

r   r8   r   )rÆ   rs   ÚsetrK  )rW  rU  rV  rX  r'  Úcat_cntÚlast_cat_nodeÚnode_categoriesÚnode_idÚbegru   ÚendÚ	node_catss                r/   rG  Ú#XGBTreeModelLoader.parse_categories²  sÃ   € ð$ ˆÞØ%Ñ.‰MàˆMØ+-ˆÜœS Ó/Ö0ˆGØÓ'Ø"Ñ+�Ø Ñ)�Ø‘j�à  S˜M�	äœ3˜y›>Ó*¬c°)«nÓ<Ð<Ð<Ø˜1‘�Øœc )›nÓ,Ø$&‘Mà$-Ñ$6�MÞ Ð �yØ×&Ñ& yÖ1ð  ×&Ñ& rÖ*ñ% 1ð& Ðr1   Nc           
     óZ  • / n[        U R                  5       H�  nU R                  U   U R                  U   U R                  U   U R
                  U   U R                  U   U R                  U   U R                  U   U R                  U   S.nUR                  [        XQUS95        M‘     U$ )N)rÌ   rÍ   rÎ   re  rf  Úthreshold_typer7  rP   r!  )rÆ   r€  r>  r?  rÎ   rÏ   rÐ   rÑ   rb   rA  rK  r5  )rw   r_   rf   r  rÛ   Úinfos         r/   r^  ÚXGBTreeModelLoader.get_treesß  s¢   € ØˆÜ�t—~‘~Ö&ˆAà!%§¡°Ñ!3Ø"&×"2Ñ"2°1Ñ"5Ø$(×$9Ñ$9¸!Ñ$<ØŸ=™=¨Ñ+Ø!Ÿ_™_¨QÑ/Ø"&×"6Ñ"6°qÑ"9ØŸ™ Q™Ø&*§m¡m°AÑ&6ñ	ˆDð �L‰Lœ DÀ,ÑOÖPñ 'ð ˆr1   c                óL  • [        S5        [        SU R                  5        [        SU R                  5        [        SU R                  5        [        SU R                  5        [        SU R
                  5        [        5         [        S5        [        SU R                  5        g )Nz--- global parameters ---zbase_score =znum_feature =znum_class =z
name_obj =z
name_gbm =z"--- gbtree specific parameters ---)Úprintr‡  r  r  rˆ  r8  r�  s    r/   Ú
print_infoÚXGBTreeModelLoader.print_infoï  sq   € ÜÐ)Ô*Üˆn˜dŸo™oÔ.Üˆo˜t×/Ñ/Ô0Üˆm˜TŸ^™^Ô,Üˆl˜DŸM™MÔ*Üˆl˜DŸM™MÔ*ÜŒÜÐ2Ô3Üˆo˜t×/Ñ/Õ0r1   )r‡  rA   rì  rÎ   rÏ   r‹  r‰  r8  rˆ  r>  r?  r=  r@  r  r  r€  rB  rA  rÑ   rÐ   rb   )r  ÚNone)rW  r1  rU  r1  rV  r1  rX  r1  r'  r2  r  zlist[list[int]]r  )r  zlist[SingleTree])r  r$   r  r  r  r[   r  rG  r^  rk  r  r9   r1   r/   r†  r†    sc   † ÙFô]4ð~ ð*Øð*àð*ð ð*ð ð	*ð
 "ð*ð 
ó*ó ð*öX÷ 	1r1   r†  c                  ó$   • \ rS rSrS rSS jrSrg)r]  iû  c                ó²  • SS K nUR                  5        n[        R                  R	                  US5      nUR                  USS9  [        USS9 n[        R                  " U5      U l	        S S S 5        S S S 5        [        U R                  S   5      U l        U R                  S   S	   S
   S   U l        g ! , (       d  f       NQ= f! , (       d  f       NZ= f)Nr   z
model.jsonÚjson)Úformatzutf-8)ÚencodingÚoblivious_treesÚ
model_inforÃ   Útree_learner_optionsÚdepth)ÚtempfileÚTemporaryDirectoryÚosÚpathÚjoinÚ
save_modelÚopenrp  ÚloadÚloaded_cb_modelrs   r€  rÒ   )rw   Úcb_modelrw  Útmp_dirÚtmp_fileÚfhs         r/   r[   Ú CatBoostTreeModelLoader.__init__ü  s¯   € Ûà×(Ñ(Ô*¨gÜ—w‘w—|‘| G¨\Ó:ˆHØ×Ñ °ÐÑ8Ü�h¨Ò1°RÜ'+§y¢y°£}�Ô$÷ 2÷ +ô ˜T×1Ñ1Ð2CÑDÓEˆŒØ×-Ñ-¨lÑ;¸HÑEÐF\Ñ]Ð^eÑfˆ�÷ 2Õ1ú÷ +Õ*ús#   •;CÁB7Á,CÂ7
C	ÃCÃ
CNc                óè  • / n[        U R                  5       GHF  nU R                  S   U   S   nS/[        U5      S-
  -  U-   n[	        U5      US'   [        [        U5      S-
  SS5       H  nUSU-  S-      USU-  S-      -   Xg'   M     U R                  S   U   S   nS/[        U5      S-
  -  U-   n	[        [        U5      S-
  5       V
s/ s H
  oªS-  S-   PM     nn
US/[        U5      -  -  n[        S[        U5      5       V
s/ s H  oªS-  PM	     nn
US/[        U5      -  -  n[        [        U5      S-
  5       V
s/ s H
  oªS-  S-   PM     nn
US/[        U5      -  -  n/ n/ nU R                  S   U   S    H¢  nUR                  S	5      nUS
:X  a&  UR                  S5      nUR                  US   5        OQUS:X  a&  UR                  S5      nUR                  US   5        O%UR                  S5      nUR                  US   5        UR                  U5        M¤     / n[        US S S2   5       H  u  nnUU/SU-  -  -  nM     US/[        U5      -  -  n/ n[        US S S2   5       H  u  nnUU/SU-  -  -  nM     US/[        U5      -  -  nUR                  [        [        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U	5      R                  S5      [        R                  " U5      S.UUS95        GMI     U$ s  sn
f s  sn
f s  sn
f )Nrs  Úleaf_weightsr   r   r   r8   Úleaf_valuesÚsplitsr-  ÚFloatFeatureÚfloat_feature_indexÚborderÚOneHotFeatureÚcat_feature_indexr7  Úctr_target_border_idx)r8   r   )rÌ   rÍ   rÎ   re  rf  r7  rP   r!  )rÆ   r€  r  rs   rt   r(   rK  rU  r5  r   rJ  r¢   )rw   r_   rf   r  Ú
tree_indexr†  Úleaf_weights_unraveledr­  r‡  Úleaf_values_unraveledrÛ   rÌ   rÍ   rÎ   Úsplit_features_indexÚbordersÚelemr-  Úsplit_feature_indexÚsplit_features_index_unraveledÚcounterÚfeature_indexÚborders_unraveledr‹  s                           r/   r^  Ú!CatBoostTreeModelLoader.get_trees		  s§  € àˆÜ §¡×/ˆJð  ×/Ñ/Ð0AÑBÀ:ÑNÈ~Ñ^ˆLØ&' S¬C°Ó,=ÀÑ,AÑ%BÀ\Ñ%QÐ"Ü(+¨LÓ(9Ð" 1Ñ%Üœs <Ó0°1Ñ4°a¸Ö<�à*¨1¨u©9°q©=Ñ9Ð<RÐSTÐW\ÑS\Ð_`ÑS`Ñ<aÑað 'Ó-ñ =ð
 ×.Ñ.Ð/@ÑAÀ*ÑMÈmÑ\ˆKØ%& C¬3¨{Ó+;¸aÑ+?Ñ$@À;Ñ$NÐ!ä05´c¸+Ó6FÈÑ6JÔ0KÓLÒ0K¨1 ™U QœYÑ0KˆMÐLØ˜b˜T¤C¨Ó$4Ñ4Ñ4ˆMä-2°1´c¸+Ó6FÔ-GÓHÒ-G¨ !œeÑ-GˆNÐHØ˜r˜d¤S¨Ó%5Ñ5Ñ5ˆNä38¼¸[Ó9IÈAÑ9MÔ3NÓOÒ3N¨a A¡¨¤	Ñ3NÐÐOØ  ¤s¨;Ó'7Ñ 7Ñ7Ðð $&Ð ØˆGð ×,Ñ,Ð->Ñ?À
ÑKÈHÔU�Ø!ŸX™X lÓ3�
Ø Ó/Ø*.¯(©(Ð3HÓ*IÐ'Ø—N‘N 4¨¡>Õ2Ø ?Ó2Ø*.¯(©(Ð3FÓ*GÐ'Ø—N‘N 4¨¡=Õ1à*.¯(©(Ð3JÓ*KÐ'Ø—N‘N 4¨¡>Ô2Ø$×+Ñ+Ð,?Ö@ñ Vð .0Ð*Ü*3Ð4HÉÈ2ÈÑ4NÖ*OÑ&�˜Ø.°=°/ÀQÈÁZÑ2PÑPÒ.ñ +Pà*¨q¨c´C¸Ó4DÑ.DÑDÐ*à "ÐÜ#,¨W±T°r°T©]Ö#;‘�˜Ø! f X°°G±Ñ%<Ñ<Ò!ñ $<à ! ¤s¨;Ó'7Ñ!7Ñ7Ðà�L‰LÜä)+¯ª°-Ó)@Ü*,¯(ª(°>Ó*BÜ,.¯HªHÐ5EÓ,FÜ#%§8¢8Ð,JÓ#KÜ%'§X¢XÐ.?Ó%@Ü!#§¢Ð*?Ó!@×!HÑ!HÈÓ!QÜ.0¯hªhÐ7MÓ.Nñð Ø!-ñ÷ñq 0ðP ˆùòm Mùò Iùò  Ps   ÃM%ÄM*ÅM/)r  rÒ   r€  r  )r  r$   r  r  r[   r^  r  r9   r1   r/   r]  r]  û  s   † òg÷Kr1   r]  )r+   r   r  rm  )r5   r`   )r:   r`  r;   r`  r  r`  )<Ú
__future__r   r9  r4  rp  ry  r‹   r)   Útypingr   Únumpyr   ÚpandasrV   Úscipy.sparserN  Úscipy.specialÚ	packagingr   Ú r   Ú_explanationr   Úutilsr	   r
   r   Úutils._exceptionsr   r   r   r   r   Úutils._legacyr   Úutils._warningsr   Ú
_explainerr   Úother._ubjsonr   r   ÚImportErrorrÚ   r   ÚobjectrR   rÔ   rÓ   r0   r6   r=   rD   rF   ri   r5  r<  rX  r†  r]  r9   r1   r/   Ú<module>r¬     sI  ðÝ "ã 
Û 	Û Û 	Û Û Ý ã Û Û Û Ý å Ý &ß GÑ G÷õ õ &Ý 1Ý !Ý /ðPÝðHÛñ “HÐ ð ØØØñ	Ð ð ØØñÐ ô 
ôFnô
ò
ô~�Iô ~÷BGñ G÷Td
ñ d
ôNfˆjô fò6÷"h1ñ h1÷VYò YøðsF ó PÙ˜Ð KÈQ×OÑOûðPûð
 ó HÙ˜	Ð#CÀQ×GÑGûðHús0   Á8C+ Á?D Ã+DÃ1
D Ä DÄD"Ä
DÄD"