§
    ñyIf@\  ã            	      ó¨  — U d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlmZmZmZ ddlmZmZ ddlmZ ddlmZ ddlmZmZmZ dd	lmZmZ erdd
l
m Z  ndd
l!m Z   ej"        e#¦  «        Z$e
j%         &                    d¦  «        rdZ'dZ(ndZ'dZ( ej)        d¦  «         ej)        d¦  «        hZ*e	j+        dk    r³e* ,                    e	j-         .                    e
j/        d¦  «        ¦  «         	 e* ,                    e	j-         .                    e
j0        d¦  «        ¦  «         nK# e1$ rC 	 e* ,                    e	j-         .                    e
j2        d¦  «        ¦  «         n# e1$ r Y nw xY wY nw xY werÿe
j3        dk     rôe* ,                     e4 e ej)        d¦  «        ¦  «        j5        dz  ¦  «        ¦  «         e* ,                     e4 e ej)        d¦  «        ¦  «        j5        dz  ¦  «        ¦  «         e* ,                     e4 e ej)        d¦  «        ¦  «        j5        dz  ¦  «        ¦  «         e* ,                     e4 e ej)        d¦  «        ¦  «        j5        dz  ¦  «        ¦  «         e	j+        dk    rk	 e
j0        Z/de6d<   n# e1$ r
 e
j/        Z/Y nw xY wdgd„Z7e* ,                     e7d¦  «        ¦  «         e
j8        dk    re* ,                     e7d¦  «        ¦  «          ej)        d ¦  «         ej)        d!¦  «        hZ9e: ;                    e
j<        d"¦  «        Z= G d#„ d$e>¦  «        Z?dgd%„Z@efdhd)„ZAdid0„ZBedgd1„¦   «         ZCdgd2„ZDdjd5„ZEdkd7„ZFdld9„ZGdmd;„ZHdnd>„ZI	 	 dodpdB„ZJdqdrdC„ZK	 	 dodsdG„ZL	 	 dodtdI„ZMdqdudJ„ZN	 dvdwdN„ZOdvdxdP„ZPdydQ„ZQdzdS„ZRd{dU„ZSdqd|dX„ZTd}dZ„ZU	 	 dod~d\„ZVdd]„ZWd€d_„ZXd�da„ZYd�db„ZZd‚df„Z[dS )ƒaV  Python modules manipulation utility functions.

:type PY_SOURCE_EXTS: tuple(str)
:var PY_SOURCE_EXTS: list of possible python source file extension

:type STD_LIB_DIRS: set of str
:var STD_LIB_DIRS: directories where standard modules are located

:type BUILTIN_MODULES: dict
:var BUILTIN_MODULES: dictionary with builtin module names has key
é    )ÚannotationsN)ÚCallableÚIterableÚSequence)Úredirect_stderrÚredirect_stdout)Ú	lru_cache)ÚPath)Ú	IS_JYTHONÚIS_PYPYÚ
PY310_PLUS)ÚspecÚutil)Ústdlib_module_namesÚwin)ÚpyÚpywÚpyi)ÚdllÚpyd)r   r   )ÚsoÚstdlibÚ
platstdlibÚntÚdlls)é   é   Úlib_pypyzlib-python/3ÚposixÚstrÚprefixÚpathÚreturnc                ó|   — dt           j        d d…         z  }t          j                             t
          | |¦  «        S )Nzpython%d.%dé   )ÚsysÚversion_infoÚosr"   Újoinr!   )r"   Úbase_pythons     úD/var/www/piapp/venv/lib/python3.11/site-packages/astroid/modutils.pyÚ_posix_pathr,   c   s0   € Ø#¥cÔ&6°r¸°rÔ&:Ñ:ˆÝŒw�|Š|�F D¨+Ñ6Ô6Ð6ó    Úlibl        Úlib64ÚpurelibÚplatlibTc                  ó   — e Zd ZdZdS )ÚNoSourceFilezbException raised when we are not able to get a python
    source file for a precompiled file.
    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r-   r+   r3   r3   v   s   € € € € € ðð ð ð r-   r3   c                óz   — t           j                             t           j                             | ¦  «        ¦  «        S )zÎResolve symlinks in path and convert to absolute path.

    Note that environment variables and ~ in the path need to be expanded in
    advance.

    This can be cached by using _cache_normalize_path.
    )r(   r"   ÚnormcaseÚrealpath©r"   s    r+   Ú_normalize_pathr=   |   s*   € õ Œ7×Ò�BœG×,Ò,¨TÑ2Ô2Ñ3Ô3Ð3r-   ÚfilenameÚ	is_jythonÚboolc                óN   — |s| S |                       d¦  «        \  }}}|r|dz   S | S )Nz	$py.classú.py)Ú	partition)r>   r?   ÚheadÚhas_pyclassÚ_s        r+   Ú_path_from_filenamerG   ‡   s@   € Øð ØˆØ#×-Ò-¨kÑ:Ô:Ñ€Dˆ+�qØð Ø�e‰|ÐØ€Or-   Ú	blacklistúSequence[str]Údirnamesú	list[str]Ú	filenamesÚNonec                óv   — | D ]5}||v r|                      |¦  «         Œ||v r|                      |¦  «         Œ6dS )zaRemove files/directories in the black list.

    dirnames/filenames are usually from os.walk
    N)Úremove)rH   rJ   rL   Únorecurss       r+   Ú_handle_blacklistrQ   �   s]   € ð ð 'ð 'ˆØ�xÐÐØ�OŠO˜HÑ%Ô%Ð%Ð%Ø˜Ð"Ð"Ø×Ò˜XÑ&Ô&Ð&øð	'ð 'r-   c                ó    — t          | ¦  «        S ©N)r=   r<   s    r+   Ú_cache_normalize_path_rT   ž   s   € å˜4Ñ Ô Ð r-   c                óB   — | st          | ¦  «        S t          | ¦  «        S )zNormalize path with caching.)r=   rT   r<   s    r+   Ú_cache_normalize_pathrV   £   s(   € ð
 ð %Ý˜tÑ$Ô$Ð$Ý! $Ñ'Ô'Ð'r-   Údotted_nameútypes.ModuleTypec                ó  — 	 t           j        |          S # t          $ r Y nw xY wt          t	          j        ¦   «         ¦  «        5 }t          t	          j        ¦   «         ¦  «        5 }t          j        | ¦  «        }ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   | 	                    ¦   «         }|rt                               d| |¦  «         | 	                    ¦   «         }|rt                               d| |¦  «         |S )zñLoad a Python module from its name.

    :type dotted_name: str
    :param dotted_name: python name of a module or package

    :raise ImportError: if the module or package is not found

    :rtype: module
    :return: the loaded module
    Nz&Captured stderr while importing %s:
%sz&Captured stdout while importing %s:
%s)r&   ÚmodulesÚKeyErrorr   ÚioÚStringIOr   Ú	importlibÚimport_moduleÚgetvalueÚloggerÚerrorÚinfo)rW   ÚstderrÚstdoutÚmoduleÚstderr_valueÚstdout_values         r+   Úload_module_from_nameri   ­   sŠ  € ðÝŒ{˜;Ô'Ð'øÝð ð ð Øˆðøøøõ
 
�œ™œÑ	'Ô	'ð 6¨6µ?Ý
Œ‰Œñ4ô 4ð 6à	ÝÔ(¨Ñ5Ô5ˆð6ð 6ð 6ñ 6ô 6ð 6ð 6ð 6ð 6ð 6ð 6øøøð 6ð 6ð 6ð 6ð 6ð 6ð 6ñ 6ô 6ð 6ð 6ð 6ð 6ð 6ð 6øøøð 6ð 6ð 6ð 6ð
 —?’?Ñ$Ô$€LØð 
Ý�ŠØ5°{ÀLñ	
ô 	
ð 	
ð —?’?Ñ$Ô$€LØð 
Ý�ŠØ5°{ÀLñ	
ô 	
ð 	
ð €MsB   ‚ ”
! !Á!BÁ%BÁ:BÂB
	Â
BÂB
	ÂBÂB!Â$B!Úpartsc                óF   — t          d                     | ¦  «        ¦  «        S )zÖLoad a python module from its split name.

    :param parts:
      python name of a module or package split on '.'

    :raise ImportError: if the module or package is not found

    :return: the loaded module
    ú.)ri   r)   )rj   s    r+   Úload_module_from_modpathrm   Ò   s   € õ ! §¢¨%¡¤Ñ1Ô1Ð1r-   Úfilepathc                ó>   — t          | ¦  «        }t          |¦  «        S )zîLoad a Python module from it's path.

    :type filepath: str
    :param filepath: path to the python module or package

    :raise ImportError: if the module or package is not found

    :rtype: module
    :return: the loaded module
    )Úmodpath_from_filerm   )rn   Úmodpaths     r+   Úload_module_from_filerr   ß   s   € õ   Ñ)Ô)€GÝ# GÑ,Ô,Ð,r-   Úmod_pathc                óô   — g }|D ]r}|                      |¦  «         t          j                             | |¦  «        } t	          | ¦  «        s,t          j        d                     |¦  «        ¦  «        }|s dS ŒsdS )z3Check there are some __init__.py all along the way.rl   FT)Úappendr(   r"   r)   Ú	_has_initr   Úis_namespace)r"   rs   rq   ÚpartÚold_namespaces        r+   Úcheck_modpath_has_initrz   î   s|   € à€GØð ð ˆØ�Š�tÑÔÐÝŒw�|Š|˜D $Ñ'Ô'ˆÝ˜‰Œð 	Ý Ô-¨c¯hªh°wÑ.?Ô.?Ñ@Ô@ˆMØ ð Ø�u�uøØˆ4r-   Úpath_to_checkúlist[str] | Nonec                ób  — d}t           j                             |¦  «        }t           j                             | ¦  «        }t           j                             |¦  «                             |¦  «        r|}t           j                             | ¦  «        }t           j                             |¦  «                             |¦  «        r|}|ret           j                             |¦  «        d         }|t          |¦  «        d…         }d„ |                     t           j	        ¦  «        D ¦   «         S dS )a>  Extracts the relative mod path of the file to import from.

    Check if a file is within the passed in path and if so, returns the
    relative mod path from the one passed in.

    If the filename is no in path_to_check, returns None

    Note this function will look for both abs and realpath of the file,
    this allows to find the relative base path even if the file is a
    symlink of a file in the passed in path

    Examples:
        _get_relative_base_path("/a/b/c/d.py", "/a/b") ->  ["c","d"]
        _get_relative_base_path("/a/b/c/d.py", "/dev") ->  None
    Nr   c                ó   — g | ]}|¯|‘ŒS r8   r8   )Ú.0Úpkgs     r+   ú
<listcomp>z+_get_relative_base_path.<locals>.<listcomp>  s   € ÐGÐGÐG˜À3ÐG�ÐGÐGÐGr-   )
r(   r"   r:   ÚabspathÚ
startswithr;   ÚsplitextÚlenÚsplitÚsep)r>   r{   Úimportable_pathÚabs_filenameÚreal_filenameÚ	base_pathÚrelative_base_paths          r+   Ú_get_relative_base_pathr�   û   s  € ð  €OÝ”G×$Ò$ ]Ñ3Ô3€MÝ”7—?’? 8Ñ,Ô,€LÝ	„w×Ò˜Ñ%Ô%×0Ò0°Ñ?Ô?ð 'Ø&ˆå”G×$Ò$ XÑ.Ô.€MÝ	„w×Ò˜Ñ&Ô&×1Ò1°-Ñ@Ô@ð (Ø'ˆàð HÝ”G×$Ò$ _Ñ5Ô5°aÔ8ˆ	Ø&¥s¨=Ñ'9Ô'9Ð';Ð';Ô<ÐØGÐGÐ1×7Ò7½¼Ñ?Ô?ÐGÑGÔGÐGàˆ4r-   úSequence[str] | NoneÚis_package_cbú'Callable[[str, list[str]], bool] | Nonec                óÞ  — t           j                             t          | ¦  «        ¦  «        } t          j                             ¦   «         }|r||z  }t          j        |t          t          |¦  «        ¦  «        D ]4}|sŒt          | |¦  «        }|sŒ|€J ‚ |||d d…         ¦  «        r|c S Œ5t          d                     | d                     t          j        ¦  «        ¦  «        ¦  «        ‚)Néÿÿÿÿz"Unable to find module for {} in {}z, 
)r(   r"   Ú
expanduserrG   r&   ÚcopyÚ	itertoolsÚchainÚmaprV   r�   ÚImportErrorÚformatr)   )r>   r"   r�   Úpaths_to_checkÚpathnamerq   s         r+   Úmodpath_from_file_with_callbackrœ     s   € õ
 Œw×!Ò!Õ"5°hÑ"?Ô"?Ñ@Ô@€HÝ”X—]’]‘_”_€NØð Ø˜$ÑˆÝ”OØ�Õ1°>ÑBÔBñô ð 
ð 
ˆð ð 	ØÝ)¨(°HÑ=Ô=ˆØð 	ØØÐ(Ð(Ð(Øˆ=˜ 7¨3¨B¨3¤<Ñ0Ô0ð 	ØˆNˆNˆNð	õ Ø,×3Ò3°H¸f¿kºkÍ#Ì(Ñ>SÔ>SÑTÔTñô ð r-   c                ó.   — t          | |t          ¦  «        S )a*  Get the corresponding split module's name from a filename.

    This function will return the name of a module or package split on `.`.

    :type filename: str
    :param filename: file's path for which we want the module's name

    :type Optional[List[str]] path:
      Optional list of path where the module or package should be
      searched (use sys.path if nothing or None is given)

    :raise ImportError:
      if the corresponding module's name has not been found

    :rtype: list(str)
    :return: the corresponding split module's name
    )rœ   rz   )r>   r"   s     r+   rp   rp   7  s   € õ$ +¨8°TÕ;QÑRÔRÐRr-   rq   Úcontext_fileú
str | Nonec                ó.   — t          | ||¦  «        j        S rS   )Úfile_info_from_modpathÚlocation)rq   r"   rž   s      r+   Úfile_from_modpathr£   L  s   € õ
 " '¨4°Ñ>Ô>ÔGÐGr-   úspec.ModuleSpecc                ó|  — |� t           j                             |¦  «        }n|}| d         dk    r?	 t          dg| dd…         z   ||¦  «        S # t          $ r t          | ||¦  «        cY S w xY w| ddgk    r5t          j        dt           j        j        t
          j        j	        ¬	¦  «        S t          | ||¦  «        S )
ax  Given a mod path (i.e. split module / package name), return the
    corresponding file.

    Giving priority to source file over precompiled file if it exists.

    :param modpath:
      split module's name (i.e name of a module or package split
      on '.')
      (this means explicit relative imports that start with dots have
      empty strings in this list!)

    :param path:
      optional list of path where the module or package should be
      searched (use sys.path if nothing or None is given)

    :param context_file:
      context file to consider, necessary if the identifier has been
      introduced using a relative import unresolvable in the actual
      context (i.e. modutils)

    :raise ImportError: if there is no such module in the directory

    :return:
      the path to the module's file or None if it's an integrated
      builtin module such as 'sys'
    Nr   ÚxmlÚ_xmlplusé   r(   r"   úos.path)Únamer¢   Útype)
r(   r"   ÚdirnameÚ_spec_from_modpathr˜   r   Ú
ModuleSpecÚ__file__Ú
ModuleTypeÚ	PY_SOURCE)rq   r"   rž   Úcontexts       r+   r¡   r¡   T  sÛ   € ð> ÐÝ œgŸošo¨lÑ;Ô;ˆˆàˆØˆq„z�UÒÐð	>Ý% z l°W¸Q¸R¸R´[Ñ&@À$ÈÑPÔPÐPøÝð 	>ð 	>ð 	>Ý% g¨t°WÑ=Ô=Ð=Ð=Ð=ð	>øøøà	�T˜6�NÒ	"Ð	"åŒØÝ”WÔ%Ý”Ô*ð
ñ 
ô 
ð 	
õ
 ˜g t¨WÑ5Ô5Ð5s   ²A ÁA-Á,A-c           	     ó  — |                       d¦  «        rdS |                      d¦  «        }|�9|d         t          v r*t          |¦  «        dk    rt	          | ¦  «        ‚|d         S d}d}|d         dk    r|€
J d¦   «         ‚g }d}|t          |¦  «        k     r[||         dk    rO|dz  }|€
J d¦   «         ‚t
          j                             |¦  «        }|t          |¦  «        k     r||         dk    °Ot          |t          |¦  «        ¦  «        D ]t}	 t          |||dz   …         ||¬	¦  «         Œ!# t          $ rG |t          dt          |¦  «        dz
  ¦  «        k     r‚ d                     |d|…         ¦  «        cY c S w xY w| S )
a­  Given a dotted name return the module part of the name :

    >>> get_module_part('astroid.as_string.dump')
    'astroid.as_string'

    :param dotted_name: full name of the identifier we are interested in

    :param context_file:
      context file to consider, necessary if the identifier has been
      introduced using a relative import unresolvable in the actual
      context (i.e. modutils)

    :raise ImportError: if there is no such module in the directory

    :return:
      the module part of the name or None if we have not been able at
      all to import the given name

    XXX: deprecated, since it doesn't handle package precedence over module
    (see #10066)
    r©   rl   Nr   r%   Ú z.explicit relative import, but no context_file?r¨   )r"   rž   )rƒ   r†   ÚBUILTIN_MODULESr…   r˜   r(   r"   r¬   Úranger£   Úmaxr)   )rW   rž   rj   r"   ÚstartiÚis         r+   Úget_module_partrº   ‡  sÝ  € ð. ×Ò˜iÑ(Ô(ð ØˆyØ×Ò˜cÑ"Ô"€EØÐð �Œ8•Ð&Ð&Ý�5‰zŒz˜AŠ~ˆ~Ý! +Ñ.Ô.Ð.Ø˜”8ˆOà!€DØ€FØˆQ„x�2‚~€~àÐ$Ð$Ø;ñ %Ô$Ð$àˆØˆà
•3�u‘:”:Ò
Ð
 %¨¤-°2Ò"5Ð"5Ø�!‰ˆàÐ$Ð$Ø;ñ %Ô$Ð$å”w—’ |Ñ4Ô4ˆð •3�u‘:”:Ò
Ð
 %¨¤-°2Ò"5Ð"5õ �6�3˜u™:œ:Ñ&Ô&ð 'ð 'ˆð	'ÝØ�f˜q 1™u�nÔ%¨D¸|ðñ ô ð ð øõ ð 	'ð 	'ð 	'Ø•3�q�#˜e™*œ* q™.Ñ)Ô)Ò)Ð)ØØ—8’8˜E " 1 "œIÑ&Ô&Ð&Ð&Ð&Ð&Ð&ð	'øøøð Ðs   ÄD4Ä4AFÆFFÚsrc_directoryÚlist_allc                ó@  — g }t          j        | ¦  «        D ]†\  }}}||v rŒt          |||¦  «         |sddh                     |¦  «        rd|dd…<   Œ=|D ]F}t	          |¦  «        r5t           j                             ||¦  «        }|                     |¦  «         ŒGŒ‡|S )aå  Given a package directory return a list of all available python
    module's files in the package and its subpackages.

    :param src_directory:
      path of the directory corresponding to the package

    :param blacklist: iterable
      list of files or directories to ignore.

    :param list_all:
        get files from all paths, including ones without __init__.py

    :return:
      the list of all available python module's files in the package and
      its subpackages
    z__init__.pyz__init__.pyir8   N)r(   ÚwalkrQ   Ú
isdisjointÚ_is_python_filer"   r)   ru   )	r»   rH   r¼   ÚfilesÚ	directoryrJ   rL   r>   Úsrcs	            r+   Úget_module_filesrÄ   Ä  sÎ   € ð& €EÝ*,¬'°-Ñ*@Ô*@ð "ð "Ñ&ˆ	�8˜YØ˜	Ð!Ð!ØÝ˜) X¨yÑ9Ô9Ð9àð 	˜]¨NÐ;×FÒFÀyÑQÔQð 	ØˆH�Q�Q�Q‰KØØ!ð 	"ð 	"ˆHÝ˜xÑ(Ô(ð "Ý”g—l’l 9¨hÑ7Ô7�Ø—’˜SÑ!Ô!Ð!øð	"ð €Lr-   Úinclude_no_extc                óÌ  — t           j                             t          | ¦  «        ¦  «        } t           j                             | ¦  «        \  }}|dk    r)t           j                             |› |› �¦  «        r|› |› �S t          D ],}|› d|› �}t           j                             |¦  «        r|c S Œ-|r#|s!t           j                             |¦  «        r|S t          | ¦  «        ‚)ao  Given a python module's file name return the matching source file
    name (the filename will be returned identically if it's already an
    absolute path to a python source file).

    :param filename: python module's file name

    :raise NoSourceFile: if no source file exists on the file system

    :return: the absolute path of the source file if it exists
    ú.pyirl   )r(   r"   r‚   rG   r„   ÚexistsÚPY_SOURCE_EXTSr3   )r>   rÅ   ÚbaseÚorig_extÚextÚsource_paths         r+   Úget_source_filerÎ   ç  sï   € õ Œw�ŠÕ2°8Ñ<Ô<Ñ=Ô=€HÝ”W×%Ò% hÑ/Ô/�N€Dˆ(Ø�6ÒÐ�bœgŸnšn°Ð-@°hÐ-@Ð-@ÑAÔAÐØÐ"˜Ð"Ð"Ð"Ýð ð ˆØ�o�o �o�oˆÝŒ7�>Š>˜+Ñ&Ô&ð 	ØÐÐÐð	àð ˜hð ­2¬7¯>ª>¸$Ñ+?Ô+?ð ØˆÝ
�xÑ
 Ô
 Ð r-   c                ór   — | sdS t           j                             | ¦  «        d         dd…         t          v S )z5Return: True if the filename is a python source file.Fr¨   N)r(   r"   r„   rÉ   ©r>   s    r+   Úis_python_sourcerÑ   ÿ  s8   € àð ØˆuÝŒ7×Ò˜HÑ%Ô% aÔ(¨¨¨Ô,µÐ>Ð>r-   Úmodnamec                óF   — |                       d¦  «        d         t          v S )z6Return: True if the modname is in the standard libraryrl   r   )r†   r   )rÒ   s    r+   Úis_stdlib_modulerÔ     s   € à�=Š=˜ÑÔ˜aÔ Õ$7Ð7Ð7r-   ústr | Iterable[str]c                óJ  ‡— |                       d¦  «        d         } 	 t          | g¦  «        Šn# t          $ r Y dS w xY w‰€dS t          ‰¦  «        Št	          |t
          ¦  «        r"‰                     t          |¦  «        ¦  «        S t          ˆfd„|D ¦   «         ¦  «        S )a
  Try to determine if a module is imported from one of the specified paths

    :param modname: name of the module

    :param path: paths to consider

    :return:
      true if the module:
      - is located on the path listed in one of the directory in `paths`
    rl   r   FNc              3  ó\   •K  — | ]&}‰                      t          |¦  «        ¦  «        V — Œ'd S rS   ©rƒ   rV   )r   Úentryr>   s     €r+   ú	<genexpr>z!module_in_path.<locals>.<genexpr>&  s:   øè è € ÐSÐSÀUˆx×"Ò"Õ#8¸Ñ#?Ô#?Ñ@Ô@ÐSÐSÐSÐSÐSÐSr-   )	r†   r£   r˜   r=   Ú
isinstancer    rƒ   rV   Úany)rÒ   r"   r>   s     @r+   Úmodule_in_pathrÝ     sÀ   ø€ ð �mŠm˜CÑ Ô  Ô#€GðÝ$ g YÑ/Ô/ˆˆøÝð ð ð àˆuˆuðøøøð ÐàˆuÝ˜xÑ(Ô(€Hå�$�ÑÔð @Ø×"Ò"Õ#8¸Ñ#>Ô#>Ñ?Ô?Ð?åÐSÐSÐSÐSÈdÐSÑSÔSÑSÔSÐSs   ž/ ¯
=¼=Ústd_pathúIterable[str] | Nonec                óª  ‡— t          j        dt          d¬¦  «         |                      d¦  «        d         } 	 t	          | g¦  «        Šn# t
          $ r Y dS w xY w‰€t          j        | ¦  «         S t          ‰¦  «        Št          D ]'}‰ 
                    t          |¦  «        ¦  «        r dS Œ(|€t          }t          ˆfd„|D ¦   «         ¦  «        S )	a|  Try to guess if a module is a standard python module (by default,
    see `std_path` parameter's description).

    :param modname: name of the module we are interested in

    :param std_path: list of path considered has standard

    :return:
      true if the module:
      - is located on the path listed in one of the directory in `std_path`
      - is a built-in module
    zWis_standard_module() is deprecated. Use, is_stdlib_module() or module_in_path() insteadr%   )Ú
stacklevelrl   r   FNc              3  ó\   •K  — | ]&}‰                      t          |¦  «        ¦  «        V — Œ'd S rS   rØ   )r   r"   r>   s     €r+   rÚ   z%is_standard_module.<locals>.<genexpr>O  s:   øè è € ÐUÐUÀDˆx×"Ò"Õ#8¸Ñ#>Ô#>Ñ?Ô?ÐUÐUÐUÐUÐUÐUr-   )ÚwarningsÚwarnÚDeprecationWarningr†   r£   r˜   r   rw   r=   ÚEXT_LIB_DIRSrƒ   rV   ÚSTD_LIB_DIRSrÜ   )rÒ   rÞ   r"   r>   s      @r+   Úis_standard_modulerè   )  s
  ø€ õ „MØaÝØðñ ô ð ð �mŠm˜CÑ Ô  Ô#€GðÝ$ g YÑ/Ô/ˆˆøÝð ð ð ð ˆuˆuðøøøð ÐåÔ$ WÑ-Ô-Ð-Ð-Ý˜xÑ(Ô(€HÝð ð ˆØ×ÒÕ4°TÑ:Ô:Ñ;Ô;ð 	Ø�5�5ð	àÐÝˆåÐUÐUÐUÐUÈHÐUÑUÔUÑUÔUÐUs   ºA Á
AÁAÚ	from_filec                ó:  — t           j                             |¦  «        st           j                             |¦  «        }|t          j        v rdS t          t          j        j         	                    |  
                    dd¬¦  «        d         |g¦  «        ¦  «        S )a6  Return true if the given module name is relative to the given
    file name.

    :param modname: name of the module we are interested in

    :param from_file:
      path of the module from which modname has been imported

    :return:
      true if the module has been imported relatively to `from_file`
    Frl   r¨   )Úmaxsplitr   )r(   r"   Úisdirr¬   r&   r@   r^   Ú	machineryÚ
PathFinderÚ	find_specr†   )rÒ   ré   s     r+   Úis_relativerð   R  s†   € õ Œ7�=Š=˜Ñ#Ô#ð /Ý”G—O’O IÑ.Ô.ˆ	Ø•C”HÐÐØˆuÝÝÔÔ&×0Ò0Ø�MŠM˜#¨ˆMÑ*Ô*¨1Ô-°	¨{ñ	
ô 	
ñô ð r-   r²   c                óø  — | sJ ‚d}|�K	 t          j        | |g¦  «        }|j        }nA# t          $ r t          j        | |¦  «        }|j        }Y nw xY wt          j        | |¦  «        }|j        t           j        j        k    rj	 |j        €J ‚t          |j        ¦  «        }|                     |t           j        j	        ¬¦  «        S # t          $ r |                     |¬¦  «        cY S w xY w|j        t           j        j        k    r|                     d¬¦  «        S |j        t           j        j        k    rC|j        €J ‚t          |j        ¦  «        }|                     |t           j        j	        ¬¦  «        S |S )zÄGiven a mod path (i.e. split module / package name), return the
    corresponding spec.

    this function is used internally, see `file_from_modpath`'s
    documentation for more information
    N)r¢   r«   )r¢   )r   rï   r¢   r˜   r«   r°   ÚPY_COMPILEDrÎ   Ú_replacer±   r3   Ú	C_BUILTINÚPKG_DIRECTORYrv   )rq   r"   r²   r¢   Ú
found_specs        r+   r­   r­   l  sš  € ð €N€N€NØ€HØÐð	+Ýœ¨°'°Ñ;Ô;ˆJØ!Ô*ˆHˆHøÝð 	+ð 	+ð 	+Ýœ¨°Ñ6Ô6ˆJØ!Ô*ˆHˆHˆHð	+øøøõ ”^ G¨TÑ2Ô2ˆ
Ø„�$œ/Ô5Ò5Ð5ð	:ØÔ&Ð2Ð2Ð2Ý& zÔ':Ñ;Ô;ˆHØ×&Ò&Ø!­¬Ô(Að 'ñ ô ð øõ ð 	:ð 	:ð 	:Ø×&Ò&°Ð&Ñ9Ô9Ð9Ð9Ð9ð	:øøøà	Œ�DœOÔ5Ò	5Ð	5à×"Ò"¨DÐ"Ñ1Ô1Ð1Ø	Œ�DœOÔ9Ò	9Ð	9ØÔ"Ð.Ð.Ð.Ý˜ZÔ0Ñ1Ô1ˆØ×"Ò"¨H½4¼?Ô;TÐ"ÑUÔUÐUØÐs"   Š( ¨&AÁAÂAC Ã C*Ã)C*c                ó,   — |                       d¦  «        S )zlReturn true if the given filename should be considered as a python file.

    .pyc and .pyo are ignored
    )rB   rÇ   z.soz.pydz.pyw)ÚendswithrÐ   s    r+   rÀ   rÀ   •  s   € ð
 ×ÒÐCÑDÔDÐDr-   rÂ   c                óÆ   — t           j                             | d¦  «        }g t          ¢d‘d‘R D ]1}t           j                             |dz   |z   ¦  «        r
|dz   |z   c S Œ2dS )z]If the given directory has a valid __init__ file, return its path,
    else return None.
    Ú__init__ÚpycÚpyorl   N)r(   r"   r)   rÉ   rÈ   )rÂ   Úmod_or_packrÌ   s      r+   rv   rv   �  sz   € õ ”'—,’,˜y¨*Ñ5Ô5€KØ.•Ð. Ð.¨Ð.Ð.ð +ð +ˆÝŒ7�>Š>˜+¨Ñ+¨cÑ1Ñ2Ô2ð 	+Ø Ñ$ sÑ*Ð*Ð*Ð*ð	+àˆ4r-   Úspecobjc                ó6   — | j         t          j        j        k    S rS   )r«   r   r°   ÚPY_NAMESPACE©rþ   s    r+   rw   rw   ¨  s   € ØŒ<�4œ?Ô7Ò7Ð7r-   c                ó6   — | j         t          j        j        k    S rS   )r«   r   r°   rõ   r  s    r+   Úis_directoryr  ¬  s   € ØŒ<�4œ?Ô8Ò8Ð8r-   Úmodule_nameÚpackage_whitelistúset[str]c           	     ó¤   ‡‡— |                       d¦  «        Št          ˆˆfd„t          dt          ‰¦  «        dz   ¦  «        D ¦   «         ¦  «        S )z¶
    Returns True if one part of the module name is in the package whitelist.

    >>> is_module_name_part_of_extension_package_whitelist('numpy.core.umath', {'numpy'})
    True
    rl   c              3  óV   •K  — | ]#}d                       ‰d|…         ¦  «        ‰v V — Œ$dS )rl   N)r)   )r   Úxr  rj   s     €€r+   rÚ   zEis_module_name_part_of_extension_package_whitelist.<locals>.<genexpr>º  sN   øè è € ð ð Ø56ˆ�Š��r˜�r”ÑÔÐ0Ð0ðð ð ð ð ð r-   r¨   )r†   rÜ   r¶   r…   )r  r  rj   s    `@r+   Ú2is_module_name_part_of_extension_package_whitelistr
  °  sk   øø€ ð ×Ò˜cÑ"Ô"€EÝð ð ð ð ð Ý:?ÀÅ3ÀuÁ:Ä:ÐPQÁ>Ñ:RÔ:Rðñ ô ñ ô ð r-   )r"   r    r#   r    )r>   r    r?   r@   r#   r    )rH   rI   rJ   rK   rL   rK   r#   rM   )rW   r    r#   rX   )rj   rI   r#   rX   )rn   r    r#   rX   )r"   r    rs   rK   r#   r@   )r>   r    r{   r    r#   r|   )NN)r>   r    r"   rŽ   r�   r�   r#   rK   rS   )r>   r    r"   rŽ   r#   rK   )rq   rK   r"   rŽ   rž   rŸ   r#   rŸ   )rq   rK   r"   rŽ   rž   rŸ   r#   r¤   )rW   r    rž   rŸ   r#   r    )F)r»   r    rH   rI   r¼   r@   r#   rK   )r>   r    rÅ   r@   r#   r    )r>   rŸ   r#   r@   )rÒ   r    r#   r@   )rÒ   r    r"   rÕ   r#   r@   )rÒ   r    rÞ   rß   r#   r@   )rÒ   r    ré   r    r#   r@   )rq   rK   r"   rŽ   r²   rŸ   r#   r¤   )r>   r    r#   r@   )rÂ   r    r#   rŸ   )rþ   r¤   r#   r@   )r  r    r  r  r#   r@   )\r7   Ú
__future__r   r^   Úimportlib.machineryÚimportlib.utilr\   r•   Úloggingr(   r&   Ú	sysconfigÚtypesrã   Úcollections.abcr   r   r   Ú
contextlibr   r   Ú	functoolsr	   Úpathlibr
   Úastroid.constr   r   r   Úastroid.interpreter._importr   r   r   Úastroid._backport_stdlib_namesÚ	getLoggerr4   ra   Úplatformrƒ   rÉ   ÚPY_COMPILED_EXTSÚget_pathrç   rª   Úaddr"   r)   r!   Úreal_prefixÚAttributeErrorÚbase_exec_prefixr'   r    ÚparentÚ__annotations__r,   Úmaxsizeræ   ÚdictÚfromkeysÚbuiltin_module_namesrµ   Ú	Exceptionr3   r=   rG   rQ   rT   rV   ri   rm   rr   rz   r�   rœ   rp   r£   r¡   rº   rÄ   rÎ   rÑ   rÔ   rÝ   rè   rð   r­   rÀ   rv   rw   r  r
  r8   r-   r+   ú<module>r'     s†  ðð

ð 
ð 
ð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø 	€	€	€	Ø Ð Ð Ð Ø €€€Ø 	€	€	€	Ø 
€
€
€
Ø Ð Ð Ð Ø €€€Ø €€€Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2àð CØ'Ð'Ð'Ð'Ð'Ð'Ð'àBÐBÐBÐBÐBÐBà	ˆÔ	˜8Ñ	$Ô	$€ð „<×Ò˜5Ñ!Ô!ð Ø)€NØ%ÐÐà"€NØÐð
 #�	Ô" 8Ñ,Ô,Ð.@¨iÔ.@ÀÑ.NÔ.NÐO€à„7ˆd‚?€?Ø×Ò�R”W—\’\ #¤*¨fÑ5Ô5Ñ6Ô6Ð6ðð
 	×Ò˜œŸš c¤o°vÑ>Ô>Ñ?Ô?Ð?Ð?øØð ð ð ð	Ø×Ò˜RœWŸ\š\¨#Ô*>ÀÑGÔGÑHÔHÐHÐHøØð 	ð 	ð 	ØˆDð	øøøøøðøøøð ð ˆsÔ &Ò(Ð(ð ×Ò�S�S˜˜Ð0˜iÔ0°Ñ:Ô:Ñ;Ô;ÔBÀZÑOÑPÔPÑQÔQÐQØ×Ò�S�S˜˜Ð0˜iÔ0°Ñ:Ô:Ñ;Ô;ÔBÀ^ÑSÑTÔTÑUÔUÐUð ×Ò�S�S˜˜Ð0˜iÔ0°Ñ>Ô>Ñ?Ô?ÔFÈÑSÑTÔTÑUÔUÐUØ×ÒØˆˆDˆDÐ#�Ô# LÑ1Ô1Ñ2Ô2Ô9¸NÑJÑKÔKñô ð ð „7ˆgÒÐð
Ø”oˆÐ%Ð%Ð%Ñ%Ð%øØð ð ð Ø”ˆˆˆðøøøð7ð 7ð 7ð 7ð ×Ò�[�[ Ñ'Ô'Ñ(Ô(Ð(Ø
„{�UÒÐð 	×Ò˜˜ WÑ-Ô-Ñ.Ô.Ð.à"�	Ô" 9Ñ-Ô-Ð/A¨yÔ/AÀ)Ñ/LÔ/LÐM€Ø—-’- Ô 8¸$Ñ?Ô?€ðð ð ð ð �9ñ ô ð ð4ð 4ð 4ð 4ð :Cð ð ð ð ð ð'ð 'ð 'ð 'ð ð!ð !ð !ñ „ð!ð(ð (ð (ð (ð"ð "ð "ð "ðJ
2ð 
2ð 
2ð 
2ð-ð -ð -ð -ð
ð 
ð 
ð 
ðð ð ð ðH "&Ø=Aðð ð ð ð ð4Sð Sð Sð Sð Sð. "&Ø#ðHð Hð Hð Hð Hð "&Ø#ð06ð 06ð 06ð 06ð 06ðf:ð :ð :ð :ð :ð| DIð ð  ð  ð  ð  ðF!ð !ð !ð !ð !ð0?ð ?ð ?ð ?ð8ð 8ð 8ð 8ð
Tð Tð Tð Tð<&Vð &Vð &Vð &Vð &VðRð ð ð ð8 "&Øð&ð &ð &ð &ð &ðREð Eð Eð Eðð ð ð ð8ð 8ð 8ð 8ð9ð 9ð 9ð 9ðð ð ð ð ð sH   Ä3D; Ä;FÅ3E5Å4FÅ5E=Å:FÅ<E=Å=FÆFÊJ  Ê J/Ê.J/