U
    aÊ¹j"X  ã                   @   sX  d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlZ	d dl
Z
d dlmZ d dlZd dlmZ d dlmZmZ d dl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 d dlZ G dd„ dƒZ!G dd„ dƒZ"G dd„ dƒZ#G d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*d"d#„ Z+d$d%„ Z,d&d'„ Z-d(d)„ Z.dS )*é    N)ÚConfigParser)Úproduct)Úcast)ÚPath)Úsdist)Úfind_package_pathÚfind_parent_package)ÚDistribution)ÚPackageDiscoveryErroré   )Úquiet)Úget_sdist_membersÚget_wheel_membersÚrun)ÚDALSc                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestFindParentPackagec                 C   sP   |d j ddd� |d  ¡  |d  ¡  dddg}t|d	d
i|ƒdksLt‚d S )Nzsrc/namespace/pkg/nestedT©Úexist_okÚparentsz$src/namespace/pkg/nested/__init__.pyzsrc/namespace/pkg/__init__.pyÚ	namespaceznamespace.pkgznamespace.pkg.nestedÚ Úsrc©ÚmkdirÚtouchr   ÚAssertionError)ÚselfÚtmp_pathÚpackages© r   úe/var/www/html/bwave/python/venv/lib/python3.8/site-packages/setuptools/tests/test_config_discovery.pyÚtest_single_package   s
    
z)TestFindParentPackage.test_single_packagec                 C   s\   dddg}|D ]0}|d|› � j ddd� |d|› d�  ¡  qt|dd	i|ƒd ksXt‚d S )
NÚpkgÚpkg1Úpkg2úsrc/Tr   z/__init__.pyr   r   r   )r   r   ZmultipleÚnamer   r   r    Útest_multiple_toplevel!   s
    
z,TestFindParentPackage.test_multiple_toplevelN)Ú__name__Ú
__module__Ú__qualname__r!   r'   r   r   r   r    r      s   r   c                   @   s’  e Zd ZdZddidgdœdddiiddgid	dgidd
dgii i i i dœ	ZddgddgddgdgdgdœZdd„ Zej 	de 
¡ ¡dd„ ƒZej 	de 
¡ ¡dd„ ƒZedƒedƒedƒed ƒd!œZej 	d"ed#d$d%gdd	ge 
¡ ƒ¡d&d'„ ƒZej 	d(d)gdhfd*gdd+hfd,gdd-hfd.gdd/d0hfd1gdd/hfd2gdhfd3gdhfg¡d4d5„ ƒZej 	d6d7gd8gg¡d9d:„ ƒZd;d<„ Zd=d>„ Zd?d@„ ZdAS )BÚ TestDiscoverPackagesAndPyModulesz‹Make sure discovered values for ``packages`` and ``py_modules`` work
    similarly to explicit configuration for the simple scenarios.
    r   r   r"   )Úpackage_dirr   r,   Úlibr   Ú
py_modulesÚnszns.pkg)	zexplicit-srczvariation-libzexplicit-flatzexplicit-single_modulezexplicit-namespacezautomatic-srczautomatic-flatzautomatic-single_modulezautomatic-namespaceúsrc/pkg/__init__.pyzsrc/pkg/main.pyzlib/pkg/__init__.pyzlib/pkg/main.pyzpkg/__init__.pyzpkg/main.pyúpkg.pyzns/pkg/__init__.py)r   r-   ÚflatÚsingle_moduler   c                 C   s,   |  d¡\}}}| j| }| j| }||fS )Nú-)Ú	partitionÚFILESÚOPTIONS)r   ÚcircumstanceÚ_ZlayoutÚfilesÚoptionsr   r   r    Ú	_get_infoF   s    

z*TestDiscoverPackagesAndPyModules._get_infor8   c                    sb   |   |¡\}}t|||ƒ t||ƒ\}}dd„ |jjD ƒ}|D ]‰ t‡ fdd„|D ƒƒs>t‚q>d S )Nc                 S   s   g | ]}|  tjd ¡‘qS )ú/)ÚreplaceÚosÚsep©Ú.0Úfr   r   r    Ú
<listcomp>S   s     zHTestDiscoverPackagesAndPyModules.test_sdist_filelist.<locals>.<listcomp>c                 3   s   | ]}|  ˆ ¡V  qd S ©N)ÚendswithrA   ©Úfiler   r    Ú	<genexpr>U   s     zGTestDiscoverPackagesAndPyModules.test_sdist_filelist.<locals>.<genexpr>)r<   Ú_populate_project_dirÚ_run_sdist_programaticallyÚfilelistr:   Úanyr   )r   r   r8   r:   r;   r9   ÚcmdÚmanifestr   rG   r    Útest_sdist_filelistL   s    z4TestDiscoverPackagesAndPyModules.test_sdist_filelistc           	      C   s(  |   |¡\}}t|||ƒ |d  ¡  |d  ¡  |d  ¡  |d  ¡  |d  ¡  |d  ¡  |d  ¡  |d  ¡  t|ƒ tt| d	¡ƒƒ}td
ƒ td 	|¡ƒ |t
|ƒksºt‚tt| d¡ƒƒ}tdƒ td 	|¡ƒ dd„ |D ƒ}||ksüt‚|D ]"}d|k�st‚d|k�s t‚�q d S )NÚbuildz	build/libzbuild/bdist.linux-x86_64z build/bdist.linux-x86_64/file.pyzbuild/lib/__init__.pyzbuild/lib/file.pyÚdistzdist/file.pyúdist/*.tar.gzú~~~~~ sdist_members ~~~~~Ú
ú
dist/*.whlú~~~~~ wheel_members ~~~~~c                 S   s    h | ]}|  d d¡  dd¡’qS ©r%   r   zlib/©r>   rA   r   r   r    Ú	<setcomp>p   s     z@TestDiscoverPackagesAndPyModules.test_project.<locals>.<setcomp>)r<   rJ   r   r   Ú
_run_buildr   ÚnextÚglobÚprintÚjoinÚsetr   r   )	r   r   r8   r:   r;   Úsdist_filesÚwheel_filesÚ
orig_filesrH   r   r   r    Útest_projectW   s.    z-TestDiscoverPackagesAndPyModules.test_projectz‡
            [metadata]
            name = myproj
            version = 0.0.0

            [options]
            {param} =
            z¢
            __import__('setuptools').setup(
                name="myproj",
                version="0.0.0",
                {param}=[]
            )
            zÿ
            [build-system]
            requires = []
            build-backend = 'setuptools.build_meta'

            [project]
            name = "myproj"
            version = "0.0.0"

            [tool.setuptools]
            {param} = []
            zv
            [build-system]
            requires = []
            build-backend = 'setuptools.build_meta'
            )ú	setup.cfgúsetup.pyúpyproject.tomlútemplate-pyproject.tomlz config_file, param, circumstancere   rf   rg   c                 C   sº   | j | dddg }t||i ƒ |dkr6| dd¡}n | jd }|d j|dd	� |}| j| j|d
�}|| j|dd	� t|i ƒ}	t|	|ƒg ks–t‚dddœ| }
t|	|
ƒd ks¶t‚d S )Nzmod.pyzother.pyr0   rg   r9   r4   rh   úutf-8©Úencoding)Úparamr   r.   )r.   r   )	r6   rJ   r>   ÚPURPOSEFULLY_EMPYÚ
write_textÚformatÚ	_get_distÚgetattrr   )r   r   Úconfig_filerl   r8   r:   Ztemplate_paramÚ	pyprojectÚconfigrR   Úotherr   r   r    Útest_purposefully_empty£   s    	

z8TestDiscoverPackagesAndPyModules.test_purposefully_emptyzextra_files, pkgszvenv/bin/simulate_venvzpkg-stubs/__init__.pyiz	pkg-stubszother-stubs/__init__.pyizother-stubsz namespace-stubs/pkg/__init__.pyiznamespace-stubsznamespace-stubs.pkgz&namespace-stubs/pkg-stubs/__init__.pyiz_hidden/file.pyznews/finalize.pyc                 C   s:   | j d | }t||i ƒ t|i ƒ}t|jƒ|ks6t‚d S )Nr2   )r6   rJ   rp   r`   r   r   )r   r   Úextra_filesÚpkgsr:   rR   r   r   r    Ú!test_flat_layout_with_extra_filesÁ   s    
zBTestDiscoverPackagesAndPyModules.test_flat_layout_with_extra_filesrw   zother/__init__.pyzother/finalize.pyc              	   C   sB   | j d | }t||i ƒ tjtdd�� t|i ƒ W 5 Q R X d S )Nr2   úmultiple (packages|modules)©Úmatch©r6   rJ   ÚpytestÚraisesr
   rp   )r   r   rw   r:   r   r   r    Ú+test_flat_layout_with_dangerous_extra_filesÛ   s    zLTestDiscoverPackagesAndPyModules.test_flat_layout_with_dangerous_extra_filesc                 C   s>   | j d dg }t||i ƒ t|i ƒ}t|jƒdhks:t‚d S )Nr3   zinvalid-module-name.pyr"   )r6   rJ   rp   r`   r.   r   )r   r   r:   rR   r   r   r    Ú#test_flat_layout_with_single_moduleè   s    
zDTestDiscoverPackagesAndPyModules.test_flat_layout_with_single_modulec              	   C   sD   | j d dg }t||i ƒ tjtdd�� t|i ƒ W 5 Q R X d S )Nr3   zvalid_module_name.pyrz   r{   r}   )r   r   r:   r   r   r    Ú&test_flat_layout_with_multiple_modulesî   s    zGTestDiscoverPackagesAndPyModules.test_flat_layout_with_multiple_modulesc              	   C   sz   ddl m} d}|d jt|ƒdd� |d  ¡  tj ¡  |¡� | 	d¡ W 5 Q R X t
t| d	¡ƒƒ}d|ksvt‚d
S )zRegression for issue 3692r   )Ú
build_metaz%[project]
name = "test"
version = "1"rg   ri   rj   zfoo.pyÚ.z*.whlN)Ú
setuptoolsrƒ   rn   r   r   ÚjaracoÚpathZDirectoryStackÚcontextÚbuild_wheelr   r\   r]   r   )r   r   rƒ   rs   rb   r   r   r    Ú%test_py_modules_when_wheel_dir_is_cwdô   s    zFTestDiscoverPackagesAndPyModules.test_py_modules_when_wheel_dir_is_cwdN)r(   r)   r*   Ú__doc__r7   r6   r<   r~   ÚmarkÚparametrizeÚkeysrP   rd   r   rm   r   rv   ry   r€   r�   r‚   rŠ   r   r   r   r    r+   +   s�    ÿ
ôû


!ÿ
ÿ	ÿÿÞ+ýþ

ýý

ñþ
þþ
r+   c                   @   sT   e Zd ZdZdgdgddgddgdgd	gd
œZej de ¡ ¡dd„ ƒZ	dd„ Z
dS )ÚTestNoConfigz0.0.0zsrc/pkg1.pyzsrc/pkg2/__init__.pyzsrc/pkg3/__init__.pyzsrc/pkg3-stubs/__init__.pyzpkg4/__init__.pyzpkg4-stubs/__init__.pyzsrc/ns/nested/pkg1/__init__.pyzns/nested/pkg2/__init__.py)r#   r$   Zpkg3Zpkg4zns.nested.pkg1zns.nested.pkg2Úexamplec                 C   s0   t || j| i ƒ t|i ƒ}| ¡ |ks,t‚d S rE   )rJ   ÚEXAMPLESrp   Úget_namer   )r   r   r�   rR   r   r   r    Útest_discover_name  s    
zTestNoConfig.test_discover_namec                 C   s>   dg}t ||i ƒ t|dƒ |d| j› d� }| ¡ s:t‚d S )Nzsrc/ns/nested/pkg/__init__.pyú--sdistzdist/ns_nested_pkg-z.tar.gz)rJ   r[   ÚDEFAULT_VERSIONÚis_filer   )r   r   r:   Ú	dist_filer   r   r    Útest_build_with_discovered_name  s
    
z,TestNoConfig.test_build_with_discovered_nameN)r(   r)   r*   r•   r‘   r~   rŒ   r�   rŽ   r“   r˜   r   r   r   r    r�     s   ú	
r�   c                   @   s@   e Zd Zej ddi fddddidœfg¡dd„ ƒZd	d
„ ZdS )ÚTestWithAttrDirectivezfolder, optsr   r-   zfind:Úwhere)r   úpackages.findc           
      C   sÚ   |› d�dg}t |||ƒ |d jdd�}|dddiidd| i}tjj||d	� t|i ƒ}| ¡ dkslt‚| ¡ d
ks|t‚|j	s†t‚t
d|j	|ƒ}tj |¡s¤t‚|t|ƒ ¡ ks¸t‚t|dƒ |d }	|	 ¡ sÖt‚d S )Nz/pkg/__init__.pyre   ri   rj   r"   ú__init__.pyúversion = 42z'[metadata]
version = attr: pkg.version
©ÚprefixÚ42r”   zdist/pkg-42.tar.gz)rJ   Ú	read_textr†   r‡   rQ   rp   r’   r   Úget_versionr,   r   r?   Úexistsr   Úpartsr[   r–   )
r   r   ÚfolderÚoptsr:   rt   Ú	overwriterR   Úpackage_pathr—   r   r   r    Útest_setupcfg_metadata  s&     
 þ


z,TestWithAttrDirective.test_setupcfg_metadatac                 C   s`   t |dgi ƒ dddiiddœ}tjj||d� t|i ƒ}| ¡ dksJt‚|jd	d
iks\t‚d S )Nr0   r"   rœ   r�   zh[project]
name = 'pkg'
dynamic = ['version']
[tool.setuptools.dynamic]
version = {attr = 'pkg.version'}
©r   rg   rž   r    r   r   )rJ   r†   r‡   rQ   rp   r¢   r   r,   )r   r   r§   rR   r   r   r    Útest_pyproject_metadata<  s    
ý
z-TestWithAttrDirective.test_pyproject_metadataN)r(   r)   r*   r~   rŒ   r�   r©   r«   r   r   r   r    r™     s   þþ
r™   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestWithCExtensionc                 C   sF   ddddddddd	d
ddg}t ||i ƒ d}|d jt|ƒdd� d S )Nzbenchmarks/file.pyzdocs/Makefilezdocs/requirements.txtzdocs/source/conf.pyzproj/header.hzproj/file.pyzpy/proj.cppzpy/other.cppz
py/file.pyzpy/py.typedzpy/tests/test_proj.pyz
README.rsta^  
            from setuptools import Extension, setup

            ext_modules = [
                Extension(
                    "proj",
                    ["py/proj.cpp", "py/other.cpp"],
                    include_dirs=["."],
                    language="c++",
                ),
            ]
            setup(ext_modules=ext_modules)
        rf   ri   rj   ©rJ   rn   r   )r   r   r:   Zsetup_scriptr   r   r    Ú _simulate_package_with_extensionN  s     ôz3TestWithCExtension._simulate_package_with_extensionc                 C   s®   |   |¡ d}|d jt|ƒdd� d}|d jt|ƒdd� t|i ƒ}| ¡ dksXt‚| ¡ dksht‚|jd	ksvt‚|jd	ks„t‚t	|j
ƒd
ks–t‚|j
d jdksªt‚d	S )zˆEnsure that auto-discovery is not triggered when the project is based on
        C-extensions only, for backward compatibility.
        zr
            [build-system]
            requires = []
            build-backend = 'setuptools.build_meta'
        rg   ri   rj   zQ
            [metadata]
            name = proj
            version = 42
        re   Zprojr    Nr   r   )r®   rn   r   rp   r’   r   r¢   r.   r   ÚlenÚext_modulesr&   )r   r   rs   ÚsetupcfgrR   r   r   r    Ú*test_skip_discovery_with_setupcfg_metadatao  s    

z=TestWithCExtension.test_skip_discovery_with_setupcfg_metadatac              	   C   sL   |   |¡ d}|d jt|ƒdd� tjtdd�� t|i ƒ W 5 Q R X dS )aŽ  When opting-in to pyproject.toml metadata, auto-discovery will be active if
        the package lists C-extensions, but does not configure py-modules or packages.

        This way we ensure users with complex package layouts that would lead to the
        discovery of multiple top-level modules/packages see errors and are forced to
        explicitly set ``packages`` or ``py-modules``.
        zT
            [project]
            name = 'proj'
            version = '42'
        rg   ri   rj   rz   r{   N)r®   rn   r   r~   r   r
   rp   )r   r   rs   r   r   r    Ú0test_dont_skip_discovery_with_pyproject_metadata‹  s
    
zCTestWithCExtension.test_dont_skip_discovery_with_pyproject_metadataN)r(   r)   r*   r®   r²   r³   r   r   r   r    r¬   M  s   !r¬   c                   @   sš   e Zd Zdd„ ZdZdZdZej 	ddde
eƒifdd	e
eƒifd
de
eƒifd
d	e
eƒifd
de
eƒe
dƒ ifd
d	e
eƒe
dƒ ifg¡dd„ ƒZdS )ÚTestWithPackageDatac                 C   sF   |› d�|› d�|› d�g}t ||i ƒ d}|d jt|ƒdd� d S )Nz/proj/__init__.pyú/proj/file1.txtú/proj/nested/file2.txtz/
            global-include *.py *.txt
        zMANIFEST.inri   rj   r­   )r   r   Úsrc_rootr:   rO   r   r   r    Ú!_simulate_package_with_data_files   s    ýz5TestWithPackageData._simulate_package_with_data_fileszd
    [metadata]
    name = proj
    version = 42

    [options]
    include_package_data = True
    z8
    [project]
    name = "proj"
    version = "42"
    z:
    [tool.setuptools]
    package-dir = {"" = "src"}
    zsrc_root, filesr„   re   rg   r   zÞ
                        packages = find:
                        package_dir =
                            =src

                        [options.packages.find]
                        where = src
                        zv
                        [tool.setuptools]
                        package-dir = {"" = "src"}
                        c                 C   sÚ   t jj|t|ƒd� |  ||¡ tj |› d�¡ tjd¡tj |› d�¡ tjd¡h}t	|ƒ t
t| d¡ƒƒ}tdƒ td |¡ƒ ||ks”t‚tt| d¡ƒƒ}td	ƒ td |¡ƒ d
d„ |D ƒ}||ksÖt‚dS )zq
        Make sure auto-discovery does not affect package include_package_data.
        See issue #3196.
        rž   rµ   r=   r¶   rS   rT   rU   rV   rW   c                 S   s    h | ]}|  d d¡  dd¡’qS rX   rY   rA   r   r   r    rZ   ü  s     z@TestWithPackageData.test_include_package_data.<locals>.<setcomp>N)r†   r‡   rQ   Ústrr¸   r?   Únormpathr>   r@   r[   r   r\   r]   r^   r_   r   r   )r   r   r·   r:   Úexpectedra   rb   rc   r   r   r    Útest_include_package_dataÀ  s    *þz-TestWithPackageData.test_include_package_dataN)r(   r)   r*   r¸   ZEXAMPLE_SETUPCFGZEXAMPLE_PYPROJECTZPYPROJECT_PACKAGE_DIRr~   rŒ   r�   r   r¼   r   r   r   r    r´   Ÿ  s>    ÿÿÿþ ÿÿÿþëþ%r´   c                 C   sN   dddg}t | |i ƒ ti ƒ}tƒ |_| ¡  |jd ks<t‚|jd ksJt‚d S )Nzdir1/__init__.pyzdir2/__init__.pyzfile.py)rJ   r	   ÚobjectÚconfigurationÚset_defaultsr.   r   r   )r   r:   rR   r   r   r    Ú(test_compatible_with_numpy_configuration   s    ýrÀ   c                 C   sD   t j ddi¡ ti ƒ}dg|_| ¡  | ¡  | ¡ dks@t‚d S )Nr1   r   z--namer"   )	r†   r‡   rQ   r	   Úscript_argsr¿   Úparse_command_liner’   r   )Ú
tmpdir_cwdrR   r   r   r    Ú$test_name_discovery_doesnt_break_cli  s    rÄ   c                    s€   dddiit dƒdœ}tj |¡ ti ƒ‰ ˆ jj‰‡ ‡fdd„}| ˆ jd|¡ ˆ  ¡  ˆ  	¡ d	ksht
‚tˆ jƒdhks|t
‚d
S )a
  According to #3545 it seems that ``name`` discovery is running,
    even when the project already explicitly sets it.
    This seems to be related to parsing of dynamic versions (via ``attr`` directive),
    which requires the auto-discovery of ``package_dir``.
    r"   rœ   z__version__ = 42
zæ
            [project]
            name = "myproj"  # purposefully different from package name
            dynamic = ["version"]
            [tool.setuptools.dynamic]
            version = {"attr" = "pkg.__version__"}
            rª   c                      s   ˆƒ  ˆ   ¡ dkst‚d S )NZmyproj)r’   r   r   ©rR   Zorig_analyse_namer   r    Úspy_analyse_name/  s    zJtest_preserve_explicit_name_with_dynamic_version.<locals>.spy_analyse_nameÚanalyse_namer    N)r   r†   r‡   rQ   r	   r¿   rÇ   ÚsetattrÚparse_config_filesr¢   r   r`   r   )rÃ   Zmonkeypatchr:   rÆ   r   rÅ   r    Ú0test_preserve_explicit_name_with_dynamic_version  s     ÿÿürÊ   c                    s^   ddddœ}t jj|ˆ d� tˆ |ƒ ‡ fdd„|D ƒ}|D ]}|jjddd	� | ¡  q<d S )
Nz$import setuptools
setuptools.setup()z# Example PackagezCopyright (c) 2018)rf   z	README.mdÚLICENSErž   c                 3   s   | ]}ˆ | V  qd S rE   r   rA   ©Úrootr   r    rI   F  s     z(_populate_project_dir.<locals>.<genexpr>Tr   )r†   r‡   rQ   Ú_write_setupcfgÚparentr   r   )rÍ   r:   r;   ÚbasicÚpathsr‡   r   rÌ   r    rJ   ;  s    ý
rJ   c              	   C   s
  |st dƒ d S tƒ }| d¡ | ¡ D ]˜\}}|dkr^| d|› �¡ |d|› �  |¡ q(t|tƒr|d |¡|d |< q(t|tƒr°d dd„ | ¡ D ƒ¡}d| |d |< q(t	|ƒ|d |< q(t
| d	 d
dd��}| |¡ W 5 Q R X t dƒ t | d	 jdd�ƒ d S )Nz~~~~~ **NO** setup.cfg ~~~~~r;   r›   zoptions.z, rU   c                 s   s"   | ]\}}d |› d|› �V  qdS )ú	z = Nr   )rB   ÚkÚvr   r   r    rI   Y  s     z"_write_setupcfg.<locals>.<genexpr>re   Úwri   rj   z~~~~~ setup.cfg ~~~~~)r^   r   Úadd_sectionÚitemsÚupdateÚ
isinstanceÚlistr_   Údictr¹   ÚopenÚwriter¡   )rÍ   r;   r±   ÚkeyÚvalueZ	str_valuerC   r   r   r    rÎ   L  s&    


rÎ   c                 G   s*   t jdddf|t| ƒf•}t|ddid�S )Nz-mrQ   z--no-isolationZDISTUTILS_DEBUGr   )Úenv)ÚsysÚ
executabler¹   r   )r‡   ÚflagsrN   r   r   r    r[   c  s    r[   c              	   C   sŒ   d  tj | ¡¡}| d }| ¡ rPt| ƒ� tttj	j
di dd�ƒ}W 5 Q R X nt|ƒ}||_d|_t| ƒ� | ¡  W 5 Q R X | ¡  |S )Nr=   rf   Úinit)Ú
stop_after)r_   r?   r‡   Úsplitr£   r   r   r	   Ú	distutilsÚcoreÚ	run_setupr·   Úscript_namerÉ   r¿   )Ú	dist_pathÚattrsrÍ   ÚscriptrR   r   r   r    rp   h  s    
þ
rp   c              
   C   sd   t | |ƒ}t|ƒ}| ¡  |jjs.|jjs.t‚tƒ �" t| ƒ� | 	¡  W 5 Q R X W 5 Q R X ||fS rE   )
rp   r   Úensure_finalizedÚdistributionr   r.   r   r   r   r   )rë   rì   rR   rN   r   r   r    rK   ~  s    
rK   )/r?   rá   Úconfigparserr   Ú	itertoolsr   Útypingr   Zjaraco.pathr†   r~   r‡   r   r…   Zsetuptools.command.sdistr   Zsetuptools.discoveryr   r   Zsetuptools.distr	   Zsetuptools.errorsr
   Zcontextsr   Zintegration.helpersr   r   r   Útextwrapr   Údistutils.corerç   r   r+   r�   r™   r¬   r´   rÀ   rÄ   rÊ   rJ   rÎ   r[   rp   rK   r   r   r   r    Ú<module>   s>    X0Ra	$