
    fMh*f                    
   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rd dl	mZ d4dZd5dZd6dZd7dZd8dZd9dZd:dZ d;d"Z!d<d$Z"d=d&Z#d>d(Z$d?d*Z%d@d-Z&dAd0Z'dBd3Z(dS )C    )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                   |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     Q/var/www/html/test/jupyter/venv/lib/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_OuterCoder3      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   r2   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'   r7   r(   r)   r*   r+   "outer_offsets_from_list_of_offsetsr-   )	r   r   separate_codesr.   r2   r0   r   r/   r1   s	            r    _convert_filled_from_OuterOffsetr;   6   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>e   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_ChunkCombinedCoderC   ^   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@   rA   rB   )	r   r'   zipappendr   r   codes_from_offsets_and_pointsr(   r-   )r   r   chunk_codesr.   r2   s        r   (_convert_filled_from_ChunkCombinedOffsetrJ   l   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   oor2   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"   rF   r   r   split_points_by_offsetssplit_codes_by_offsetsr#   r'   r(   r)   r+   rG   r   rP   arrayr   r-   )r   r   separate_pointsr:   r.   r   r/   separate_offsetsr0   all_offsetsr1   chunk_offsetschunk_outer_offsetsret3r2   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                .   |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 ]|\  }}|tt          rJ |J t          |          dk    r|fdt          |          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er2   s      r   r   zB_convert_filled_from_ChunkCombinedOffsetOffset.<locals>.<listcomp>   sD     )B )B )BA1Q3'!*)D )B )B )Br   r   r    r!   )r   r"   rF   r   r   rH   rT   rU   r#   r$   r   rG   r'   r(   r)   r+   r-   )r   r   rW   r:   r.   r/   r   rX   rI   r0   r[   r1   r2   s               @r   ._convert_filled_from_ChunkCombinedOffsetOffsetrd      sk    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}%%))$ )B )B )B )B)1-)@)@)B )B )B B$$ %++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  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_OuterCoder3   r#   FillReturn_OuterOffsetr;   r'   FillReturn_ChunkCombinedCoderC   r(   FillReturn_ChunkCombinedOffsetrJ   r)   "FillReturn_ChunkCombinedCodeOffsetr]   r+   $FillReturn_ChunkCombinedOffsetOffsetrd   r-   )r   re   r   s      r   convert_filledro      s   4 ".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>B  s#    HHH$#/55HHHr   Invalid LineType )r   SeparateSeparateCoder'   r   r%   r*   rH   r(   ChunkCombinedNanconcat_points_with_nanr-   )	rp   rr   r:   r0   r.   r2   r   r1   r\   s	            r   _convert_lines_from_Separater   ;  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   r0   r1   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|   rF   r   rP   rQ   r   r$   splitrG   r'   r(   r}   r   r   insert_nan_at_offsetsr-   )
rp   rr   separate_linesr.   r   split_atr:   rZ   
points_nanr2   s
             r   %_convert_lines_from_ChunkCombinedCoder   |  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|   rF   r   r   rT   r'   rG   rH   r(   r}   r   r-   )rp   rr   r   r.   r2   r:   rI   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'   rG   
remove_nanrH   r(   r}   r-   )	rp   rr   r   r.   r:   chunk_pointsrI   r2   rZ   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|           )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
    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`   2 ".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   multi_filledlist[cpy.FillReturn]c                `    t                    t                    f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                2    g | ]}t          |          S r   )ro   )r   r   re   r   s     r   r   z(convert_multi_filled.<locals>.<listcomp>N  s%    \\\VN6><@@\\\r   )r	   )r   re   r   s    ``r   convert_multi_filledr   1  s=    4 ".11N--L\\\\\|\\\\r   multi_lineslist[cpy.LineReturn]c                `    t                    t                    fd| D             S )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                2    g | ]}t          |          S r   )r   )r   rp   r   rr   s     r   r   z'convert_multi_lines.<locals>.<listcomp>m  s%    XXX5M%>>XXXr   )r
   )r   r   rr   s    ``r   convert_multi_linesr   Q  s=    2 ".11N--LXXXXXKXXXXr   )r   r   r   r   r   r   )r   r4   r   r   r   r   )r   r<   r   r   r   r   )r   rD   r   r   r   r   )r   rK   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   )r   r   re   rf   r   rf   r   r   )r   r   r   r   rr   r   r   r   ))
__future__r   	itertoolsr   typingr   r   numpyrP   contourpy._contourpyr   r   contourpy.arrayrV   r   contourpy.enum_utilr	   r
   contourpy.typecheckr   r   contourpy.typesr   r   
_contourpyrh   r3   r;   rC   rJ   r]   rd   ro   r   r   r   r   r   r   r   r   r   r   r   <module>r      s0   " " " " " "       & & & & & & & &     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8? 8? 8? 8?v= = = =D= = = =>&= &= &= &=R'= '= '= '=T)= )= )= )=X3? 3? 3? 3?l] ] ] ]@Y Y Y Y Y Yr   