
    bcg:,                         d dl mZ d dlZ	 d dlmZmZ dd	l	m
Z
 eej                  eefZg Z G d
 de      Z G d de      Zd Zd Zd Zd Zd Zd Z e        y# e$ r  G d de      Z G d de      ZY ew xY w)    )partialN)	DataFrameSeriesc                       e Zd Zy)r   N__name__
__module____qualname__     K/var/www/html/bid-api/venv/lib/python3.12/site-packages/catboost/metrics.pyr   r          r   r   c                       e Zd Zy)r   Nr   r   r   r   r   r   
   r   r   r      )	_catboostc                   H    e Zd Zed        Zd Zd Z	 	 	 	 	 	 ddZd Zd Z	y)	BuiltinMetricc                      t        d      )a#  
        For each valid metric parameter, returns its default value and if this parameter is mandatory.
        Implemented in child classes.

        Returns
        ----------
        valid_params: dict: param_name -> {'default_value': default value or None, 'is_mandatory': bool}
        (Should be overridden by the child class.NotImplementedErrorr   r   r   params_with_defaultsz"BuiltinMetric.params_with_defaults   s     ""LMMr   c                     t        d      )z
        Gets the representation of the metric object with overridden parameters.
        Implemented in child classes.

        Returns
        ----------
        metric_string: str representing the metric object.
        r   r   selfs    r   __str__zBuiltinMetric.__str__#        ""LMMr   c                     t        d      )z
        Sets hints for the metric. Hints are not validated.
        Implemented in child classes.

        Returns
        ----------
        self: for chained calls.
        r   r   )r   hintss     r   	set_hintszBuiltinMetric.set_hints.   r   r   Nc	                     t        |      dkD  rt        |d   t              s|g}t        |      dk(  rg g}t        |d   t              s|g}t        j                  ||t        |       ||||||	      S )a  
        Evaluate the metric with raw approxes and labels.

        Parameters
        ----------
        label : list or numpy.ndarrays or pandas.DataFrame or pandas.Series
            Object labels.

        approx : list or numpy.ndarrays or pandas.DataFrame or pandas.Series
            Object approxes.

        weight : list or numpy.ndarray or pandas.DataFrame or pandas.Series, optional (default=None)
            Object weights.

        group_id : list or numpy.ndarray or pandas.DataFrame or pandas.Series, optional (default=None)
            Object group ids.

        group_weight : list or numpy.ndarray or pandas.DataFrame or pandas.Series, optional (default=None)
            Group weights.

        subgroup_id : list or numpy.ndarray, optional (default=None)
            subgroup id for each instance.
            If not None, giving 1 dimensional array like data.

        pairs : list or numpy.ndarray or pandas.DataFrame or string or pathlib.Path
            The pairs description.
            If list or numpy.ndarrays or pandas.DataFrame, giving 2 dimensional.
            The shape should be Nx2, where N is the pairs' count. The first element of the pair is
            the index of winner object in the training set. The second element of the pair is
            the index of loser object in the training set.
            If string or pathlib.Path, giving the path to the file with pairs description.

        thread_count : int, optional (default=-1)
            Number of threads to work with.
            If -1, then the number of threads is set to the number of CPU cores.

        Returns
        -------
        metric results : list with metric values.
        r   )len
isinstance_ARRAY_TYPESr   _eval_metric_utilstr)	r   labelapproxweightgroup_idgroup_weightsubgroup_idpairsthread_counts	            r   evalzBuiltinMetric.eval9   sx    f u:>*U1X|"DGEv;!TF&)\2XF**63t9fhkSXZf
 	
r   c                 >    t        j                  t        |             S )zj
        Returns
        ----------
        bool : True if metric is maximizable, False otherwise
        )r   is_maximizable_metricr&   r   s    r   is_max_optimalzBuiltinMetric.is_max_optimalv        ..s4y99r   c                 >    t        j                  t        |             S )zk
        Returns
        ----------
        bool :  True if metric is minimizable, False otherwise
        )r   is_minimizable_metricr&   r   s    r   is_min_optimalzBuiltinMetric.is_min_optimal~   r3   r   )NNNNN)
r   r	   r
   staticmethodr   r   r    r/   r2   r6   r   r   r   r   r      sF    	N 	N	N	N ;
z::r   r   c                   6     e Zd Z fdZd Zd Zd Zd Z xZS )_MetricGeneratorc           
         d   D ]P  }t        t        t        |      t        t        |      t        t        |      dj                  ||            |<   R t        fd      d<   dj                  |      dg}d   s|dxx   d	z  cc<   d   j                         D ]^  \  }}d
   |   s.|j                  ddj                  |t        |            z          <|j                  ddj                  |      z          ` dj                  |      d<   d d<   t        d<   d }|d<   t        t        | ;  | ||      }	|	S )N_valid_params)namezParameter {} of metric {}c                  p    d   j                         D  ci c]  \  } }| |d   |    d c}} S c c}} w )Nr<   _is_mandatory_param)default_valueis_mandatory)items)paramr@   attrss     r   <lambda>z*_MetricGenerator.__new__.<locals>.<lambda>   sZ    Z_`oZpZvZvZx>zZxBV% ?DWdV[\qVrsxVyF{ ?{Zx>z >zs   2r   zBuiltin metric: '{}'zParameters:r7   z noner?   z    z{} = {} (default value)z{} (mandatory)
__doc__c                    dj                  | j                  dj                  t        | d      j	                         D cg c].  \  }}dj                  |t        |      | j                  |         0 c}}            S c c}}w )Nz{}({})z, Fz{}={} [mandatory={}])format_underlying_metric_namejoin_current_paramsrB   reprr?   )r   rC   values      r   rE   z*_MetricGenerator.__new__.<locals>.<lambda>   sy    ((II*9$*F*L*L*NP*N,% .44UDKIaIabgIhi*NP Q*
Ps   3A>__repr__r   c                    |j                         D ]2  \  }}t        |t              st        |      j	                         ||<   4 t        | ddj                  |j                         D cg c]  \  }}dj                  ||       c}}             d| j                  vr| j                  j                  d       | S c c}}w )Nr   |z{}~{})
rB   r#   boolr&   lowersetattrrK   rI   _paramsappend)r   r   hint_key
hint_values       r   r    z+_MetricGenerator.__new__.<locals>.set_hints   s    (-$*j$/&)*o&;&;&=E(O )6 D'CHHotozozo|-}o|WkW_akgnnXz.Ro|-}$~dll*##G,K .~s   +B>r    )propertyr   
_get_param
_set_param
_del_paramrI   r8   rB   rV   rM   rK   
_to_stringsuperr:   __new__)mcsr=   parentsrD   k	docstringrC   rN   r    cls	__class__s      `      r   r_   z_MetricGenerator.__new__   s`   'A
+
+
++221d;	E!H ( )5 6z ){$% .44T:MJ	_%bMW$M!/288:LE5./6  +D+K+KESWX]S^+_!_`  +;+B+B5+I!IJ	 ;
  99Y/i
j
 &i	 'k$c23guM
r   c                 x   | j                  |       }| j                  j                         D ci c]  \  }}||
 }}}| j                  j                         D ci c]	  \  }}||  }}}|j                         D ]7  \  }}	|| j                  vrt	        dj                  |            |	||<   d||<   9 |j                         D ]!  \  }}
|
r	t	        dj                  |             |j                         D ]  \  }}	t        ||	|        t        |j                               |_	        |S c c}}w c c}}w )NzUnexpected parameter {}Tz0Parameter {} is mandatory and must be specified.)
r_   r<   rB   r?   
ValueErrorrI   r[   listkeysrU   )rd   kwargs
metric_objrb   vparamsrC   	mandatoryparam_is_setrN   is_sets              r   __call__z_MetricGenerator.__call__   s3   [[%
#&#4#4#:#:#<=#<41a!Q$#<=EHE\E\EbEbEdeEd1A	9},Ede #LLNLE5C--- !:!A!A%!HII!F5M"&L	 + *//1ME6 !S!Z!Z[`!abb 2 #LLNLE5z5%0 +!&++-0
' >es   D0D6c                     | j                   S )N)rG   )rd   s    r   rO   z_MetricGenerator.__repr__   s    {{r   c                 n    |dv rt        dj                  |            t        j                  | ||       y N)r<   r?   z/Metric's `{}` shouldn't be modified or deleted.)rg   rI   type__setattr__)rd   r=   rN   s      r   rv   z_MetricGenerator.__setattr__   s5    ;;PWWX\]^^dE*r   c                 l    |dv rt        dj                  |            t        j                  | |       y rt   )rg   rI   ru   __delattr__)rd   r=   s     r   rx   z_MetricGenerator.__delattr__   s3    ;;PWWX\]^^d#r   )	r   r	   r
   r_   rq   rO   rv   rx   __classcell__)re   s   @r   r:   r:      s    (T.+$r   r:   c                     || j                   vr%t        dj                  | j                  |            t	        | d|z         S )N&Metric {} doesn't have a parameter {}._)r<   rg   rI   r   getattr)rk   r=   s     r   rZ   rZ      sA    :+++BII*J]J]_cdee:s4x((r   c                     || j                   vr%t        dj                  | j                  |            t	        | d|z   |       y):Validate a new parameter value in a created metric object.r{   r|   N)r<   rg   rI   r   rT   )rk   rN   r=   s      r   r[   r[      s@    :+++BII*J]J]_cdeeJd
E*r   c                     || j                   vr%t        dj                  | j                  |            | j                  |   rt        dj                  |            | j                   |   }t        | d|z   |       y)r   r{   z(Parameter {} is mandatory, cannot reset.r|   N)r<   rg   rI   r   r?   rT   )rk   r=   rN   s      r   r\   r\      su    :+++BII*J]J]_cdee%%d+CJJ4PQQ$$T*EJd
E*r   c                     | j                         }i }t        | j                        D ]4  }t        | |      }|dk(  r|dk(  r|r||   d   }|||||k(  r0|||<   6 |S )Nr    r@   )r   sortedrU   r}   )rk   override_onlyr   
param_inforC   rN   r@   s          r   rL   rL      s    %::<J
**+
E*G07HM%%-]=V[hlq[q!
5 , r   c           
          d }t        | d      }| j                  }t        |      dk(  r|S dj                  |dj	                  t        ||j                                           S )Nc                     | \  }}|dk(  r.dj                  t        t        |j                                     }nt        |      }dj	                  ||      S )Nmisclass_cost_matrix/z{}={})rK   mapr&   flattenrI   )	dict_itemrC   rN   	str_values       r   _param_to_stringz$_to_string.<locals>._param_to_string  sI     u**S%--/!:;IE
I~~eY//r   Tr   z{}:{};)rL   rJ   r"   rI   rK   r   rB   )rk   r   r   underlying_names       r   r]   r]     s]    0 !T2J 88O
:!>>/388C8H*JZJZJ\4]+^__r   c            
         t        j                         j                         D ]  \  } }|D ]  }| |d   z   }|d= |j                         D ci c]  \  }}||d   s|d   nd  }}}|j                         D ci c]  \  }}||d    }}}d|vr&|j                  ddi       |j                  ddi       t	        t        |      t        f||| d      t               |<   t               d   j                  |         y c c}}w c c}}w )	N_name_suffixrA   r@   r   r   F)r<   r?   rJ   __all__)	r   AllMetricsParamsrB   updater:   r&   r   globalsrV   )metric_namemetric_param_sets	param_setderived_namerC   param_valuevalid_paramsis_mandatory_params           r   _generate_metric_classesr     s2   *3*D*D*F*L*L*N&&*I&>)BBL.)6?oo6GI6G 2{ "{SaGb;#?hll6G  I_h_n_n_p!q_pI[P[%^)D"D_p!ql*##WbM2"))7E*:;&6s<7H=JZ!-'9+6] 'GIl#
 Ii ''5 + +OI!qs   D
9D
)	functoolsr   numpynppandasr   r   ImportErrorobjectr   r   rh   ndarrayr$   r   r   ru   r:   rZ   r[   r\   rL   r]   r   r   r   r   <module>r      s     (  bjj)V4
n:F n:bO$t O$d)++"`"6&    F  	s   A A:9A: