
    OgV                        d dl mZ d dlmZmZmZmZmZ d dlZd dl	Z
d dlmZ d dlmZmZmZ d dl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	gZdd
Z G d d	      Zy)    )annotations)SequenceIterableIteratorTYPE_CHECKINGOptionalN)sincostan)chain   )Vec3X_AXISY_AXISZ_AXISNULLVECVec2)UVecMatrix44c                >    | D cg c]  }t        |       c}S c c}w Nfloat)itemsvs     Y/var/www/html/public_html/myphp/venv/lib/python3.12/site-packages/ezdxf/math/_matrix44.pyfloatsr      s    #$E!H$$$s   c                  *   e Zd ZU dZdZded<    ej                  g dej                        Z	d Z
d7dZd8d	Zed9d
       Zd:dZd;dZd<dZd=dZd>dZeZed?d       Zej.                  d@d       Zed?d       Zed?d       Zed?d       ZedAd       ZedAd       Ze	 dB	 	 	 	 	 	 	 dCd       ZedDd       ZedEd       Z edEd       Z!edEd       Z"edFd       Z#edGd       Z$edHdId       Z%e	 	 	 	 	 	 	 	 	 	 	 	 	 	 dJd        Z&e	 	 	 	 	 	 	 	 	 	 dKd!       Z'edLd"       Z(ee)e*e+e,f	 	 	 	 	 	 	 	 	 dMd#       Z-dNd$Z.dOd%Z/dPd&Z0dQd'Z1dQd(Z2dQd)Z3dRd*Z4dRd+Z5dSd,Z6dTdSd-Z7e7Z8dUd.Z9dVd/Z:dWd0Z;	 dT	 	 	 dUd1Z<dXd2Z=dXd3Z>e>Z?dYd4Z@dZd5ZAdYd6ZBy)[r   a  An optimized 4x4 `transformation matrix`_.

    The utility functions for constructing transformations and transforming
    vectors and points assumes that vectors are stored as row vectors, meaning
    when multiplied, transformations are applied left to right (e.g. vAB
    transforms v by A then by B).

    Matrix44 initialization:

        - ``Matrix44()`` returns the identity matrix.
        - ``Matrix44(values)`` values is an iterable with the 16 components of
          the matrix.
        - ``Matrix44(row1, row2, row3, row4)`` four rows, each row with four
          values.

    .. _transformation matrix: https://en.wikipedia.org/wiki/Transformation_matrix

    _matrixznpt.NDArray[np.float64]r    )      ?        r"   r"   r"   r!   r"   r"   r"   r"   r!   r"   r"   r"   r"   r!   dtypec                   t        |      }|dk(  r$t        j                  j                         | _        n}|dk(  r.t        j                  |d   t
        j                        | _        nJ|dk(  r:t        j                  t        t        |       t
        j                        | _        nt        d      | j                  j                  dk7  rt        d      y)	z
        Matrix44() is the identity matrix.

        Matrix44(values) values is an iterable with the 16 components of the matrix.

        Matrix44(row1, row2, row3, row4) four rows, each row with four values.

        r   r   r#      zFInvalid count of arguments (4 row vectors or one list with 16 values).)   zInvalid matrix countN)lenr   	_identitycopyr    nparrayfloat64listr   
ValueErrorshape)selfargsnargss      r   __init__zMatrix44.__init__B   s     D	A:#--224DLaZ88DG2::>DLaZ88D$6bjjIDL(  <<&344 '    c                `    d ddj                  fd| j                         D              z  S )zReturns the representation string of the matrix in row-major order:
        ``Matrix44((col0, col1, col2, col3), (...), (...), (...))``
        c                8    ddj                  d | D              z  S )Nz(%s), c              3  2   K   | ]  }t        |        y wr   )str).0values     r   	<genexpr>z8Matrix44.__repr__.<locals>.format_row.<locals>.<genexpr>`   s     %BUc%j%Bs   )join)rows    r   
format_rowz%Matrix44.__repr__.<locals>.format_row_   s    DII%Bc%BBBBr5   zMatrix44(%s)r8   c              3  .   K   | ]  } |        y wr    )r;   r?   r@   s     r   r=   z$Matrix44.__repr__.<locals>.<genexpr>b   s     )Qc*S/)Qs   )r>   rows)r1   r@   s    @r   __repr__zMatrix44.__repr__Z   s+    
	C 		)QTYY[)Q QQQr5   c           	     T    | j                   }|d   |d   d|d   |d   d|d   |d   df	S )	zReturns a 2D transformation as a row-major matrix in a linear
        array (tuple).

        A more correct transformation could be implemented like so:
        https://stackoverflow.com/questions/10629737/convert-3d-4x4-rotation-matrix-into-2d
        r   r   r"   r&            r!   r   r1   ms     r   get_2d_transformationzMatrix44.get_2d_transformationd   s>     LLtQqT3!adC2"sBBr5   c                    t        |       dk7  rt        d      t               }|j                  }| d   |d<   | d   |d<   | d   |d<   | d   |d<   | d   |d	<   | d   |d
<   |S )zReturns the :class:`Matrix44` class for an affine 2D (3x3) transformation
        matrix defined by 6 float values: m11, m12, m21, m22, m31, m32.
           zFFirst 2 columns of a 3x3 matrix required: m11, m12, m21, m22, m31, m32r   r      r&      rF   rG   rH   )r(   r/   r   r    )
componentsm44rJ   s      r   from_2d_transformationzMatrix44.from_2d_transformationn   s    
 z?aX  jKK!}!!}!!}!!}!1"1"
r5   c                z    d|cxk  rdk  r#n n |dz  }t        | j                  ||dz          S t        d|       )zbGet row as list of four float values.

        Args:
            row: row index [0 .. 3]

        r   r&   invalid row index: )tupler    
IndexError)r1   r?   indexs      r   get_rowzMatrix44.get_row   sE     <a<!GEeeai89923%899r5   c                    d|cxk  rdk  r-n n*|dz  }t        |      | j                  ||t        |      z    yt        d|       )zSets the values in a row.

        Args:
            row: row index [0 .. 3]
            values: iterable of four row values

        r   r&   rT   N)r   r    r(   rV   )r1   r?   valuesrW   s       r   set_rowzMatrix44.set_row   sH     <a<!GE8>vDLLV!4523%899r5   c                    d|cxk  rdk  r*n n'| j                   }||   ||dz      ||dz      ||dz      fS t        d|       )zjReturns a column as a tuple of four floats.

        Args:
            col: column index [0 .. 3]
        r   r&      rG   rT   r    rV   )r1   colrJ   s      r   get_colzMatrix44.get_col   sV     <a<AS61S1W:qqz1S2X;>>23%899r5   c                    d|cxk  rdk  rXn nU| j                   }|\  }}}}t        |      ||<   t        |      ||dz   <   t        |      ||dz   <   t        |      ||dz   <   yt        d|       )zSets the values in a column.

        Args:
            col: column index [0 .. 3]
            values: iterable of four column values

        r   r&   r]   rG   rT   N)r    r   rV   )r1   r_   rZ   rJ   abcds           r   set_colzMatrix44.set_col   sx     <a<AJAq!Q1XAcFqAcAgJqAcAgJ(AcBhK23%899r5   c                8    | j                  | j                        S )zReturns a copy of same type.)	__class__r    r1   s    r   r*   zMatrix44.copy   s    ~~dll++r5   c                F    | j                   }t        |d   |d   |d         S NrG   rH      r    r   rI   s     r   originzMatrix44.origin   s&    LLAbE1R5!B%((r5   c                L    | j                   }t        |      \  |d<   |d<   |d<   y rk   rm   )r1   r   rJ   s      r   rn   zMatrix44.origin   s'    LL"1g"quaer5   c                2    t        | j                  dd       S )Nr   rO   r   r    ri   s    r   uxzMatrix44.ux       DLL1%&&r5   c                2    t        | j                  dd       S )Nr&      rq   ri   s    r   uyzMatrix44.uy   rs   r5   c                2    t        | j                  dd       S )Nr]      rq   ri   s    r   uzzMatrix44.uz   s    DLL2&''r5   c                    | j                   j                  | j                        j                         j	                  | j
                  j                               S )zmReturns ``True`` if target coordinate system is a right handed
        orthogonal coordinate system.
        )rv   crossry   	normalizeiscloserr   ri   s    r   is_cartesianzMatrix44.is_cartesian   s<    
 ww}}TWW%//199$'':K:K:MNNr5   c                T   | j                   j                         }| j                  j                         }| j                  j                         }t	        |j                  |            dk  xr< t	        |j                  |            dk  xr t	        |j                  |            dk  S )zReturns ``True`` if target coordinate system has orthogonal axis.

        Does not check for left- or right handed orientation, any orientation
        of the axis valid.

        g&.>)rr   r|   rv   ry   absdot)r1   rr   rv   ry   s       r   is_orthogonalzMatrix44.is_orthogonal   s     WW WW WW r
Ot# (BFF2J4'(BFF2J4'	
r5   Nc                |    ||}||} | t        |      ddddt        |      ddddt        |      dddddg      }|S )zReturns a scaling transformation matrix. If `sy` is ``None``,
        `sy` = `sx`, and if `sz` is ``None`` `sz` = `sx`.

        r"   r!   r   )clssxsyszrJ   s        r   scalezMatrix44.scale   s^     :B:B"Ir2rb	2rE"IrB	
  r5   c                h     | ddddddddddddt        |      t        |      t        |      dg      S )zAReturns a translation matrix for translation vector (dx, dy, dz).r!   r"   r   )r   dxdydzs       r   	translatezMatrix44.translate  sF     BBB"IuRy%)R	
  	r5   c                `    t        |      }t        |      } | ddddd||dd| |dddddg      S )zqReturns a rotation matrix about the x-axis.

        Args:
            angle: rotation angle in radians

        r!   r"   r
   r	   r   anglecos_asin_as       r   x_rotatezMatrix44.x_rotate  sN     E
E
BubrB	
  	r5   c                `    t        |      }t        |      } | |d| ddddd|d|dddddg      S )zqReturns a rotation matrix about the y-axis.

        Args:
            angle: rotation angle in radians

        r"   r!   r   r   s       r   y_rotatezMatrix44.y_rotate$  sN     E
E
2vrB2ubB	
  	r5   c                `    t        |      }t        |      } | ||dd| |ddddddddddg      S )zqReturns a rotation matrix about the z-axis.

        Args:
            angle: rotation angle in radians

        r"   r!   r   r   s       r   z_rotatezMatrix44.z_rotate7  sN     E
E
5"bFE2rBB	
  	r5   c                h   t        |      }t        |      }d|z
  }t        |      j                         \  }}} | ||z  |z  |z   ||z  |z  ||z  z   ||z  |z  ||z  z
  d||z  |z  ||z  z
  ||z  |z  |z   ||z  |z  ||z  z   d||z  |z  ||z  z   ||z  |z  ||z  z
  ||z  |z  |z   dddddg      S )zReturns a rotation matrix about an arbitrary `axis`.

        Args:
            axis: rotation axis as ``(x, y, z)`` tuple or :class:`Vec3` object
            angle: rotation angle in radians

        r!   r"   )r
   r	   r   r|   )	r   axisr   rd   somcxyzs	            r   axis_rotatezMatrix44.axis_rotateJ  s     JJAgt*&&(1aECK!OQUS[1q50!a%#+A2ErECK!a%Qq!a%#+A2ErECK!a%Qq1u!4a!eckAorB	
  	r5   c                2   t        |      }t        |      }t        |      }t        |      }t        |      }t        |      }	||z  }
||z  } | ||z  |
|z  ||	z  z   | |z  ||	z  z   d| |	z  |
 |	z  ||z  z   ||	z  ||z  z   d|| |z  ||z  dddddg      S )a  Returns a rotation matrix for rotation about each axis.

        Args:
            angle_x: rotation angle about x-axis in radians
            angle_y: rotation angle about y-axis in radians
            angle_z: rotation angle about z-axis in radians

        r"   r!   r   )r   angle_xangle_yangle_zcxr   cyr   czr   sxsycxsys               r   
xyz_rotatezMatrix44.xyz_rotate`  s     \\\\\\BwBwGTBYb(4%"*rBw*>C"Htebj27*D2IR,?b"r'2B	
  	r5   c                    t        j                  |      }t        j                  |      } | d|dd|dddddddddddg      S )zReturns a translation matrix for shear mapping (visually similar
        to slanting) in the xy-plane.

        Args:
            angle_x: slanting angle in x direction in radians
            angle_y: slanting angle in y direction in radians

        r!   r"   )mathr   )r   r   r   txtys        r   shear_xyzMatrix44.shear_xy|  sV     XXgXXgBBBB	
  	r5   c                     | d|z  ||z
  z  ddddd|z  ||z
  z  dd||z   ||z
  z  ||z   ||z
  z  ||z   ||z
  z   dddd|z  |z  ||z
  z   dg      S )a|  Returns a matrix for a 2D projection.

        Args:
            left: Coordinate of left of screen
            right: Coordinate of right of screen
            top: Coordinate of the top of the screen
            bottom: Coordinate of the bottom of the screen
            near: Coordinate of the near clipping plane
            far: Coordinate of the far clipping plane

               @r"   g      rB   )r   leftrighttopbottomnearfars          r   perspective_projectionzMatrix44.perspective_projection  s    , $Y54<("b"dsV|,b"T\edl+cFlsV|-LTzcDj)*CrCx$3:67
  	r5   c                p    |t        |dz        z  }| |z  }||z  }| }|}	| j                  ||||	||      S )a   Returns a matrix for a 2D projection.

        Args:
            fov: The field of view (in radians)
            aspect: The aspect ratio of the screen (width / height)
            near: Coordinate of the near clipping plane
            far: Coordinate of the far clipping plane

        r   )r   r   )
r   fovaspectr   r   vranger   r   r   r   s
             r   perspective_projection_fovz#Matrix44.perspective_projection_fov  sR     C#I&w))$vsD#NNr5   c                 2    t               }| D ]  }||z  }	 |S )z<Compose a transformation matrix from one or more `matrices`.r   )matricestransformationmatrixs      r   r   zMatrix44.chain  s*     " 	%Ff$N	%r5   c                h    | \  }}}|\  }}}	|\  }
}}|\  }}}t        |||d|||	d|
||d|||df      S )a_  Returns a matrix for coordinate transformation from WCS to UCS.
        For transformation from UCS to WCS, transpose the returned matrix.

        Args:
            ux: x-axis for UCS as unit vector
            uy: y-axis for UCS as unit vector
            uz: z-axis for UCS as unit vector
            origin: UCS origin as location vector

        r   r   r   )rr   rv   ry   rn   ux_xux_yux_zuy_xuy_yuy_zuz_xuz_yuz_zor_xor_yor_zs                   r   ucszMatrix44.ucs  sj    " dDdDdD!dD$a$a$a$a	
  	r5   c                    |\  }}d|cxk  rdk  r0n n-d|cxk  rdk  r"n nt        |      | j                  |dz  |z   <   yt        d|       )zSet (row, column) element.r   r&   index out of range: N)r   r    rV   )r1   rW   r<   r?   r_   s        r   __setitem__zMatrix44.__setitem__  sM    S<a<ALqL*/,DLLq3'3E7;<<r5   c                    |\  }}d|cxk  rdk  r&n n#d|cxk  rdk  rn n| j                   |dz  |z      S t        d|       )zGet (row, column) element.r   r&   r   r^   )r1   rW   r?   r_   s       r   __getitem__zMatrix44.__getitem__  sJ    S<a<ALqL<<a#..3E7;<<r5   c                ,    t        | j                        S )z Iterates over all matrix values.)iterr    ri   s    r   __iter__zMatrix44.__iter__  s    DLL!!r5   c                    | j                   j                  dd      }|j                   j                  dd      }t        j                  ||      }| j	                  t        j
                  |            S zaReturns a new matrix as result of the matrix multiplication with
        another matrix.
        r&   r    reshaper+   matmulrh   ravelr1   otherm1m2results        r   __mul__zMatrix44.__mul__  X     \\!!!Q']]""1a(2r"~~bhhv.//r5   c                    | j                   j                  dd      }|j                   j                  dd      }t        j                  ||      }| j	                  t        j
                  |            S r   r   r   s        r   
__matmul__zMatrix44.__matmul__	  r   r5   c                    | j                   j                  dd      }|j                   j                  dd      }t        j                  ||      }t        j                  |      | _         | S )z+Inplace multiplication with another matrix.r&   )r    r   r+   r   r   r   s        r   __imul__zMatrix44.__imul__  sS    \\!!!Q']]""1a(2r"xx'r5   c                      fddD        S )zIterate over rows as 4-tuples.c              3  @   K   | ]  }j                  |        y wr   )rX   r;   rW   r1   s     r   r=   z Matrix44.rows.<locals>.<genexpr>       >U#>   r   r   rN   rO   rB   ri   s   `r   rC   zMatrix44.rows      >>>r5   c                      fddD        S )z!Iterate over columns as 4-tuples.c              3  @   K   | ]  }j                  |        y wr   )r`   r   s     r   r=   z#Matrix44.columns.<locals>.<genexpr>   r   r   r   rB   ri   s   `r   columnszMatrix44.columns  r   r5   c                   | j                   }t        |      \  }}}t        ||d   z  ||d   z  z   ||d   z  z   |d   z   ||d   z  ||d   z  z   ||d   z  z   |d   z   ||d	   z  ||d
   z  z   ||d   z  z   |d   z         S )zReturns a transformed vertex.r   r&   r]   rG   r   rF   	   rH   rN   rM   
   rl   rm   )r1   vectorrJ   r   r   r   s         r   	transformzMatrix44.transform"  s    LLv,1a!Hq1Q4x!ad(*QrU2!Hq1Q4x!ad(*QrU2!Hq1Q4x!ae)+ae3
 	
r5   c                
   | j                   }t        |      \  }}}t        ||d   z  ||d   z  z   ||d   z  z   ||d   z  ||d   z  z   ||d   z  z   ||d   z  ||d   z  z   ||d	   z  z         }|r|j                         S |S )
z;Returns a transformed direction vector without translation.r   r&   r]   r   rF   r   rN   rM   r   r    r   r|   )r1   r   r|   rJ   r   r   r   r   s           r   transform_directionzMatrix44.transform_direction.  s    LLv,1a!Hq1Q4x!ad(*!Hq1Q4x!ad(*!Hq1Q4x!ae)+
 !*q{{}0q0r5   c              #     K   | j                   \  }}}}}}}}	}
}}}}}}}|D ]V  }t        |      \  }}}t        ||z  ||z  z   ||
z  z   |z   ||z  ||z  z   ||z  z   |z   ||z  ||z  z   ||z  z   |z          X yw)z,Returns an iterable of transformed vertices.Nrm   )r1   vectorsm0r   r   m3m4m5m6m7m8m9m10m11m12m13m14m15r   r   r   r   s                         r   transform_verticeszMatrix44.transform_vertices=  s      LL	
BBCc3  	F6lGAq!BR!b&(3.BR!b&(3.BR!c')C/ 	s   A:A<c              #     K   | j                   }|d   }|d   }|d   }|d   }|d   }|d   }|D ]K  }	t        |	      }
|
j                  }|
j                  }t        ||z  ||z  z   |z   ||z  ||z  z   |z          M yw)a-  Fast transformation of 2D points. For 3D input points the z-axis will be
        ignored.  This only works reliable if only 2D transformations have been applied
        to the 4x4 matrix!

        Profiling results - speed gains over :meth:`transform_vertices`:

            - pure Python code: ~1.6x
            - Python with C-extensions: less than 1.1x
            - PyPy 3.8: ~4.3x

        But speed isn't everything, returning the processed input points as :class:`Vec2`
        instances is another advantage.

        .. versionadded:: 1.1

        r   r   r&   rF   rG   rH   N)r    r   r   r   )r1   pointsrJ   r   r   r   r  r  r	  pntr   r   r   s                r   fast_2d_transformzMatrix44.fast_2d_transformQ  s     " LLqTqTqTqTee 	ECS	AAAq2vB,a"fq2vo.CDD		Es   A<A>c           	        |dk(  r;t        j                  | j                         t         j                        }d|_        nG|dk(  r7t        j                  | j
                  t         j                        }d|_        nt        d      t        j                  t        j                  |ddd|f   t        j                  |j                  d   d	f      fd	
      |      }|ddd|f   j                         |ddd|f<   y)a3  Transforms a numpy array inplace, the argument `ndim` defines the dimensions
        to transform, this allows 2D/3D transformation on arrays with more columns
        e.g. a polyline array which stores points as (x, y, start_width, end_width,
        bulge) values.

        .. versionadded:: 1.1

        rN   r#   )rO   rO   rO   )r&   r&   zndim has to be 2 or 3Nr   r   )r   )r+   r,   rK   r-   r0   r    r/   r   concatenateonesr*   )r1   r,   ndimrJ   r   s        r   transform_array_inplacez Matrix44.transform_array_inplaceo  s     19335RZZHAAGQYRZZ8AAG455IINNE!UdU(ORWWekk!na5H-IJQRSUV
 AuuH+**,a$hr5   c              #    K   | j                   ^}}}}}}}	}
}}}}|D ]a  }t        |      \  }}}t        ||z  ||z  z   ||z  z   ||z  ||z  z   ||z  z   ||z  ||	z  z   ||z  z         }|r|j                         n| c yw)z[Returns an iterable of transformed direction vectors without
        translation.

        Nr   )r1   r   r|   r   r   r   r   r   r  r  r  r  r  r  _r   r   r   r   r   s                       r   transform_directionszMatrix44.transform_directions  s      ;?,,7BBBBBa 		4F6lGAq!BR!b&(BR!b&(BR!c')A $-!++-!3		4s   B Bc                >    | j                  || j                  z
        S )zReturns an UCS vector from WCS vertex.

        Works only if matrix is used as cartesian UCS without scaling.

        (internal API)

        )ucs_direction_from_wcsrn   )r1   wcss     r   ucs_vertex_from_wcszMatrix44.ucs_vertex_from_wcs  s     **3+<==r5   c                    | j                   ^}}}}}}}}	}
}}}|\  }}}t        ||z  ||z  z   ||z  z   ||z  ||z  z   ||z  z   ||
z  ||z  z   ||z  z         S )zReturns UCS direction vector from WCS direction.

        Works only if matrix is used as cartesian UCS without scaling.

        (internal API)

        rm   )r1   r  r   r   r   r   r   r  r  r  r  r  r  r  r   r   r   s                    r   r  zMatrix44.ucs_direction_from_wcs  s     ;?,,7BBBBBa1aFQVOa"f$FQVOa"f$FQVOa#g%
 	
r5   c                    | j                   j                  dd      }t        j                  |j                        | _         y)z#Swaps the rows for columns inplace.r&   N)r    r   r+   r   TrI   s     r   	transposezMatrix44.transpose  s+    LL  A&xx}r5   c                t    t         j                  j                  | j                  j	                  dd            S )zReturns determinant.r&   )r+   linalgdetr    r   ri   s    r   determinantzMatrix44.determinant  s&    yy}}T\\11!Q788r5   c                    	 t         j                  j                  | j                  j	                  dd            }t        j                  |      | _        y# t         j                  j
                  $ r t        w xY w)zzCalculates the inverse of the matrix.

        Raises:
             ZeroDivisionError: if matrix has no inverse.

        r&   N)r+   r"  invr    r   LinAlgErrorZeroDivisionErrorr   )r1   inverses     r   r)  zMatrix44.inverse  s]    	$iimmDLL$8$8A$>?G xx( yy$$ 	$##	$s   9A $A:)returnr:   )r*  tuple[float, ...])rP   Sequence[float]r*  r   )r?   intr*  r+  )r?   r-  rZ   r,  r*  None)r_   r-  r*  r+  )r_   r-  rZ   r,  )r*  r   )r*  r   )r   r   r*  r.  )r*  bool)NN)r   r   r   Optional[float]r   r0  r*  r   )r   r   r   r   r   r   r*  r   )r   r   r*  r   )r   r   r   r   r*  r   )r   r   r   r   r   r   r*  r   )r   r   )r   r   r   r   r*  r   )r   r   r   r   r   r   r   r   r   r   r   r   r*  r   )
r   r   r   r   r   r   r   r   r*  r   )r   r   r*  r   )
rr   r   rv   r   ry   r   rn   r   r*  r   )rW   tuple[int, int]r<   r   )rW   r1  )r*  zIterator[float])r   r   r*  r   )r*  zIterator[tuple[float, ...]])r   r   r*  r   )F)r   Iterable[UVec]r*  zIterator[Vec3])r  r2  r*  zIterator[Vec2])r,   z
np.ndarrayr  r-  r*  r.  )r  r   r*  r   )r*  r.  )r*  r   )C__name__
__module____qualname____doc__	__slots____annotations__r+   r,   r-   r)   r4   rD   rK   staticmethodrR   rX   r[   r`   rf   r*   __copy__propertyrn   setterrr   rv   ry   r~   r   classmethodr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rC   r   r   r   
ocs_to_wcsr  r  r  r  r  r  ocs_from_wcsr   r$  r)  rB   r5   r   r   r   !   sL   & I$$  

 I50RC  &::
::$, H) ) ]]& & ' ' ' ' ( ( O O 
 
  JN+8G	 *    $  $  $  *  6  (   	
    
 < OO!&O.3O:?O	O O&   	  	
 
 :=="00??	
1 %J(E<-6 274%4	4&>
$ *L%
9)r5   )r   r   r*  zlist[float])
__future__r   typingr   r   r   r   r   r   numpyr+   numpy.typingnptr	   r
   r   	itertoolsr   _vectorr   r   r   r   r   r   
ezdxf.mathr   __all__r   r   rB   r5   r   <module>rI     sI    # H H       A @,%m
) m
)r5   