a
    h	                     @  sx   d dl mZ d dlZd dlZd dlZd dlmZ ddddZddd	d
dZedd Z	eej
fddZdd ZdS )    )annotationsN)contextmanagerstr)returnc                 C  s8   | j j}|du s|tj jkr$| j jS |d | j j S dS )a  
    Gives a full name (package_name.class_name) for a class / object in Python. Will
    be used to load the correct classes from JSON files

    Args:
        o: The object for which to get the full name.

    Returns:
        str: The full name of the object.

    Example:
        >>> from sentence_transformers.losses import MultipleNegativesRankingLoss
        >>> from sentence_transformers import SentenceTransformer
        >>> from sentence_transformers.util import fullname
        >>> model = SentenceTransformer('all-MiniLM-L6-v2')
        >>> loss = MultipleNegativesRankingLoss(model)
        >>> fullname(loss)
        'sentence_transformers.losses.MultipleNegativesRankingLoss.MultipleNegativesRankingLoss'
    N.)	__class__
__module__r   __name__)omodule r   [/var/www/html/assistant/venv/lib/python3.9/site-packages/sentence_transformers/util/misc.pyfullname	   s    r   type)dotted_pathr   c                 C  s   z|  dd\}}W n$ ty8   |  d}t|Y n0 zt| }W n tyd   t|}Y n0 zt||W S  ty   d| d| d}t|Y n0 dS )a:  
    Import a dotted module path and return the attribute/class designated by the
    last name in the path. Raise ImportError if the import failed.

    Args:
        dotted_path (str): The dotted module path.

    Returns:
        Any: The attribute/class designated by the last name in the path.

    Raises:
        ImportError: If the import failed.

    Example:
        >>> import_from_string('sentence_transformers.losses.MultipleNegativesRankingLoss')
        <class 'sentence_transformers.losses.MultipleNegativesRankingLoss.MultipleNegativesRankingLoss'>
    r      z  doesn't look like a module pathzModule "z" does not define a "z" attribute/classN)rsplit
ValueErrorImportError	importlibimport_module	ExceptiongetattrAttributeError)r   module_path
class_namemsgr   r   r   r   import_from_string%   s    
r   c                  c  sJ   ddl m} m}m} | }z|r&|   dV  W |rF|  n|rD|  0 dS )zN
    A context manager that will disable caching in the datasets library.
    r   )disable_cachingenable_cachingis_caching_enabledN)Zdatasetsr   r   r    )r   r   r    Zis_originally_enabledr   r   r   disable_datasets_cachingI   s    r!   c              	   c  s:   t jjj}t |  zdV  W t | nt | 0 dS )z
    A context manager that will prevent any logging messages
    triggered during the body from being processed.

    Args:
        highest_level: the maximum logging level allowed.
    N)loggingrootmanagerdisable)Zhighest_levelZprevious_levelr   r   r   disable_logging[   s
    	

r&   c                 C  s   t | ddd"}t|}t|}W d    n1 s60    Y  t|dkr|d | t | dddd$}t|}|| W d    n1 s0    Y  dS dS )	N zutf-8)newlineencodingr   wTF)opencsvreaderlistlenextendwriter	writerows)Zcsv_pathZadditional_datafr.   rowsr2   r   r   r   append_to_last_rowm   s    
&
(r6   )
__future__r   r-   r   r"   
contextlibr   r   r   r!   CRITICALr&   r6   r   r   r   r   <module>   s   $
