o
    ?߱iS                     @   s   d dl Z d dlZd dlmZ 	 ddgZzd dlmZ edg7 ZW n	 ey)   Y nw dedefd	dZ	e	Z
d
edefddZdS )    N)Anylocateconvert_target_to_string)Registryr   treturnc              	   C   s   t | drt| jr| j}|j}|j d| j }n| j}| j}|d}tdt	|D ](}d
|d| }| d| }zt|| u rK|W   S W q- tyU   Y q-w | d| S )zl
    Inverse of ``locate()``.

    Args:
        t: any object with ``__module__`` and ``__qualname__``
    __self__.   N)hasattrinspectisclassr   
__module____name____qualname__splitrangelenjoinr   ImportError)r   clsmodulequalnameZmodule_partskprefix	candidate r   ^/data/cameron/vidgen/cosmos-predict2.5/cosmos_predict2/_src/imaginaire/lazy_config/registry.pyr   #   s$   

namec              
   C   sZ   t | }|du r+zddlm} W n ty& } z	td|  d|d}~ww || }|S )z
    Locate and return an object ``x`` using an input string ``{x.__module__}.{x.__qualname__}``,
    such as "module.submodule.class_name".

    Raise Exception if it cannot be found.
    Nr   )_locatez!Cannot dynamically locate object !)pydocr   Zhydra.utilsr   r   )r   objr   er   r   r   r   F   s   
)r   r!   typingr   __all__Zfvcore.common.registryr   	Exceptionstrr   _convert_target_to_stringr   r   r   r   r   <module>   s    