
    -i                        S r SSKrSSKJr  SSKrSSKJr  SSKJ	r	  SSK
JrJr  SSKJr  SS	KJr  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  SSK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*J+r+  SSK,J-r-J.r.  S/r/S r0S r1 S-S jr2\$" \ " SS/5      \ " SS/5      \ " SS/5      /SS/S\!\3/SS/SS/SS/\#" 1 Sk5      /\4/\"" \!SSS S!9/\#" 1 S"k5      /\#" 1 S#k5      /\5S/S$.S%S&9SSSS'S(S)SS'S*S+.	S, j5       r6g).zBPartial dependence plots for regression and classification models.    N)Iterable)sparse)
mquantiles   )is_classifieris_regressor)RandomForestRegressor)BaseGradientBoosting)BaseHistGradientBoosting)DecisionTreeRegressor)Bunch_safe_indexingcheck_array)_determine_key_type_get_column_indices_safe_assign)check_matplotlib_support)
HasMethodsIntegralInterval
StrOptionsvalidate_params)_get_response_values)	cartesian)_check_sample_weightcheck_is_fitted   )_check_feature_names_get_feature_indexpartial_dependencec           	         [        U[        5      (       a  [        U5      S:w  a  [        S5      e[	        S U 5       5      (       d  [        S5      eUS   US   :  a  [        S5      eUS::  a  [        S5      eS	 nUR                  5        VVs0 s H  u  pgXe" U5      _M     nnn[        S
 UR                  5        5       5      (       a4  SR                  S UR                  5        5       5      n[        SU 35      e/ n	[        U5       H  u  pX;   a  XJ   nO [        R                  " [        X
SS95      nU(       d  UR                  S   U:  a  UnO][        [        X
SS9USS9n[        R                   " US   US   5      (       a  [        S5      e[        R"                  " US   US   USS9nU	R%                  U5        M     ['        U	5      U	4$ s  snnf ! [         a  n[        SU
 S35      UeSnAff = f)a  Generate a grid of points based on the percentiles of X.

The grid is a cartesian product between the columns of ``values``. The
ith column of ``values`` consists in ``grid_resolution`` equally-spaced
points between the percentiles of the jth column of X.

If ``grid_resolution`` is bigger than the number of unique values in the
j-th column of X or if the feature is a categorical feature (by inspecting
`is_categorical`) , then those unique values will be used instead.

Parameters
----------
X : array-like of shape (n_samples, n_target_features)
    The data.

percentiles : tuple of float
    The percentiles which are used to construct the extreme values of
    the grid. Must be in [0, 1].

is_categorical : list of bool
    For each feature, tells whether it is categorical or not. If a feature
    is categorical, then the values used will be the unique ones
    (i.e. categories) instead of the percentiles.

grid_resolution : int
    The number of equally spaced points to be placed on the grid for each
    feature.

custom_values: dict
    Mapping from column index of X to an array-like of values where
    the partial dependence should be calculated for that feature

Returns
-------
grid : ndarray of shape (n_points, n_target_features)
    A value for each feature at each point in the grid. ``n_points`` is
    always ``<= grid_resolution ** X.shape[1]``.

values : list of 1d ndarrays
    The values with which the grid has been created. The size of each
    array ``values[j]`` is either ``grid_resolution``, the number of
    unique values in ``X[:, j]``, if j is not in ``custom_range``.
    If j is in ``custom_range``, then it is the length of ``custom_range[j]``.
r   z/'percentiles' must be a sequence of 2 elements.c              3   L   #    U  H  nS Us=:*  =(       a    S:*  Os  v   M     g7f)r   r   N ).0xs     Y/var/www/html/venv/lib/python3.13/site-packages/sklearn/inspection/_partial_dependence.py	<genexpr>_grid_from_X.<locals>.<genexpr>W   s     0KqqA{{{{Ks   "$z''percentiles' values must be in [0, 1].r   r   z9percentiles[0] must be strictly less than percentiles[1].z2'grid_resolution' must be strictly greater than 1.c                 h    [        S U  5       5      (       a  [        OS n[        R                  " XS9$ )Nc              3   B   #    U  H  n[        U[        5      v   M     g 7fN)
isinstancestrr$   vs     r&   r'   ?_grid_from_X.<locals>._convert_custom_values.<locals>.<genexpr>a   s     A&QjC00&s   )dtype)anyobjectnpasarray)valuesr1   s     r&   _convert_custom_values,_grid_from_X.<locals>._convert_custom_values_   s(    A&AAAtzz&..    c              3   >   #    U  H  oR                   S :g  v   M     g7f)r   Nndimr.   s     r&   r'   r(   e   s     
7 6166Q; 6s   , c              3   p   #    U  H,  u  pUR                   S :w  d  M  SU SUR                    S3v   M.     g7f)r   zFeature z: z dimensionsNr;   )r$   kr/   s      r&   r'   r(   f   s9      !
-vv{ 0hqcAFF8;/-s   66zBThe custom grid for some features is not a one-dimensional array. axiszThe column #z contains mixed data types. Finding unique categories fail due to sorting. It usually means that the column contains `np.nan` values together with `str` categories. Such use case is not yet supported in scikit-learn.N)probrA   ztpercentiles are too close to each other, unable to build the grid. Please choose percentiles that are further apart.T)numendpoint)r,   r   len
ValueErrorallitemsr2   r6   join	enumerater4   uniquer   	TypeErrorshaper   allcloselinspaceappendr   )Xpercentilesis_categoricalgrid_resolutioncustom_valuesr7   r?   r/   error_stringr6   featureis_catrA   uniquesexcemp_percentiless                   r&   _grid_from_Xr\   (   s4   Z k8,,K0@A0EJKK0K000BCC1~Q'TUU!MNN/
 ?L>Q>Q>ST>SdaQ.q11>SMT

7 4 4 6
777yy !
%++-!
 
 Pn
 	

 F %^4# )D
))N1A$FG q)O;  #-"1A6[q# ;;q1?13EFF$2 
 {{#A&#A&'!	 	dO 5R Vf$$s U.   !"7) ,A A
 s   GG
G<'G77G<c                 l    U R                  X5      nUR                  S:X  a  UR                  SS5      nU$ )a  Calculate partial dependence via the recursion method.

The recursion method is in particular enabled for tree-based estimators.

For each `grid` value, a weighted tree traversal is performed: if a split node
involves an input feature of interest, the corresponding left or right branch
is followed; otherwise both branches are followed, each branch being weighted
by the fraction of training samples that entered that branch. Finally, the
partial dependence is given by a weighted average of all the visited leaves
values.

This method is more efficient in terms of speed than the `'brute'` method
(:func:`~sklearn.inspection._partial_dependence._partial_dependence_brute`).
However, here, the partial dependence computation is done explicitly with the
`X` used during training of `est`.

Parameters
----------
est : BaseEstimator
    A fitted estimator object implementing :term:`predict` or
    :term:`decision_function`. Multioutput-multiclass classifiers are not
    supported. Note that `'recursion'` is only supported for some tree-based
    estimators (namely
    :class:`~sklearn.ensemble.GradientBoostingClassifier`,
    :class:`~sklearn.ensemble.GradientBoostingRegressor`,
    :class:`~sklearn.ensemble.HistGradientBoostingClassifier`,
    :class:`~sklearn.ensemble.HistGradientBoostingRegressor`,
    :class:`~sklearn.tree.DecisionTreeRegressor`,
    :class:`~sklearn.ensemble.RandomForestRegressor`,
    ).

grid : array-like of shape (n_points, n_target_features)
    The grid of feature values for which the partial dependence is calculated.
    Note that `n_points` is the number of points in the grid and `n_target_features`
    is the number of features you are doing partial dependence at.

features : array-like of {int, str}
    The feature (e.g. `[0]`) or pair of interacting features
    (e.g. `[(0, 1)]`) for which the partial dependency should be computed.

Returns
-------
averaged_predictions : array-like of shape (n_targets, n_points)
    The averaged predictions for the given `grid` of features values.
    Note that `n_targets` is the number of targets (e.g. 1 for binary
    classification, `n_tasks` for multi-output regression, and `n_classes` for
    multiclass classification) and `n_points` is the number of points in the `grid`.
r   )%_compute_partial_dependence_recursionr<   reshape)estgridfeaturesaveraged_predictionss       r&   _partial_dependence_recursionre      s?    b DDTT  A%  4;;ArBr9   c           	         / n/ nUS:X  a  [        U 5      (       a  SOSS/nUR                  5       nU Hf  n	[        U5       H  u  p[        XU
   US9  M     [	        XUS9u  pUR                  U5        UR                  [        R                  " USUS95        Mh     UR                  S   n[        R                  " U5      R                  n[        U 5      (       a#  UR                  S	:X  a  UR                  US
5      nO:[        U 5      (       a*  UR                  S   S	:X  a  US   nUR                  US
5      n[        R                  " U5      R                  nUR                  S:X  a  UR                  SS
5      nXv4$ )aF  Calculate partial dependence via the brute force method.

The brute method explicitly averages the predictions of an estimator over a
grid of feature values.

For each `grid` value, all the samples from `X` have their variables of
interest replaced by that specific `grid` value. The predictions are then made
and averaged across the samples.

This method is slower than the `'recursion'`
(:func:`~sklearn.inspection._partial_dependence._partial_dependence_recursion`)
version for estimators with this second option. However, with the `'brute'`
force method, the average will be done with the given `X` and not the `X`
used during training, as it is done in the `'recursion'` version. Therefore
the average can always accept `sample_weight` (even when the estimator was
fitted without).

Parameters
----------
est : BaseEstimator
    A fitted estimator object implementing :term:`predict`,
    :term:`predict_proba`, or :term:`decision_function`.
    Multioutput-multiclass classifiers are not supported.

grid : array-like of shape (n_points, n_target_features)
    The grid of feature values for which the partial dependence is calculated.
    Note that `n_points` is the number of points in the grid and `n_target_features`
    is the number of features you are doing partial dependence at.

features : array-like of {int, str}
    The feature (e.g. `[0]`) or pair of interacting features
    (e.g. `[(0, 1)]`) for which the partial dependency should be computed.

X : array-like of shape (n_samples, n_features)
    `X` is used to generate values for the complement features. That is, for
    each value in `grid`, the method will average the prediction of each
    sample from `X` having that grid value for `features`.

response_method : {'auto', 'predict_proba', 'decision_function'},             default='auto'
    Specifies whether to use :term:`predict_proba` or
    :term:`decision_function` as the target response. For regressors
    this parameter is ignored and the response is always the output of
    :term:`predict`. By default, :term:`predict_proba` is tried first
    and we revert to :term:`decision_function` if it doesn't exist.

sample_weight : array-like of shape (n_samples,), default=None
    Sample weights are used to calculate weighted means when averaging the
    model output. If `None`, then samples are equally weighted. Note that
    `sample_weight` does not change the individual predictions.

Returns
-------
averaged_predictions : array-like of shape (n_targets, n_points)
    The averaged predictions for the given `grid` of features values.
    Note that `n_targets` is the number of targets (e.g. 1 for binary
    classification, `n_tasks` for multi-output regression, and `n_classes` for
    multiclass classification) and `n_points` is the number of points in the `grid`.

predictions : array-like
    The predictions for the given `grid` of features values over the samples
    from `X`. For non-multioutput regression and binary classification the
    shape is `(n_instances, n_points)` and for multi-output regression and
    multiclass classification the shape is `(n_targets, n_instances, n_points)`,
    where `n_targets` is the number of targets (`n_tasks` for multi-output
    regression, and `n_classes` for multiclass classification), `n_instances`
    is the number of instances in `X`, and `n_points` is the number of points
    in the `grid`.
autopredictpredict_probadecision_function)column_indexer)response_methodr   )rA   weightsr   r^   r   )r   copyrJ   r   r   rP   r4   averagerM   arrayTr<   r`   r   )ra   rb   rc   rQ   rl   sample_weightpredictionsrd   X_eval
new_valuesivariablepred_	n_sampless                  r&   _partial_dependence_bruter{      sn   P K& %c**IBU0V 	 VVXF
$X.KAAxH / 'sOT4 ##BJJt!]$ST   
I ((;'))KC[--2!)))R8	s		 1 1! 4 9 "!n!)))R8 88$89;;  A%  4;;ArB,,r9   fitrh   ri   rj   z
array-likezsparse matrix>   rg   ri   rj   left)closed>   rg   brute	recursion>   bothro   
individual)	estimatorrQ   rc   rr   categorical_featuresfeature_namesrl   rR   rT   methodkindrU   T)prefer_skip_nested_validationrg   )g?gffffff?d   ro   )	rr   r   r   rl   rR   rT   rU   r   r   c       	         
   [        U 5        [        U 5      (       d  [        U 5      (       d  [        S5      e[        U 5      (       a7  [	        U R
                  S   [        R                  5      (       a  [        S5      e[        US5      (       d*  [        R                  " U5      (       d  [        US[        S9n[        U 5      (       a  US:w  a  [        S5      eUS	:w  a  U
S
:X  a  [        S5      eSn
U
S
:X  a  Ub  [        S5      eU
S:X  aP  Ub  Sn
OJ[	        U [        5      (       a  U R                  c  S
n
O%[	        U [        [         ["        45      (       a  S
n
OSn
U
S
:X  ax  [	        U [        [        [         ["        45      (       d+  Sn[        SR%                  SR'                  U5      5      5      eUS:X  a  SnUS:w  a  [        SR%                  U5      5      eUb  [)        X15      n[+        USS9S:X  aZ  [        R,                  " [        R.                  " US5      5      (       a*  [        SR%                  UR0                  S   S-
  5      5      e[        R2                  " [5        X5      [        R6                  SS9R9                  5       n[;        X5      nUR0                  S   nUc  S/[=        U5      -  nO[        R2                  " U5      nUR>                  S:X  a  [        S5      eUR@                  RB                  S:X  aB  UR>                  U:w  a  [        SUR>                   SU S35      eU Vs/ s H  nUU   PM
     nnOcUR@                  RB                  S;   a0  U Vs/ s H  n[E        UUS 9PM     nnU Vs/ s H  nUU;   PM
     nnO[        S!UR@                   S"35      eU	=(       d    0 n	[	        U[F        [H        45      (       a  U/n[K        XU5       HU  u  nnnU(       a  M  [M        UUSS#9R@                  RB                  S$;   d  M5  [N        RP                  " S%U< S&3[R        5          O   [M        XSS#9n[U        U5       VVs0 s H   u  nnUU	;   d  M  UU	RW                  U5      _M"     nnn[Y        UUUUU5      u  nnU
S:X  aQ  [[        U UXXc5      u  nnUR\                  " S'UR0                  S   /U Vs/ s H  nUR0                  S   PM     snQ76 nO[_        U UU5      nUR\                  " S'/U Vs/ s H  nUR0                  S   PM     snQ76 n[a        US(9nUS	:X  a  UUS	'   U$ US):X  a  WUS)'   U$ UUS	'   WUS)'   U$ s  snf s  snf s  snf s  snnf s  snf s  snf )*a1!  Partial dependence of ``features``.

Partial dependence of a feature (or a set of features) corresponds to
the average response of an estimator for each possible value of the
feature.

Read more in
:ref:`sphx_glr_auto_examples_inspection_plot_partial_dependence.py`
and the :ref:`User Guide <partial_dependence>`.

.. warning::

    For :class:`~sklearn.ensemble.GradientBoostingClassifier` and
    :class:`~sklearn.ensemble.GradientBoostingRegressor`, the
    `'recursion'` method (used by default) will not account for the `init`
    predictor of the boosting process. In practice, this will produce
    the same values as `'brute'` up to a constant offset in the target
    response, provided that `init` is a constant estimator (which is the
    default). However, if `init` is not a constant estimator, the
    partial dependence values are incorrect for `'recursion'` because the
    offset will be sample-dependent. It is preferable to use the `'brute'`
    method. Note that this only applies to
    :class:`~sklearn.ensemble.GradientBoostingClassifier` and
    :class:`~sklearn.ensemble.GradientBoostingRegressor`, not to
    :class:`~sklearn.ensemble.HistGradientBoostingClassifier` and
    :class:`~sklearn.ensemble.HistGradientBoostingRegressor`.

Parameters
----------
estimator : BaseEstimator
    A fitted estimator object implementing :term:`predict`,
    :term:`predict_proba`, or :term:`decision_function`.
    Multioutput-multiclass classifiers are not supported.

X : {array-like, sparse matrix or dataframe} of shape (n_samples, n_features)
    ``X`` is used to generate a grid of values for the target
    ``features`` (where the partial dependence will be evaluated), and
    also to generate values for the complement features when the
    `method` is 'brute'.

features : array-like of {int, str, bool} or int or str
    The feature (e.g. `[0]`) or pair of interacting features
    (e.g. `[(0, 1)]`) for which the partial dependency should be computed.

sample_weight : array-like of shape (n_samples,), default=None
    Sample weights are used to calculate weighted means when averaging the
    model output. If `None`, then samples are equally weighted. If
    `sample_weight` is not `None`, then `method` will be set to `'brute'`.
    Note that `sample_weight` is ignored for `kind='individual'`.

    .. versionadded:: 1.3

categorical_features : array-like of shape (n_features,) or shape             (n_categorical_features,), dtype={bool, int, str}, default=None
    Indicates the categorical features.

    - `None`: no feature will be considered categorical;
    - boolean array-like: boolean mask of shape `(n_features,)`
        indicating which features are categorical. Thus, this array has
        the same shape has `X.shape[1]`;
    - integer or string array-like: integer indices or strings
        indicating categorical features.

    .. versionadded:: 1.2

feature_names : array-like of shape (n_features,), dtype=str, default=None
    Name of each feature; `feature_names[i]` holds the name of the feature
    with index `i`.
    By default, the name of the feature corresponds to their numerical
    index for NumPy array and their column name for pandas dataframe.

    .. versionadded:: 1.2

response_method : {'auto', 'predict_proba', 'decision_function'},             default='auto'
    Specifies whether to use :term:`predict_proba` or
    :term:`decision_function` as the target response. For regressors
    this parameter is ignored and the response is always the output of
    :term:`predict`. By default, :term:`predict_proba` is tried first
    and we revert to :term:`decision_function` if it doesn't exist. If
    ``method`` is 'recursion', the response is always the output of
    :term:`decision_function`.

percentiles : tuple of float, default=(0.05, 0.95)
    The lower and upper percentile used to create the extreme values
    for the grid. Must be in [0, 1].
    This parameter is overridden by `custom_values` if that parameter is set.

grid_resolution : int, default=100
    The number of equally spaced points on the grid, for each target
    feature.
    This parameter is overridden by `custom_values` if that parameter is set.

custom_values : dict
    A dictionary mapping the index of an element of `features` to an array
    of values where the partial dependence should be calculated
    for that feature. Setting a range of values for a feature overrides
    `grid_resolution` and `percentiles`.

    See :ref:`how to use partial_dependence
    <plt_partial_dependence_custom_values>` for an example of how this parameter can
    be used.

    .. versionadded:: 1.7

method : {'auto', 'recursion', 'brute'}, default='auto'
    The method used to calculate the averaged predictions:

    - `'recursion'` is only supported for some tree-based estimators
      (namely
      :class:`~sklearn.ensemble.GradientBoostingClassifier`,
      :class:`~sklearn.ensemble.GradientBoostingRegressor`,
      :class:`~sklearn.ensemble.HistGradientBoostingClassifier`,
      :class:`~sklearn.ensemble.HistGradientBoostingRegressor`,
      :class:`~sklearn.tree.DecisionTreeRegressor`,
      :class:`~sklearn.ensemble.RandomForestRegressor`,
      ) when `kind='average'`.
      This is more efficient in terms of speed.
      With this method, the target response of a
      classifier is always the decision function, not the predicted
      probabilities. Since the `'recursion'` method implicitly computes
      the average of the Individual Conditional Expectation (ICE) by
      design, it is not compatible with ICE and thus `kind` must be
      `'average'`.

    - `'brute'` is supported for any estimator, but is more
      computationally intensive.

    - `'auto'`: the `'recursion'` is used for estimators that support it,
      and `'brute'` is used otherwise. If `sample_weight` is not `None`,
      then `'brute'` is used regardless of the estimator.

    Please see :ref:`this note <pdp_method_differences>` for
    differences between the `'brute'` and `'recursion'` method.

kind : {'average', 'individual', 'both'}, default='average'
    Whether to return the partial dependence averaged across all the
    samples in the dataset or one value per sample or both.
    See Returns below.

    Note that the fast `method='recursion'` option is only available for
    `kind='average'` and `sample_weights=None`. Computing individual
    dependencies and doing weighted averages requires using the slower
    `method='brute'`.

    .. versionadded:: 0.24

Returns
-------
predictions : :class:`~sklearn.utils.Bunch`
    Dictionary-like object, with the following attributes.

    individual : ndarray of shape (n_outputs, n_instances,                 len(values[0]), len(values[1]), ...)
        The predictions for all the points in the grid for all
        samples in X. This is also known as Individual
        Conditional Expectation (ICE).
        Only available when `kind='individual'` or `kind='both'`.

    average : ndarray of shape (n_outputs, len(values[0]),                 len(values[1]), ...)
        The predictions for all the points in the grid, averaged
        over all samples in X (or over the training data if
        `method` is 'recursion').
        Only available when `kind='average'` or `kind='both'`.

    grid_values : seq of 1d ndarrays
        The values with which the grid has been created. The generated
        grid is a cartesian product of the arrays in `grid_values` where
        `len(grid_values) == len(features)`. The size of each array
        `grid_values[j]` is either `grid_resolution`, or the number of
        unique values in `X[:, j]`, whichever is smaller.

        .. versionadded:: 1.3

    `n_outputs` corresponds to the number of classes in a multi-class
    setting, or to the number of tasks for multi-output regression.
    For classical regression and binary classification `n_outputs==1`.
    `n_values_feature_j` corresponds to the size `grid_values[j]`.

See Also
--------
PartialDependenceDisplay.from_estimator : Plot Partial Dependence.
PartialDependenceDisplay : Partial Dependence visualization.

Examples
--------
>>> X = [[0, 0, 2], [1, 0, 0]]
>>> y = [0, 1]
>>> from sklearn.ensemble import GradientBoostingClassifier
>>> gb = GradientBoostingClassifier(random_state=0).fit(X, y)
>>> partial_dependence(gb, features=[0], X=X, percentiles=(0, 1),
...                    grid_resolution=2) # doctest: +SKIP
(array([[-4.52,  4.52]]), [array([ 0.,  1.])])
z5'estimator' must be a fitted regressor or classifier.r   z3Multiclass-multioutput estimators are not supported	__array__z	allow-nan)ensure_all_finiter1   rg   zKThe response_method parameter is ignored for regressors and must be 'auto'.ro   r   zCThe 'recursion' method only applies when 'kind' is set to 'average'r   zFThe 'recursion' method can only be applied when sample_weight is None.)GradientBoostingClassifierGradientBoostingRegressorHistGradientBoostingClassifierHistGradientBoostingRegressorr   r   r	   z[Only the following estimators support the 'recursion' method: {}. Try using method='brute'.r=   rj   zUWith the 'recursion' method, the response_method must be 'decision_function'. Got {}.F)accept_sliceintzall features must be in [0, {}]r   C)r1   orderzPassing an empty list (`[]`) to `categorical_features` is not supported. Use `None` instead to indicate that there are no categorical features.bzeWhen `categorical_features` is a boolean array-like, the array should be of shape (n_features,). Got z elements while `X` contains z
 features.)rv   OU)r   zXExpected `categorical_features` to be an array-like of boolean, integer, or string. Got z	 instead.r@   iuzThe column a?   contains integer data. Partial dependence plots are not supported for integer data: this can lead to implicit rounding with NumPy arrays or even errors with newer pandas versions. Please convert numerical featuresto floating point dtypes ahead of time to avoid problems. This will raise ValueError in scikit-learn 1.9.r^   )grid_valuesr   )1r   r   r   rF   r,   classes_r4   ndarrayhasattrr   issparser   r3   r
   initr   r   r	   formatrI   r   r   r2   lessrM   r5   r   intpravelr   rE   sizer1   r   r   r-   r   zipr   warningswarnFutureWarningrJ   getr\   r{   r`   re   r   )r   rQ   rc   rr   r   r   rl   rR   rT   rU   r   r   supported_classes_recursionfeatures_indices
n_featuresrS   idxcatcategorical_features_idxfeature_idxrW   rX   X_subsetindexcustom_values_for_X_subsetrb   r6   rd   rs   valpdp_resultss                                  r&   r    r    Z  s   N I)$$Y(?(?PQQYJy/A/A!/Dbjj$Q$QNOO A{##vq'9'9[GI?f#<
 	

 y[ U  !:T
 	
 $F	#788Y^^=S F%'<>ST
 
 !FF$(%%	
 
+' 88>II9:9  f$1O11//5vo/F 
  ,]>8%8EA 66"''(A&''>EEaggajSTnUVVzzA(seg  ):MJ#3'7#88!zz*>?$$)( 
  %%**c1#((J6 G+0011N!l*.  DTTCSC237CSNTN!'',,? 0(/C #3mD/ % (
 <L;KC//;K  N ,,@,F,F+GyR 
 "'RM(S#J'':(+,<(W$Wf![q177<<DMMg[ )B B  ! )X$ a:H (1"1NE7m# 	*}  ))1  "  "LD& ,Et-/-
)k "))

6<=fsciilf=
  =t- 
 077
&,-fsciilf- F+Ky!5I  
	$/L!
  "6I$/L!i U(B", > .s*   4U$U>UU UU$
U)
r+   )7__doc__r   collections.abcr   numpyr4   scipyr   scipy.stats.mstatsr   baser   r   ensembler	   ensemble._gbr
   2ensemble._hist_gradient_boosting.gradient_boostingr   treer   utilsr   r   r   utils._indexingr   r   r   utils._optional_dependenciesr   utils._param_validationr   r   r   r   r   utils._responser   utils.extmathr   utils.validationr   r   	_pd_utilsr   r   __all__r\   re   r{   r-   tupledictr    r#   r9   r&   <module>r      sW   H
  $   ) . , / ) 6 6 T T C  3 % D ? 
u%p7 v <@}-@  y)*/0234

 O,!8S1&-!-t 4&-&'UVWw$Xq$vFG<=>=>?!$ #''4 	X+*Xr9   