o
    [hw                     @   s8  d Z ddlZddlZddlmZmZmZmZmZ ddl	m
Z
 ddlmZ ddlmZmZ ddlmZ edZd	d
 ZedeeZdd ZeeZedeeZdd ZeeZG dd deZG dd deZG dd deZG dd deZeeZeeZeeZeeZ eeZ!G dd dZ"dd Z#dd Z$dS )z
This module houses the ctypes initialization procedures, as well
as the notice and error handler function callbacks (get called
when an error occurs in GEOS).

This module also houses GEOS Pointer utilities, including
get_pointer_arr(), and GEOM_PTR.
    N)CDLL	CFUNCTYPEPOINTER	Structurec_char_p)find_library)ImproperlyConfigured)SimpleLazyObjectcached_property)get_version_tuplezdjango.contrib.gisc                  C   s   zddl m}  | j}W n ttttfy   d }Y nw |r d }ntjdkr*ddg}ntjdkr4ddg}ntdtj |rL|D ]}t	|}|d urK nq?|d u rYtd	d

| t|}t|j_tg|j_t|j_|S )Nr   )settingsntZgeos_czlibgeos_c-1posixZGEOSzUnsupported OS "%s"z]Could not find the GEOS library (tried "%s"). Try setting GEOS_LIBRARY_PATH in your settings.z", ")Zdjango.confr   ZGEOS_LIBRARY_PATHAttributeErrorImportErrorr   OSErrorosnamer   joinr   CONTEXT_PTRZ
initGEOS_rrestypeZfinishGEOS_rargtypesr   GEOSversion)r   Zlib_pathZ	lib_namesZlib_nameZ_lgeos r   /home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/venv/lib/python3.10/site-packages/django/contrib/gis/geos/libgeos.py	load_geos   s<   





r   c                 C   F   |   |  } }z| | }W n ty   | }Y nw td| d S )NzGEOS_NOTICE: %s
)decode	TypeErrorloggerwarning)fmtlstZwarn_msgr   r   r   notice_hP      r#   c                 C   r   )NzGEOS_ERROR: %s
)r   r   r   error)r!   r"   err_msgr   r   r   error_h^   r$   r'   c                   @      e Zd ZdS )
GEOSGeom_tN__name__
__module____qualname__r   r   r   r   r)   m       r)   c                   @   r(   )GEOSPrepGeom_tNr*   r   r   r   r   r/   q   r.   r/   c                   @   r(   )GEOSCoordSeq_tNr*   r   r   r   r   r0   u   r.   r0   c                   @   r(   )GEOSContextHandle_tNr*   r   r   r   r   r1   y   r.   r1   c                   @   sB   e Zd ZdZdZdZdZddddddZdd Ze	dd	 Z
dS )
GEOSFuncFactoryz)
    Lazy loading of GEOS functions.
    N)r   errcheckr   c                C   s8   || _ |d ur
|| _|d ur|| _|d ur|| _d S d S N)	func_namer   r3   r   )selfr5   r   r3   r   r   r   r   __init__   s   
zGEOSFuncFactory.__init__c                 G   s
   | j | S r4   )func)r6   argsr   r   r   __call__   s   
zGEOSFuncFactory.__call__c                 C   s<   ddl m} || j}| jpg |_| j|_| jr| j|_|S )Nr   )GEOSFunc)Z-django.contrib.gis.geos.prototypes.threadsafer;   r5   r   r   r3   )r6   r;   r8   r   r   r   r8      s   
zGEOSFuncFactory.func)r+   r,   r-   __doc__r   r   r3   r7   r:   r
   r8   r   r   r   r   r2      s    	r2   c                   C   s   t  S )z.Return the string version of the GEOS library.)lgeosr   r   r   r   r   geos_version   s   r>   c                   C   s   t t  S )z<Return the GEOS version as a tuple (major, minor, subminor).)r   r>   r   r   r   r   r   geos_version_tuple   s   r?   )%r<   loggingr   ctypesr   r   r   r   r   Zctypes.utilr   Zdjango.core.exceptionsr   Zdjango.utils.functionalr	   r
   Zdjango.utils.versionr   	getLoggerr   r   Z
NOTICEFUNCr#   Z	ERRORFUNCr'   r)   r/   r0   r1   ZGEOM_PTRZPREPGEOM_PTRZCS_PTRr   r=   r2   r>   r?   r   r   r   r   <module>   s8    	
7		!