
    -i                     X    S SK r SSKJr  SSKJr  SSKJr   " S S5      r " S	 S
5      rg)    N   )__version__)
get_config   )parse_versionc                   Z    \ rS rSrSrSrSr\S 5       r\R                  S 5       rS r
Srg)	_HTMLDocumentationLinkMixin   a  Mixin class allowing to generate a link to the API documentation.

This mixin relies on three attributes:
- `_doc_link_module`: it corresponds to the root module (e.g. `sklearn`). Using this
  mixin, the default value is `sklearn`.
- `_doc_link_template`: it corresponds to the template used to generate the
  link to the API documentation. Using this mixin, the default value is
  `"https://scikit-learn.org/{version_url}/modules/generated/
  {estimator_module}.{estimator_name}.html"`.
- `_doc_link_url_param_generator`: it corresponds to a function that generates the
  parameters to be used in the template when the estimator module and name are not
  sufficient.

The method :meth:`_get_doc_link` generates the link to the API documentation for a
given estimator.

This useful provides all the necessary states for
:func:`sklearn.utils.estimator_html_repr` to generate a link to the API
documentation for the estimator HTML diagram.

Examples
--------
If the default values for `_doc_link_module`, `_doc_link_template` are not suitable,
then you can override them and provide a method to generate the URL parameters:
>>> from sklearn.base import BaseEstimator
>>> doc_link_template = "https://address.local/{single_param}.html"
>>> def url_param_generator(estimator):
...     return {"single_param": estimator.__class__.__name__}
>>> class MyEstimator(BaseEstimator):
...     # use "builtins" since it is the associated module when declaring
...     # the class in a docstring
...     _doc_link_module = "builtins"
...     _doc_link_template = doc_link_template
...     _doc_link_url_param_generator = url_param_generator
>>> estimator = MyEstimator()
>>> estimator._get_doc_link()
'https://address.local/MyEstimator.html'

If instead of overriding the attributes inside the class definition, you want to
override a class instance, you can use `types.MethodType` to bind the method to the
instance:
>>> import types
>>> estimator = BaseEstimator()
>>> estimator._doc_link_template = doc_link_template
>>> estimator._doc_link_url_param_generator = types.MethodType(
...     url_param_generator, estimator)
>>> estimator._get_doc_link()
'https://address.local/BaseEstimator.html'
sklearnNc                     [        [        5      nUR                  c  UR                   SUR                   3nOSn[        U SSU S35      $ )N.dev__doc_link_templatezhttps://scikit-learn.org/z;/modules/generated/{estimator_module}.{estimator_name}.html)r   r   r   majorminorgetattr)selfsklearn_versionversion_urls      P/var/www/html/venv/lib/python3.13/site-packages/sklearn/utils/_repr_html/base.py_doc_link_template._HTMLDocumentationLinkMixin._doc_link_templateA   s_    '4&,2231_5J5J4KLKK!+K= 9; ;	
 	
    c                     [        U SU5        g )Nr   )setattr)r   values     r   r   r   Q   s    +U3r   c                    U R                   R                  R                  S5      S   U R                  :w  a  gU R                  cy  U R                   R
                  nSR                  [        R                  " S U R                   R                  R                  S5      5      5      nU R                  R                  X!S9$ U R                  R                  " S0 U R	                  5       D6$ )a  Generates a link to the API documentation for a given estimator.

This method generates the link to the estimator's documentation page
by using the template defined by the attribute `_doc_link_template`.

Returns
-------
url : str
    The URL to the API documentation for this estimator. If the estimator does
    not belong to module `_doc_link_module`, the empty string (i.e. `""`) is
    returned.
r   r    c                 .    U R                  S5      (       + $ )N_)
startswith)parts    r   <lambda>;_HTMLDocumentationLinkMixin._get_doc_link.<locals>.<lambda>l   s    T__S%9!9r   )estimator_moduleestimator_name )	__class__
__module__split_doc_link_module_doc_link_url_param_generator__name__join	itertools	takewhiler   format)r   r&   r%   s      r   _get_doc_link)_HTMLDocumentationLinkMixin._get_doc_linkU   s     >>$$**3/2d6K6KK--5!^^44N  #xx##9NN--33C8  **11!1 2   &&--U0R0R0TUUr   r'   )r-   r)   __qualname____firstlineno____doc__r+   r,   propertyr   setterr2   __static_attributes__r'   r   r   r	   r	      sH    0d !$(!
 
 4 4Vr   r	   c                   4    \ rS rSrSr\S 5       rS rS rSr	g)ReprHTMLMixinv   zMixin to handle consistently the HTML representation.

When inheriting from this class, you need to define an attribute `_html_repr`
which is a callable that returns the HTML representation to be shown.
c                 R    [        5       S   S:w  a  [        S5      eU R                  $ )zHTML representation of estimator.
This is redundant with the logic of `_repr_mimebundle_`. The latter
should be favored in the long term, `_repr_html_` is only
implemented for consumers who do not interpret `_repr_mimbundle_`.
displaydiagramzW_repr_html_ is only defined when the 'display' configuration option is set to 'diagram')r   AttributeError_repr_html_innerr   s    r   _repr_html_ReprHTMLMixin._repr_html_}   s3     <	"i/  
 $$$r   c                 "    U R                  5       $ )zThis function is returned by the @property `_repr_html_` to make
`hasattr(estimator, "_repr_html_") return `True` or `False` depending
on `get_config()["display"]`.
)
_html_reprrB   s    r   rA   ReprHTMLMixin._repr_html_inner   s    
   r   c                 h    S[        U 5      0n[        5       S   S:X  a  U R                  5       US'   U$ )z8Mime bundle used by jupyter kernels to display estimatorz
text/plainr>   r?   z	text/html)reprr   rF   )r   kwargsoutputs      r   _repr_mimebundle_ReprHTMLMixin._repr_mimebundle_   s5    T
+<	"i/"&//"3F;r   r'   N)
r-   r)   r4   r5   r6   r7   rC   rA   rL   r9   r'   r   r   r;   r;   v   s%     % %!r   r;   )	r/   r   r   _configr   fixesr   r	   r;   r'   r   r   <module>rP      s,      ! !hV hVV" "r   