
    g#                    H   d dl mZ d dlmZ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pairwise)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      L/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/contourpy/array.pycodes_from_offsetsr      sP     wAGGAvZ0E 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 )zDetermine 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GGCKz:E E'#2,!"+/KVVF73B<(F;,??aHF!*E+f
Lr   c                    t        |        t        |       }t        j                  |t        t
              }t        |d<   t        j                  | d   | d   k(        r	t        |d<   |S )zDetermine 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GGAvZ0EE!H	vvfQi6":%&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     )>SuARUSM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3AB7*Q-G\s   r   )r)   r    r   cumsumr   r*   range)r7   r   r   retr6   s   `   @r   concat_offsetsr<   P   s~     >??OAGGGBKG|\J>>		]\QVWXYZWZQ[\]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   r7   s      r   concat_offsets_or_noner?   _   s4    
 /F]7I\w]O]o..	 ^r0   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_pointsrB   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)rB   list_of_points_or_noner"   rA   s      r   concat_points_or_nonerF   t   s4    
 ,BXVEWfXNX^,,	 Yr0   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_nanrD   s      r   concat_points_or_none_with_nanrI      s4     ,BXVEWfXNX%n55	 Yr0   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)Nr3   )r4   x
nan_spacers     r   r8   z)concat_points_with_nan.<locals>.<genexpr>   s     'TAQ'Ts   N)	r)   r    r   r   nanr   listr   rB   )rA   rN   s    @r   rH   rH      s     FGG
>aa  WWVRVV;?
(+ X'TPQPRAS'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.
    rK   r   r   r   r   r   )
r	   r   r    r   arrayrO   r   insertastypeint64)r"   r   rN   s      r   insert_nan_at_offsetsrV      sm     fw
7|qXXrvvrvv.kB
yy2!5!5bhh!?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    rT   r   )r   s    r   offsets_from_codesrZ      s>     U99RZZ03S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   r9   r    r   )rA   lines     r   offsets_from_lengthsr^      s=     DEE99aS.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   r9   count_nonzeror   r   )r+   r   s     r    outer_offsets_from_list_of_codesra      sM     PQQ99aS=Y%B,,Uf_=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\   )r7   r   s     r   "outer_offsets_from_list_of_offsetsrc      sB     RSS99aS/JwCLNJJR^__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   rK   r   r   )
r	   r   rY   isnanr    rR   r   deletearangeempty)r"   nan_offsetsr   s      r   
remove_nanrj      s     f**RXXfQTl34Q7K
;1rxxCK 0EEE6;Q7ryy[!122#%88C,<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.
    rK   r   r   )r   r   r    r   split)r   r   s     r   split_codes_by_offsetsrm      s>     Uw
7|axxwq}--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.
    rK   r   r   )r	   r   r    r   rl   )r"   r   s     r   split_points_by_offsetsro      s>     fw
7|axx"..xr   c                8   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 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   rY   re   r    r*   r   )r"   ri   ses       r   split_points_at_nanrs      s     f**RXXfQTl34Q7K
;1xnnrdK#f+%GH*2;*?@$!Qqs1@@@s    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)r7   zlist[cpy.OffsetArray]ru   rt   )r>   zlist[cpy.OffsetArray | None]ru   zcpy.OffsetArray | None)rA   list[cpy.PointArray]ru   rw   )rE   zlist[cpy.PointArray | None]ru   zcpy.PointArray | None)r"   rw   r   rt   ru   rw   )r   rv   ru   rt   )rA   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   r   typingr   numpyr   contourpy.typecheckr   r   r	   contourpy.typesr
   r   r   r   r   r   contourpy._contourpy
_contourpycpyr   r%   r'   r,   r/   r<   r?   rB   rF   rI   rH   rV   rZ   r^   ra   rc   rj   rm   ro   rs   r3   r   r   <module>r      s    " %    W W \ \&	 (;	9		=	7		
7

-UVW)`$	 
Ar   