o
    h*f                     @  s&  d dl mZ d dlmZ d dlmZmZ d dlZd dl	m
Z
mZ d dlmZ d dlmZmZ d dlmZmZ d dlmZmZ erFd dl	mZ dCddZdDddZdEddZdFddZdGddZdHddZdId"d#Z dJd)d*Z!dKd,d-Z"dLd/d0Z#dMd2d3Z$dNd5d6Z%dOd9d:Z&dPd=d>Z'dQdAdBZ(dS )R    )annotations)pairwise)TYPE_CHECKINGcastN)FillTypeLineType)as_fill_typeas_line_type)check_filledcheck_lines)MOVETOoffset_dtypefilledcpy.FillReturn_OuterCodefill_type_tor   returncpy.FillReturnc                 C  sB  |t jkr| S |t jkr| d dd | d D fS t| d dkr0t| d }t| d }nd }d }|t jkr?|g|gfS |t jkrU|g|d u rNd gfS t	|gfS |t j
krq|d u r`d nt| d }|g|g|gf}|S |t jkr|d u rd gd gd gf}|S t	|}t| d }|g|g|gf}|S td| )Nr   c                 S     g | ]}t |qS  arroffsets_from_codes.0codesr   r   e/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/contourpy/convert.py
<listcomp>       z2_convert_filled_from_OuterCode.<locals>.<listcomp>   Invalid FillType )r   	OuterCodeOuterOffsetlenr   concat_pointsconcat_codesChunkCombinedCodeChunkCombinedOffsetr   ChunkCombinedCodeOffsetoffsets_from_lengthsChunkCombinedOffsetOffset outer_offsets_from_list_of_codes
ValueError)r   r   pointsr   outer_offsetsret1ret2offsetsr   r   r   _convert_filled_from_OuterCode   s4   



"


r1   cpy.FillReturn_OuterOffsetc           	      C  sV  |t jkrdd | d D }| d |fS |t jkr| S t| d dkr2t| d }t| d }nd }d }|t jkrL|g|d u rEd gfS t|gfS |t j	krW|g|gfS |t j
kr|d u rjd gd gd gf}|S t|}t| d }|g|g|gf}|S |t jkr|d u rd gd gd gf}|S t| d }|g|g|gf}|S td| )Nc                 S  r   r   )r   codes_from_offsets)r   r0   r   r   r   r   ;   r   z4_convert_filled_from_OuterOffset.<locals>.<listcomp>r   r   r   )r   r    r!   r"   r   r#   concat_offsetsr%   r3   r&   r'   r(   r)   "outer_offsets_from_list_of_offsetsr+   )	r   r   separate_codesr,   r0   r.   r   r-   r/   r   r   r    _convert_filled_from_OuterOffset6   s<   


"



r7    cpy.FillReturn_ChunkCombinedCodec                 C  sN   |t jkr| S |t jkrdd | d D }| d |fS tdt j d| d)Nc                 S  "   g | ]}|d u r
d nt |qS Nr   r   r   r   r   r   e      " z:_convert_filled_from_ChunkCombinedCode.<locals>.<listcomp>r   r   Conversion from  to  not supported)r   r%   r&   r+   )r   r   r   r   r   r   &_convert_filled_from_ChunkCombinedCode^   s   

r?   "cpy.FillReturn_ChunkCombinedOffsetc                 C  s   |t jkr1g }t|  D ]\}}|d u r|d  qtr!|d us!J |t|| q| d |fS |t jkr8| S tdt j d| d)Nr   r<   r=   r>   )	r   r%   zipappendr   r   codes_from_offsets_and_pointsr&   r+   )r   r   chunk_codesr,   r0   r   r   r   (_convert_filled_from_ChunkCombinedOffsetl   s   

rE   &cpy.FillReturn_ChunkCombinedCodeOffsetc                   s  |t jkr9g }g }t|  D ]'\}}}|d ur4tr$|d usJ |d us$J |t||7 }|t||7 }q||fS |t jkryg }g }t|  D ].\}}}|d urttr]|d usWJ |d us]J |t||7 }t||}|dd |D 7 }qF||fS |t jkr| d | d f}|S |t j	krdd | d D }	| d |	f}
|
S |t j
kr| S |t jkrg }g }t| dd   D ]8\}}|d u r|d  |d  qtr|d usJ t| tj fdd|D td}|  || q| d ||f}|S td| )	Nc                 S  r   r   r   r   r   r   r   r      r   z@_convert_filled_from_ChunkCombinedCodeOffset.<locals>.<listcomp>r   r   c                 S  r9   r:   r   r   r   r   r   r          c                   s"   g | ]}t  |kd  d  qS )r   )npnonzero)r   oor0   r   r   r      r;   )dtyper   )r   r    rA   r   r   split_points_by_offsetssplit_codes_by_offsetsr!   r%   r&   r'   r)   rB   r   rH   arrayr   r+   )r   r   separate_pointsr6   r,   r   r-   separate_offsetsr.   all_offsetsr/   chunk_offsetschunk_outer_offsetsret3r   rK   r   ,_convert_filled_from_ChunkCombinedCodeOffset   sn   









rV   (cpy.FillReturn_ChunkCombinedOffsetOffsetc                   sd  |t jkrCg }g }t|  D ]1\} }|d ur>tr$ d usJ |d us$J t |} | }|t||7 }|t||7 }q||fS |t jkrg }g }t|  D ]:\} }|d urtrg d usaJ |d usgJ t	|dkr{| fddt
|D 7 }n|  |t| | 7 }qP||fS |t jkrg }t|  D ]&\} }|d u r|d  qtr d usJ |d usJ |t | q| d |f}	|	S |t jkr| d | d fS |t jkr#g }g }
t|  D ]5\} }|d u r|d  |
d  qtr	 d usJ |d us	J |t | |
 |  q| d ||
f}|S |t jkr+| S td| )N   c                   s(   g | ]\}} ||d    |  qS )r   r   )r   serK   r   r   r      s   ( zB_convert_filled_from_ChunkCombinedOffsetOffset.<locals>.<listcomp>r   r   r   )r   r    rA   r   r   rC   rM   rN   r!   r"   r   rB   r%   r&   r'   r)   r+   )r   r   rP   r6   r,   r-   r   rQ   rD   r.   rT   r/   r   rK   r   ._convert_filled_from_ChunkCombinedOffsetOffset   sx   






r[   fill_type_fromFillType | strc                 C  s   t |}t |}t| | |tjkrtrttj| } t| |S |tj	kr1tr,ttj
| } t| |S |tjkrCtr>ttj| } t| |S |tjkrUtrPttj| } t| |S |tjkrgtrbttj| } t| |S |tjkrytrtttj| } t| |S td| )a  Convert filled contours from one :class:`~.FillType` to another.

    Args:
        filled (sequence of arrays): Filled contour polygons to convert, such as those returned by
            :meth:`.ContourGenerator.filled`.
        fill_type_from (FillType or str): :class:`~.FillType` to convert from as enum or
            string equivalent.
        fill_type_to (FillType or str): :class:`~.FillType` to convert to as enum or string
            equivalent.

    Return:
        Converted filled contour polygons.

    When converting non-chunked fill types (``FillType.OuterCode`` or ``FillType.OuterOffset``) to
    chunked ones, all polygons are placed in the first chunk. When converting in the other
    direction, all chunk information is discarded. Converting a fill type that is not aware of the
    relationship between outer boundaries and contained holes (``FillType.ChunkCombinedCode`` or
    ``FillType.ChunkCombinedOffset``) to one that is will raise a ``ValueError``.

    .. versionadded:: 1.2.0
    r   )r   r
   r   r    r   r   cpyFillReturn_OuterCoder1   r!   FillReturn_OuterOffsetr7   r%   FillReturn_ChunkCombinedCoder?   r&   FillReturn_ChunkCombinedOffsetrE   r'   "FillReturn_ChunkCombinedCodeOffsetrV   r)   $FillReturn_ChunkCombinedOffsetOffsetr[   r+   )r   r\   r   r   r   r   convert_filled   s8   












re   linescpy.LineReturn_Separateline_type_tor   cpy.LineReturnc           	      C  s   |t jkr| S |t jkrdd | D }| |fS |t jkr>| s&d gd gf}|S t| }t| }t||}|g|gf}|S |t jkr[| sMd gd gf}|S t| gt| gf}|S |t j	krq| shd gf}|S t
| gf}|S td| )Nc                 S  r   r   r   codes_from_pointsr   liner   r   r   r   B  r   z0_convert_lines_from_Separate.<locals>.<listcomp>Invalid LineType )r   SeparateSeparateCoder%   r   r#   r(   rC   r&   ChunkCombinedNanconcat_points_with_nanr+   )	rf   rh   r6   r.   r,   r0   r   r/   rU   r   r   r   _convert_lines_from_Separate;  s6   






rs   cpy.LineReturn_SeparateCodec                 C  s   |t jkr	| d S |t jkr| S |t jkr3| d s!d gd gf}|S t| d gt| d gf}|S |t jkrV| d sDd gd gf}|S t| d gt| d gf}|S |t j	krp| d sed gf}|S t
| d gf}|S td| )Nr   r   rn   )r   ro   rp   r%   r   r#   r$   r&   r(   rq   rr   r+   )rf   rh   r.   r/   rU   r   r   r    _convert_lines_from_SeparateCode]  s.   


 
 
ru    cpy.LineReturn_ChunkCombinedCodec           
      C  sN  |t jt jfv rRg }t|  D ]1\}}|d ur?tr|d usJ t|tkd }t|dkr:|t	||dd  7 }q|
| q|t jkrG|S dd |D }||fS |t jkrY| S |t jkrmdd | d D }| d |fS |t jkrg }t|  D ]$\}}|d u r|
d  qxtr|d usJ t|}	|
t||	 qx|fS td| )Nr   r   c                 S  r   r   rj   rl   r   r   r   r     r   z9_convert_lines_from_ChunkCombinedCode.<locals>.<listcomp>c                 S  r9   r:   r   r   r   r   r   r     rG   rn   )r   ro   rp   rA   r   rH   rI   r   r"   splitrB   r%   r&   rq   r   r   insert_nan_at_offsetsr+   )
rf   rh   separate_linesr,   r   split_atr6   rS   
points_nanr0   r   r   r   %_convert_lines_from_ChunkCombinedCode|  sB   





r|   "cpy.LineReturn_ChunkCombinedOffsetc                 C  sL  |t jt jfv r9g }t|  D ]\}}|d ur&tr|d usJ |t||7 }q|t jkr.|S dd |D }||fS |t jkrjg }t|  D ]\}}|d u rR|d  qDtrZ|d usZJ |t	|| qD| d |fS |t j
krq| S |t jkrg }t|  D ]\}}|d u r|d  q|tr|d usJ |t|| q||fS td| )Nc                 S  r   r   rj   rl   r   r   r   r     r   z;_convert_lines_from_ChunkCombinedOffset.<locals>.<listcomp>r   rn   )r   ro   rp   rA   r   r   rM   r%   rB   rC   r&   rq   rx   r+   )rf   rh   ry   r,   r0   r6   rD   r{   r   r   r   '_convert_lines_from_ChunkCombinedOffset  sB   



r~   cpy.LineReturn_ChunkCombinedNanc           	      C  sP  |t jt jfv r.g }| d D ]}|d ur|t|7 }q|t jkr#|S dd |D }||fS |t jkrfg }g }| d D ]&}|d u rL|d  |d  q;t|\}}|| |t|| q;||fS |t j	krg }g }| d D ]"}|d u r|d  |d  qst|\}}|| || qs||fS |t j
kr| S td| )Nr   c                 S  r   r   rj   )r   r,   r   r   r   r     r   z8_convert_lines_from_ChunkCombinedNan.<locals>.<listcomp>rn   )r   ro   rp   r   split_points_at_nanr%   rB   
remove_nanrC   r&   rq   r+   )	rf   rh   ry   r,   r6   chunk_pointsrD   r0   rS   r   r   r   $_convert_lines_from_ChunkCombinedNan  sF   







r   line_type_fromLineType | strc                 C  s   t |}t |}t| | |tjkrtrttj| } t| |S |tj	kr1tr,ttj
| } t| |S |tjkrCtr>ttj| } t| |S |tjkrUtrPttj| } t| |S |tjkrgtrbttj| } t| |S td| )aa  Convert contour lines from one :class:`~.LineType` to another.

    Args:
        lines (sequence of arrays): Contour lines to convert, such as those returned by
            :meth:`.ContourGenerator.lines`.
        line_type_from (LineType or str): :class:`~.LineType` to convert from as enum or
            string equivalent.
        line_type_to (LineType or str): :class:`~.LineType` to convert to as enum or string
            equivalent.

    Return:
        Converted contour lines.

    When converting non-chunked line types (``LineType.Separate`` or ``LineType.SeparateCode``) to
    chunked ones (``LineType.ChunkCombinedCode``, ``LineType.ChunkCombinedOffset`` or
    ``LineType.ChunkCombinedNan``), all lines are placed in the first chunk. When converting in the
    other direction, all chunk information is discarded.

    .. versionadded:: 1.2.0
    rn   )r	   r   r   ro   r   r   r^   LineReturn_Separaters   rp   LineReturn_SeparateCoderu   r%   LineReturn_ChunkCombinedCoder|   r&   LineReturn_ChunkCombinedOffsetr~   rq   LineReturn_ChunkCombinedNanr   r+   )rf   r   rh   r   r   r   convert_lines  s0   










r   multi_filledlist[cpy.FillReturn]c                   $   t   t  fdd| D S )a   Convert multiple sets of filled contours from one :class:`~.FillType` to another.

    Args:
        multi_filled (nested sequence of arrays): Filled contour polygons to convert, such as those
            returned by :meth:`.ContourGenerator.multi_filled`.
        fill_type_from (FillType or str): :class:`~.FillType` to convert from as enum or
            string equivalent.
        fill_type_to (FillType or str): :class:`~.FillType` to convert to as enum or string
            equivalent.

    Return:
        Converted sets filled contour polygons.

    When converting non-chunked fill types (``FillType.OuterCode`` or ``FillType.OuterOffset``) to
    chunked ones, all polygons are placed in the first chunk. When converting in the other
    direction, all chunk information is discarded. Converting a fill type that is not aware of the
    relationship between outer boundaries and contained holes (``FillType.ChunkCombinedCode`` or
    ``FillType.ChunkCombinedOffset``) to one that is will raise a ``ValueError``.

    .. versionadded:: 1.3.0
    c                      g | ]}t | qS r   )re   )r   r   r\   r   r   r   r   N      z(convert_multi_filled.<locals>.<listcomp>)r   )r   r\   r   r   r   r   convert_multi_filled1  s   r   multi_lineslist[cpy.LineReturn]c                   r   )a  Convert multiple sets of contour lines from one :class:`~.LineType` to another.

    Args:
        multi_lines (nested sequence of arrays): Contour lines to convert, such as those returned by
            :meth:`.ContourGenerator.multi_lines`.
        line_type_from (LineType or str): :class:`~.LineType` to convert from as enum or
            string equivalent.
        line_type_to (LineType or str): :class:`~.LineType` to convert to as enum or string
            equivalent.

    Return:
        Converted set of contour lines.

    When converting non-chunked line types (``LineType.Separate`` or ``LineType.SeparateCode``) to
    chunked ones (``LineType.ChunkCombinedCode``, ``LineType.ChunkCombinedOffset`` or
    ``LineType.ChunkCombinedNan``), all lines are placed in the first chunk. When converting in the
    other direction, all chunk information is discarded.

    .. versionadded:: 1.3.0
    c                   r   r   )r   )r   rf   r   rh   r   r   r   m  r   z'convert_multi_lines.<locals>.<listcomp>)r	   )r   r   rh   r   r   r   convert_multi_linesQ  s   r   )r   r   r   r   r   r   )r   r2   r   r   r   r   )r   r8   r   r   r   r   )r   r@   r   r   r   r   )r   rF   r   r   r   r   )r   rW   r   r   r   r   )r   r   r\   r]   r   r]   r   r   )rf   rg   rh   r   r   ri   )rf   rt   rh   r   r   ri   )rf   rv   rh   r   r   ri   )rf   r}   rh   r   r   ri   )rf   r   rh   r   r   ri   )rf   ri   r   r   rh   r   r   ri   )r   r   r\   r]   r   r]   r   r   )r   r   r   r   rh   r   r   r   ))
__future__r   	itertoolsr   typingr   r   numpyrH   contourpy._contourpyr   r   contourpy.arrayrO   r   contourpy.enum_utilr   r	   contourpy.typecheckr
   r   contourpy.typesr   r   
_contourpyr^   r1   r7   r?   rE   rV   r[   re   rs   ru   r|   r~   r   r   r   r   r   r   r   r   <module>   s4    

$
(


<
C
;
"

)
*
,
6 