
    hs                        d dl Z d dlmZ d dlZd dlZd dlZd dlZd dlZd dl	Z	d dlm
Z
 d dlmZmZ d dlZd dlZd dlZd dlZd dlZd dlmZ d dlmZ d dlmZ d dlZd dlmZ d dlmZ d dlm Z  d d	lm!Z! d d
l"m#Z# d dl$m%Z% d dl&m'Z' d dl(m)Z* d dl+m,Z- d dl.Z.d dl/m0Z0m1Z1 d dl2m3Z3 d dl4m5Z5 d dl6mZ d Z7d Z8d.dZ9d.dZ:ddgddgdfdZ;d Z<d Z=d Z>d Z?ej@        fdZAd ZBd  ZCd! ZDd" ZEd# ZFd$ ZGd/d&ZH	 	 	 	 	 d0d+ZI	 	 	 	 	 d1d-ZJdS )2    N)gdal)ogrosr)pyplot)TransformerCRS)	transform)Window)from_bounds)
Resampling)
MemoryFile)Affine)Paralleldelayed)generic_filter)savgol_filterc                    t           j                            d          }|                    |           }|                    dd|ii|| g          }|                                 t          |                                          }d |D              t          |          fdt          t                              D                       }t          j        |          }|j        \  }	}
}}|                    |	||          }|S )N!https://data.inpe.br/bdc/stac/v1/	bdc:tileseqquerydatetimecollectionsc                 V    g | ]&}|j         d          j        |j         d         j        f'S NDVIpixel_reliabilityassetshref.0items     F/home/jovyan/Desktop/enandes_v2/tile_enviar_FATEC/functions_enandes.py
<listcomp>z%run_read_and_mask.<locals>.<listcomp>7   3    ```RVT[ %t{3F'G'LM```    n_jobsc              3   `   K   | ](} t          t                    |         g          V  )d S N)r   read_and_maskr$   iuriss     r&   	<genexpr>z$run_read_and_mask.<locals>.<genexpr>8   s=      +h+hRS,BGM,B,BDG9,M,M+h+h+h+h+h+hr)   pystac_clientClientopenget_collectionsearchmatchedlistitemsr   rangelennparrayshapereshapeset_dataset_tilen_processors
set_periodservice
collectionitem_searchr;   ndvi_3dtextraxyr1   s                @r&   run_read_and_maskrO   ,   s   "''(KLLG''11J..dH5E'F)3-5J ! 8 8K ""$$%%E``Z_```D+hl++++h+h+h+hW\]`ae]f]fWgWg+h+h+hhhGhwG]NAuaooaA&&GNr)   c                    t           j                            d          }|                    |           }|                    dd|ii|| g          }|                                 t          |                                          }d |D              t          |          fdt          t                              D                       }t          j        |          }|j        \  }	}
}}|                    |	||          }|S )Nr   r   r   r   c                 V    g | ]&}|j         d          j        |j         d         j        f'S r   r    r#   s     r&   r'   z$run_read_no_mask.<locals>.<listcomp>J   r(   r)   r*   c              3   `   K   | ](} t          t                    |         g          V  )d S r-   )r   read_no_maskr/   s     r&   r2   z#run_read_no_mask.<locals>.<genexpr>K   s=      +g+gQR,AGL,A,A47),L,L+g+g+g+g+g+gr)   r3   rB   s                @r&   run_read_no_maskrT   ?   s   "''(KLLG''11J..dH5E'F)3-5J ! 8 8K ""$$%%E``Z_```D+hl++++g+g+g+gV[\_`d\e\eVfVf+g+g+gggGhwG]NAuaooaA&&GNr)   c           	      8   ddl m}  |j        d          }|r |j        |          }| st          d          t	          |           }t          j        | d         d                   5 }|j        |j        }}ddd           n# 1 swxY w Y   t          j
        |||f          }t          |           D ]\  }	\  }
}	 t          j        |
          5 }t          j        |          5 }|                    d          }|                    d          }t          j        |dk    t          d          |          ||	<   ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   # t          $ r}t!          d|	 d	|            Y d}~d}~ww xY w|d
z  S )T   Lê cada raster como um numpy.ma.masked_array, aplicando máscara de confiabilidade.r   r   	EPSG:4326J   A lista de URIs está vazia. Verifique se há itens retornados pela busca.N   nan%Erro ao processar os dados da imagem : '  )rasterio.crsr	   from_string
ValueErrorr=   rasterior6   heightwidthr>   zeros	enumeratereadwherefloat	Exceptionprintr1   crsr	   
source_crs
num_imagesfirst_datasetrb   rc   ndvi_masked_datar0   ndvi_uripixR_urindvi_datasetpixel_reliability_dataset	ndvi_data	pixR_dataes                    r&   r.   r.   S   s          --J
 *$S_S))
 gefffTJ 
tAwqz	"	" Bm%,m.AB B B B B B B B B B B B B B BxVU ;<<#,T?? D DHh	Dx(( 	XLx((	X,E )--a00	5::1==	 ')hyA~uU||Y&W&W #	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X  	D 	D 	DB!BBqBBCCCCCCCC	D E!!ss   )BBB>E+E'AE<EEEEEE+E#	#E+&E#	'E++
F5FFc                    ddl m}  |j        d          }|r |j        |          }| st          d          t	          |           }t          j        | d         d                   5 }|j        |j        }}ddd           n# 1 swxY w Y   t          j
        |||f          }t          |           D ]\  }	\  }
}	 t          j        |
          5 }t          j        |          5 }|                    d          }|                    d          }|||	<   ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   # t          $ r}t          d|	 d|            Y d}~d}~ww xY w|d	z  S )
rV   r   r   rW   rX   NrY   r[   r\   r]   )r^   r	   r_   r`   r=   ra   r6   rb   rc   r>   rd   re   rf   ri   rj   rk   s                    r&   rS   rS   u   s          --J
 *$S_S))
 gefffTJ 
tAwqz	"	" Bm%,m.AB B B B B B B B B B B B B B BxVU ;<<#,T?? D DHh	Dx(( 	0Lx((	0,E )--a00	5::1==	 '0 #	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0  	D 	D 	DB!BBqBBCCCCCCCC	D E!!sr   )BBB>ED:'0D#D:#D''D:*D'+D:.E:D>	>ED>	E
E/E**E/
            Fc                    t          j        |           }|                    dd          }|}|d         |d         }}d}d }	d}
	 t          |||          }||z
  }|dk    }|	Qdt	          j        |          t	          j        t	          j        |                    z  |z  z
  }	|d         |d         }}t	          j        t	          j        |          |	z            }||k    rn|}|
dz  }
||z  |d|z
  z  z   }|r||fS |S )	Nlinearboth)methodlimit_directionr   g    חAT)window_length	polyorderrY   )pdSeriesinterpolater   r>   absmaxsum)
timeserieswndsordersdebug	interp_ts	smooth_tswndorderFWitsmoother_tsdiffsignfitting_scores                  r&   savitzky_golay_filteringr      s0   	*%%I%%Xv%NNIIa&)CAA	
B@#ISERRRY&ax9BF4LL26"&,,#7#77$>>Aa&)Crvd||a/001A!GB$&a$h)??	@  $)##r)   c           	         g }g }| j         \  }}t          |          D ]}t          t          j        | d d |f                             t          j        t          j        | d d |f                             z
  dk     r |                    | d d |f                    |                    t          | d d |f                              t          j        |          }|	                    ||          }t          j
        |d          }|S )N   )rY   r   )r@   r<   r=   r>   isnanr   appendr   r?   rA   	transpose)ndvi_3d_testenew_datadata_3d_arrayrK   rN   ydimndvi_interpndvi_interp_ts           r&   apply_filter_savgol_2dr      s   HMDAqa N Nrxaaag.//0026"(=QRQRQRTXQXCY:Z:Z3[3[[^___OOM!!!T'23333OO4]111d75KLLMMMMHX&&M''1--KLe44Mr)   c                       j         \  }}} t          |           fdt          |          D                       }t          j        |          }t          j        |d          }|S )Nr*   c              3   l   K   | ].} t          t                    d d |d d f                   V  /d S r-   )r   r   )r$   r0   rJ   s     r&   r2   zrun_filter.<locals>.<genexpr>   sR      -p-pbc.Mg6L.M.MgVWVWVWXYZ[Z[Z[V[n.].]-p-p-p-p-p-pr)   )rY   r   r{   )r@   r   r<   r>   r?   r   )rJ   rE   rK   rM   rN   	resultadoresultado_arrays   `      r&   
run_filterr      so    mGAq!-----p-p-p-pglmngogo-p-p-pppIhy))Ol?H==Or)   c           	         d}g }t          dd          D ]_}g x}}t          t          | j        d         dz            dz             D ]~}|t          | j        d         dz            k    r|| j        d         dz  k    rt           || j        d         k    rt           W|                    | |d d d d f                    |dz   }t          j        |          }|dk    rt          j        |d          }|dk    rt          j        |d          }|dk    rt          j	        |d          }|dk    r$t          j
        |d          |j        d         z  }|dz   }|                    |           at          j        |          }|S )	Nr      rY   averageaxismaximumminimumvariance)r<   intr@   StopIterationr   r>   r?   r   r   minvar)	data
stats_usedint_imgstats_imagesimagesimg1imgyears	img_statss	            r&   calculate_statsr      s   GL"++ ' 's3tz!}R/001455 	# 	#EDJqM",----FdjmB>N4O4O4:a=((D111-...
 htnn""
3Q0G0G0GI""s0C0C0CI""s0C0C0CI##"&12E2E2EsyQR|1SYqI&&&&8L))Lr)   c                 $   g x}}t          d| j        d                   D ][}|dz  }|                    | |d d d d f         ||d d d d f         z
  t          j        ||d d d d f                   z             \t          j        |          }|S Nr   r   )r<   r@   r   r>   sqrtr?   )r   average_datavar_dataviar   jr0   s          r&   calculate_viar      s    C,1djm%% S SF

D111QQQK,q111u"55!AAAaaa%9Q9QQRRRR8C==Lr)   c                    g x}}t          d| j        d                   D ]}|dz  }| |d d d d f         ||d d d d f         z
  ||d d d d f         ||d d d d f         z
  z  }t          j        |          rt          j        |          r|n|c S ||t          j        |           <   |                    |           t          j        |          }|S r   )r<   r@   r>   isscalarisfiniter   r?   )	r   max_datamin_datafillvcir   r   r0   via_calculateds	            r&   calculate_vcir      s   C,1djm%% # #Fq111u+111QQQ7HQqqqUOhWXYZYZYZ[\[\[\W\o<]^;~&& 	B%'[%@%@ >>   >BNbk.999:

>""""8C==Lr)   c                 |   t          j        | |           t          j                    }t          j        | |d          \  }}t          j        |                                d         |                                d         d          }t          j        |||z  |z   d           t          j        |ddd           d S )	NrY   r   d   -i,  pngtight)dpiformatbbox_inches)	pltscattergcar>   polyfitlinspaceget_xlimplotsavefig)rM   rN   graph_filepathaxesmbX_plots          r&   "scatter_plot_with_correlation_liner     s    K1799D:aADAq[+DMMOOA,>sCCFHVQvX\3'''KC7KKKKKKr)   c                    t          | d          }t          |d          }t          |d          }t          |d          }t          |d          }t          |||          }t          |||	          }	t	          |d
          5 }
|dk    r"t          j        |g|
          cd d d            S |dk    r"t          j        |g|
          cd d d            S |dk    r"t          j        |g|
          cd d d            S |dk    r"t          j        |g|
          cd d d            S |dk    r"t          j        |g|
          cd d d            S |dk    r"t          j        |g|
          cd d d            S |dk    r"t          j        |	g|
          cd d d            S 	 d d d            n# 1 swxY w Y   t          d          S )Nry   rE   r   r   r   r   r   r   r   r   r   r   r   r   wbfiltered_datar   r   r   r   via_datavci_data
Objs savedr   r   r   r   r6   pickledumprj   )masked_data_s1name_objtype_objr   r   r   r   r   r   r   fs              r&   run_processingr   	  s   ~bAAAM #-iPPPLm)LLLHm)LLLHm*MMMH M,[cdddHMhS[\\\H 
h		 .&&;22. . . . . . . . ~%%;~q11	. . . . . . . .
 z!!;z1--. . . . . . . . z!!;z1--. . . . . . . . z!!;z1--. . . . . . . . z!!;z1--. . . . . . . . z!!;z1--. . . . . . . . ". . . . . . . . . . . . . . .  s6   
F03F0F0F0+F0F0;F00F47F4c                 2   g }t          ||          D ]}}t          |                    |          d          5 }t          j        |          }|d         }d d d            n# 1 swxY w Y   |                    |           t          |           ~t          j        |d          }	t          t          j
        | d                    |                    d          5 }t          j        |	|           d d d            n# 1 swxY w Y   t          d          S )Nrbr   r{   r   result{}.pklr   concatenated)r<   r6   r   r   loadr   rj   r>   concatenateospjoinr   )
directory_pathr   r0   r   name_varcombined_dfr   r   data_averesults
             r&   concatenate_pklr  +  sx   K1QZZ  (//!$$d++ 	q;q>>DAwH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	8$$$a^Ka000F	ch~~'<'<X'F'FGG	N	N RSFA                  s#   A!!A%	(A%	C??DDc                 $   t          |d          5 }t          j        |          }d d d            n# 1 swxY w Y   t          |d          5 }t          j        |          }d d d            n# 1 swxY w Y   t          j        ||fd          }t          d           t          t          j        | d                    |                    d          5 }t          j	        ||           d d d            n# 1 swxY w Y   t          d          S )Nr   r{   r   r   r   r   results)
r6   r   r   r>   r   rj   r   r  r   r   )r  	name_obj1	name_obj2r  r   data_p1data_p2r  s           r&   concatenate_partsr  ;  s   	i		 !!+a..! ! ! ! ! ! ! ! ! ! ! ! ! ! ! 
i		 !!+a..! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ^Wg.Q777F	.	ch~~'<'<X'F'FGG	N	N RSFA               s0   266A..A25A2C88C<?C<c                    t          | d          }t          |d          }t          |d          }t          |d          }t          |d          }t          |||          }t          |||	          }t	          |d
          5 }	t          j        ||||g|	           d d d            n# 1 swxY w Y   t          d          S )N   r   r   r   r   r   r   r   r   r   r   r   )
r   r   r   r   r   r   r   r   r   r   s
             r&   run_processing_statsr  N  s"   ~a@@@M"-iPPPLm)LLLHm)LLLHm*MMMH
}\V^
_
_
_C
}h
W
W
WC 
h		 E\8Xx@!DDDE E E E E E E E E E E E E E Es   
B00B47B4c           	         g }g }d}t          |d          D ]}t          t          j        | d                    |                    d          5 }t          j        |          }||         }d d d            n# 1 swxY w Y   |                    |           t          |           t          j
        |d          }|dk    rd}|dk    rd	}|dk    rd
}|dk    rd}t          t          j        | d                    |                    d          5 }t          j        ||           d d d            d S # 1 swxY w Y   d S )Nr   0   zobjs_slice{}.pklr   r{   r   AverY   MaxMin   Varr   r   )r<   r6   r   r  r   r   r   r   rj   r>   r   r   )	r  variable_indexr  r  r0   r   r   r  r  s	            r&   concatenate_pkl_statsr  ]  s   KHA1R[[  #(>+=+D+DQ+G+GHH$OO 	,ST;q>>DN+H	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	8$$$a^Ka000FuHuHuHuH	ch~~'<'<X'F'FGG	N	N RSFA                 s$   A88A<	?A<	D77D;>D;r   c           
      .   t          d|  d| d| d           	 t          j                            d          }|                    dd| ii||g          }t          |                                          }|st          d	           d
S |d         }t          d|j                    ||j        vrt          d| dt          |j        	                                                      d |j        	                                D             }|st          d           d
S |d         }	t          d|	 d           |j        |	         }
n|j        |         }
t          d| d           d}|t          d           d
S t          j        j                            |          }t          |           |
j                            d          }|t          d           |j        }ddg}|r|rt#          |          dk    rst#          |          dk    r`t          d           |\  }}}}|\  }}||z
  |z  }||z
  |z  }t%          |d|dt'          |           |          }t          d|            nt          d           d
S t%          j        | }ddg}|t#          |          dk    rt          d            d
S |d         |d!         }}t          d"| d#| d$| d%|            ||||fS # t*          $ r}t          d&|            Y d}~d
S d}~ww xY w)'uU  
    Busca um item STAC e extrai informações de referência espacial de um asset específico.

    Args:
        tile_id (str): O ID do tile (ex: '013012').
        collection_id (str): O ID da coleção STAC (ex: 'mod13q1-6.1').
        datetime_range (str): O intervalo de data/hora para a busca (ex: '2001-01-01/2001-02-10').
        asset_key (str, optional): A chave do asset do qual extrair os metadados
                                   (ex: 'NDVI', 'EVI'). Padrão 'NDVI'.

    Returns:
        tuple: (crs, transform, width, height) ou (None, None, None, None) se não encontrado.
               crs (rasterio.crs.CRS): Sistema de Referência de Coordenadas.
               transform (rasterio.Affine): Transformação afim.
               width (int): Largura da imagem do asset.
               height (int): Altura da imagem do asset.
    zBuscando item STAC para tile 'u   ', coleção 'z	', data 'z'...r   r   r   r   u:   Nenhum item STAC encontrado para os critérios fornecidos.)NNNNr   zItem STAC ID: zAsset 'u5   ' não encontrado no item STAC. Assets disponíveis: c                 >    g | ]}|                                 d v |S ))r   EVIREDNIR)upper)r$   ks     r&   r'   z3get_spatial_reference_from_stac.<locals>.<listcomp>  s+    $v$v$v117799XuKuKuQKuKuKur)   z=Nenhum asset de dados comum (NDVI, EVI, RED, NIR) encontrado.zUsando asset alternativo: ''zExtraindo metadados do asset: '4326Nu&   Código EPSG não encontrado no asset.zproj:transformu8   Transformação (geotransform) não encontrada no asset.i  r|   r{   z?Tentando calcular transform a partir de proj:bbox e proj:shape.g        zTransform calculada: u[   Não foi possível calcular a transformação: proj:bbox ou proj:shape ausentes/inválidos.u;   Dimensões (shape) não encontradas ou inválidas no asset.rY   zCRS: z, Transform: z	, Width: z
, Height: z'Erro ao buscar ou processar item STAC: )rj   r4   r5   r6   r8   r:   r;   idr!   keysra   rl   r	   	from_epsgextra_fieldsgetbboxr=   r   r   	from_gdalri   )tile_idcollection_iddatetime_range	asset_keyrG   rI   r;   	stac_itemavailable_data_assetsasset_key_foundasset	epsg_coderl   gdal_transform	proj_bbox
proj_shapexminyminxmaxymaxheight_pixelswidth_pixelsx_resy_resr
   r@   rb   rc   rw   s                                r&   get_spatial_reference_from_stacr?  r  s   $ 

n7
n
n-
n
nZh
n
n
noooU&&++,OPPnnw0#& % 
 
 [&&(()) 	*NOOO))
 !H	-y|--...I,,,{I{{\`ajaqavavaxax\y\y{{|||$v$v	0@0E0E0G0G$v$v$v!( .UVVV--3A6OBBBBCCC$_5EE$Y/E<	<<<=== 	:;;;))l((33c


 +//0@AA!LMMM "IJ .Z .C	NNa,?,?C
OOWXDXDXWXXX)2&dD$.8+|45"5#tS3u::+tLL	9i99::::sttt--(.9I t=CJJ!OOOPPP))a%(UcUU	UUEUUVUUVVVIuf,, & & &;;;<<<%%%%%%&s9   A.K- BK- "AK-  DK- 6K- <0K- -
L7LLr   float32   DEFLATEc                 j  	 t          ||||          \  }}}}t          ||||g          st          d           dS t          d|             t          | d          5 }t	          j        |          }ddd           n# 1 swxY w Y   t          |t          j                  sB	 t          j	        ||          }n*# t          $ r}t          d|            Y d}~dS d}~ww xY w|j        d         |j        d         }}|j        d	k    r|                    d
||          }d}n|j        dk    r|j        d         |k    r0|j        d
         |k    r|j        d	         |k    r|j        d         }n|j        d         |k    rG|j        d
         |k    r6|j        d	         |k    r%|                    d	dd
          }|j        d         }n6t          d|j         d| d           dS t          d|j                    dS ||k    rt          d| d| d| d           ||k    r||k    s-t          d| d| d| d| d	           t          d           dS t          d|j         d|j                    d|j        d|||||d		|
dd }t          d!| d"|            t!          j        |d#fi |d$d%i5 }|                    |           |^t%          ||          d& t'          d
t)          t          j        	z                      d
z             D             }	fd'|D             }|rIt          d(|            |                    |t.          j                   |                    d)*           nt          d+           ddd           n# 1 swxY w Y   t          d,| d-           dS ).   
    Converte dados de um arquivo .pkl para um Cloud Optimized GeoTIFF (COG),
    usando referência espacial de um item STAC.
    C   Não foi possível obter a referência espacial do STAC. Abortando.NCarregando dados de: r   dtype8Erro ao converter os dados carregados para NumPy array: r{   rY   r   r  r      Dimensões do array (3   ) não correspondem ao número de bandas esperado () e formato."   Array com dimensões inesperadas: '   Aviso: Número de bandas no array PKL () difere do esperado (
). Usando .!   Erro: Dimensões do arquivo PKL (rM   2   ) não correspondem às dimensões do asset STAC ()._   Verifique se o pkl realmente tem 4800x4800 pixels e se a ordem (altura, largura) está correta.)Forma do array PKL carregado e ajustado: , Tipo de dado: GTiffTpixeldriverrH  nodatarc   rb   countrl   r
   tiled
blockxsize
blockysizecompress
interleaveCriando COG em:  com o perfil: wBIGTIFFYESc                     g | ]}d |z  S r{    r$   r0   s     r&   r'   z,pkl_to_cog_with_stac_ref.<locals>.<listcomp>2      (h(h(h!A(h(h(hr)   c                 8    g | ]}|d k    |z  dz  k    |S rY   r{   rl  r$   ov
block_sizemax_dims     r&   r'   z,pkl_to_cog_with_stac_ref.<locals>.<listcomp>3  9    tttr"q&&U\_aUaeorsesUsUsUsUsUsr)   #Construindo overviews com fatores: yes	overviews>   Nenhum overview será construído (ou níveis muito pequenos).Arquivo COG '' criado com sucesso.r?  allrj   r6   r   r   
isinstancer>   ndarrayr?   ri   r@   ndimrA   r   rH  ra   writer   r<   r   log2build_overviewsr   r   update_tags)pkl_pathoutput_cog_pathstac_tile_idstac_collection_idstac_datetime_rangestac_asset_keynum_bands_pkl	dtype_pkloverviews_levelsrs  compressionrl   r
   expected_widthexpected_heightr   
data_arrayrw   current_heightcurrent_widthcurrent_num_bandsprofiledstoverview_candidate_levelsrt  s            `              @r&   pkl_to_cog_with_stac_refr    s    7V(*=~7 73CNO Y@AA STTT	
,(
,
,---	h		 $[^^
$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ j"*-- 	*I>>>JJ 	 	 	PQPPQQQFFFFF	 %/$4R$8*:J2:NMN!''>=II
	A		A-//J4DQ4G>4Y4Y^h^nop^q  vC  _C  _C * 0 3a N22z7G7Jm7[7[`j`pqr`s  xE  aE  aE#--aA66J * 0 3  K**:  K  Ko|  K  K  K  L  L  LFD:?DDEEEM))  O8I  O  Oan  O  O  {L  O  O  O  	P  	P  	P ^++/0Q0Q f. f f= f fAPf fSaf f f 	g 	g 	goppp	
jj6F
j
jXbXh
j
jkkk !!"   G  

F_
F
FW
F
FGGG		F	Fw	F	F	F	F	F T#		*#./::G(h(huQBGGV`L`DaDa@b@bef@f7g7g(h(h(h%ttttt-Fttt  	TJ8HJJKKK 0*2DEEEOOuO----RSSST T T T T T T T T T T T T T T$ 

@/
@
@
@AAAAAs=    BBB'B> >
C%C  C%9CNNNrY   c                   
 t          ||||          \  }}}}t          ||||g          st          d           dS t          d|             t          | d          5 }t	          j        |          }||ddddf         }ddd           n# 1 swxY w Y   t          |t          j                  sB	 t          j	        ||          }n*# t          $ r}t          d|            Y d}~dS d}~ww xY w|j        d         |j        d         }}|j        d	k    r|                    d
||          }d
}n|j        dk    r|j        d         |k    r0|j        d
         |k    r|j        d	         |k    r|j        d         }n|j        d         |k    rG|j        d
         |k    r6|j        d	         |k    r%|                    d	dd
          }|j        d         }n6t          d|j         d| d           dS t          d|j                    dS ||k    rt          d| d| d| d           ||k    r||k    s-t          d| d| d| d| d	           t          d           dS t          d|j         d|j                    d|j        d|||||d

|dd}t          d | d!|            t!          j        |d"fi |d#d$i5 }|                    |           |	^t%          ||          d% t'          d
t)          t          j        
z                      d
z             D             }
fd&|D             }	|	rIt          d'|	            |                    |	t.          j                   |                    d()           nt          d*           ddd           n# 1 swxY w Y   t          d+| d,           dS )-rD  rE  NrF  r   rG  rI  rJ  rK  r{   rY   r  r   rL  rM  rN  rO  rP  rQ  rR  rS  rT  rM   rU  rV  rW  rX  rY  rZ  Tr[  r\  re  rf  rg  rh  ri  c                     g | ]}d |z  S rk  rl  rm  s     r&   r'   z'pkl_to_cog_filtered.<locals>.<listcomp>  rn  r)   c                 8    g | ]}|d k    |z  dz  k    |S rp  rl  rq  s     r&   r'   z'pkl_to_cog_filtered.<locals>.<listcomp>  ru  r)   rv  rw  rx  rz  r{  r|  r}  )r  r  r  r  r  time_to_selectr  r  r  r  rs  r  rl   r
   r  r  r   r  rw   r  r  r  r  r  r  rt  s             `              @r&   pkl_to_cog_filteredr  D  s    7V(*=~7 73CNO Y@AA STTT	
,(
,
,---	h		 4[^^
qqq 23
4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 j"*-- 	*I>>>JJ 	 	 	PQPPQQQFFFFF	 %/$4R$8*:J2:NMN!''>=II
	A		A-//J4DQ4G>4Y4Y^h^nop^q  vC  _C  _C * 0 3a N22z7G7Jm7[7[`j`pqr`s  xE  aE  aE#--aA66J * 0 3  K**:  K  Ko|  K  K  K  L  L  LFD:?DDEEEM))  O8I  O  Oan  O  O  {L  O  O  O  	P  	P  	P ^++/0Q0Q f. f f= f fAPf fSaf f f 	g 	g 	goppp	
jj6F
j
jXbXh
j
jkkk !!"   G  

F_
F
FW
F
FGGG		F	Fw	F	F	F	F	F T#		*#./::G(h(huQBGGV`L`DaDa@b@bef@f7g7g(h(h(h%ttttt-Fttt  	TJ8HJJKKK 0*2DEEEOOuO----RSSST T T T T T T T T T T T T T T$ 

@/
@
@
@AAAAAs=    $BBB6C 
C4C//C4CN$$N(+N(r-   )r   )r   r   r@  NrA  rB  )r   rY   r@  NrA  rB  )Kosos.pathpathr   r   jsontimer4   osgeoosgeo_utilsr   r   r   pandasr   netCDF4numpyr>   shapelyrpy2
matplotlibr   r   pyprojr   
pyproj.crsr	   ra   r^   rasterio.warpr
   rasterio.windowsr   r   rasterio.enumsr   rasterio.ior   rasterio.transformr   cartopy.crsrl   ccrscartopy.featurefeaturecfeaturescipyjoblibr   r   scipy.ndimager   scipy.signalr   matplotlib.pyplotrO   rT   r.   rS   r   r   r   r   r   rZ   r   r   r   r  r  r  r  r?  r  r  rl  r)   r&   <module>r     s   
			                                            $ $ $ $ $ $                    # # # # # # # # # # # # ( ( ( ( ( ( % % % % % % " " " " " " % % % % % %       " " " " " "  $ $ $ $ $ $ $ $ ( ( ( ( ( ( & & & & & &        &  (" " " "D" " " "F 021gq!fE    8  "    4   24    L L L     D! ! !   &    *h& h& h& h&Z -3-/'0.29BaB aB aB aBT -3-.'0.29BcB cB cB cB cB cBr)   