
    _ h?                      d    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y)zBAffine transforms, both in general and specific, named transforms.    )cospisintanN)affine_transformrotatescaleskew	translatec                 N  	
 t        |      dk(  r&d|\  | j                  rHdddxxx	x
n9t        |      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                    dk(  rN| j                   \  }}|z  	|z  z   z   }|z  |z  z   z   }t        j                  ||g      j                   }|S dk(  rn| 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           l/home/developers/rajanand/mypropertyqr-fmb-refixing-v2/venv/lib/python3.12/site-packages/shapely/affinity.py_affine_coordsz(affine_transform.<locals>._affine_coordsH   s    
 1988DAqQQ%BQQ%BXXr2h'))F  QYhhGAq!QQQ&-BQQQ&-BQQQ&-BXXr2rl+--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zzDGHH  $ T>TQYGGr.   c                 x   |dk(  r"| j                   \  }}}}||z   dz  ||z   dz  f}n]|dk(  r| j                  j                  d   }n>t        |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	 ,VJ6HIJJ	d	+w	6q! 6{& STTqya{v;!F?"Mr.   c                 ,   | 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
4y7
4y7dFA.FB TE3D#329nrDy("rDy.29*DcKF
 D&))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	      sq    , }}!$2JBB S#5#32:orBJR%ZAF
 D&))r.   c                 "   | 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_r7Dr7D
4y7
4y7dFA.FB 4C3cDj2#*c+F
 D&))r.   c                 R    | 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      sD     }} 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 " "  
FNHbB(*V *F(*V*r.   