o
    i*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   `/var/www/html/eduruby.in/lip-sync/lip-sync-env/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ChunkCombinedOffsetOffsetZ outer_offsets_from_list_of_codes
ValueError)r   r   pointsr   outer_offsetsret1ret2offsetsr   r   r   _convert_filled_from_OuterCode   s4   



"


r0   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   r/   r   r   r   r   ;   r   z4_convert_filled_from_OuterOffset.<locals>.<listcomp>r   r   r   )r   r    r!   r"   r   r#   Zconcat_offsetsr%   r2   r&   r'   r(   r)   Z"outer_offsets_from_list_of_offsetsr*   )	r   r   separate_codesr+   r/   r-   r   r,   r.   r   r   r    _convert_filled_from_OuterOffset6   s<   


"



r4    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   r9   r:   r;   )	r   r%   zipappendr   r   codes_from_offsets_and_pointsr&   r*   )r   r   chunk_codesr+   r/   r   r   r   (_convert_filled_from_ChunkCombinedOffsetl   s   

rB   &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  r6   r7   r   r   r   r   r   r          c                   s"   g | ]}t  |kd  d  qS )r   )npnonzero)r   Zoor/   r   r   r      r8   )Zdtyper   )r   r    r>   r   r   split_points_by_offsetssplit_codes_by_offsetsr!   r%   r&   r'   r)   r?   r   rE   arrayr   r*   )r   r   separate_pointsr3   r+   r   r,   separate_offsetsr-   Zall_offsetsr.   chunk_offsetschunk_outer_offsetsret3r   rG   r   ,_convert_filled_from_ChunkCombinedCodeOffset   sn   









rP   (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erG   r   r   r      s   ( zB_convert_filled_from_ChunkCombinedOffsetOffset.<locals>.<listcomp>r   r   r   )r   r    r>   r   r   r@   rH   rI   r!   r"   r   r?   r%   r&   r'   r)   r*   )r   r   rK   r3   r+   r,   r   rL   rA   r-   rN   r.   r   rG   r   ._convert_filled_from_ChunkCombinedOffsetOffset   sx   






rU   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   cpyZFillReturn_OuterCoder0   r!   ZFillReturn_OuterOffsetr4   r%   ZFillReturn_ChunkCombinedCoder<   r&   ZFillReturn_ChunkCombinedOffsetrB   r'   Z"FillReturn_ChunkCombinedCodeOffsetrP   r)   Z$FillReturn_ChunkCombinedOffsetOffsetrU   r*   )r   rV   r   r   r   r   convert_filled   s8   












rY   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   Z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(   r@   r&   ChunkCombinedNanconcat_points_with_nanr*   )	rZ   r\   r3   r-   r+   r/   r   r.   rO   r   r   r   _convert_lines_from_Separate;  s6   






rf   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   ra   )r   rb   rc   r%   r   r#   r$   r&   r(   rd   re   r*   )rZ   r\   r-   r.   rO   r   r   r    _convert_lines_from_SeparateCode]  s.   


 
 
rh    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   r^   r_   r   r   r   r     r   z9_convert_lines_from_ChunkCombinedCode.<locals>.<listcomp>c                 S  r6   r7   r   r   r   r   r   r     rD   ra   )r   rb   rc   r>   r   rE   rF   r   r"   splitr?   r%   r&   rd   r   r   insert_nan_at_offsetsr*   )
rZ   r\   separate_linesr+   r   Zsplit_atr3   rM   
points_nanr/   r   r   r   %_convert_lines_from_ChunkCombinedCode|  sB   





rn   "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   r^   r_   r   r   r   r     r   z;_convert_lines_from_ChunkCombinedOffset.<locals>.<listcomp>r   ra   )r   rb   rc   r>   r   r   rH   r%   r?   r@   r&   rd   rk   r*   )rZ   r\   rl   r+   r/   r3   rA   rm   r   r   r   '_convert_lines_from_ChunkCombinedOffset  sB   



rp   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   r^   )r   r+   r   r   r   r     r   z8_convert_lines_from_ChunkCombinedNan.<locals>.<listcomp>ra   )r   rb   rc   r   Zsplit_points_at_nanr%   r?   Z
remove_nanr@   r&   rd   r*   )	rZ   r\   rl   r+   r3   Zchunk_pointsrA   r/   rM   r   r   r   $_convert_lines_from_ChunkCombinedNan  sF   







rr   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
    ra   )r	   r   r   rb   r   r   rX   ZLineReturn_Separaterf   rc   ZLineReturn_SeparateCoderh   r%   ZLineReturn_ChunkCombinedCodern   r&   ZLineReturn_ChunkCombinedOffsetrp   rd   ZLineReturn_ChunkCombinedNanrr   r*   )rZ   rs   r\   r   r   r   convert_lines  s0   










ru   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   )rY   )r   r   rV   r   r   r   r   N      z(convert_multi_filled.<locals>.<listcomp>)r   )rv   rV   r   r   rz   r   convert_multi_filled1  s   r|   multi_lineslist[cpy.LineReturn]c                   rx   )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                   ry   r   )ru   )r   rZ   rs   r\   r   r   r   m  r{   z'convert_multi_lines.<locals>.<listcomp>)r	   )r}   rs   r\   r   r   r   convert_multi_linesQ  s   r   )r   r   r   r   r   r   )r   r1   r   r   r   r   )r   r5   r   r   r   r   )r   r=   r   r   r   r   )r   rC   r   r   r   r   )r   rQ   r   r   r   r   )r   r   rV   rW   r   rW   r   r   )rZ   r[   r\   r   r   r]   )rZ   rg   r\   r   r   r]   )rZ   ri   r\   r   r   r]   )rZ   ro   r\   r   r   r]   )rZ   rq   r\   r   r   r]   )rZ   r]   rs   rt   r\   rt   r   r]   )rv   rw   rV   rW   r   rW   r   rw   )r}   r~   rs   rt   r\   rt   r   r~   ))
__future__r   	itertoolsr   typingr   r   numpyrE   Zcontourpy._contourpyr   r   Zcontourpy.arrayrJ   r   Zcontourpy.enum_utilr   r	   Zcontourpy.typecheckr
   r   Zcontourpy.typesr   r   Z
_contourpyrX   r0   r4   r<   rB   rP   rU   rY   rf   rh   rn   rp   rr   ru   r|   r   r   r   r   r   <module>   s4    

$
(


<
C
;
"

)
*
,
6 