
    hV                        S SK Jr  S SKJrJrJrJrJr  S SKrS SK	r
S SKJr  S SKJrJrJr  S SKJr  SSKJrJrJrJrJrJr  \(       a  S SKJr  S	/rSS
 jr " S S	5      rg)    )annotations)SequenceIterableIteratorTYPE_CHECKINGOptionalN)sincostan)chain   )Vec3X_AXISY_AXISZ_AXISNULLVECVec2)UVecMatrix44c                D    U  Vs/ s H  n[        U5      PM     sn$ s  snf Nfloat)itemsvs     F/var/www/html/env/lib/python3.13/site-packages/ezdxf/math/_matrix44.pyfloatsr      s    #$eE!He$$$s   c                     \ rS rSr% SrSrS\S'   \R                  " / SQ\R                  S9r
S rS8S	 jrS9S
 jr\S:S j5       rS;S jrS<S jrS=S jrS>S jrS?S jr\r\S@S j5       r\R0                  SAS j5       r\S@S j5       r\S@S j5       r\S@S j5       r\SBS j5       r\SBS j5       r\ SC       SDS jj5       r\SES j5       r \SFS j5       r!\SFS j5       r"\SFS j5       r#\SGS j5       r$\SHS j5       r%\SISJS  jj5       r&\              SKS! j5       r'\          SLS" j5       r(\SMS# j5       r)\\*\+\,\-4         SNS$ jj5       r.SOS% jr/SPS& jr0SQS' jr1SRS( jr2SRS) jr3SRS* jr4SSS+ jr5SSS, jr6STS- jr7SUSTS. jjr8\8r9SVS/ jr:SWS0 jr;SXS1 jr< SU   SVS2 jjr=SYS3 jr>SYS4 jr?\?r@SZS5 jrAS[S6 jrBSZS7 jrCSrDg)\r   !   at  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                   [        U5      nUS:X  a$  [        R                  R                  5       U l        O{US:X  a,  [
        R                  " US   [
        R                  S9U l        OIUS:X  a8  [
        R                  " [        [        U6 5      [
        R                  S9U l        O[        S5      eU R                  R                  S:w  a  [        S5      eg)	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__Matrix44.__init__B   s     D	A:#--224DLaZ88DG2::>DLaZ88D$6bjjIDL(  <<&344 '    c                b   ^ S mSSR                  U4S jU R                  5        5       5      -  $ )zReturns the representation string of the matrix in row-major order:
``Matrix44((col0, col1, col2, col3), (...), (...), (...))``
c                8    SSR                  S U  5       5      -  $ )Nz(%s), c              3  8   #    U  H  n[        U5      v   M     g 7fr   )str).0values     r   	<genexpr>8Matrix44.__repr__.<locals>.format_row.<locals>.<genexpr>`   s     %BcUc%jjcs   )join)rows    r   
format_row%Matrix44.__repr__.<locals>.format_row_   s    DII%Bc%BBBBr7   zMatrix44(%s)r:   c              3  4   >#    U  H  nT" U5      v   M     g 7fr    )r=   rB   rC   s     r   r?   $Matrix44.__repr__.<locals>.<genexpr>b   s     )Q[c*S//[s   )rA   rows)r2   rC   s    @r   __repr__Matrix44.__repr__Z   s+    
	C 		)QTYY[)Q QQQr7   c           	     T    U R                   nUS   US   SUS   US   SUS   US   S4	$ )	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    r2   ms     r   get_2d_transformationMatrix44.get_2d_transformationd   s>     LLtQqT3!adC2"sBBr7   c                    [        U 5      S:w  a  [        S5      e[        5       nUR                  nU S   US'   U S   US'   U S   US'   U S   US'   U S   US	'   U S   US
'   U$ )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'      rL   rM   rN   )r)   r0   r   r!   )
componentsm44rP   s      r   from_2d_transformationMatrix44.from_2d_transformationn   s    
 z?aX  jKK!}!!}!!}!!}!1"1"
r7   c                |    SUs=::  a  S:  a"  O  OUS-  n[        U R                  X"S-    5      $ [        SU 35      e)zJGet row as list of four float values.

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

r   r'   invalid row index: )tupler!   
IndexError)r2   rB   indexs      r   get_rowMatrix44.get_row   sC     <a<!GEeai89923%899r7   c                    SUs=::  a  S:  a,  O  O)US-  n[        U5      U R                  X3[        U5      -   & g[        SU 35      e)zfSets the values in a row.

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

r   r'   r\   N)r   r!   r)   r^   )r2   rB   valuesr_   s       r   set_rowMatrix44.set_row   sF     <a<!GE8>vDLLV!4523%899r7   c                    SUs=::  a  S:  a&  O  O#U R                   nX!   X!S-      X!S-      X!S-      4$ [        SU 35      e)zRReturns a column as a tuple of four floats.

Args:
    col: column index [0 .. 3]
r   r'      rM   r\   r!   r^   )r2   colrP   s      r   get_colMatrix44.get_col   sN     <a<A611W:qqz12X;>>23%899r7   c                    SUs=::  a  S:  aR  O  OOU R                   nUu  pEpg[        U5      X1'   [        U5      X1S-   '   [        U5      X1S-   '   [        U5      X1S-   '   g[        SU 35      e)zoSets the values in a column.

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

r   r'   rg   rM   r\   N)r!   r   r^   )r2   ri   rc   rP   abcds           r   set_colMatrix44.set_col   sl     <a<AJA!1XAFqAAgJqAAgJ(ABhK23%899r7   c                8    U R                  U R                  5      $ )zReturns a copy of same type.)	__class__r!   r2   s    r   r+   Matrix44.copy   s    ~~dll++r7   c                F    U R                   n[        US   US   US   5      $ NrM   rN      r!   r   rO   s     r   originMatrix44.origin   s&    LLAbE1R5!B%((r7   c                L    U R                   n[        U5      u  US'   US'   US'   g rx   rz   )r2   r   rP   s      r   r{   r|      s'    LL"1g"quaer7   c                2    [        U R                  SS 5      $ )Nr   rV   r   r!   ru   s    r   uxMatrix44.ux       DLL1%&&r7   c                2    [        U R                  SS 5      $ )Nr'      r   ru   s    r   uyMatrix44.uy   r   r7   c                2    [        U R                  SS 5      $ )Nrg      r   ru   s    r   uzMatrix44.uz   s    DLL2&''r7   c                    U R                   R                  U R                  5      R                  5       R	                  U R
                  R                  5       5      $ )z]Returns ``True`` if target coordinate system is a right handed
orthogonal coordinate system.
)r   crossr   	normalizeiscloser   ru   s    r   is_cartesianMatrix44.is_cartesian   s<    
 ww}}TWW%//199$'':K:K:MNNr7   c                h   U R                   R                  5       nU R                  R                  5       nU R                  R                  5       n[	        UR                  U5      5      S:*  =(       aA    [	        UR                  U5      5      S:*  =(       a    [	        UR                  U5      5      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&.>)r   r   r   r   absdot)r2   r   r   r   s       r   is_orthogonalMatrix44.is_orthogonal   s     WW WW WW r
Ot# (BFF2J4'(BFF2J4'	
r7   Nc                    Uc  UnUc  UnU " [        U5      SSSS[        U5      SSSS[        U5      SSSSS/5      nU$ )zqReturns a scaling transformation matrix. If `sy` is ``None``,
`sy` = `sx`, and if `sz` is ``None`` `sz` = `sx`.

r#   r"   r   )clssxsyszrP   s        r   scaleMatrix44.scale   s^     :B:B"Ir2rb	2rE"IrB	
  r7   c                h    U " SSSSSSSSSSSS[        U5      [        U5      [        U5      S/5      $ )zAReturns a translation matrix for translation vector (dx, dy, dz).r"   r#   r   )r   dxdydzs       r   	translateMatrix44.translate  sF     BBB"IuRy%)R	
  	r7   c                ^    [        U5      n[        U5      nU " SSSSSX#SSU* USSSSS/5      $ )zYReturns 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_rotateMatrix44.x_rotate  sL     E
E
BbrB	
  	r7   c                `    [        U5      n[        U5      nU " USU* SSSSSUSUSSSSS/5      $ )zYReturns a rotation matrix about the y-axis.

Args:
    angle: rotation angle in radians

r#   r"   r   r   s       r   y_rotateMatrix44.y_rotate$  sN     E
E
2vrB2ubB	
  	r7   c                ^    [        U5      n[        U5      nU " X#SSU* USSSSSSSSSS/5      $ )zYReturns a rotation matrix about the z-axis.

Args:
    angle: rotation angle in radians

r#   r"   r   r   s       r   z_rotateMatrix44.z_rotate7  sL     E
E
"bFE2rBB	
  	r7   c                H   [        U5      n[        U5      nSU-
  n[        U5      R                  5       u  pgnU " Xf-  U-  U-   Xv-  U-  X-  -   Xh-  U-  Xt-  -
  SXg-  U-  X-  -
  Xw-  U-  U-   Xx-  U-  Xd-  -   SXh-  U-  Xt-  -   Xx-  U-  Xd-  -
  X-  U-  U-   SSSSS/5      $ )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   ro   somcxyzs	            r   axis_rotateMatrix44.axis_rotateJ  s     JJAgt*&&(aECK!OQUS[150!%#+2ErECK!%q!%#+2ErECK!%qu!4aeckAorB	
  	r7   c                   [        U5      n[        U5      n[        U5      n[        U5      n[        U5      n[        U5      n	XW-  n
XG-  nU " Xh-  X-  XI-  -   U* U-  XY-  -   SU* U	-  U
* U	-  XH-  -   X-  XX-  -   SXu* U-  XF-  SSSSS/5      $ )zReturns 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_rotateMatrix44.xyz_rotate`  s     \\\\\\wwGTY(4%"*rw*>C"Htebj27*DI,?b"'2B	
  	r7   c                    [         R                  " U5      n[         R                  " U5      nU " SUSSUSSSSSSSSSSS/5      $ )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_xyMatrix44.shear_xy|  sV     XXgXXgBBBB	
  	r7   c                    U " SU-  X!-
  -  SSSSSU-  X4-
  -  SSX!-   X!-
  -  X4-   X4-
  -  Xe-   Xe-
  -  * SSSSU-  U-  Xe-
  -  * S/5      $ )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      rF   )r   leftrighttopbottomnearfars          r   perspective_projectionMatrix44.perspective_projection  s    , $Y5<("b"ds|,b"\el+cls|-Lzcj)*CrCx$3:67
  	r7   c                h    U[        US-  5      -  nU* U-  nXR-  nU* nUn	U R                  XgXX45      $ )zReturns 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_fov#Matrix44.perspective_projection_fov  sJ     C#I&w))$vDNNr7   c                 4    [        5       nU  H  nX-  nM	     U$ )z<Compose a transformation matrix from one or more `matrices`.r   )matricestransformationmatrixs      r   r   Matrix44.chain  s#     "F$N r7   c                X    U u  pEnUu  pxn	Uu  pnUu  pn[        XEUSXxU	SXUSXUS45      $ )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   )r   r   r   r{   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   ucsMatrix44.ucs  sZ    " DDD!Daaaa	
  	r7   c                    Uu  p4SUs=::  a  S:  a2  O  O/SUs=::  a  S:  a"  O  O[        U5      U R                  US-  U-   '   g[        SU 35      e)zSet (row, column) element.r   r'   index out of range: N)r   r!   r^   )r2   r_   r>   rB   ri   s        r   __setitem__Matrix44.__setitem__  sK    <a<ALqL*/,DLLq3'3E7;<<r7   c                    Uu  p#SUs=::  a  S:  a(  O  O%SUs=::  a  S:  a  O  OU R                   US-  U-      $ [        SU 35      e)zGet (row, column) element.r   r'   r   rh   )r2   r_   rB   ri   s       r   __getitem__Matrix44.__getitem__  sH    <a<ALqL<<a#..3E7;<<r7   c                ,    [        U R                  5      $ )z Iterates over all matrix values.)iterr!   ru   s    r   __iter__Matrix44.__iter__  s    DLL!!r7   c                    U R                   R                  SS5      nUR                   R                  SS5      n[        R                  " X#5      nU R	                  [        R
                  " U5      5      $ zQReturns a new matrix as result of the matrix multiplication with
another matrix.
r'   r!   reshaper,   matmulrt   ravelr2   otherm1m2results        r   __mul__Matrix44.__mul__  V     \\!!!Q']]""1a(2"~~bhhv.//r7   c                    U R                   R                  SS5      nUR                   R                  SS5      n[        R                  " X#5      nU R	                  [        R
                  " U5      5      $ r   r   r  s        r   
__matmul__Matrix44.__matmul__	  r  r7   c                    U R                   R                  SS5      nUR                   R                  SS5      n[        R                  " X#5      n[        R                  " U5      U l         U $ )z+Inplace multiplication with another matrix.r'   )r!   r   r,   r   r   r  s        r   __imul__Matrix44.__imul__  sQ    \\!!!Q']]""1a(2"xx'r7   c                   ^  U 4S jS 5       $ )zIterate over rows as 4-tuples.c              3  F   >#    U  H  nTR                  U5      v   M     g 7fr   )r`   r=   r_   r2   s     r   r?    Matrix44.rows.<locals>.<genexpr>       >U##   !r   r   rU   rV   rF   ru   s   `r   rH   Matrix44.rows      >>>r7   c                   ^  U 4S jS 5       $ )z!Iterate over columns as 4-tuples.c              3  F   >#    U  H  nTR                  U5      v   M     g 7fr   )rj   r  s     r   r?   #Matrix44.columns.<locals>.<genexpr>   r  r  r  rF   ru   s   `r   columnsMatrix44.columns  r  r7   c                    U R                   n[        U5      u  p4n[        X2S   -  XBS   -  -   XRS   -  -   US   -   X2S   -  XBS   -  -   XRS   -  -   US   -   X2S	   -  XBS
   -  -   XRS   -  -   US   -   5      $ )zReturns a transformed vertex.r   r'   rg   rM   r   rL   	   rN   rU   rT   
   ry   rz   )r2   vectorrP   r   r   r   s         r   	transformMatrix44.transform"  s    LLv,a!HqQ4x!d(*QrU2!HqQ4x!d(*QrU2!HqQ4x!e)+ae3
 	
r7   c                    U R                   n[        U5      u  pEn[        XCS   -  XSS   -  -   XcS   -  -   XCS   -  XSS   -  -   XcS   -  -   XCS   -  XSS   -  -   XcS	   -  -   5      nU(       a  UR                  5       $ U$ )
z;Returns a transformed direction vector without translation.r   r'   rg   r   rL   r  rU   rT   r  r!   r   r   )r2   r   r   rP   r   r   r   r   s           r   transform_directionMatrix44.transform_direction.  s    LLv,a!HqQ4x!d(*!HqQ4x!d(*!HqQ4x!e)+
 !*q{{}0q0r7   c              #     #    U R                   u  p#pEpgppppnnU HW  n[        U5      u  nnn[        UU-  UU-  -   UU
-  -   U-   UU-  UU-  -   UU-  -   U-   UU-  UU-  -   UU-  -   U-   5      v   MY     g7f)z,Returns an iterable of transformed vertices.Nrz   )r2   vectorsm0r  r  m3m4m5m6m7m8m9m10m11m12m13m14m15r   r   r   r   s                         r   transform_verticesMatrix44.transform_vertices=  s      LL	
BBCc3 F6lGAq!BR!b&(3.BR!b&(3.BR!c')C/  s   A5A7c              #     #    U R                   nUS   nUS   nUS   nUS   nUS   nUS   nU HH  n	[        U	5      n
U
R                  nU
R                  n[        X-  X-  -   U-   X-  X-  -   U-   5      v   MJ     g7f)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'   rL   rM   rN   N)r!   r   r   r   )r2   pointsrP   r)  r  r+  r,  r3  r4  pntr   r   r   s                r   fast_2d_transformMatrix44.fast_2d_transformQ  s     " LLqTqTqTqTeeCS	AAAqv,afqvo.CDD	 s   A:A<c           	        US:X  a9  [         R                  " U R                  5       [         R                  S9nSUl        OFUS:X  a5  [         R                  " U R
                  [         R                  S9nSUl        O[        S5      e[         R                  " [         R                  " USS2SU24   [         R                  " UR                  S   S	45      4S	S
9U5      nUSS2SU24   R                  5       USS2SU24'   g)a  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

rU   r$   )rV   rV   rV   )r'   r'   zndim has to be 2 or 3Nr   r   )r   )r,   r-   rQ   r.   r1   r!   r0   r   concatenateonesr+   )r2   r-   ndimrP   r   s        r   transform_array_inplace 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r7   c              #  
  #    U R                   tp4pVpxpppU Hg  n[        U5      u  nnn[        UU-  UU-  -   UU-  -   UU-  UU-  -   UU-  -   UU-  UU	-  -   UU-  -   5      nU(       a  UR                  5       OUv   Mi     g7f)zKReturns an iterable of transformed direction vectors without
translation.

Nr$  )r2   r(  r   r)  r  r  r*  r+  r,  r-  r.  r/  r0  r1  _r   r   r   r   r   s                       r   transform_directionsMatrix44.transform_directions  s      ;?,,7F6lGAq!BR!b&(BR!b&(BR!c')A $-!++-!3 s   BBc                <    U R                  XR                  -
  5      $ )zxReturns an UCS vector from WCS vertex.

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

(internal API)

)ucs_direction_from_wcsr{   )r2   wcss     r   ucs_vertex_from_wcsMatrix44.ucs_vertex_from_wcs  s     **3+<==r7   c                    U R                   tp#pEpgpppUu  pn[        X-  X-  -   UU-  -   X-  X-  -   UU-  -   X-  X-  -   UU-  -   5      $ )zReturns UCS direction vector from WCS direction.

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

(internal API)

rz   )r2   rJ  r)  r  r  r*  r+  r,  r-  r.  r/  r0  r1  rE  r   r   r   s                    r   rI  Matrix44.ucs_direction_from_wcs  sl     ;?,,7aFQVOa"f$FQVOa"f$FQVOa#g%
 	
r7   c                    U R                   R                  SS5      n[        R                  " UR                  5      U l         g)z#Swaps the rows for columns inplace.r'   N)r!   r   r,   r   TrO   s     r   	transposeMatrix44.transpose  s+    LL  A&xx}r7   c                t    [         R                  R                  U R                  R	                  SS5      5      $ )zReturns determinant.r'   )r,   linalgdetr!   r   ru   s    r   determinantMatrix44.determinant  s&    yy}}T\\11!Q788r7   c                     [         R                  R                  U R                  R	                  SS5      5      n[         R                  " U5      U l        g! [         R                  R
                   a    [        ef = f)zbCalculates the inverse of the matrix.

Raises:
     ZeroDivisionError: if matrix has no inverse.

r'   N)r,   rT  invr!   r   LinAlgErrorZeroDivisionErrorr   )r2   inverses     r   r\  Matrix44.inverse  s]    	$iimmDLL$8$8A$>?G xx( yy$$ 	$##	$s   9A %A<)returnr<   )r^  tuple[float, ...])rW   Sequence[float]r^  r   )rB   intr^  r_  )rB   ra  rc   r`  r^  None)ri   ra  r^  r_  )ri   ra  rc   r`  )r^  r   )r^  r   )r   r   r^  rb  )r^  bool)NN)r   r   r   Optional[float]r   rd  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   )
r   r   r   r   r   r   r{   r   r^  r   )r_   tuple[int, int]r>   r   )r_   re  )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:  rf  r^  zIterator[Vec2])r-   z
np.ndarrayrA  ra  r^  rb  )rJ  r   r^  r   )r^  rb  )r^  r   )E__name__
__module____qualname____firstlineno____doc__	__slots____annotations__r,   r-   r.   r*   r5   rI   rQ   staticmethodrY   r`   rd   rj   rq   r+   __copy__propertyr{   setterr   r   r   r   r   classmethodr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r
  r  rH   r  r!  r%  
ocs_to_wcsr7  r<  rB  rF  rK  rI  ocs_from_wcsrQ  rV  r\  __static_attributes__rF   r7   r   r   r   !   sJ   & 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)r7   )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   rF   r7   r   <module>r     sI    # H H       A @,%m
) m
)r7   