o
    /if                     @  s   d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dl	Z
ejr/d dlmZ d dlmZ dZeddd,ddZeddd-ddZd.ddZd/ddZdd Zd0d!d"Zdddd#d$d1d*d+ZdS )2    )annotationsN)	lru_cache)Metric)	EvolutionRAGAS_DEBUG   )maxsizereturnstrc                  C  s2   d} t d| }t j|d}t jt d|S )zget cache locationz~/.cacheXDG_CACHE_HOMEragasRAGAS_CACHE_HOME)osgetenvpathjoin
expanduser)DEFAULT_XDG_CACHE_HOME	xdg_cachedefault_ragas_cache r   D/var/www/html/corbot_env/lib/python3.10/site-packages/ragas/utils.pyget_cache_dir   s   r   boolc                   C  s"   t jttd dkrdS dS )NFtrueT)r   environgetDEBUG_ENV_VARr
   lowerr   r   r   r   get_debug_mode   s   r   valuest.List[float]close_tofloat
num_placesintc                   s2   d|  t  fdd| D }|tt|  kS )N
   c                 3  s     | ]}t t|  V  qd S )N)r%   round).0v
multiplierr   r   	<genexpr>'   s    z(check_if_sum_is_close.<locals>.<genexpr>)sumr%   r'   )r    r"   r$   totalr   r*   r   check_if_sum_is_close#   s   r/   modulelevelc                 C  sR   t | }|j|d t  }|t j t d}|| || d|_d S )N)r1   z$[%(name)s.%(levelname)s] %(message)sF)	logging	getLoggersetLevelStreamHandlerDEBUG	FormattersetFormatter
addHandler	propagate)r0   r1   patched_loggerhandler	formatterr   r   r   patch_logger+   s   




r>   c                 C  s"   zt | W S  ty   Y dS w )NF)npisnan	TypeError)xr   r   r   is_nan<   s
   rC   featuret.Union[Metric, Evolution]t.Optional[str]c                   s>   ddl m   fddt|  D }t|dkr|d S d S )Nr   Promptc                   s    g | ]\}}t | r|jqS r   )
isinstancelanguage)r(   _valuerG   r   r   
<listcomp>F   s    z(get_feature_language.<locals>.<listcomp>)ragas.llms.promptrH   varsitemslen)rD   languagsr   rG   r   get_feature_languageC   s
   

rS   F)removalalternativeaddendumpendingsincerT   rU   rV   rW   c                  s   d fdd}|S )a  
    Decorator to mark functions or classes as deprecated.

    Args:
        since: str
             The release at which this API became deprecated.
        removal: str, optional
            The expected removal version. Cannot be used with pending=True.
            Must be specified with pending=False.
        alternative: str, optional
            The alternative API or function to be used instead
            of the deprecated function.
        addendum: str, optional
            Additional text appended directly to the final message.
        pending: bool
            Whether the deprecation version is already scheduled or not.
            Cannot be used with removal.


    Examples
    --------

        .. code-block:: python

            @deprecated("0.1", removal="0.2", alternative="some_new_function")
            def some_old_function():
                print("This is an old function.")

    func
t.Callablec                   s    fdd}|S )Nc                    s   rrt ddj d d}s#r|d d7 }nt d|d7 }r1|d	 d
7 } r:|d  7 }tj|dtd | i |S )Nz5A pending deprecation cannot have a scheduled removalzThe function z was deprecated in ,z and will be removed in the z	 release.z8A non-pending deprecation must have a scheduled removal.z) and will be removed in a future release.z Use z	 instead.    )
stacklevelcategory)
ValueError__name__warningswarnDeprecationWarning)argskwargsmessage)rV   rU   rY   rW   rT   rX   r   r   emit_warningu   s$   z3deprecated.<locals>.deprecate.<locals>.emit_warningr   )rY   rh   rV   rU   rW   rT   rX   )rY   r   	deprecatet   s   zdeprecated.<locals>.deprecateN)rY   rZ   r   )rX   rT   rU   rV   rW   rj   r   ri   r   
deprecatedN   s   &rk   )r	   r
   )r	   r   )r    r!   r"   r#   r$   r%   r	   r   )r0   r
   r1   r%   )rD   rE   r	   rF   )
rX   r
   rT   rF   rU   rF   rV   rF   rW   r   )
__future__r   r2   r   typingtrb   	functoolsr   numpyr?   TYPE_CHECKINGragas.metrics.baser   ragas.testset.evolutionsr   r   r   r   r/   r>   rC   rS   rk   r   r   r   r   <module>   s0    


