o
    e                     @   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   GD:\Projects\ConvertPro\env\Lib\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1Z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   Z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   Zgeos_capi_versionZgeos_capi_version_stringsplitr(   r)   r*   r   r   )r+   Zactual_geos_versionZactual_geos_api_versionr   r   r   test_geos_capi_version,   s   




r2   c                   C      dS )zKDocstring that will be mocked.
    A multiline.

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

        Some description.
        Nr   )selfr   r   r   r4   M   r5   zSomeClass.funcN)__name__
__module____qualname__r4   r   r   r   r   r6   L   s    r6   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   r4   r;   r   wrappedr   r   r   test_requires_geos_ok^   s   r>   )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    r;   indent)
r   r4   pytestraisesr   errorsZUnsupportedGEOSVersionError__doc__expected_docstringr'   r<   r   r   r   test_requires_geos_not_okd   s
   rH   z3.6.0r?   c                 C   s(   t | t}|jtj| ddksJ dS )z8The requires_geos decorator always adapts the docstring.r@   rA   N)r   r4   rF   rG   r'   r;   r   r   r=   r   r   r   test_requires_geos_doc_buildm   s   rJ   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        rA   N)r   r6   r4   rF   rG   r'   rI   r   r   r   test_requires_geos_methodu   s   rK   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   
rS   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   Zdtype*   r   )npemptyr   rC   rD   
ValueErrorrS   Zarrr   r   r   &test_multithreading_enabled_raises_arg   s   r[   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 )NrT   rU   rV   rZ   )	rW   rX   r   rC   rD   rY   rS   flags	writeablerZ   r   r   r   (test_multithreading_enabled_raises_kwarg   s
   r^   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 )NrT   rU   FrV   )	rW   rX   r   r\   r]   rC   rD   rY   rS   rZ   r   r   r   *test_multithreading_enabled_preserves_flag   s   r_   zargs,kwargsrT   rU   r   ar   outwherec                 C   s*   t dg| R i |}|d dksJ d S )NrV   r   )rS   )rP   rQ   resultr   r   r   test_multithreading_enabled_ok   s   rd   )+r   sys	itertoolsr   stringr   r   Zunittestr   numpyrW   rC   r   Zshapely.decoratorsr   r   Zfixturer   r   r   r-   markZskipifplatform
startswithr   r2   r4   r6   rG   Zparametrizer>   rH   rJ   rK   rS   r[   r^   r_   rX   floatr   rd   r   r   r   r   <module>   sb    


		





