
    njA                        S SK r S SKJr  S SKJrJrJrJrJrJ	r	J
r
Jr  S SKJr  S SKJr  S SKJrJrJrJrJrJrJrJr  \\\R2                  4   r\\\4   r\\\\4      r\" S \" \5      RA                  S5       5       5      SS	 r!S
\RD                  S\S\#4S jr$S<S\S\\   4S jjr%   S=S\S\4S jjr&S\\   S\\R2                     4S jr'S\S\4S jr(S\S\
\\4   4S jr)\\\\
\\4   4      r* S>S\S\\   S\
\*\   \*\   \*\   4   4S jjr+S\S\	\   4S jr,  S?S\S\\   S\\\\-4      S\4S jjr. " S S5      r/S\\   4S  jr0S!\R2                  S\\Rb                     4S" jr2S\4S# jr3S$\Rb                  4S% jr4 S@S\S&\S'\\   4S( jjr5SAS\S&\\   4S) jjr6 SBS\S&\S*\\#\4   4S+ jjr7S\4S, jr8S\4S- jr9 SCS\S.\S/\S0\4S1 jjr: SCS\S.\S0\4S2 jjr;S3\4S4 jr<S5\4S6 jr=SCS!\R2                  S7\\\      4S8 jjr>  S?S\S7\\\      S\\   S\\Rb                     4S9 jjr?S:\\\\Rb                     4   S\
\#\\   \\   4   4S; jr@g)D    N)Real)AnyDictIteratorListOptionalSequenceTupleUnion)__version__)gdal)MaybeSequenceOptionalBoolStrPathLikeOrStrTenum_to_strget_extensionis_path_likeis_truec              #   d   #    U  H&  oR                  5       (       d  M  [        U5      v   M(     g 7fN)isdigitint.0ss     V/var/www/html/pdf-tiff/venv/lib/python3.13/site-packages/osgeo_utils/auxiliary/util.py	<genexpr>r   4   s      U%EVSVV%Es   00.   drvextreturnc                     U R                  [        R                  5      nUS L=(       a0    UR                  5       UR                  5       R	                  S5      ;   $ )N )GetMetadataItemr   DMD_EXTENSIONSlowersplit)r!   r"   extss      r   DoesDriverHandleExtensionr+   9   sD    t223DtF		tzz|/A/A#/F FF    filenamec                    [         R                  " U 5      n / n[        U 5      nUR                  5       S:X  a  S/$ [	        [
        R                  " 5       5       GH>  n[
        R                  " U5      nUR                  [
        R                  5      c"  UR                  [
        R                  5      c  M\  UR                  U(       a  [
        R                  O[
        R                  5       c  M  U(       a-  [        XS5      (       a  UR                  UR                  5        M  UR                  [
        R                   5      nUc  M  U R                  5       R#                  UR                  5       5      (       d  GM#  UR                  UR                  5        GMA     UR                  5       S:X  aA  [%        U5      S:  a2  US   R'                  5       S:X  a  US   R'                  5       S:X  a  SS/nU$ )	NvrtVRTnc   r   GMT   NETCDF)osfspathr   r(   ranger   GetDriverCount	GetDriverr&   DCAP_CREATEDCAP_CREATECOPYDCAP_RASTERDCAP_VECTORr+   append	ShortNameDMD_CONNECTION_PREFIX
startswithlenupper)r-   	is_rasterdrv_listr"   ir!   prefixs          r   GetOutputDriversForrI   >   so   yy"HH

!C
yy{ew4&&()nnQ 0 01=""4#7#78D!! )Dt/?/?
 0::.,,T-G-GH%(..*:*E*Eflln*U*UOOCMM2 *$ 			tMQQK5(QK8+e$Or,   c                    U (       d  g[        X5      n[        U 5      nU(       d   U(       d  U(       a  U$ U$ [        SU -  5      e[        U5      S:  a1  US   S:X  a	  US   S:X  d  [	        SU(       a  UOS< S	US   < 35        US   $ )
NMEMzCannot guess driver for %sr4   r   GTiffCOGzSeveral drivers matching  z extension. Using )rI   r   	ExceptionrC   print)r-   rE   default_raster_formatdefault_vector_formatrF   r"   s         r   GetOutputDriverForrS   `   s     "87H

!C,5(P;PP88CDD	X	HQK7$:x{e?Ssr!8A;0	
 A;r,   filename_or_dsc                     [        U [        R                  5      (       d  U  Vs/ s H  n[        U5      PM     sn$ [	        U /UQ70 UD6nUR                  5       $ s  snf r   )
isinstancePathOrDS__args__open_dsOpenDS	__enter__)rT   argskwargsfodss        r   rY   rY   w   sU     nh&7&788$23Nq
N33

1$
1&
1C==? 4s   Ac                     [        U 5       nUR                  S5      nUR                  5       sS S S 5        $ ! , (       d  f       g = fNr4   )rZ   GetRasterBandGetOverviewCount)rT   dsbnds      r   get_ovr_countrf      s4    		2q!##% 
 		s	   !7
Ac                 R    [        U 5      nUR                  SS9nUb
  US   US   4$ g)NT)can_return_nullr4      r4   r4   )rY   GetGeoTransform)rT   rd   geo_transforms      r   get_pixel_sizerm      s=    		 B&&t&<M Qq!111r,   dimc                    [        U 5      nUR                  S5      nUR                  5       n[        U5      nUR                  UR
                  4nSnU/nU/n	U/n
[        U5       H  nUR                  U5      nUc  M  UR                  UR                  4nUS   US   -  US   US   -  4nUS   US   -  US   US   -  4nUR                  U5        U	R                  U5        U
R                  U5        M     Ub?  U Vs/ s H  nUU   PM
     nnU	 Vs/ s H  nUU   PM
     n	nU
 Vs/ s H  nUU   PM
     n
nXU
4$ s  snf s  snf s  snf )Nr4   rj   r   )rY   rb   rc   rm   RasterXSizeRasterYSizer8   GetOverviewXSizeYSizer?   )rT   rn   rd   re   	ovr_countr0s0f0sizesfactorsresolutions
i_overview
h_overviewr   r^   rxs                    r   get_sizes_factors_resolutionsr      si    
	 B


1
C$$&I		B		'B	BDEdG$KI&
__Z0
!  *"2"22A1!beadl*A1!beadl*ALLONN1q! ' !&'A3'#*+7a1S67+'23{!qv{3;&& (+3s   E E+E
requested_resr{   c                 r    [        U5       H  u  p#X0:  d  M  [        SUS-
  5      s  $    [        U5      S-
  $ )Nr   r4   )	enumeratemaxrC   )r   r{   ovrress       r   get_best_ovr_by_resolutionsr      s;    k*q#'?" + {ar,   ovr_idxovr_resc                 t   Ub   Ub  [        SU SU S35      e[        U5      nUc  g[        U[        5      (       a  US   n[        U[        5      (       a%  US:  a  [        U 5      n[        SUS-   U-   5      nU$ [        U[        5      (       a  [        U 5      u  pEn[        X5      nU$ [        SU 35      e)a  
This function uses a different convention than the GDAL API itself:
* ovr_idx = 0 means the full resolution image (GDAL API: no OVERVIEW_LEVEL)
* ovr_idx = [1|2|3|...] means the [1st|2nd|3rd|...] overview (GDAL API: OVERVIEW_LEVEL = [0|1|2|...])
* ovr_idx = -1 means the last overview (GDAL API: OVERVIEW_LEVEL = bnd.GetOverviewCount())
* ovr_idx = -i means the i-th overview from the last (GDAL API: OVERVIEW_LEVEL = bnd.GetOverviewCount()-i+1)

returns a non-negative ovr_idx, from given mutually exclusive ovr_idx (index) or ovr_res (resolution)
ovr_idx == None and ovr_res == None => returns 0
ovr_idx: int >= 0 => returns the given ovr_idx
ovr_idx: int < 0 => -1 is the last overview; -2 is the one before the last and so on
ovr_res: float|int => returns the best suitable overview for a given resolution
         meaning the ovr with the lowest resolution which is higher then the request
ovr_idx: float = x => same as (ovr_idx=None, ovr_res=x)
zovr_idx(z) and ovr_res(z&) are mutually exclusive both were setr   r4   zGot an unexpected overview: )	rO   floatrV   r	   r   rf   r   r   r   )rT   r   r   overview_count_sizes_factorsr{   s          r   get_ovr_idxr      s    ( 7)>':`a  .'8$$
 '3Q;*>:N!^a/'9:G N 
GU	#	#(En(U%+-gC N 6wi@AAr,   c                       \ rS rSr/ SQrSS\4S jjrS\R                  4S jr	S r
\\R                  \R                  -  S	SS	S	4S
\S\\\\4      S\S\\\\\4   \\   4      S\R                  4
S jj5       rSrg	)rZ      )r-   rd   r\   r]   ownsilent_failFrT   c                     S U l         S U l        [        U5      (       a  [        R                  " U5      U l        OXl         X0l        X@l        SU l        X l        g NF)	rd   r-   r   r6   r7   r\   r]   r   r   )selfrT   r   r\   r]   s        r   __init__OpenDS.__init__   sG    *.15''IIn5DM$G	&r,   r#   c                 8   U R                   c  U R                  " U R                  /U R                  Q70 U R                  D6U l         U R                   c5  U R
                  (       d$  [        SR                  U R                  5      5      eSU l        U R                   $ )Nzcould not open file "{}"T)	rd   _open_dsr-   r\   r]   r   IOErrorformatr   )r   s    r   r[   OpenDS.__enter__   sm    77?mmDMMMDIIMMDGwwt'7'78??NOODHwwr,   c                 6    U R                   (       a  SU l        g g r   )r   rd   )r   exc_typeexc_valexc_tbs       r   __exit__OpenDS.__exit__   s    88DG r,   Nr-   r   ovr_onlyopen_optionsc                    U(       d  [        5       nO>[        U[        5      (       a  S U 5        VVs0 s H  u  pgXg_M	     nnnO[        U5      n[        X5      nUS:X  a#  U(       a  [        S:  a  SUS'   O![        S5      eOUS-
   U(       a  SOS	 3US'   UbF  S
R                  U 5      nU(       a  USR                  [        U5      5      -   nUR                  U5        UR                  5        VVs/ s H  u  pgSR                  Xg5      PM     nnn[        R                  " [        U 5      XS9$ s  snnf s  snnf )a  
opens a gdal Dataset with the given arguments and returns it

:param filename: filename of the dataset to be opened
:param access_mode: access mode to open the dataset
:param ovr_idx: the index of the overview of the dataset,
       Note: uses different numbering then GDAL API itself. read docs of: `get_ovr_idx`
:param ovr_only: open the dataset without exposing its overviews
:param open_options: gdal open options to be used to open the dataset
:param logger: logger to be used to log the opening operation
:return: gdal.Dataset
c              3   D   #    U  H  oR                  S S5      v   M     g7f)=r4   N)r)   r   s     r   r   "OpenDS._open_ds.<locals>.<genexpr>  s     -T|!ggc1oo|s    r   )r    r    NONEOVERVIEW_LEVELzYou asked to not expose overviews, Which is not supported in your gdal version, please update your gdal version to gdal >= 3.3 or do not ask to hide overviewsr4   onlyrN   zopening file: "{}"z with options: {}z{}={})r   )dictrV   r	   r   gdal_versionrO   r   strdebugitemsr   OpenEx)	r-   access_moder   r   r   loggerkvr   s	            r   r   OpenDS._open_ds   s5   * 6Lh//-T|-TU-TTQAD-TLUL-Lh0a<6)5;L!12#i 	  Q;-(;<   $++H5A+223|3DEELLO9E9K9K9MN9Mq,9MN{{3x=+QQ3 V. Os   D46D:)r\   rd   r-   r]   r   r   )F)__name__
__module____qualname____firstlineno__	__slots__rW   r   r   Datasetr[   r   staticmethodOF_READONLY	OF_RASTERr   r   r   r   r   boolr   r   r	   r   __static_attributes__ r,   r   rZ   rZ      s    JI
'x 
'4<<   $$t~~5/3GK0R0R %U
+,0R 	0R
 uT#s(^Xc]%BCD0R 
0R 0Rr,   rZ   	data_typec                 d    U c  g [        U [        5      (       a  [        R                  " U 5      $ U $ r   )rV   r   r   GetDataTypeByName)r   s    r   get_data_typer   2  s/    )S!!%%i00r,   rd   c                 B   ^  U 4S j[        T R                  5       5       $ )Nc              3   L   >#    U  H  nTR                  US -   5      v   M     g7fr4   N)rb   )r   rG   rd   s     r   r   #get_raster_bands.<locals>.<genexpr><  s%     C-BBQU##-Bs   !$)r8   RasterCount)rd   s   `r   get_raster_bandsr   ;  s    CU2>>-BCCr,   c                     [        U 5       n[        U5       Vs/ s H  o"R                  PM     snsS S S 5        $ s  snf ! , (       d  f       g = fr   )rZ   r   DataTyperT   rd   bands      r   get_band_typesr   ?  s;    		2*:2*>?*>$*>? 
 	? 
 	s   A ;A A  
Ar   c                 j    U R                  5       nUc  U R                  S5        U R                  5       $ )Nr   )
GetMinimumComputeStatistics)r   rets     r   get_band_minimumr   D  s.    
//
C
{q!??r,   	bnd_index	ovr_indexc                     [        U 5       nUR                  U5      nUb  UR                  U5      nUsS S S 5        $ ! , (       d  f       g = fr   )rZ   rb   rr   )rT   r   r   rd   re   s        r   get_raster_bandr   K  sA     
	2y) //),C	 
 		s	   '=
Ac                     [        U 5       nUc$  [        S [        U5       5       5      sS S S 5        $ UR                  U5      n[	        U5      sS S S 5        $ ! , (       d  f       g = f)Nc              3   8   #    U  H  n[        U5      v   M     g 7fr   )r   )r   re   s     r   r   %get_raster_minimum.<locals>.<genexpr>X  s     M8L',,8Ls   )rZ   minr   rb   r   )rT   r   rd   re   s       r   get_raster_minimumr   U  sT    		2M8H8LMM 
 	 ""9-C#C( 
 		s   AA
A'	approx_okc                     [        U 5       nUR                  U5      nUR                  [        U5      5      nUsS S S 5        $ ! , (       d  f       g = fr   )rZ   rb   ComputeRasterMinMaxr   )rT   r   r   rd   re   min_maxs         r   get_raster_min_maxr   ^  sA     
	2y)))#i.9 
 		s   -A
Ac                     [        U 5       n[        [        U5      5      nUR                  5       sS S S 5        $ ! , (       d  f       g = fr   )rZ   nextr   GetNoDataValuer   s      r   get_nodatavaluer   g  s4    		2$R()""$ 
 		s	   $:
Ac                     [        U [        R                  S9 n[        U5       H  nUR	                  5         M     S S S 5        g ! , (       d  f       g = f)N)r   )rZ   r   	GA_Updater   DeleteNoDataValue)rT   rd   bs      r   unset_nodatavaluer   m  s9    	DNN	;r!"%A! & 
<	;	;s   #A
Akeydomaindefaultc                     UR                  5       nUR                  5       n[        U 5       nUR                  X5      nUb  UOUsS S S 5        $ ! , (       d  f       g = fr   )striprZ   r&   )rT   r   r   r   rd   metadata_items         r   get_metadata_itemr   s  sJ     ))+C\\^F		2**37 - 9}w 
 		s   A
Ac                     [        XSUS9$ )NIMAGE_STRUCTURE)r   r   r   )r   )rT   r   r   s      r   get_image_structure_metadatar   }  s     (97 r,   big_tiffc                     U c  S$ [        U 5      (       a  [        U [        5      (       a  U $ [        [        U 5      5      $ )NIF_SAFER)r   rV   r   r   )r   s    r   !get_bigtiff_creation_option_valuer     sI      	 >>j377 
 "#r,   ofc                 N    [        U 5      R                  5       nUS;   a  SnSU-   $ )N)gtiffcogmemtifr   )r   r(   )r   r"   s     r   get_ext_by_ofr    s,    
b/


!C
%%9r,   	band_numsc                     U(       d$  [        [        SU R                  S-   5      5      nU$ [        U[        5      (       a  U/nU$ ra   )listr8   r   rV   r   )rd   r  s     r   get_band_numsr    sC    q"..1"456	  
Is	#	#K	r,   c           	      :   [        U 5      n[        X15      n/ nU H|  nUR                  U5      nUc  [        SU SU  35      eU(       a<  [	        X25      nUS:w  a  UR                  US-
  5      nUc  [        SU SU SU  35      eUR                  U5        M~     U$ )aE  
returns a list of gdal bands of the given dataset
:param filename_or_ds: filename or the dataset itself
:param band_nums: sequence of bands numbers (or a single number)
:param ovr_idx: the index of the overview of the dataset,
       Note: uses different numbering then GDAL API itself. read docs of: `get_ovr_idx`
:return:
zCould not get band z from file r   r4   zCould not get overview z from band z	 of file )rY   r  rb   rO   r   rr   r?   )rT   r  r   rd   bandsband_numr   s          r   	get_bandsr    s     
	 Bb,IE**84<1(;~FVWXX!".G!|''!4|-gYk(9UcTde  	T  Lr,   r	  c                    [        U [        R                  5      (       a  [        U 5      n [        U [        5      (       + nU(       a  U /n U  Vs/ s H  o"R                  5       =(       d    SPM     nnU  Vs/ s H  o"R                  5       =(       d    SPM     nn[        S U 5       5      =(       d    [        S U 5       5      nU(       a	  US   US   pCXSU4$ s  snf s  snf )Nr4   r   c              3   *   #    U  H	  oS :g  v   M     g7fr   r   )r   scales     r   r   )get_scales_and_offsets.<locals>.<genexpr>  s     3F5QJF   c              3   *   #    U  H	  oS :g  v   M     g7f)r   Nr   )r   offsets     r   r   r    s      ;")!'r  )rV   rW   rX   r  r	   GetScale	GetOffsetany)r	  single_bandre   scalesoffsets	is_scaleds         r   get_scales_and_offsetsr    s     %**++%  11K-23Uclln!!UF3/45u}}#!#uG53F33 s ;"); 8I  )WQZg%% 45s   "C6"C)T)TrL   zESRI Shapefile)r   )NNr   )r4   )r4   Fr   )Ar6   numbersr   typingr   r   r   r   r   r	   r
   r   osgeor   gdal_version_strr   osgeo_utils.auxiliary.baser   r   r   r   r   r   r   r   r   rW   r   r   DataTypeOrStrCreationOptionstupler)   r   Driverr   r+   rI   rS   rY   rf   rm   ListOfTupleTT_OrTr   r   r   r   rZ   r   Bandr   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r   r,   r   <module>r&     s  @ 
  N N N 1 	 	 	 ,-c3h4S>*US)9%:%@%@%EUUQ
G4;; GS GT G
- DI H !*	
 	.!(+4<< &( &s &8 dDj0A  q%1+~./  45''#+C='
S!#4T#:<Md<SST': t  (4.   "+/))c]) eCJ'() 		)XMR MR`Xm4 D D(499*= D@8 @
499  NR),=Ec])x )HSM ) QV),=B49=M%H %"h " EIGG#&G03G>AG 8<#&14 c dll xc8J/K  /3!c*+ c] 
$))_	@&=334&
4t$mD&99:&r,   