
    (&h?                      f    d Z ddlmZmZmZmZ ddlZddlZg dZ	d Z
d Zdd	ZddZddZddZdS )zBAffine transforms, both in general and specific, named transforms.    )cospisintanN)affine_transformrotatescaleskew	translatec                 V  	
 t          |          dk    r!d|\  | j        rdddxxx	x
n=t          |          dk    rd|\  	
| j        sdnt          d          	
fd}t          j        | |dk    	          S )
a$  Return a transformed geometry using an affine transformation matrix.

    The coefficient matrix is provided as a list or tuple with 6 or 12 items
    for 2D or 3D transformations, respectively.

    For 2D affine transformations, the 6 parameter matrix is::

        [a, b, d, e, xoff, yoff]

    which represents the augmented matrix::

        [x']   / a  b xoff \ [x]
        [y'] = | d  e yoff | [y]
        [1 ]   \ 0  0   1  / [1]

    or the equations for the transformed coordinates::

        x' = a * x + b * y + xoff
        y' = d * x + e * y + yoff

    For 3D affine transformations, the 12 parameter matrix is::

        [a, b, c, d, e, f, g, h, i, xoff, yoff, zoff]

    which represents the augmented matrix::

        [x']   / a  b  c xoff \ [x]
        [y'] = | d  e  f yoff | [y]
        [z']   | g  h  i zoff | [z]
        [1 ]   \ 0  0  0   1  / [1]

    or the equations for the transformed coordinates::

        x' = a * x + b * y + c * z + xoff
        y' = d * x + e * y + f * z + yoff
        z' = g * x + h * y + i * z + zoff
                   ?           z,'matrix' expects either 6 or 12 coefficientsc                 j   dk    rB| j         \  }}|z  	|z  z   z   }|z  |z  z   z   }t          j        ||g          j         }nidk    rc| j         \  }}}|z  	|z  z   
|z  z   z   }|z  |z  z   |z  z   z   }|z  |z  z   |z  z   z   }t          j        |||g          j         }|S )Nr   r   )Tnpstack)coordsxyxpypresultzzpabcdefghindimxoffyoffzoffs           K/var/www/html/reinick/venv/lib/python3.11/site-packages/shapely/affinity.py_affine_coordsz(affine_transform.<locals>._affine_coordsH   s    
 1998DAqQQ%BQQ%BXr2h'')FFQYYhGAq!QQQ&-BQQQ&-BQQQ&-BXr2rl++-F    )	include_z)lenhas_z
ValueErrorshapely	transform)geommatrixr-   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   s      @@@@@@@@@@@@@r,   r   r      s.   L 6{{a!'1aD$: 	'DA#&&A&&A&D	V		6<31aAq!Q4tz 	DGHHH                $ T>TQYGGGGr.   c                    |dk    r| j         \  }}}}||z   dz  ||z   dz  f}nc|dk    r| j        j        d         }nJt          |t                    rt          d|d          t          |dd          d	k    r|j        d         }t          |          d
vrt          d          |dk    r
|dd         S t          |          dk    r|dz   S |S )a5  Return interpreted coordinate tuple for origin parameter.

    This is a helper function for other transform functions.

    The point of origin can be a keyword 'center' for the 2D bounding box
    center, 'centroid' for the geometry's 2D centroid, a Point object or a
    coordinate tuple (x0, y0, z0).
    centerg       @centroidr   z'origin' keyword z is not recognized	geom_typeNPoint)r   r   z8Expected number of items in 'origin' to be either 2 or 3r   )r   )boundsr9   r   
isinstancestrr2   getattrr0   )r5   originr(   minxminymaxxmaxys          r,   interpret_originrE   ]   s    !%dD$$;#%ts':;	:		%a(	FC	 	  "IVIIIJJJ	d	+	+w	6	6q! 6{{&  STTTqyyac{v;;!F?"Mr.   r8   Fc                 X   | j         r| S |s|t          z  dz  }t          |          }t          |          }t	          |          dk     rd}t	          |          dk     rd}t          | |d          \  }}|| d||dddd|||z  z
  ||z  z   |||z  z
  ||z  z
  df}t          | |          S )a  Return a rotated geometry on a 2D plane.

    The angle of rotation can be specified in either degrees (default) or
    radians by setting ``use_radians=True``. Positive angles are
    counter-clockwise and negative are clockwise rotations.

    The point of origin can be a keyword 'center' for the bounding box
    center (default), 'centroid' for the geometry's centroid, a Point object
    or a coordinate tuple (x0, y0).

    The affine transformation matrix for 2D rotation is:

      / cos(r) -sin(r) xoff \
      | sin(r)  cos(r) yoff |
      \   0       0      1  /

    where the offsets are calculated from the origin Point(x0, y0):

        xoff = x0 - x0 * cos(r) + y0 * sin(r)
        yoff = y0 - x0 * sin(r) - y0 * cos(r)
         f@V瞯<r   r   r   )is_emptyr   r   r   absrE   r   )	r5   angler@   use_radianscospsinpx0y0r6   s	            r,   r   r   ~   s    , }  #
U"u::Du::D
4yy7
4yy7dFA..FB TE3D#329nrDy("rDy.29*DcKF
 D&)))r.   r   c                     | j         r| S t          | |d          \  }}}|ddd|ddd||||z  z
  |||z  z
  |||z  z
  f}t          | |          S )a  Return a scaled geometry, scaled by factors along each dimension.

    The point of origin can be a keyword 'center' for the 2D bounding box
    center (default), 'centroid' for the geometry's 2D centroid, a Point
    object or a coordinate tuple (x0, y0, z0).

    Negative scale factors will mirror or reflect coordinates.

    The general 3D affine transformation matrix for scaling is:

        / xfact  0    0   xoff \
        |   0  yfact  0   yoff |
        |   0    0  zfact zoff |
        \   0    0    0     1  /

    where the offsets are calculated from the origin Point(x0, y0, z0):

        xoff = x0 - x0 * xfact
        yoff = y0 - y0 * yfact
        zoff = z0 - z0 * zfact
    r   r   )rI   rE   r   )	r5   xfactyfactzfactr@   rO   rP   z0r6   s	            r,   r	   r	      sz    , } !$22JBB S#5#32:orBJR%ZAF
 D&)))r.   r   c                 P   | j         r| S |s|t          z  dz  }|t          z  dz  }t          |          }t          |          }t          |          dk     rd}t          |          dk     rd}t	          | |d          \  }}d|d|ddddd| |z  | |z  df}	t          | |	          S )a  Return a skewed geometry, sheared by angles along x and y dimensions.

    The shear angle can be specified in either degrees (default) or radians
    by setting ``use_radians=True``.

    The point of origin can be a keyword 'center' for the bounding box
    center (default), 'centroid' for the geometry's centroid, a Point object
    or a coordinate tuple (x0, y0).

    The general 2D affine transformation matrix for skewing is:

        /   1    tan(xs) xoff \
        | tan(ys)  1     yoff |
        \   0      0       1  /

    where the offsets are calculated from the origin Point(x0, y0):

        xoff = -y0 * tan(xs)
        yoff = -x0 * tan(ys)
    rG   rH   r   r   r   )rI   r   r   rJ   rE   r   )
r5   xsysr@   rL   tanxtanyrO   rP   r6   s
             r,   r
   r
      s    * }  "Wu_"Wu_r77Dr77D
4yy7
4yy7dFA..FB 4C3cDj2#*c+F
 D&)))r.   c                 P    | j         r| S ddddddddd|||f}t          | |          S )zReturn a translated geometry shifted by offsets along each dimension.

    The general 3D affine transformation matrix for translation is:

        / 1  0  0 xoff \
        | 0  1  0 yoff |
        | 0  0  1 zoff |
        \ 0  0  0   1  /
    r   r   )rI   r   )r5   r)   r*   r+   r6   s        r,   r   r      sJ     }  333D$ F
 D&)))r.   )r8   F)r   r   r   r8   )r   r   r8   F)r   r   r   )__doc__mathr   r   r   r   numpyr   r3   __all__r   rE   r   r	   r
   r    r.   r,   <module>ra      s    H H " " " " " " " " " " " "     
F
F
FNH NH NHb  B(* (* (* (*V *  *  *  *F(* (* (* (*V* * * * * *r.   