
    h)W                        d dl mZ d dlZd dlmZmZ d dlmZmZm	Z	m
Z
mZmZmZmZ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mZ d d	lmZm Z m!Z! d dl"Z" e       5  d d
l#m$Z$m%Z%m&Z& ddd       	 d dl'Z'd Z)d Z*d Z+d Z,e"jZ                  j]                  dddddd e"j^                  dde"jZ                  ja                  edk  d             e"j^                  dde"jZ                  ja                  d e       vd            g      d        Z1e"jZ                  j]                  dg d       d!        Z2e"jZ                  j]                  dd"g      d#        Z3e"jZ                  j]                  d$g d%      d&        Z4d' Z5d( Z6d) Z7d* Z8d+ Z9e"jZ                  j]                  d,g d-      d.        Z:d/ Z;d0 Z<d1 Z=d2 Z>d3 Z?d4 Z@d5 ZAd6 ZBd7 ZCd8 ZDe"jZ                  j]                  d9g d:      d;        ZEd< ZFe!e"jZ                  j]                  d=d>d d gd?d@dAg      dB               ZGe!dC        ZHe!e"jZ                  j]                  dDdEdFgfdGdHdIgfdJg dKfdLg dMfg      dN               ZIe"jZ                  ja                  edOk  dP      dQ        ZJe"jZ                  j]                  dRdSdTgdUV      dW        ZKe"jZ                  j]                  d,dXdYg      dZ        ZLd[ ZMd\ ZNd] ZOe"jZ                  j]                  d^i d_d`gfdadbid_dcgfdddeid_dcgfdddUid_dcgfg      df        ZPdg ZQdh ZRe"jZ                  j]                  dig dj      dk        ZSe"jZ                  j]                  dldmdng      do        ZTdp ZUdq ZVe"jZ                  j]                  drg ds      dt        ZWdu ZXdv ZYdw ZZdx Z[dy Z\dz Z]y# 1 sw Y   >xY w# e($ r Y Dw xY w){    )PathN)allclosearray_equal)__gdal_geos_version____gdal_version__detect_write_driverget_gdal_config_optionget_gdal_data_pathlist_driverslist_layersread_bounds	read_infoset_gdal_config_optionsvsi_listtree
vsi_rmtree
vsi_unlink)
GDAL_GE_38)GDALEnv)DataLayerErrorDataSourceErrorreadwrite)	START_FIDprepare_testfilerequires_shapely)has_gdal_datahas_proj_dataogr_driver_supports_writec                      t               sJ y N)r        J/var/www/html/immo/lib/python3.12/site-packages/pyogrio/tests/test_core.pytest_gdal_datar%   )        ??r#   c                      t               sJ y r!   )r   r"   r#   r$   test_proj_datar(   /   r&   r#   c                  8    t        t               t              sJ y r!   )
isinstancer
   strr"   r#   r$   test_get_gdal_data_pathr,   5   s     (*C000r#   c                  >    t         t        t         t              sJ y y r!   )r   r*   tupler"   r#   r$   test_gdal_geos_versionr/   ;   s     (J7Le,TTT,T(r#   zpath,expected)ztest.shpESRI Shapefile)ztest.shp.zipr0   )ztest.geojsonGeoJSON)ztest.geojsonl
GeoJSONSeq)z	test.gpkgGPKGztest.gpkg.zipr3   )      r   z)writing *.gpkg.zip requires GDAL >= 3.7.0)reason)markszPG:dbname=test
PostgreSQLz/PostgreSQL path test requires PostgreSQL driverc                 $    t        |       |k(  sJ y r!   )r   )pathexpecteds     r$   test_detect_write_driverr<   ?   s    8 t$000r#   r:   )ztest.svgztest.testztest.foozFOO:testc                 z    t        j                  t        d      5  t        |        d d d        y # 1 sw Y   y xY w)Nz Could not infer driver from pathmatchpytestraises
ValueErrorr   r:   s    r$   $test_detect_write_driver_unsupportedrF   ^   s0     
z)K	L "D!" " "   1:ztest.xmlc                 z    t        j                  t        d      5  t        |        d d d        y # 1 sw Y   y xY w)Nzmultiple drivers are available r?   rA   rE   s    r$   -test_detect_write_driver_multiple_unsupportedrI   m   s.    	z)J	K "D!" " "rG   zdriver,expected))r0   T)r1   T)r2   T)r3   T)HTTPF)OAPIFFc                 $    t        |       |k(  sJ y r!   )r   )driverr;   s     r$   test_ogr_driver_supports_writerN   s   s     %V,888r#   c                     t               } dD ]$  }|| v sJ d}|dk(  rt        dk  rd}| |   |k(  r$J  t        d      }| j                         D ci c]  \  }}|j                  d      s|| }}}t	        |      t	        |      k(  sJ t        d      }| j                         D ci c]  \  }}|j                  d	      s|| }}}t	        |      t	        |      k(  sJ t        dd
      }| j                         D ci c],  \  }}|j                  d      s|j                  d	      s*||. }}}t	        |      t	        |      k(  sJ y c c}}w c c}}w c c}}w )N)r0   r1   r2   r3   OpenFileGDBrwrP   )r4      r   rT)r   )r   wr   )r   r   items
startswithlenendswith)all_driversnameexpected_capabilitydriverskvr;   s          r$   test_list_driversr_      sn   .K S 8{""""= %5	%A"%4 $77778 %G!,!2!2!4JAS8I1JHJw<3x=(((&G!,!2!2!4HA

31HHHw<3x=(((D1G$**,AS0AajjQTo1H  w<3x=((( K Is*   E-E-EEE""E"4E"c                    t        t        |       ddgg      sJ t        t        |d         ddgg      sJ t        t        |      ddgg      sJ t        j                  t        d      5  t        t        |      ddgg      sJ 	 d d d        t        t        |      d	d
gg      sJ t        t        |      ddgg      sJ t        t        |      ddgg      sJ t        t        |      dd gg      sJ y # 1 sw Y   rxY w)Nnaturalearth_lowresPolygon   MultiPolygonz/Measured \(M\) geometry types are not supportedr?   line_zmzLineString Zcurve
LineStringcurvepolygonmultisurfaceno_geometry)r   r   rB   warnsUserWarning)ra   naturalearth_lowres_vsinaturalearth_lowres_vsimemline_zm_file
curve_filecurve_polygon_filemultisurface_fileno_geometry_files           r$   test_list_layersrt      sM    '(,A9+M*N   +A./3H)2T1U   ./
	01   
M
 U ;|4	>7R6STTTU {:.'<1H0IJJJ{#56.)9T8UVVV%&..)I(J  
 {#34t7L6MNNNU Us   -C::Dc                 P    t        |       }|j                  dk(  sJ |d   dk(  sJ y Nrc      )r   r   r=   r   shape)geojson_byteslayerss     r$   test_list_layers_bytesr}      s0    'F<<6!!!$<6!!!r#   c                 P    t        |       }|j                  dk(  sJ |d   dk(  sJ y )Nrw   )r   rc   Pointry   )nonseekable_bytesr|   s     r$   "test_list_layers_nonseekable_bytesr      s1    *+F<<6!!!$<7"""r#   c                 P    t        |       }|j                  dk(  sJ |d   dk(  sJ y rv   ry   )geojson_fileliker|   s     r$   test_list_layers_fileliker      s1    )*F<<6!!!$<6!!!r#   testfile)ra   rn   rm   c                 *   |j                  |       }t        |t              s|n|d   }t        |      \  }}|j                  dk(  sJ |j                  dk(  sJ |d   t
        t        |      j                     k(  sJ t        |d d df   g d      sJ y )Nrc   )   )   r   r        fg6oI2     f@g#EdX0)	getfixturevaluer*   r.   r   rz   r   r   suffixr   )r   requestr:   fidsboundss        r$   test_read_boundsr      s    
 ""8,D!$.4DGDt$LD&::<<8###7iT
 1 12222F1a4L"GHHHr#   c                     t        |       \  }}|j                  dk(  sJ |j                  dk(  sJ t        |d d df   g d      sJ y N)r4   )r   r4   r   r   r   rz   r   )r{   r   r   s      r$   test_read_bounds_bytesr      sM    }-LD&::<<6!!!F1a4L"GHHHr#   c                     t        |       \  }}|j                  dk(  sJ |j                  dk(  sJ t        |d d df   g d      sJ y )Nrc   r   rc   r   )rc   rc   rc   rc   r   )r   r   r   s      r$   "test_read_bounds_nonseekable_bytesr      sM    01LD&::<<6!!!F1a4L,///r#   c                     t        |       \  }}|j                  dk(  sJ |j                  dk(  sJ t        |d d df   g d      sJ y r   r   )r   r   r   s      r$   test_read_bounds_fileliker      sN    /0LD&::<<6!!!F1a4L"GHHHr#   c                 F    t        | d      d   }|j                  dk(  sJ y )Nrx   max_featuresrc   r   rx   )r   rz   )ra   r   s     r$   test_read_bounds_max_featuresr     s&    ,1=a@F<<6!!!r#   c                     t        j                  t        d      5  t        | dz         ddd       y# 1 sw Y   yxY wzFReading a multi-layer file without specifying a layer gives a warning.zMore than one layer found r?   sample.osm.pbfN)rB   rk   rl   r   data_dirs    r$   *test_read_bounds_unspecified_layer_warningr     s4    	k)E	F 1H//01 1 1   4=c                 ~    t        j                  t        d      5  t        | d       d d d        y # 1 sw Y   y xY w)Nz'max_features' must be >= 0r?   r   rB   rC   rD   r   ra   s    r$   &test_read_bounds_negative_max_featuresr     s1    	z)F	G :'b9: : :   3<c                     t        | d      d   d d df   }t        | d      \  }}|j                  dk(  sJ t        |d d df   |      sJ |d   dk(  sJ y )N   r   rc   
   skip_features)r      r   r   )ra   expected_boundsr   r   s       r$   test_read_bounds_skip_featuresr     sh    !"5BGJ1b5QO2"ELD&<<8###F1a4L/2227b==r#   c                 ~    t        j                  t        d      5  t        | d       d d d        y # 1 sw Y   y xY w)Nz'skip_features' must be >= 0r?   r   r   r   r   s    r$   'test_read_bounds_negative_skip_featuresr     s1    	z)G	H ;'r:; ; ;r   c                 *   | j                   dk(  r;t        dk\  r2t        j                  t        d      5  t        | d       d d d        y t        j                  t        d      5  t        | d       d d d        y # 1 sw Y   y xY w# 1 sw Y   y xY w)N.gpkg)r4   r   r   zno such columnr?   invalidwherezInvalid SQL)r   r   rB   rC   r   r   rD   )naturalearth_lowres_all_exts    r$   test_read_bounds_where_invalidr      s    "))W49IZ9W]]>1AB 	F39E	F 	F ]]:]; 	F39E	F 	F	F 	F	F 	Fs   A=&B	=B	Bc                     t        | d      \  }}|j                  dk(  sJ |j                  dk(  sJ |d   dk(  sJ t        |d d df   g d      sJ y )Nziso_a3 = 'CAN'r   r   r   r   r4   )gKRag.4iD@g tRJgwgT@r   )ra   r   r   s      r$   test_read_bounds_wherer   )  sa    2:JKLD&::<<6!!!7a<<F1a4L"OPPPr#   bbox)r   rw   )rc   rx   r4   c                 ~    t        j                  t        d      5  t        | |       d d d        y # 1 sw Y   y xY w)NzInvalid bboxr?   r   r   )ra   r   s     r$   test_read_bounds_bbox_invalidr   1  s0    	z	8 4'd34 4 4r   c                 ~   t        | d      \  }}|j                  dk(  sJ |j                  dk(  sJ t        | d      \  }}|j                  dk(  sJ t        j                  ddg      }|t        | j
                     z  }t        ||      sJ |j                  d	k(  sJ t        |j                  g d
g dg      sJ y )N)r   r   h㈵>r   r   r   )r   r   i   ir   rx   !   "   r   )gcϽTg-۠@gi5OSgd}$9#@)gW:E|Ug6s @gqy(Tg*A*o&@)	r   rz   nparrayr   r   r   r   T)r   r   r   fids_expecteds       r$   test_read_bounds_bboxr   7  s    #*BLD& ::<<6!!!:ARSLD&::HHb"X&MY:AABBMt]+++<<6!!!@A	
  r#   maskr   )typecoordinatesz({"type": "Point", "coordinates": [0, 0]}r   c                 ~    t        j                  t        d      5  t        | |       d d d        y # 1 sw Y   y xY w)Nz+'mask' parameter must be a Shapely geometryr?   r   r   )ra   r   s     r$   test_read_bounds_mask_invalidr   Q  s3     
z)V	W 4'd34 4 4r   c           	          t        j                  t        d      5  t        | dt	        j
                  dd             d d d        y # 1 sw Y   y xY w)Nz!cannot set both 'bbox' and 'mask'r?   r   i7   )r   r   )rB   rC   rD   r   shapelyr   r   s    r$   "test_read_bounds_bbox_mask_invalidr   _  sB    	z)L	M 
&7gmmDRT>U	

 
 
s   #AAzmask,expectedzPOINT (-105 55)r4   z/POLYGON ((-80 8, -80 10, -85 10, -85 8, -80 8))r   r   zPOLYGON ((
                6.101929 50.97085,
                5.773002 50.906611,
                5.593156 50.642649,
                6.059271 50.686052,
                6.374064 50.851481,
                6.101929 50.97085
            )))y         zGEOMETRYCOLLECTION (
                POINT (-7.7 53),
                POLYGON ((-80 8, -80 10, -85 10, -85 8, -80 8))
            ))r   r      c                     t        j                  |      }t        | |      d   }t        j                  |      t
        | j                     z   }t        ||      sJ y )Nr   r   )r   from_wktr   r   r   r   r   r   )r   r   r;   r   r   s        r$   test_read_bounds_maskr   g  sU    6 D!D2>qADHHX&3N3U3U)VVMt]+++r#   )r4   r   r   z<Cannot determine if GEOS is present or absent for GDAL < 3.4c                 b   t        | d      \  }}t        M|j                  dk(  sJ t        j                  g d      }|t
        | j                     z  }t        ||      sJ y |j                  dk(  sJ t        j                  ddg      }|t
        | j                     z  }t        ||      sJ y )N)it   i-   r   )r   )r4   r         r   r   r   )r   r   rz   r   r   r   r   r   )r   r   _r   s       r$   5test_read_bounds_bbox_intersects_vs_envelope_overlapsr     s     5<PQGD!$zzT!!!0#>#E#EFF4/// zzT!!!!R)#>#E#EFF4///r#   ra   .shpr   T)indirectc                    t        |       }|d   dk(  sJ |d   dk(  sJ |d   dk(  sJ |d   j                  dk(  sJ |d	   j                         g d
k(  sJ |d   dk(  sJ t        |d   d      sJ |d   d   du sJ |d   d   du sJ |d   d   du sJ |d   d   du sJ | j                  dk(  r<|d   dk(  sJ |d   dk(  sJ |d   dk(  sJ |d   dk(  sJ t
        r|d   d   du sJ y y | j                  d k(  r5|d   d!k(  sJ |d   d!k(  sJ |d   d"k(  sJ |d   d#k(  sJ |d   d   du sJ y t        d$| j                         )%N
layer_namera   crsz	EPSG:4326encodingzUTF-8fields   dtypes)int64objectr   r   float64featuresr   total_bounds)iLi   VIT@capabilitiesrandom_readTfast_spatial_filterFfast_feature_countfast_total_boundsr   
fid_columnfidgeometry_namegeomgeometry_typerd   rM   r3   fast_set_next_by_indexr    rb   r0   ztest not implemented for ext )r   rz   tolistr   r   r   rD   )ra   metas     r$   test_read_infor	    s   ()D!6666;+%%%
w&&&>4'''>  "&XXXX
s"""D(*DEEE.$666 56%??? 45=== 34<<<!!W,L!U***O$...O$666H~''''(@ATIII  
	#	#v	-L!R''' O$***O$	111H~!1111N#$<=EEE89L9S9S8TUVVr#   rn   rm   c                     |j                  |       }t        |t              s|n|d   }t        |      }|d   j                  dk(  sJ |d   dk(  sJ y )Nrc   r   r   r   r   )r   r*   r.   r   rz   )r   r   r:   r  s       r$   test_read_info_vsir    s\     ""8,D!$.4DGDT?D>4'''
s"""r#   c                 V    t        |       }|d   j                  dk(  sJ |d   dk(  sJ y Nr   r   r   r4   r   rz   )r{   r  s     r$   test_read_info_bytesr    s7    ]#D>4'''
q   r#   c                 V    t        |       }|d   j                  dk(  sJ |d   dk(  sJ y )Nr   r   r   rc   r  )r   r  s     r$    test_read_info_nonseekable_bytesr    s8    &'D>4'''
q   r#   c                 V    t        |       }|d   j                  dk(  sJ |d   dk(  sJ y r  r  )r   r  s     r$   test_read_info_fileliker    s8    %&D>4'''
q   r#   zdataset_kwargs,fields	top_levelintermediate_levelFLATTEN_NESTED_ATTRIBUTESYESintermediate_level_bottom_levelflatten_nested_attributesyesc                 L    t        | fi |}|d   j                         |k(  sJ y )Nr   )r   r  )nested_geojson_filedataset_kwargsr   r  s       r$   test_read_info_dataset_kwargsr    s/    8 (;N;D>  "f,,,r#   c                 ~    t        j                  t        d      5  t        | d       d d d        y # 1 sw Y   y xY w)N$does not support open option INVALIDr?   r  INVALID)rB   rk   RuntimeWarningr   r   s    r$   %test_read_info_invalid_dataset_kwargsr$  	  s1    	n,R	S 6%u56 6 6r   c                     t        j                  t        d      5  t        | dz  dd       d d d        y # 1 sw Y   y xY w)NzCould not iterate over featuresr?   r   linesT)layerforce_feature_count)rB   rC   r   r   r   s    r$   ,test_read_info_force_feature_count_exceptionr)    s=    	~-N	O X(--WRVWX X Xs	   7A zlayer, force, expected))pointsFr   )r*  Tr   )r&  Fr   )r&  T$   c                 <    t        | dz  ||d      }|d   |k(  sJ y )Nr   F)r'  r(  USE_CUSTOM_INDEXINGr   r   )r   r'  forcer;   r  s        r$   "test_read_info_force_feature_countr0    s5     ##!!	D 
x'''r#   z)force_total_bounds, expected_total_bounds)T)r   g     Vr   r   )FNc                 p    t        || d      }t        ||      }|t        |d   |      sJ y |d   J y )Nz	.geojsonl)dst_dirext)force_total_boundsr   )r   r   r   )tmp_pathra   r4  expected_total_boundsgeojson_pathinfos         r$   !test_read_info_force_total_boundsr9  (  sQ     $X;L \6HID(^,.CDDDN#+++r#   c                     t        j                  t        d      5  t        | dz         ddd       y# 1 sw Y   yxY wr   )rB   rk   rl   r   r   s    r$   (test_read_info_unspecified_layer_warningr;  :  s4    	k)E	F /(--./ / /r   c                 $    t        |       d   J y )Nr   r.  )rs   s    r$   test_read_info_without_geometryr=  @  s    %&~6>>>r#   zname,value,expected))	CPL_DEBUGONT)r>  TT)r>  OFFF)r>  FFc                 B    t        | |i       t        |       }||k(  sJ y r!   r   r	   )rZ   valuer;   actuals       r$   test_set_config_optionsrE  D  s(     T5M*#D)FXr#   c                  r    t        ddi       t        d      dk(  sJ t        dd i       t        d      J y )NfoobarrB  r"   r#   r$   test_reset_config_optionsrI  S  s>    UEN+!%(E111UDM*!%(000r#   c                     t        j                  t        d      5  t        d       d d d        | j	                         j
                  dk(  sJ y # 1 sw Y   )xY w)NzNo such file or directoryr?   znon-existent.shpr  )rB   rC   r   r   
readouterrerr)capfds    r$   test_error_handlingrN  [  sP     
.I	J &$%& !!R'''& &s   AAc                     t        j                  t        d      5  t        |d       d d d        | j	                         j
                  dk(  sJ y # 1 sw Y   )xY w)Nr   r?   r  r!  r  )rB   rk   r#  r   rK  rL  )rM  ra   s     r$   test_error_handling_warningrP  d  sR     
n,R	S 6%u56 !!R'''6 6s   AAc                    t        |       \  }}}}d|d<   d|d<   t        d      }t        d| j                   d      }t        |||fi | t        |||fi | t	        d      }|j                         |v sJ |j                         |v sJ t	        dd	
      }|j                         |vsJ |j                         |v sJ t	        dd
      }|j                         |v sJ |j                         |vsJ t        |j                         t	        d      }|j                         |v sJ |j                         |vsJ t        |       y)z<Test all basic functionalities of file handling in /vsimem/.Fspatial_indexrd   r  z-/vsimem/pyogrio_test_naturalearth_lowres.gpkgz/vsimem/pyogrio_dir_test/r   /vsimem/zpyogrio_dir_test*.gpkg)patternzpyogrio_test*.gpkgN)	r   r   stemr   r   as_posixr   parentr   )ra   r  r   geometry
field_datatest_file_pathtest_dir_pathfiless           r$   "test_vsimem_listtree_rmtree_unlinkr]  m  sy    %))<$=!D!Xz!D*DIJN45H5M5M4NeTUM	.(J7$7	-:66 $E""$---!!#u,,, -EFE""$E111!!#u,,,-ABE""$---!!#5000 }##$$E""$---!!#5000 ~r#   c                    t        j                  t        d      5  t        |        d d d        t        j                  t        d      5  t        d       d d d        t        j                  t
        d      5  t        d       d d d        t        j                  t
        d      5  t        d       d d d        | j                         t        d      v sJ y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   nxY w# 1 sw Y   KxY w)NzPath is not a directoryr?   Path does not existz/vsimem/non-existentz/path to in-memory file or directory is requiredz/vsimemrS  )rB   rC   NotADirectoryErrorr   FileNotFoundErrorOSErrorrV  r   rn   s    r$   test_vsimem_rmtree_errorrd    s    	)1J	K /-./ 
(0E	F +)*+ 
H
  	9 
H
  	: &..0L4KKKK!/ /+ +  s/   CC':C3)C?C$'C03C<?Dc                    t        j                  t        d      5  t        | j                         d d d        t        j                  t
        d      5  t        d       d d d        y # 1 sw Y   9xY w# 1 sw Y   y xY w)NzPath is a directoryr?   r_  z/vsimem/non-existent.gpkg)rB   rC   IsADirectoryErrorr   rW  ra  rc  s    r$   test_vsimem_unlink_errorrg    sk    	(0E	F 6-4456 
(0E	F 0./0 06 60 0s   A*A6*A36A?)^pathlibr   numpyr   r   r   pyogrior   r   r   r	   r
   r   r   r   r   r   r   r   r   pyogrio._compatr   pyogrio._envr   pyogrio.errorsr   r   pyogrio.rawr   r   pyogrio.tests.conftestr   r   r   rB   pyogrio._ogrr   r   r   r   ImportErrorr%   r(   r,   r/   markparametrizeparamskipifr<   rF   rI   rN   r_   rt   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)  r0  r9  r;  r=  rE  rI  rN  rP  r]  rd  rg  r"   r#   r$   <module>rv     s     '    '   : # P P Y U UTU	
1U &*#'++$$ 9,B % 	
 	++$$LN2H % 	
61761 
	"	"
 *." /"
 	99)8&OR"#" T	I		II0I"
1:
;
FQ !:;4 <4
4 
!Q024 4
 
 
 	QC 	:RHE 
	
 	
2,3 4, y I  0	0( .0ADQ!W R!WH -/HI##!!! 	k/01(%01	
 )%01	
 )$/1	
!6-76-
6
X
 	(	( /-}=,	,/? 1((!HL(0QU U  		s   "N)6N6 )N36N?>N?