o
    bĎi                     @   sJ   d dl Z d dlmZ d dlZd dlZd dlmZ dd Ze	eddZ
dS )    N)islice)affine_transformc                    s   | du rdS | j rtdS | jzjj}W n ty"    Y S w dd t|t|ddD   fdd}t	| dd	 d
\}}t
||S )zCompute the oriented envelope (minimum rotated rectangle).

    This is a fallback implementation for GEOS < 3.12 to have the correct
    minimum area behaviour.
    NzPOLYGON EMPTYc                 s   s4    | ]\}}|d  |d   |d |d  fV  qdS )r      N ).0pt1pt2r   r   a/home/jeff/fluffinator/venv/lib/python3.10/site-packages/shapely/algorithms/_oriented_envelope.py	<genexpr>   s
    
z._oriented_envelope_min_area.<locals>.<genexpr>r   c               	   3   sv     D ]5\} }t | d |d  }| | || }}| |}}t||||ddfj}|||||ddffV  qd S )N   r   )mathsqrtr   envelope)dxdylengthuxuyvxvytransf_rectedgeshullr   r	   _transformed_rects!   s   z7_oriented_envelope_min_area.<locals>._transformed_rectsc                 S   s
   | d j S )Nr   )area)rr   r   r	   <lambda>2   s   
 z-_oriented_envelope_min_area.<locals>.<lambda>)key)is_emptyshapelyfrom_wktconvex_hullexteriorcoordsAttributeErrorzipr   minr   )geometrykwargsr$   r   r   
inv_matrixr   r   r	   _oriented_envelope_min_area
   s    

r+   r   )r   	itertoolsr   numpynpr    shapely.affinityr   r+   
frompyfunc&_oriented_envelope_min_area_vectorizedr   r   r   r	   <module>   s    ,