o
    e                  	   @   s   d dl Z d dlmZ d dlmZmZ d dlmZ deeeeef  deeeeeef  fddZ			ddeeeeef  d
e
fddZdeeeeef  fddZdS )    N)import_module)ListTuple)Versiondependencies_versionsreturnc           	   	   C   s   g }dd dd dd d}| D ]6\}}}t |}|j}||vr0td| dd|  d	|| t|t|}|sF|||||f q|S )
a  
    Get a list of mismatching dependencies with current version installed.
    E.g., assuming we pass `get_wrong_dependencies_versions([("torch", "==", "1.2.0")]),
        we will check if the current version of `torch` is `==1.2.0`. If not,
        we will return `[("torch", "==", "1.2.0", "<current_installed_version>")]

    We support `<=`, `==`, `>=`

    Args:
        dependencies_versions (List[Tuple[str, str]]): List of dependencies
            we want to check, [("<package_name>", "<version_number_to_check")]

    Returns:
        List[Tuple[str, str, str]]: List of dependencies with wrong version,
            [("<package_name>", "<version_number_to_check", "<current_version>")]
    c                 S   s   | |kS N xyr	   r	   E/var/www/myenv/lib/python3.10/site-packages/roboflow/util/versions.py<lambda>       z1get_wrong_dependencies_versions.<locals>.<lambda>c                 S   s   | |kS r   r	   r
   r	   r	   r   r      r   c                 S   s   | |kS r   r	   r
   r	   r	   r   r      r   )z==z>=z<=zorder=z not supported, please use `z, `)r   __version__
ValueErrorjoinkeysr   append)	r   wrong_dependencies_versionsorder_funcs
dependencyorderversionmodulemodule_versionis_okayr	   r	   r   get_wrong_dependencies_versions   s    r   Fask_to_continuec                 C   st   t | }|D ]1\}}}}td| | | d| d| | | d |r7td| d}| dkr7td qd S )	NzDependency z is required but found version=z, to fix: `pip install r   z5Would you like to continue with the wrong version of z? y/n: r      )r   printinputlowersysexit)r   r   r   r   r   r   r   answerr	   r	   r   *print_warn_for_wrong_dependencies_versions-   s&   
r'   c                    s    fdd}|S )aI  
    Decorator to print a warning based on dependencies versions. E.g.

    ```python
    @warn_for_wrong_dependencies_versions([("torch", "==", "1.2.0")])
    def foo(x):
        # I only work with torch `1.2.0` but another one is installed
        print(f"foo {x}")
    ```

    prints:

    ```
    Dependency torch==1.2.0 is required but found version=1.13.1,
        to fix: `pip install torch==1.2.0`
    ```

    Args:
        dependencies_versions (List[Tuple[str, str]]): List of dependencies
            we want to check, [("<package_name>", "<version_number_to_check")]
    c                    s    fdd}|S )Nc                     s   t   | i | d S r   )r'   )argskwargs)r   funcr	   r   _wrapperU   s   zFwarn_for_wrong_dependencies_versions.<locals>._inner.<locals>._wrapperr	   )r*   r+   r   )r*   r   _innerT   s   z4warn_for_wrong_dependencies_versions.<locals>._innerr	   )r   r-   r	   r,   r   $warn_for_wrong_dependencies_versions=   s   r.   )F)r$   	importlibr   typingr   r   packaging.versionr   strr   boolr'   r.   r	   r	   r	   r   <module>   s     
&
 