o
    iW                     @   s  d dl 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	Z
d dlZd dlZd dlmZmZ ejdd Zejdd	 Zd
d Zdd ZejjejdoWejdd dkdddd Zdd ZG dd dZdZejdg ddd Zejdg ddd  Z ejdd!d"gd#d$ Z!ejdd!d"gd%d& Z"ed'd( Z#d)d* Z$d+d, Z%d-d. Z&ejd/e
j'd0e(d1fi fd2d3e
j'd0e(d1ifd4gfi fd2d3d4gifd2d5e
j'd0e)d1ifd2d6e
j'd0e)d1ifgd7d8 Z*dS )9    N)chain)ascii_lettersdigits)mock)multithreading_enabledrequires_geosc                   c   sB    t jjtjddd dV  W d    d S 1 sw   Y  d S )Ngeos_version)         )new3.7.1)r   patchobjectshapelylib r   r   R/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/shapely/tests/test_misc.pymocked_geos_version   s   "r   c                   c   s    dt jd< d V  t jd= d S )N1SPHINX_DOC_BUILD)osenvironr   r   r   r   sphinx_doc_build   s   
r   c                   C   s   t tjtsJ d S N)
isinstancer   __version__strr   r   r   r   test_version   s   r   c                  C   sT   dj tj } tj}tdd |D r"|d  r|t}|t}|| ks(J d S )Nz{}.{}.{}c                 s       | ]}|  V  qd S r   isalpha.0cr   r   r   	<genexpr>$       z$test_geos_version.<locals>.<genexpr>)	formatr   r   geos_version_stringany	isnumericrstripr   r   )expectedactualr   r   r   test_geos_version   s   

r/   win   )r	   r
   z3GEOS_C_API_VERSION broken for GEOS 3.7.x on Windows)reasonc                  C   sx   dj tjtj  } tjd\}}tdd |D r*|d  r%|t	}|t
}|t
}| d| | ks:J d S )Nz{}.{}.{}-CAPI-{}.{}.{}z-CAPI-c                 s   r   r   r    r"   r   r   r   r%   ;   r&   z)test_geos_capi_version.<locals>.<genexpr>r'   )r(   r   r   geos_capi_versiongeos_capi_version_stringsplitr*   r+   r,   r   r   )r-   actual_geos_versionactual_geos_api_versionr   r   r   test_geos_capi_version,   s   




r8   c                   C      dS )zKDocstring that will be mocked.
    A multiline.

    Some description.
    Nr   r   r   r   r   funcD       r:   c                   @   s   e Zd Zdd ZdS )	SomeClassc                 C   r9   )zWDocstring that will be mocked.
        A multiline.

        Some description.
        Nr   )selfr   r   r   r:   M   r;   zSomeClass.funcN)__name__
__module____qualname__r:   r   r   r   r   r<   L   s    r<   zDocstring that will be mocked.
{indent}A multiline.

{indent}.. note:: 'func' requires at least GEOS {version}.

{indent}Some description.
{indent}version)z3.7.0r   z3.6.2c                 C   s   t | t}|tu sJ d S r   )r   r:   rA   r   wrappedr   r   r   test_requires_geos_ok^   s   rD   )z3.7.23.8.0z3.8.1c                 C   s\   t | t}ttjj |  W d    n1 sw   Y  |jtj	| ddks,J d S )N    rA   indent)
r   r:   pytestraisesr   errorsUnsupportedGEOSVersionError__doc__expected_docstringr(   rB   r   r   r   test_requires_geos_not_okd   s
   rO   z3.6.0rE   c                 C   s(   t | t}|jtj| ddksJ dS )z8The requires_geos decorator always adapts the docstring.rF   rG   N)r   r:   rM   rN   r(   rA   r   r   rC   r   r   r   test_requires_geos_doc_buildm   s   rQ   c                 C   s*   t | tj}|jtj| ddksJ dS )z@The requires_geos decorator adjusts methods docstrings correctlyz        rG   N)r   r<   r:   rM   rN   r(   rP   r   r   r   test_requires_geos_methodu   s   rR   c                 O   s2   t || D ]}t|dr| |d< |  S qd S )N__setitem__r   )r   valueshasattr)valueargskwargsargr   r   r   set_first_element}   s   
rZ   c                  C   s^   t jdtd} tt td|  W d    n1 sw   Y  d| d< | d dks-J d S )Nr   dtype*   r   )npemptyr   rI   rJ   
ValueErrorrZ   arrr   r   r   &test_multithreading_enabled_raises_arg   s   rd   c                  C   sT   t jdtd} tt td| d W d    n1 sw   Y  | jjs(J d S )Nr[   r\   r^   rb   )	r_   r`   r   rI   rJ   ra   rZ   flags	writeablerb   r   r   r   (test_multithreading_enabled_raises_kwarg   s
   rg   c                  C   sZ   t jdtd} d| j_tt td|  W d    n1 s w   Y  | jjr+J d S )Nr[   r\   Fr^   )	r_   r`   r   re   rf   rI   rJ   ra   rZ   rb   r   r   r   *test_multithreading_enabled_preserves_flag   s   rh   zargs,kwargsr[   r\   r   ar   outwherec                 C   s*   t dg| R i |}|d dksJ d S )Nr^   r   )rZ   )rW   rX   resultr   r   r   test_multithreading_enabled_ok   s   rm   )+r   sys	itertoolsr   stringr   r   unittestr   numpyr_   rI   r   shapely.decoratorsr   r   fixturer   r   r   r/   markskipifplatform
startswithr   r8   r:   r<   rN   parametrizerD   rO   rQ   rR   rZ   rd   rg   rh   r`   floatr   rm   r   r   r   r   <module>   sb    


		





