Ë
    ¨2Úi4#  ã                  óD  — d dl mZ d dlmZ d dlmZ d dlZd dlm	Z	m
Z
mZ d dlmZmZmZmZmZmZ erd dlm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#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)d„Z'	 	 	 	 	 	 d*d„Z(d+d„Z)y),é    )Úannotations)Úchain)ÚTYPE_CHECKINGN)Úcheck_code_arrayÚcheck_offset_arrayÚcheck_point_array)Ú	CLOSEPOLYÚLINETOÚMOVETOÚ
code_dtypeÚoffset_dtypeÚpoint_dtypec                óœ   — t        | «       | d   }t        j                  |t        t        ¬«      }t
        || dd <   t        || dd dz
  <   |S )zSDetermine codes from offsets, assuming they all correspond to closed polygons.
    éÿÿÿÿ©ÚdtypeNé   )r   ÚnpÚfullr
   r   r   r	   )ÚoffsetsÚnÚcodess      úF/var/www/html/acx/venv/lib/python3.12/site-packages/contourpy/array.pyÚcodes_from_offsetsr      sP   € ô �wÔà�‰€AÜ�G‰G�A”v¤ZÔ0€EÜ €Eˆ'�#�2ˆ,ÑÜ&€Eˆ'�!�"ˆ+˜‰/ÑØ€Ló    c                ó
  — t        | «       t        |«       t        j                  t	        |«      t
        t        ¬«      }t        || dd <   | dd dz
  }t        j                  || dd    ||   k(  d¬«      }t        |||   <   |S )z–Determine codes from offsets and points, using the equality of the start and end points of
    each line to determine if lines are closed or not.
    r   Nr   r   ©Úaxis)
r   r   r   r   Úlenr
   r   r   Úallr	   )r   Úpointsr   Úend_offsetsÚcloseds        r   Úcodes_from_offsets_and_pointsr$      s‚   € ô �wÔÜ�fÔä�G‰G”C˜“K¤¬zÔ:€EÜ €Eˆ'�#�2ˆ,Ñà˜!˜"�+ ‘/€KÜ�V‰V�F˜7 3 B˜<Ñ(¨F°;Ñ,?Ñ?ÀaÔH€FÜ!*€Eˆ+�fÑ
Ñà€Lr   c                óÒ   — t        | «       t        | «      }t        j                  |t        t
        ¬«      }t        |d<   t        j                  | d   | d   k(  «      r	t        |d<   |S )z…Determine codes for a single line, using the equality of the start and end points to
    determine if the line is closed or not.
    r   r   r   )	r   r   r   r   r
   r   r   r    r	   )r!   r   r   s      r   Úcodes_from_pointsr&   /   sW   € ô �fÔäˆF‹€AÜ�G‰G�A”v¤ZÔ0€EÜ€Eˆ!�HÜ	‡v�vˆf�Q‰i˜6 "™:Ñ%Ô&Üˆˆb‰	Ø€Lr   c                óR   — | st        d«      ‚t        j                  | t        ¬«      S )zAConcatenate a list of codes arrays into a single code array.
    z!Empty list passed to concat_codesr   )Ú
ValueErrorr   Úconcatenater   )Úlist_of_codess    r   Úconcat_codesr+   =   s$   € ñ ÜÐ<Ó=Ð=ä�>‰>˜-¬zÔ:Ð:r   c                óL   — | D �cg c]  }|€Œ|‘Œ	 }}|rt        |«      S yc c}w )zQConcatenate a list of codes arrays or None into a single code array or None.
    N)r+   )Úlist_of_codes_or_noner   r*   s      r   Úconcat_codes_or_noner.   F   s3   € ð )>ÖS˜uÀÑAR’UÐS€MÐSÙÜ˜MÓ*Ð*àùò	 Tó   …!�!c                ó  ‡ ‡— ‰ st        d«      ‚t        ‰ «      }t        j                  ‰ D �cg c]  }|d   ‘Œ	 c}t        ¬«      Št        j
                  ‰ d   gˆˆ fd„t        |dz
  «      D «       ¢­t        ¬«      }|S c c}w )zEConcatenate a list of offsets arrays into a single offset array.
    z#Empty list passed to concat_offsetsr   r   r   c              3  ó@   •K  — | ]  }‰|d z      d d ‰|   z   –— Œ y­w)r   N© )Ú.0ÚiÚ
cumulativeÚlist_of_offsetss     €€r   ú	<genexpr>z!concat_offsets.<locals>.<genexpr>Y   s*   øè ø€ Ò\ÈA˜¨q°©sÑ3°A°BÐ7¸*ÀQ¹-ÕGÑ\ùs   ƒr   )r(   r   r   Úcumsumr   r)   Úrange)r6   r   r   Úretr5   s   `   @r   Úconcat_offsetsr;   P   s~   ù€ ñ ÜÐ>Ó?Ð?äˆOÓ€AÜ—‘°ÖG¨G˜G B›KÒGÌ|Ô\€JÜŸ>™>Ø	˜Ñ	Ð]Ô\ÔQVÐWXÐYZÑWZÓQ[Ô\Ñ]Üô€Cð €Jùò Hs   ®Bc                óL   — | D �cg c]  }|€Œ|‘Œ	 }}|rt        |«      S yc c}w )zUConcatenate a list of offsets arrays or None into a single offset array or None.
    N)r;   )Úlist_of_offsets_or_noner   r6   s      r   Úconcat_offsets_or_noner>   _   s4   € ð
 /FÖ] 7ÈÑI\’wÐ]€OÐ]ÙÜ˜oÓ.Ð.àùò	 ^r/   c                óR   — | st        d«      ‚t        j                  | t        ¬«      S )zBConcatenate a list of point arrays into a single point array.
    z"Empty list passed to concat_pointsr   )r(   r   r)   r   )Úlist_of_pointss    r   Úconcat_pointsrA   k   s$   € ñ ÜÐ=Ó>Ð>ä�>‰>˜.´Ô<Ð<r   c                óL   — | D �cg c]  }|€Œ|‘Œ	 }}|rt        |«      S yc c}w )zRConcatenate a list of point arrays or None into a single point array or None.
    N)rA   ©Úlist_of_points_or_noner!   r@   s      r   Úconcat_points_or_nonerE   t   s4   € ð
 ,BÖX ÀVÑEW’fÐX€NÐXÙÜ˜^Ó,Ð,àùò	 Yr/   c                óL   — | D �cg c]  }|€Œ|‘Œ	 }}|rt        |«      S yc c}w )zvConcatenate a list of points or None into a single point array or None, with NaNs used to
    separate each line.
    N)Úconcat_points_with_nanrC   s      r   Úconcat_points_or_none_with_nanrH   €   s4   € ð ,BÖX ÀVÑEW’fÐX€NÐXÙÜ% nÓ5Ð5àùò	 Yr/   c           	     óô   ‡— | st        d«      ‚t        | «      dk(  r| d   S t        j                  dt        j                  t
        ¬«      Š| d   gt        t        ˆfd„| dd D «       Ž «      ¢} t        | «      S )zaConcatenate a list of points into a single point array with NaNs used to separate each line.
    z+Empty list passed to concat_points_with_nanr   r   )r   é   r   c              3  ó&   •K  — | ]  }‰|f–— Œ
 y ­w)Nr2   )r3   ÚxÚ
nan_spacers     €r   r7   z)concat_points_with_nan.<locals>.<genexpr>˜   s   øè ø€ Ò'T¸A¨°Q¬Ñ'Tùs   ƒN)	r(   r   r   r   Únanr   Úlistr   rA   )r@   rM   s    @r   rG   rG   �   s   ø€ ñ ÜÐFÓGÐGä
ˆ>Ó˜aÒØ˜aÑ Ð ä—W‘W˜V¤R§V¡V´;Ô?ˆ
Ø(¨Ñ+ð XÜ¤Ó'TÀÐPQÐPRÐASÔ'TÐ UÓVðXˆä˜^Ó,Ð,r   c                ó2  — t        | «       t        |«       t        |«      dk  r| S t        j                  t        j
                  t        j
                  gt        ¬«      }t        j                  | |dd j                  t        j                  «      |d¬«      S )zNInsert NaNs into a point array at locations specified by an offset array.
    rJ   r   r   r   r   r   )
r   r   r   r   ÚarrayrN   r   ÚinsertÚastypeÚint64)r!   r   rM   s      r   Úinsert_nan_at_offsetsrU   œ   sm   € ô �fÔÜ�wÔä
ˆ7ƒ|�qÒØˆä—X‘XœrŸv™v¤r§v¡vÐ.´kÔBˆ
ä�y‰y˜ ¨¨2 ×!5Ñ!5´b·h±hÓ!?ÀÐRSÔTÐTr   c                ó¶   — t        | «       t        j                  t        j                  | t        k(  «      d   t        | «      «      j                  t        «      S )zBDetermine offsets from codes using locations of MOVETO codes.
    r   )r   r   ÚappendÚnonzeror   r   rS   r   )r   s    r   Úoffsets_from_codesrY   ª   s>   € ô �UÔä�9‰9”R—Z‘Z ¬¡Ó0°Ñ3´S¸³ZÓ@×GÑGÌÓUÐUr   c           	     ó’   — | st        d«      ‚t        j                  dg| D �cg c]  }t        |«      ‘Œ c}z   t        ¬«      S c c}w )z4Determine offsets from lengths of point arrays.
    z)Empty list passed to offsets_from_lengthsr   r   ©r(   r   r8   r   r   )r@   Úlines     r   Úoffsets_from_lengthsr]   ²   s=   € ñ ÜÐDÓEÐEä�9‰9�a�S°.ÖA¨$œC �IÒAÑAÌÔVÐVùÒAs   £A
c           
     ó´   — | st        d«      ‚t        j                  dg| D �cg c]  }t        j                  |t        k(  «      ‘Œ  c}z   t
        ¬«      S c c}w )zHDetermine outer offsets from codes using locations of MOVETO codes.
    z5Empty list passed to outer_offsets_from_list_of_codesr   r   )r(   r   r8   Úcount_nonzeror   r   )r*   r   s     r   Ú outer_offsets_from_list_of_codesr`   »   sM   € ñ ÜÐPÓQÐQä�9‰9�a�SÈ=ÖYÀ%œB×,Ñ,¨U´f©_Õ=ÒYÑYÜ'ô)ð )ùÒYs   £#A
c           	     ó˜   — | st        d«      ‚t        j                  dg| D �cg c]  }t        |«      dz
  ‘Œ c}z   t        ¬«      S c c}w )z4Determine outer offsets from a list of offsets.
    z7Empty list passed to outer_offsets_from_list_of_offsetsr   r   r   r[   )r6   r   s     r   Ú"outer_offsets_from_list_of_offsetsrb   Å   sB   € ñ ÜÐRÓSÐSä�9‰9�a�S¸/ÖJ¨wœC ›L¨›NÒJÑJÔR^Ô_Ð_ùÒJs   £A
c                óà  — t        | «       t        j                  t        j                  | dd…df   «      «      d   }t	        |«      dk(  r(| t        j
                  dt	        | «      gt        ¬«      fS t        j                  | |d¬«      } |t        j                  t	        |«      «      z  }t        j                  t	        |«      dz   t        ¬«      }d|d<   ||dd t	        | «      |d<   | |fS )z^Remove NaN from a points array, also return the offsets corresponding to the NaN removed.
    Nr   r   r   rJ   r   r   )
r   r   rX   Úisnanr   rQ   r   ÚdeleteÚarangeÚempty)r!   Únan_offsetsr   s      r   Ú
remove_nanri   Î   sË   € ô �fÔä—*‘*œRŸX™X fªQ°¨T¡lÓ3Ó4°QÑ7€KÜ
ˆ;Ó˜1ÒØ”r—x‘x ¤C¨£KÐ 0¼ÔEÐEÐEä—‘˜6 ;°QÔ7ˆØ”r—y‘y¤ [Ó!1Ó2Ñ2ˆÜ#%§8¡8¬C°Ó,<¸QÑ,>ÄlÔ#SˆØˆ�‰
Ø#ˆ��"ˆÜ˜&“kˆ�‰Ø�wˆÐr   c                ó‚   — t        | «       t        |«       t        |«      dkD  rt        j                  | |dd «      S | gS )z]Split a code array at locations specified by an offset array into a list of code arrays.
    rJ   r   r   )r   r   r   r   Úsplit)r   r   s     r   Úsplit_codes_by_offsetsrl   à   s>   € ô �UÔÜ�wÔä
ˆ7ƒ|�aÒÜ�x‰x˜˜w q¨˜}Ó-Ð-àˆwˆr   c                ó‚   — t        | «       t        |«       t        |«      dkD  rt        j                  | |dd «      S | gS )z_Split a point array at locations specified by an offset array into a list of point arrays.
    rJ   r   r   )r   r   r   r   rk   )r!   r   s     r   Úsplit_points_by_offsetsrn   ì   s>   € ô �fÔÜ�wÔä
ˆ7ƒ|�aÒÜ�x‰x˜ ¨¨" Ó.Ð.àˆxˆr   c                óF  — t        | «       t        j                  t        j                  | dd…df   «      «      d   }t	        |«      dk(  r| gS t        j
                  dg|t	        | «      gf«      }t        |dd |dd «      D ��cg c]  \  }}| |dz   | ‘Œ c}}S c c}}w )z>Split a points array at NaNs into a list of point arrays.
    Nr   r   r   )r   r   rX   rd   r   r)   Úzip)r!   rh   ÚsÚes       r   Úsplit_points_at_nanrs   û   s—   € ô �fÔä—*‘*œRŸX™X fªQ°¨T¡lÓ3Ó4°QÑ7€KÜ
ˆ;Ó˜1ÒØˆxˆä—n‘n r d¨K¼#¸f»+¸Ð%GÓHˆÜ*-¨k¸#¸2Ð.>ÀÈAÈBÀÓ*P×Q¡$ ! Q��q˜‘s˜1’ÓQÐQùÓQs   ÂB)r   úcpy.OffsetArrayÚreturnúcpy.CodeArray)r   rt   r!   úcpy.PointArrayru   rv   )r!   rw   ru   rv   )r*   úlist[cpy.CodeArray]ru   rv   )r-   zlist[cpy.CodeArray | None]ru   zcpy.CodeArray | None)r6   zlist[cpy.OffsetArray]ru   rt   )r=   zlist[cpy.OffsetArray | None]ru   zcpy.OffsetArray | None)r@   úlist[cpy.PointArray]ru   rw   )rD   zlist[cpy.PointArray | None]ru   zcpy.PointArray | None)r!   rw   r   rt   ru   rw   )r   rv   ru   rt   )r@   ry   ru   rt   )r*   rx   ru   rt   )r!   rw   ru   z&tuple[cpy.PointArray, cpy.OffsetArray])r   rv   r   rt   ru   rx   )r!   rw   r   rt   ru   ry   )r!   rw   ru   ry   )*Ú
__future__r   Ú	itertoolsr   Útypingr   Únumpyr   Úcontourpy.typecheckr   r   r   Úcontourpy.typesr	   r
   r   r   r   r   Úcontourpy._contourpyÚ
_contourpyÚcpyr   r$   r&   r+   r.   r;   r>   rA   rE   rH   rG   rU   rY   r]   r`   rb   ri   rl   rn   rs   r2   r   r   ú<module>rƒ      sð   ðÝ "å Ý  ã ç WÑ Wß \× \áÝ&ó	ðØðàðð óó(ó;óóð	Ø9ð	àó	ó=ð	Ø7ð	àó	ð
Ø7ð
àó
ó-óUóVóWó)ó`óó$	ðØðàðð óô
Rr   