o
    Ô­j¬2  ã                   @   s®  d dl Z d dlZd dlZd dlmZ g d¢Ze d¡ZG dd„ deƒZ	G dd„ deƒZ
d	d
„ Zdd„ ZG dd„ dƒZG dd„ dƒZdd„ Zdd„ Zdd„ Zdd„ ZdCdd„ZdCdd„Zi ZdCdd„Zedk�rSd d lmZ d dlZeƒ Zejd!d"d#d$d%� ejd&d'd#d(d%� ejd)d*d+d,� ejd-d.d#d/d%� ejd0d1d2d,� ejd3d4d#d2d%� ejd5d6d7d,� e e j¡\ZZ e!e ƒd8k rÂe"d9ƒ‚ej#rße d:¡Z$e$D ]Z%ee%ƒZ&e'd;e&j(e&j(e&j)f ƒ qÌe d< Z*ej+ ,d=¡Z-e-rôee*d>d?e-gƒZ&nee*d>d?gƒZ&ej.�rej.Z.nd@Z.ej/�r&e 0dAej/¡Z1e1�se"dBƒ‚e1 2d<¡Z(e1 2d8¡Z3e3e&j4e(< ej5�r1e'e& 5e.¡ƒ ej6�r<e'e& 6e.¡ƒ ej7�rEe'e&j7ƒ ej8�rUe'e&j7ej8kƒ dS dS dS )Dé    N)ÚRawConfigParser)ÚFormatErrorÚPkgNotFoundÚLibraryInfoÚVariableSetÚread_configÚparse_flagsz\$\{([a-zA-Z0-9_-]+)\}c                   @   ó    e Zd ZdZdd„ Zdd„ ZdS )r   zQ
    Exception thrown when there is a problem parsing a configuration file.

    c                 C   ó
   || _ d S ©N©Úmsg©Úselfr   © r   ú[/var/www/html/CropPilot/venv/lib/python3.10/site-packages/numpy/distutils/npy_pkg_config.pyÚ__init__   ó   
zFormatError.__init__c                 C   ó   | j S r   r   ©r   r   r   r   Ú__str__   ó   zFormatError.__str__N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r      s    r   c                   @   r	   )r   z3Exception raised when a package can not be located.c                 C   r
   r   r   r   r   r   r   r      r   zPkgNotFound.__init__c                 C   r   r   r   r   r   r   r   r      r   zPkgNotFound.__str__Nr   r   r   r   r   r      s    r   c                 C   sæ   g g g g g dœ}d|    d¡}|D ]_}d| }t|ƒdkrp| d¡r0|d  |dd	…  ¡ ¡ q| d
¡rC|d  |dd	…  ¡ ¡ q| d¡rV|d  |dd	…  ¡ ¡ q| d¡ri|d  |dd	…  ¡ ¡ q|d  |¡ q|S )a¶  
    Parse a line from a config file containing compile flags.

    Parameters
    ----------
    line : str
        A single line containing one or more compile flags.

    Returns
    -------
    d : dict
        Dictionary of parsed flags, split into relevant categories.
        These categories are the keys of `d`:

        * 'include_dirs'
        * 'library_dirs'
        * 'libraries'
        * 'macros'
        * 'ignored'

    )Úinclude_dirsÚlibrary_dirsÚ	librariesÚmacrosÚignoredú z -ú-r   z-Ir   é   Nz-Lr   z-lr   z-Dr    r!   )ÚsplitÚlenÚ
startswithÚappendÚstrip)ÚlineÚdÚflagsÚflagr   r   r   r      s$   ÿ



€r   c                 C   s   |   dd¡S )Nú\z\\)Úreplace)Úvalr   r   r   Ú_escape_backslashI   s   r1   c                   @   s>   e Zd ZdZddd„Zdd„ Zddd	„Zdd
d„Zdd„ ZdS )r   a$  
    Object containing build information about a library.

    Parameters
    ----------
    name : str
        The library name.
    description : str
        Description of the library.
    version : str
        Version string.
    sections : dict
        The sections of the configuration file for the library. The keys are
        the section headers, the values the text under each header.
    vars : class instance
        A `VariableSet` instance, which contains ``(name, value)`` pairs for
        variables defined in the configuration file for the library.
    requires : sequence, optional
        The required libraries for the library to be installed.

    Notes
    -----
    All input parameters (except "sections" which is a method) are available as
    attributes of the same name.

    Nc                 C   s4   || _ || _|r|| _ng | _|| _|| _|| _d S r   )ÚnameÚdescriptionÚrequiresÚversionÚ	_sectionsÚvars)r   r2   r3   r5   Úsectionsr7   r4   r   r   r   r   g   s   
zLibraryInfo.__init__c                 C   ó   t | j ¡ ƒS )zÚ
        Return the section headers of the config file.

        Parameters
        ----------
        None

        Returns
        -------
        keys : list of str
            The list of section headers.

        )Úlistr6   Úkeysr   r   r   r   r8   r   ó   zLibraryInfo.sectionsÚdefaultc                 C   ó   | j  | j| d ¡}t|ƒS )NÚcflags©r7   Úinterpolater6   r1   ©r   Úsectionr0   r   r   r   r?   ‚   ó   zLibraryInfo.cflagsc                 C   r>   )NÚlibsr@   rB   r   r   r   rE   †   rD   zLibraryInfo.libsc                 C   sV   d| j  d| j g}| jr| d¡ n| dd | j¡ ¡ | d| j ¡ d |¡S )NzName: %szDescription: %sz	Requires:zRequires: %sú,zVersion: %sÚ
)r2   r3   r4   r(   Újoinr5   )r   Úmr   r   r   r   Š   s   
zLibraryInfo.__str__r   )r=   )	r   r   r   r   r   r8   r?   rE   r   r   r   r   r   r   L   s    


r   c                   @   sH   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dS )r   a  
    Container object for the variables defined in a config file.

    `VariableSet` can be used as a plain dictionary, with the variable names
    as keys.

    Parameters
    ----------
    d : dict
        Dict of items in the "variables" section of the configuration file.

    c                 C   s0   t dd„ | ¡ D ƒƒ| _i | _i | _|  ¡  d S )Nc                 S   s   g | ]\}}||f‘qS r   r   )Ú.0ÚkÚvr   r   r   Ú
<listcomp>¢   ó    z(VariableSet.__init__.<locals>.<listcomp>)ÚdictÚitemsÚ	_raw_dataÚ_reÚ_re_subÚ_init_parse)r   r+   r   r   r   r   ¡   s   zVariableSet.__init__c                 C   s$   | j  ¡ D ]
\}}|  ||¡ qd S r   )rQ   rP   Ú_init_parse_var)r   rK   rL   r   r   r   rT   ©   s   ÿzVariableSet._init_parsec                 C   s"   t  d| ¡| j|< || j|< d S )Nz\$\{%s\})ÚreÚcompilerR   rS   ©r   r2   Úvaluer   r   r   rU   ­   s   zVariableSet._init_parse_varc                    s>   ‡ fdd„}t  |¡r||ƒ}||kr	 |S |}t  |¡s|S )Nc                    s,   ˆ j  ¡ D ]}ˆ j |  ˆ j| | ¡} q| S r   )rR   r;   ÚsubrS   )rY   rK   r   r   r   Ú_interpolate´   s   z-VariableSet.interpolate.<locals>._interpolate)Ú_VARÚsearch)r   rY   r[   Únvaluer   r   r   rA   ±   s   
þ
üzVariableSet.interpolatec                 C   r9   )zì
        Return the list of variable names.

        Parameters
        ----------
        None

        Returns
        -------
        names : list of str
            The names of all variables in the `VariableSet` instance.

        )r:   rQ   r;   r   r   r   r   Ú	variablesÀ   r<   zVariableSet.variablesc                 C   s
   | j | S r   )rQ   )r   r2   r   r   r   Ú__getitem__Ñ   r   zVariableSet.__getitem__c                 C   s   || j |< |  ||¡ d S r   )rQ   rU   rX   r   r   r   Ú__setitem__Ô   s   
zVariableSet.__setitem__N)r   r   r   r   r   rT   rU   rA   r_   r`   ra   r   r   r   r   r   ”   s    r   c                 C   sR   |   d¡s	tdƒ‚t|  d¡ƒ}dD ]}||vrtd| ƒ‚qd|vr'g |d< |S )NÚmetazNo meta section found !)r2   r3   r5   z6Option %s (section [meta]) is mandatory, but not foundr4   )Úhas_sectionr   rO   rP   )Úconfigr+   rK   r   r   r   Ú
parse_metaØ   s   
ÿÿre   c                 C   s:   |   d¡s	tdƒ‚i }|  d¡D ]\}}|||< qt|ƒS )Nr_   zNo variables section found !)rc   r   rP   r   )rd   r+   r2   rY   r   r   r   Úparse_variablesè   s   

rf   c                 C   s   t tfS r   )Úmeta_dÚr)rd   r   r   r   Úparse_sectionsó   ó   ri   c                 C   s   d|  S )Nz%s.inir   )Úpkg_namer   r   r   Úpkg_to_filenameö   rj   rl   c                    sô   |r‡ fdd„|D ƒ}nˆ g}t ƒ }| |¡}t|ƒdks%tdt|ƒ ƒ‚t|ƒ}i }| d¡r@| d¡D ]
\}}t|ƒ||< q5dd„ | 	¡ D ƒ}	i }
i }|	D ]$}i }| 
|d¡ra| |d¡||< | |¡D ]\}}|||< qf||
|< qO|||
|fS )Nc                    s   g | ]	}t j |ˆ ¡‘qS r   )ÚosÚpathrH   )rJ   r+   ©Úfilenamer   r   rM   û   s    z parse_config.<locals>.<listcomp>é   zCould not find file(s) %sr_   c                 S   s   g | ]}|d vr|‘qS ))rb   r_   r   )rJ   Úsr   r   r   rM     rN   r4   )r   Úreadr&   r   Ústrre   rc   rP   r1   r8   Ú
has_optionÚget)rp   ÚdirsÚ	filenamesrd   Únrb   r7   r2   rY   Úsecsr8   r4   rr   r+   r   ro   r   Úparse_configù   s.   



r{   c                    s–   ‡ ‡fdd„‰ ˆ | ƒ\}}}}d|vr:d|v r:|d }|t jvr*td||d f ƒ‚t j| }ttj |j¡ƒ|d< t|d |d |d |t	|ƒd	�S )
Nc                    s˜   t | ˆƒ\}}}}| ¡ D ]8\}}ˆ t|ƒƒ\}}}	}
| ¡ D ]\}}||vr+|||< q|	|  ¡ D ]\}}|rD|| |  d| 7  < q2q||||fS )Nz %s)r{   rP   rl   )Úfrb   r7   r8   ÚreqsÚrnameÚrvalueÚnmetaÚnvarsÚ	nsectionsÚnreqsrK   rL   ÚonameÚovalue©Ú_read_configrw   r   r   r‡     s   €€þz&_read_config_imp.<locals>._read_configÚpkgdirÚpkgnamez-You should import %s to get information on %sr2   r3   r5   )r2   r3   r5   r8   r7   )
ÚsysÚmodulesÚ
ValueErrorr1   rm   rn   ÚdirnameÚ__file__r   r   )rx   rw   rb   r7   r8   r}   r‰   Úmodr   r†   r   Ú_read_config_imp  s   

ÿ
ÿr�   c                 C   s8   zt |  W S  ty   tt| ƒ|ƒ}|t | < | Y S w )a  
    Return library info for a package from its configuration file.

    Parameters
    ----------
    pkgname : str
        Name of the package (should match the name of the .ini file, without
        the extension, e.g. foo for the file foo.ini).
    dirs : sequence, optional
        If given, should be a sequence of directories - usually including
        the NumPy base directory - where to look for npy-pkg-config files.

    Returns
    -------
    pkginfo : class instance
        The `LibraryInfo` instance containing the build information.

    Raises
    ------
    PkgNotFound
        If the package is not found.

    See Also
    --------
    misc_util.get_info, misc_util.get_pkg_info

    Examples
    --------
    >>> npymath_info = np.distutils.npy_pkg_config.read_config('npymath')
    >>> type(npymath_info)
    <class 'numpy.distutils.npy_pkg_config.LibraryInfo'>
    >>> print(npymath_info)
    Name: npymath
    Description: Portable, core math library implementing C99 standard
    Requires:
    Version: 0.1  #random

    )Ú_CACHEÚKeyErrorr�   rl   )r‰   rw   rL   r   r   r   r   F  s   '
ýr   Ú__main__)ÚOptionParserz--cflagsr?   Ú
store_truez*output all preprocessor and compiler flags)ÚdestÚactionÚhelpz--libsrE   zoutput all linker flagsz--use-sectionrC   z/use this section instead of default for options)r–   r˜   z	--versionr5   zoutput versionz--atleast-versionÚmin_versionzMinimal versionz
--list-allÚlist_allz--define-variableÚdefine_variablez%Replace variable with the given valuer$   z(Expect package name on the command line:z*.iniz
%s	%s - %srq   ÚNPY_PKG_CONFIG_PATHznumpy/core/lib/npy-pkg-configÚ.r=   z([\S]+)=([\S]+)zH--define-variable option should be of the form --define-variable=foo=barr   )9rŠ   rV   rm   Úconfigparserr   Ú__all__rW   r\   ÚOSErrorr   r   r   r1   r   r   re   rf   ri   rl   r{   r�   r‘   r   r   Úoptparser”   ÚglobÚparserÚ
add_optionÚ
parse_argsÚargvÚoptionsÚargsr&   rŒ   rš   Úfilesr|   ÚinfoÚprintr2   r3   rk   Úenvironrv   r+   rC   r›   r]   rI   ÚgrouprY   r7   r?   rE   r5   r™   r   r   r   r   Ú<module>   sœ    
*HD

$(

3
ÿ
ÿÿ
ÿÿ
ÿÿ




Ä;