
    \ef[                        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rd dlmZ d-dZd.dZd/dZd0dZd1dZd2dZd3dZd4d!Zd5d#Z d6d%Z!d7d'Z"d8d)Z#d9d,Z$dS ):    )annotations)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                   |t           j        k    r| S |t           j        k    r| d         d | d         D             fS t          | d                   dk    r5t	          j        | d                   }t	          j        | d                   }nd }d }|t           j        k    r|g|gfS |t           j        k    r|g|d nt	          j	        |          gfS |t           j
        k    r(|d nt	          j        | d                   }|g|g|gf}|S |t           j        k    rC|	d gd gd gf}n6t	          j	        |          }t	          j        | d                   }|g|g|gf}|S t          d|           )Nr   c                6    g | ]}t          j        |          S  arroffsets_from_codes.0codess     1lib/python3.11/site-packages/contourpy/convert.py
<listcomp>z2_convert_filled_from_OuterCode.<locals>.<listcomp>   s#    QQQeC2599QQQ       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offsetss           r   _convert_filled_from_OuterCoder2      s    x)))	-	-	-q	QQvayQQQRR
6!9~~"6!9-- ++x1115'""	5	5	55=44c6LU6S6STUU	9	9	9 &C4LVTUY4W4W9?5'M?7[	;	;	;=?Cftftf=UDD,U33G@KKMHwi-9D;\;;<<<r   cpy.FillReturn_OuterOffsetc                   |t           j        k    rd | d         D             }| d         |fS |t           j        k    r| S t          | d                   dk    r5t	          j        | d                   }t	          j        | d                   }nd }d }|t           j        k    r|g|d nt	          j        |          gfS |t           j	        k    r|g|gfS |t           j
        k    rC|	d gd gd gf}n6t	          j        |          }t	          j        | d                   }|g|g|gf}|S |t           j        k    r/|	d gd gd gf}n"t	          j        | d                   }|g|g|gf}|S t          d|           )Nc                6    g | ]}t          j        |          S r   )r   codes_from_offsets)r   r1   s     r   r   z4_convert_filled_from_OuterOffset.<locals>.<listcomp>:   s#    SSSg#099SSSr   r   r   r    )r   r!   r"   r#   r   r$   concat_offsetsr&   r6   r'   r(   r)   r*   "outer_offsets_from_list_of_offsetsr,   )	r   r   separate_codesr-   r1   r/   r   r.   r0   s	            r    _convert_filled_from_OuterOffsetr:   5   s    x)))SSPQSSSq	>**	-	-	-
6!9~~"6!9--$VAY//x1117?448Nw8W8WXYY	5	5	57)$$	9	9	9?=AFTFTF;SDD*733E4VAY??MHug7D	;	;	;>?Cftftf=UDDB6!9MMMHwi-9D;\;;<<<r    cpy.FillReturn_ChunkCombinedCodec                    |t           j        k    r| S |t           j        k    rd | d         D             }| d         |fS t          dt           j         d| d          )Nc                >    g | ]}|d nt          j        |          S Nr   r   s     r   r   z:_convert_filled_from_ChunkCombinedCode.<locals>.<listcomp>d   s+    aaaeC,B5,I,Iaaar   r   r   Conversion from  to  not supported)r   r&   r'   r,   )r   r   r   s      r   &_convert_filled_from_ChunkCombinedCoderB   ]   s|     x111	5	5	5aaW]^_W`aaaq	5!![x9[[|[[[] ] 	]r   "cpy.FillReturn_ChunkCombinedOffsetc                R   |t           j        k    rfg }t          |  D ]P\  }}||                    d            t          r|J |                    t          j        ||                     Q| d         |fS |t           j        k    r| S t          dt           j         d| d          )Nr   r?   r@   rA   )	r   r&   zipappendr   r   codes_from_offsets_and_pointsr'   r,   )r   r   chunk_codesr-   r1   s        r   (_convert_filled_from_ChunkCombinedOffsetrI   k   s     x11124"F| 	W 	WOFG~""4((((  /"...""3#DWf#U#UVVVVq	;''	5	5	5]x;]]]]]_ _ 	_r   &cpy.FillReturn_ChunkCombinedCodeOffsetc                R   |t           j        k    rYg }g }t          |  D ]G\  }}}|?t          r|J |J |t	          j        ||          z  }|t	          j        ||          z  }H||fS |t           j        k    reg }g }t          |  D ]S\  }}}|Kt          r|J |J |t	          j        ||          z  }t	          j        ||          }|d |D             z  }T||fS |t           j        k    r| d         | d         f}|S |t           j	        k    rd | d         D             }	| d         |	f}
|
S |t           j
        k    r| S |t           j        k    rg }g }t          | dd           D ]\  }}|+|                    d            |                    d            2t          r|J t	          j        |          t          j        fd|D             t                     }|                               |                    |           | d         ||f}|S t#          d|           )Nc                6    g | ]}t          j        |          S r   r   r   s     r   r   z@_convert_filled_from_ChunkCombinedCodeOffset.<locals>.<listcomp>   s#    $_$_$_uS%;E%B%B$_$_$_r   r   r   c                >    g | ]}|d nt          j        |          S r>   r   r   s     r   r   z@_convert_filled_from_ChunkCombinedCodeOffset.<locals>.<listcomp>   s;     / / /   %}tt#2H2O2O / / /r   c                X    g | ]&}t          j        |k              d          d          'S )r   )npnonzero)r   oor1   s     r   r   z@_convert_filled_from_ChunkCombinedCodeOffset.<locals>.<listcomp>   s1    )b)b)bb"*W]*C*CA*Fq*I)b)b)br   )dtyper    )r   r!   rE   r   r   split_points_by_offsetssplit_codes_by_offsetsr"   r&   r'   r(   r*   rF   r   rO   arrayr   r,   )r   r   separate_pointsr9   r-   r   r.   separate_offsetsr/   all_offsetsr0   chunk_offsetschunk_outer_offsetsret3r1   s                 @r   ,_convert_filled_from_ChunkCombinedCodeOffsetr\      s    x))),/L 	S 	S(FE=!  5 ,,,(4443#>v}#U#UU#"<UM"R"RR00	-	-	-,/L 	` 	`(FE=!  5 ,,,(4443#>v}#U#UU!$!;E=!Q!Q $_$_P^$_$_$__ !122	3	3	328)VAY1G	5	5	5/ /$*1I/ / /4:1I{3K	9	9	9	;	;	;68<>$'$4 	: 	: E=}$$T***#**40000  5(444077 ")b)b)b)bTa)b)b)b/;!= != !=$$W---#**=99991I}&9:
 ;\;;<<<r   (cpy.FillReturn_ChunkCombinedOffsetOffsetc           	     P   |t           j        k    rvg }g }t          |  D ]d\  }}|\t          rJ |J t	          j        |          }|         }|t	          j        ||          z  }|t	          j        ||          z  }e||fS |t           j        k    rg }g }t          |  D ]\  }}|t          rJ |J t          |          dk    r0|fdt          |d d         |dd                    D             z  }n|
                               |t	          j        ||                   z  }||fS |t           j        k    rmg }t          |  D ]U\  }}||
                    d            t          rJ |J |
                    t	          j        |                     V| d         |f}	|	S |t           j        k    r| d         | d         fS |t           j        k    rg }g }
t          |  D ]\  }}|+|
                    d            |

                    d            3t          rJ |J |
                    t	          j        |                     |

                    |                    | d         ||
f}|S |t           j        k    r| S t          d|           )N   c                B    g | ]\  }}||d z            |         z
  S )r   r   )r   ser1   s      r   r   zB_convert_filled_from_ChunkCombinedOffsetOffset.<locals>.<listcomp>   sD     )U )U )UA1Q3'!*)D )U )U )Ur   r   r   r    )r   r!   rE   r   r   rG   rS   rT   r"   r#   rF   r&   r'   r(   r*   r,   )r   r   rV   r9   r-   r.   r   rW   rH   r/   rZ   r0   r1   s               @r   ._convert_filled_from_ChunkCombinedOffsetOffsetrd      s    x))).16l 	S 	S*FG]!  5"...(4449'6JJ ' 63#>v}#U#UU#"<UM"R"RR00	-	-	-.16l 
	_ 
	_*FG]!  5"...(444}%%))$ )U )U )U )U),]3B3-?qrrAR)S)S)U )U )U U$$ %++G4443#>vw}G]#^#^^!122	3	3	324.16l 	W 	W*FG]~""4((((  5"...(444""3#DWf#U#UVVVV28)[1I	5	5	5q	6!9%%	9	9	9<>.16l 		C 		C*FG]~""4(((#**40000  5"...(444""3#DWf#U#UVVV#**7=+ABBBB8>q	;Pc7d	;	;	;;\;;<<<r   fill_type_fromFillType | strc                   t          |          }t          |          }t          | |           |t          j        k    r1t          rt          t          j        |           } t          | |          S |t          j	        k    r1t          rt          t          j
        |           } t          | |          S |t          j        k    r1t          rt          t          j        |           } t          | |          S |t          j        k    r1t          rt          t          j        |           } t#          | |          S |t          j        k    r1t          rt          t          j        |           } t)          | |          S |t          j        k    r1t          rt          t          j        |           } t/          | |          S t1          d|           )a  Return the specified filled contours converted to a different :class:`~contourpy.FillType`.

    Args:
        filled (sequence of arrays): Filled contour polygons to convert.
        fill_type_from (FillType or str): :class:`~contourpy.FillType` to convert from as enum or
            string equivalent.
        fill_type_to (FillType or str): :class:`~contourpy.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_OuterCoder2   r"   FillReturn_OuterOffsetr:   r&   FillReturn_ChunkCombinedCoderB   r'   FillReturn_ChunkCombinedOffsetrI   r(   "FillReturn_ChunkCombinedCodeOffsetr\   r*   $FillReturn_ChunkCombinedOffsetOffsetrd   r,   )r   re   r   s      r   convert_filledro      s   2 ".11N--L(((+++ 	<#2F;;F-flCCC	8/	/	/ 	>#4f==F/EEE	85	5	5 	D#:FCCF5flKKK	87	7	7 	F#<fEEF7MMM	8;	;	; 	J#@&IIF;FLQQQ	8=	=	= 	L#BFKKF=flSSS=^==>>>r   linescpy.LineReturn_Separateline_type_tor   cpy.LineReturnc                .   |t           j        k    r| S |t           j        k    rd | D             }| |fS |t           j        k    rN| sd gd gf}nCt	          j        |           }t	          j        |           }t	          j        ||          }|g|gf}|S |t           j        k    r5| sd gd gf}n*t	          j        |           gt	          j        |           gf}|S |t           j	        k    r| sd gf}nt	          j
        |           gf}|S t          d|           )Nc                6    g | ]}t          j        |          S r   r   codes_from_pointsr   lines     r   r   z0_convert_lines_from_Separate.<locals>.<listcomp>@  s#    HHH$#/55HHHr   Invalid LineType )r   SeparateSeparateCoder&   r   r$   r)   rG   r'   ChunkCombinedNanconcat_points_with_nanr,   )	rp   rr   r9   r/   r-   r1   r   r0   r[   s	            r   _convert_lines_from_Separater   9  sS    x(((	.	.	.HH%HHH~&&	3	3	3 	'7;ftf5EDD&u--F.u55G5gvFFEHug&D	5	5	5 	S9=7GDD&u--.1I%1P1P0QRD	2	2	2 	:6:VIDD/6679D;\;;<<<r   cpy.LineReturn_SeparateCodec                L   |t           j        k    r| d         S |t           j        k    r| S |t           j        k    rG| d         sd gd gf}n6t	          j        | d                   gt	          j        | d                   gf}|S |t           j        k    rG| d         sd gd gf}n6t	          j        | d                   gt	          j        | d                   gf}|S |t           j	        k    r+| d         sd gf}nt	          j
        | d                   gf}|S t          d|           )Nr   r   rz   )r   r{   r|   r&   r   r$   r%   r'   r)   r}   r~   r,   )rp   rr   r/   r0   r[   s        r    _convert_lines_from_SeparateCoder   [  sF    x(((Qx	.	.	.	3	3	3Qx 	Q7;ftf5EDD&uQx001C4DU1X4N4N3OPD	5	5	5Qx 	Y9=7GDD&uQx001C4LUSTX4V4V3WXD	2	2	2Qx 	=6:VIDD/a99:<D;\;;<<<r    cpy.LineReturn_ChunkCombinedCodec                4   |t           j        t           j        fv rg }t          |  D ]~\  }}|wt          r|J t          j        |t          k              d         }t          |          dk    r!|t          j	        ||dd                    z  }i|
                    |           |t           j        k    r|S d |D             }||fS |t           j        k    r| S |t           j        k    rd | d         D             }| d         |fS |t           j        k    rsg }t          |  D ]d\  }}||
                    d            t          r|J t          j        |          }	|
                    t          j        ||	                     e|fS t#          d|           )Nr   r   c                6    g | ]}t          j        |          S r   rv   rx   s     r   r   z9_convert_lines_from_ChunkCombinedCode.<locals>.<listcomp>  #    UUUdc3D99UUUr   c                >    g | ]}|d nt          j        |          S r>   r   r   s     r   r   z9_convert_lines_from_ChunkCombinedCode.<locals>.<listcomp>  s;     0 0 0" "'C4J54Q4Q 0 0 0r   rz   )r   r{   r|   rE   r   rO   rP   r   r#   splitrF   r&   r'   r}   r   r   insert_nan_at_offsetsr,   )
rp   rr   separate_linesr-   r   split_atr9   rY   
points_nanr1   s
             r   %_convert_lines_from_ChunkCombinedCoder   z  s    )8+@AAA %[ 	2 	2MFE!  - ,,,:evo66q9x==1$$"bhvx|&D&DDNN"))&1118,,,!!UUnUUUN"N33	3	3	3	5	5	50 0&+Ah0 0 0a-((	2	2	224
 %[ 	N 	NMFE~!!$''''  - ,,,077!!#";FG"L"LMMMM};\;;<<<r   "cpy.LineReturn_ChunkCombinedOffsetc                   |t           j        t           j        fv rXg }t          |  D ]*\  }}|#t          r|J |t          j        ||          z  }+|t           j        k    r|S d |D             }||fS |t           j        k    rfg }t          |  D ]P\  }}||                    d            t          r|J |                    t          j	        ||                     Q| d         |fS |t           j
        k    r| S |t           j        k    r_g }t          |  D ]P\  }}||                    d            t          r|J |                    t          j        ||                     Q|fS t          d|           )Nc                6    g | ]}t          j        |          S r   rv   rx   s     r   r   z;_convert_lines_from_ChunkCombinedOffset.<locals>.<listcomp>  r   r   r   rz   )r   r{   r|   rE   r   r   rS   r&   rF   rG   r'   r}   r   r,   )rp   rr   r   r-   r1   r9   rH   r   s           r   '_convert_lines_from_ChunkCombinedOffsetr     s    )8+@AAA"E{ 	O 	OOFG!  /"...#"=fg"N"NN8,,,!!UUnUUUN"N33	3	3	324"E{ 	W 	WOFG~""4((((  /"...""3#DWf#U#UVVVVa+&&	5	5	5	2	2	224
"E{ 	N 	NOFG~!!$''''  /"...!!#";FG"L"LMMMM};\;;<<<r   cpy.LineReturn_ChunkCombinedNanc                x   |t           j        t           j        fv rHg }| d         D ]}||t          j        |          z  }|t           j        k    r|S d |D             }||fS |t           j        k    rg }g }| d         D ]}|+|                    d            |                    d            /t          j        |          \  }}|                    |           |                    t          j        ||                     ||fS |t           j	        k    rg }g }| d         D ]p}|+|                    d            |                    d            /t          j        |          \  }}|                    |           |                    |           q||fS |t           j
        k    r| S t          d|           )Nr   c                6    g | ]}t          j        |          S r   rv   )r   r-   s     r   r   z8_convert_lines_from_ChunkCombinedNan.<locals>.<listcomp>  s#    YYYc3F;;YYYr   rz   )r   r{   r|   r   split_points_at_nanr&   rF   
remove_nanrG   r'   r}   r,   )	rp   rr   r   r-   r9   chunk_pointsrH   r1   rY   s	            r   $_convert_lines_from_ChunkCombinedNanr     s    )8+@AAAAh 	B 	BF!#"9&"A"AA8,,,!!YY.YYYN"N33	3	3	34624Ah 	W 	WF~##D)))""4(((("%."8"8##F+++""3#DWf#U#UVVVVk**	5	5	568Ah 	. 	.F~##D)))$$T****"%."8"8##F+++$$W----m,,	2	2	2;\;;<<<r   line_type_fromLineType | strc                   t          |          }t          |          }t          | |           |t          j        k    r1t          rt          t          j        |           } t          | |          S |t          j	        k    r1t          rt          t          j
        |           } t          | |          S |t          j        k    r1t          rt          t          j        |           } t          | |          S |t          j        k    r1t          rt          t          j        |           } t#          | |          S |t          j        k    r1t          rt          t          j        |           } t)          | |          S t+          d|           )aG  Return the specified contour lines converted to a different :class:`~contourpy.LineType`.

    Args:
        lines (sequence of arrays): Contour lines to convert.
        line_type_from (LineType or str): :class:`~contourpy.LineType` to convert from as enum or
            string equivalent.
        line_type_to (LineType or str): :class:`~contourpy.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
    rz   )r	   r   r   r{   r   r   rh   LineReturn_Separater   r|   LineReturn_SeparateCoder   r&   LineReturn_ChunkCombinedCoder   r'   LineReturn_ChunkCombinedOffsetr   r}   LineReturn_ChunkCombinedNanr   r,   )rp   r   rr   s      r   convert_linesr     s`   0 ".11N--L~&&&*** 	90%88E+E<@@@	80	0	0 	=4e<<E/|DDD	85	5	5 	B95AAE4ULIII	87	7	7 	D;UCCE6ulKKK	84	4	4 	A8%@@E3E<HHH=^==>>>r   )r   r   r   r   r   r   )r   r3   r   r   r   r   )r   r;   r   r   r   r   )r   rC   r   r   r   r   )r   rJ   r   r   r   r   )r   r]   r   r   r   r   )r   r   re   rf   r   rf   r   r   )rp   rq   rr   r   r   rs   )rp   r   rr   r   r   rs   )rp   r   rr   r   r   rs   )rp   r   rr   r   r   rs   )rp   r   rr   r   r   rs   )rp   rs   r   r   rr   r   r   rs   )%
__future__r   typingr   r   numpyrO   contourpy._contourpyr   r   contourpy.arrayrU   r   contourpy.enum_utilr   r	   contourpy.typecheckr
   r   contourpy.typesr   r   
_contourpyrh   r2   r:   rB   rI   r\   rd   ro   r   r   r   r   r   r   r   r   r   <module>r      s   " " " " " " & & & & & & & &     3 3 3 3 3 3 3 3       : : : : : : : : 9 9 9 9 9 9 9 9 0 0 0 0 0 0 0 0 '&&&&&&!= != != !=H%= %= %= %=P] ] ] ]_ _ _ _*9= 9= 9= 9=x@= @= @= @=F7? 7? 7? 7?t= = = =D= = = =>&= &= &= &=R'= '= '= '=T)= )= )= )=X2? 2? 2? 2? 2? 2?r   