
    h*f                       S SK Jr  S SKJr  S SKJrJr  S SKrS SK	J
r
Jr  S SKJr  S SKJrJr  S SKJrJr  S SKJrJr  \(       a  S SK	Jr        SS	 jr      SS
 jr      SS jr      SS jr      SS jr      SS jr        SS jr       SS jr!      S S jr"      S!S jr#      S"S jr$      S#S jr%        S$S jr&        S%S jr'        S&S jr(g)'    )annotations)pairwise)TYPE_CHECKINGcastN)FillTypeLineType)as_fill_typeas_line_type)check_filledcheck_lines)MOVETOoffset_dtypec                6   U[         R                  :X  a  U $ U[         R                  :X  a/  U S   U S    Vs/ s H  n[        R                  " U5      PM     sn4$ [        U S   5      S:  a3  [        R                  " U S   5      n[        R                  " U S   5      nOS nS nU[         R                  :X  a  U/U/4$ U[         R                  :X  a!  U/Uc  S /4$ [        R                  " U5      /4$ U[         R                  :X  a(  Uc  S O[        R                  " U S   5      nU/U/U/4nU$ U[         R                  :X  aF  Uc
  S /S /S /4nU$ [        R                  " U5      n[        R                  " U S   5      nU/U/U/4nU$ [        SU 35      es  snf )Nr      Invalid FillType )r   	OuterCodeOuterOffsetarroffsets_from_codeslenconcat_pointsconcat_codesChunkCombinedCodeChunkCombinedOffsetChunkCombinedCodeOffsetoffsets_from_lengthsChunkCombinedOffsetOffset outer_offsets_from_list_of_codes
ValueError)filledfill_type_tocodespointsouter_offsetsret1ret2offsetss           C/var/www/html/env/lib/python3.13/site-packages/contourpy/convert.py_convert_filled_from_OuterCoder)      s    x)))	--	-q	vayQyeC2259yQRR
6!9~""6!9-  +x1115'""	55	55=4TUUc6L6LU6STUU	99	9 &C4L4LVTUY4W9?5'M?7[	;;	;=?Cftftf=UD
  ,,U3G@@KMHwi-9D,\N;<<5 Rs    Fc                H   U[         R                  :X  a0  U S    Vs/ s H  n[        R                  " U5      PM     nnU S   U4$ U[         R                  :X  a  U $ [        U S   5      S:  a3  [        R                  " U S   5      n[        R                  " U S   5      nOS nS nU[         R                  :X  a!  U/Uc  S /4$ [        R                  " U5      /4$ U[         R                  :X  a  U/U/4$ U[         R                  :X  aF  Uc
  S /S /S /4nU$ [        R                  " U5      n[        R                  " U S   5      nU/U/U/4nU$ U[         R                  :X  a0  Uc
  S /S /S /4nU$ [        R                  " U S   5      nU/U/U/4nU$ [        SU 35      es  snf )Nr   r   r   )r   r   r   codes_from_offsetsr   r   r   concat_offsetsr   r   r   r   r   "outer_offsets_from_list_of_offsetsr   )	r    r!   r'   separate_codesr#   r%   r"   r$   r&   s	            r(    _convert_filled_from_OuterOffsetr/   6   s    x)))IOPQSg#009Sq	>**	--	-
6!9~""6!9-$$VAY/x1117?4XYY8N8Nw8WXYY	55	57)$$	99	9?=AFTFTF;SD
  **73E44VAY?MHug7D	;;	;>?Cftftf=UD   BB6!9MMHwi-9D,\N;<<A Ts    Fc                
   U[         R                  :X  a  U $ U[         R                  :X  a5  U S    Vs/ s H  o"c  S O[        R                  " U5      PM     snnU S   U4$ [        S[         R                   SU S35      es  snf )Nr   r   Conversion from  to  not supported)r   r   r   r   r   r   )r    r!   r"   s      r(   &_convert_filled_from_ChunkCombinedCoder4   ^   s     x111	55	5W]^_W`aW`eC,B,B5,IIW`aq	5!!x99:$|nN[] 	] bs   $B c                `   U[         R                  :X  ae  / n[        U 6  HP  u  p4Uc  UR                  S 5        M  [        (       a  Uc   eUR                  [
        R                  " XC5      5        MR     U S   U4$ U[         R                  :X  a  U $ [        S[         R                   SU S35      e)Nr   r1   r2   r3   )	r   r   zipappendr   r   codes_from_offsets_and_pointsr   r   )r    r!   chunk_codesr#   r'   s        r(   (_convert_filled_from_ChunkCombinedOffsetr:   l   s     x11124"F|OF~""4( ="...""3#D#DW#UV  , q	;''	55	5x;;<Dn]_ 	_    c           
     B   U[         R                  :X  ae  / n/ n[        U 6  HR  u  pEnUc  M  [        (       a
  Uc   eUc   eU[        R
                  " XF5      -  nU[        R                  " XV5      -  nMT     X#4$ U[         R                  :X  a  / n/ n[        U 6  Hx  u  pEnUc  M  [        (       a
  Uc   eUc   eU[        R
                  " XF5      -  n[        R                  " XV5      nXs Vs/ s H  n[        R                  " U5      PM     sn-  nMz     X'4$ U[         R                  :X  a  U S   U S   4nU$ U[         R                  :X  a7  U S    Vs/ s H  nUc  S O[        R                  " U5      PM      n	nU S   U	4n
U
$ U[         R                  :X  a  U $ U[         R                  :X  a  / n/ n[        U SS  6  H  u  pVUc$  UR                  S 5        UR                  S 5        M,  [        (       a  Uc   e[        R                  " U5      n[        R                  " U Vs/ s H!  n[        R                   " X:H  5      S   S   PM#     sn["        S9nUR                  U5        UR                  U5        M     U S   X4nU$ [%        SU 35      es  snf s  snf s  snf )Nr   r   )dtyper   )r   r   r6   r   r   split_points_by_offsetssplit_codes_by_offsetsr   r   r   r   r   r   r7   nparraynonzeror   r   )r    r!   separate_pointsr.   r#   r"   r$   separate_offsetsr%   all_offsetsr&   chunk_offsetschunk_outer_offsetsr'   ooret3s                   r(   ,_convert_filled_from_ChunkCombinedCodeOffsetrJ      s    x))),/L(F=! = ,,,(4443#>#>v#UU#"<"<U"RR -9  00	--	-,/L(F=! = ,,,(4443#>#>v#UU!$!;!;E!Q P^$_P^uS%;%;E%BP^$__  -9  22	33	328)VAY1G	55	5$*1I/$-5  %}t#2H2H2OO$- 	 /4:1I{3K	99	9	;;	;68<>$'$4 E}$$T*#**40 =(444007 "Ta)bTab"**W]*CA*Fq*ITa)b/;!=$$W-#**=9 %5 1I}:
 ,\N;<<A %`/" *cs   - J%J#(J
c           
     j   U[         R                  :X  a  / n/ n[        U 6  Hl  u  pEnUc  M  [        (       a
  Uc   eUc   e[        R
                  " XT5      nXV   nU[        R                  " XF5      -  nU[        R                  " Xv5      -  nMn     X#4$ U[         R                  :X  a  / n/ n[        U 6  H  u  pEnUc  M  [        (       a
  Uc   eUc   e[        U5      S:  a.  U[        U5       V	V
s/ s H  u  pXYU
S-    XY   -
  PM     sn
n	-  nOUR                  U5        U[        R                  " XEU   5      -  nM     X(4$ U[         R                  :X  am  / n[        U 6  HV  u  pEnUc  UR                  S 5        M  [        (       a
  Uc   eUc   eUR                  [        R
                  " XT5      5        MX     U S   U4nU$ U[         R                  :X  a
  U S   U S   4$ U[         R                  :X  a  / n/ n[        U 6  Hz  u  pEnUc$  UR                  S 5        UR                  S 5        M-  [        (       a
  Uc   eUc   eUR                  [        R
                  " XT5      5        UR                  XV   5        M|     U S   X4nU$ U[         R                  :X  a  U $ [!        SU 35      es  sn
n	f )N   r   r   r   )r   r   r6   r   r   r8   r>   r?   r   r   r   r7   r   r   r   r   r   )r    r!   rC   r.   r#   r'   r$   r"   rD   ser9   r%   rG   r&   s                  r(   ._convert_filled_from_ChunkCombinedOffsetOffsetrO      s    x))).16l*F]! ="...(44499'J ' 63#>#>v#UU#"<"<U"RR /;  00	--	-.16l*F]! ="...(444}%)$)1-)@)B)@ JN1Q3'*)D)@)B B$ %++G43#>#>v}G]#^^ /;  22	33	324.16l*F]~""4( ="...(444""3#D#DW#UV /; 39)[1I	55	5q	6!9%%	99	9<>.16l*F]~""4(#**40 ="...(444""3#D#DW#UV#**7+AB /; 9?q	;7d	;;	;,\N;<<M)Bs   2J/
c                   [        U5      n[        U5      n[        X5        U[        R                  :X  a0  [        (       a  [        [        R                  U 5      n [        X5      $ U[        R                  :X  a0  [        (       a  [        [        R                  U 5      n [        X5      $ U[        R                  :X  a0  [        (       a  [        [        R                  U 5      n [        X5      $ U[        R                  :X  a0  [        (       a  [        [        R                   U 5      n [#        X5      $ U[        R$                  :X  a0  [        (       a  [        [        R&                  U 5      n [)        X5      $ U[        R*                  :X  a0  [        (       a  [        [        R,                  U 5      n [/        X5      $ [1        SU 35      e)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_OuterCoder)   r   FillReturn_OuterOffsetr/   r   FillReturn_ChunkCombinedCoder4   r   FillReturn_ChunkCombinedOffsetr:   r   "FillReturn_ChunkCombinedCodeOffsetrJ   r   $FillReturn_ChunkCombinedOffsetOffsetrO   r   )r    fill_type_fromr!   s      r(   convert_filledrY      sT   4 ".1N-L(+++=#22F;F-fCC	8//	/=#44f=F/EE	855	5=#::FCF5fKK	877	7=#<<fEF7MM	8;;	;=#@@&IF;FQQ	8==	==#BBFKF=fSS,^,<=>>r;   c                   U[         R                  :X  a  U $ U[         R                  :X  a)  U  Vs/ s H  n[        R                  " U5      PM     nnX4$ U[         R
                  :X  aY  U (       d  S /S /4nU$ [        R                  " U 5      n[        R                  " U 5      n[        R                  " Xe5      nU/U/4nU$ U[         R                  :X  a?  U (       d  S /S /4nU$ [        R                  " U 5      /[        R                  " U 5      /4nU$ U[         R                  :X  a'  U (       d  S /4n	U	$ [        R                  " U 5      /4n	U	$ [        SU 35      es  snf )NInvalid LineType )r   SeparateSeparateCoder   codes_from_pointsr   r   r   r8   r   ChunkCombinedNanconcat_points_with_nanr   )
linesline_type_toliner.   r%   r#   r'   r"   r&   rI   s
             r(   _convert_lines_from_Separaterd   ;  sb    x(((	..	.BGH%$#//5%H&&	33	37;ftf5ED 	 &&u-F..u5G55gFEHug&D	55	59=7GD  &&u-.1I1I%1P0QRD	22	26:VID  //679D,\N;<<1 Is    Ec                n   U[         R                  :X  a  U S   $ U[         R                  :X  a  U $ U[         R                  :X  aH  U S   (       d  S /S /4nU$ [        R
                  " U S   5      /[        R                  " U S   5      /4nU$ U[         R                  :X  aH  U S   (       d  S /S /4nU$ [        R
                  " U S   5      /[        R                  " U S   5      /4nU$ U[         R                  :X  a-  U S   (       d  S /4nU$ [        R                  " U S   5      /4nU$ [        SU 35      eNr   r   r[   )r   r\   r]   r   r   r   r   r   r   r_   r`   r   )ra   rb   r%   r&   rI   s        r(    _convert_lines_from_SeparateCoderg   ]  sF    x(((Qx	..	.	33	3Qx7;ftf5ED  &&uQx01C4D4DU1X4N3OPD	55	5Qx9=7GD  &&uQx01C4L4LUSTX4V3WXD	22	2Qx6:VID  //a9:<D,\N;<<r;   c                   U[         R                  [         R                  4;   a  / n[        U 6  Hx  u  p4Uc  M
  [        (       a  Uc   e[
        R                  " U[        :H  5      S   n[        U5      S:  a  U[
        R                  " X5SS  5      -  nMg  UR                  U5        Mz     U[         R                  :X  a  U$ U Vs/ s H  n[        R                  " U5      PM     nnX'4$ U[         R                  :X  a  U $ U[         R                  :X  a5  U S    Vs/ s H  nUc  S O[        R                  " U5      PM      nnU S   U4$ U[         R                   :X  aw  / n	[        U 6  Hf  u  p4Uc  U	R                  S 5        M  [        (       a  Uc   e[        R                  " U5      n
U	R                  [        R"                  " X:5      5        Mh     U	4$ [%        SU 35      es  snf s  snf rf   )r   r\   r]   r6   r   r@   rB   r   r   splitr7   r   r^   r   r   r   r_   insert_nan_at_offsetsr   )ra   rb   separate_linesr#   r"   split_atrc   r.   rF   
points_nanr'   s              r(   %_convert_lines_from_ChunkCombinedCodern   |  s    ))8+@+@AA %[MF! = ,,,::evo6q9x=1$"bhhv|&DDN"))&1 ) 8,,,!!FTUndc33D9nNU"33	33	3	55	5&+Ah0&.U "'C4J4J54QQ&. 	 0a-((	22	224
 %[MF~!!$' = ,,,007!!#";";F"LM ) },\N;<<) V
0s    G"%G'c                x   U[         R                  [         R                  4;   a  / n[        U 6  H3  u  p4Uc  M
  [        (       a  Uc   eU[
        R                  " X45      -  nM5     U[         R                  :X  a  U$ U Vs/ s H  n[
        R                  " U5      PM     nnX&4$ U[         R                  :X  ae  / n[        U 6  HP  u  p4Uc  UR                  S 5        M  [        (       a  Uc   eUR                  [
        R                  " XC5      5        MR     U S   U4$ U[         R                  :X  a  U $ U[         R                  :X  aa  / n[        U 6  HP  u  p4Uc  UR                  S 5        M  [        (       a  Uc   eUR                  [
        R                  " X45      5        MR     U4$ [        SU 35      es  snf Nr   r[   )r   r\   r]   r6   r   r   r>   r^   r   r7   r8   r   r_   rj   r   )	ra   rb   rk   r#   r'   rc   r.   r9   rm   s	            r(   '_convert_lines_from_ChunkCombinedOffsetrq     s    ))8+@+@AA"E{OF! ="...#"="=f"NN	  +
 8,,,!!FTUndc33D9nNU"33	33	324"E{OF~""4( ="...""3#D#DW#UV  + a+&&	55	5	22	224
"E{OF~!!$' ="...!!#";";F"LM  + },\N;<<3 Vs     F7c                   U[         R                  [         R                  4;   ak  / nU S    H!  nUc  M  U[        R                  " U5      -  nM#     U[         R                  :X  a  U$ U Vs/ s H  n[        R
                  " U5      PM     nnX$4$ U[         R                  :X  a  / n/ nU S    Hx  nUc$  UR                  S 5        UR                  S 5        M*  [        R                  " U5      u  p7UR                  U5        UR                  [        R                  " Xs5      5        Mz     XV4$ U[         R                  :X  at  / n/ nU S    Hd  nUc$  UR                  S 5        UR                  S 5        M*  [        R                  " U5      u  p7UR                  U5        UR                  U5        Mf     XX4$ U[         R                  :X  a  U $ [        SU 35      es  snf rp   )r   r\   r]   r   split_points_at_nanr^   r   r7   
remove_nanr8   r   r_   r   )	ra   rb   rk   r#   r.   chunk_pointsr9   r'   rF   s	            r(   $_convert_lines_from_ChunkCombinedNanrv     s    ))8+@+@AAAhF!#"9"9&"AA  8,,,!!JXY.c33F;.NY"33	33	34624AhF~##D)""4("%.."8##F+""3#D#DW#UV  **	55	568AhF~##D)$$T*"%.."8##F+$$W-  ,,	22	2,\N;<<; Zs   + Gc                   [        U5      n[        U5      n[        X5        U[        R                  :X  a0  [        (       a  [        [        R                  U 5      n [        X5      $ U[        R                  :X  a0  [        (       a  [        [        R                  U 5      n [        X5      $ U[        R                  :X  a0  [        (       a  [        [        R                  U 5      n [        X5      $ U[        R                  :X  a0  [        (       a  [        [        R                   U 5      n [#        X5      $ U[        R$                  :X  a0  [        (       a  [        [        R&                  U 5      n [)        X5      $ [+        SU 35      e)a%  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
r[   )r
   r   r   r\   r   r   rQ   LineReturn_Separaterd   r]   LineReturn_SeparateCoderg   r   LineReturn_ChunkCombinedCodern   r   LineReturn_ChunkCombinedOffsetrq   r_   LineReturn_ChunkCombinedNanrv   r   )ra   line_type_fromrb   s      r(   convert_linesr~     s$   2 ".1N-L&***=00%8E+E@@	800	0=44e<E/DD	855	5=995AE4UII	877	7=;;UCE6uKK	844	4=88%@E3EHH,^,<=>>r;   c                r    [        U5      n[        U5      nU  Vs/ s H  n[        X1U5      PM     sn$ s  snf )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
)r	   rY   )multi_filledrX   r!   r    s       r(   convert_multi_filledr   1  s7    4 ".1N-LO[\|VN6<@|\\\   4c                r    [        U5      n[        U5      nU  Vs/ s H  n[        X1U5      PM     sn$ s  snf )aP  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
)r
   r~   )multi_linesr}   rb   ra   s       r(   convert_multi_linesr   Q  s7    2 ".1N-LLWXK5M%>KXXXr   )r    zcpy.FillReturn_OuterCoder!   r   returncpy.FillReturn)r    zcpy.FillReturn_OuterOffsetr!   r   r   r   )r    z cpy.FillReturn_ChunkCombinedCoder!   r   r   r   )r    z"cpy.FillReturn_ChunkCombinedOffsetr!   r   r   r   )r    z&cpy.FillReturn_ChunkCombinedCodeOffsetr!   r   r   r   )r    z(cpy.FillReturn_ChunkCombinedOffsetOffsetr!   r   r   r   )r    r   rX   FillType | strr!   r   r   r   )ra   zcpy.LineReturn_Separaterb   r   r   cpy.LineReturn)ra   zcpy.LineReturn_SeparateCoderb   r   r   r   )ra   z cpy.LineReturn_ChunkCombinedCoderb   r   r   r   )ra   z"cpy.LineReturn_ChunkCombinedOffsetrb   r   r   r   )ra   zcpy.LineReturn_ChunkCombinedNanrb   r   r   r   )ra   r   r}   LineType | strrb   r   r   r   )r   list[cpy.FillReturn]rX   r   r!   r   r   r   )r   list[cpy.LineReturn]r}   r   rb   r   r   r   ))
__future__r   	itertoolsr   typingr   r   numpyr@   contourpy._contourpyr   r   contourpy.arrayrA   r   contourpy.enum_utilr	   r
   contourpy.typecheckr   r   contourpy.typesr   r   
_contourpyrQ   r)   r/   r4   r:   rJ   rO   rY   rd   rg   rn   rq   rv   r~   r   r    r;   r(   <module>r      s@   "  &  3  : 9 0&!=$!=!= !=H%=&%=%= %=P],]] ]_.__ _*9=29=9= 9=x@=4@=@= @=F8?8?"8? "8? 	8?v="== =D=&== =>&=+&=&= &=R'=-'='= '=T)=*)=)= )=X3?3?"3? "3? 	3?l]&]"] "] 	]@Y%Y"Y "Y 	Yr;   