a
    hN                     @   s   d dl Zd dl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 d dlmZ d	d
 Zdd Zdd ZdS )    N)text)CONFIG)db_selector)FrameStatus)date_binoutput)
DB_SESSION)appc                 C   s^  t |   6}d|jd  d| d| d|jd  d|jd  d|jd  d	}|t| }t|}	d}g }
|D ]\}}||kr|}t|}t	| }tj
|| || |d
tj
|| |d }dddd |D  d }|
d| d| d qxd|jd  dd|
 d}|t| |  W d    n1 sL0    Y  ||	fS )Nzf
            WITH 
            points AS (
                SELECT id AS point_id
                FROM    z
                WHERE id > z9
                ORDER BY point_id
                LIMIT z
            ),
            disps AS (
                SELECT 
                    p.point_id,
                    unnest(values) AS disp,
                    unnest(dates) AS date
                FROM points p
                JOIN r   z ON p.point_id = z..point_id
                JOIN date_arrays ON z.date_arrays_id = date_arrays.id
            )
            SELECT
                point_id,
                array_agg(disp ORDER BY date) AS disps
            FROM disps
            GROUP BY point_id
        )weights	minlength)r   {,c                 s   s   | ]}t |V  qd S )N)str).0x r   U/var/www/staging/api/app_home/main/services/satbots/scripts/generate_average_disps.py	<genexpr>4       z process_batch.<locals>.<genexpr>}(z, 'z
'::real[])z
            UPDATE zc AS p
            SET average_disps = temp.average_disps
            FROM (VALUES 
                zS
            ) AS temp(id, average_disps)
            WHERE p.id = temp.id
        )r	   begin
partitionsexecuter   fetchalllennparrayisnanbincountjoinappendcommit)databaseframe
batch_sizelast_idnum_binsbin_indicessessionsqlresults
num_pointsZaverage_disp_arrayspoint_iddispsvalueskeepaverage_dispsZ	disps_strr   r   r   process_batch
   sJ    
(r4   c              	   C   s\  t |  V}| r4|ttj|k }n|ttj|k }|j	t
jkrrtd| d|j d|j	}t
j|_	d|jd  d|jd  d}t|t|  }t|}t|d |_t|d |_t|j|jd	 }	|	jd }
t||	d	 }d
|jd	  }|t| d }t| d| d || |  W d    n1 sl0    Y  td d d }|| d	 }d}d}t |D ]\}t!|||||
|\}}||7 }|d	 | d }t| d|d	  d| d| t"|d qt |  :}|t
jkr|nt
j#|_	|| |  W d    n1 sN0    Y  d S )NzFrame -zn is already being updated, or something has gone wrong in a previous update to leave it in an incorrect state.z{
            WITH dates AS (
                SELECT DISTINCT dates 
                FROM date_arrays 
                JOIN r   z ON date_arrays.id = z.date_arrays_id
            ) 
            SELECT date
            FROM dates, unnest(dates) AS date
            ORDER BY date
        r   zSELECT COUNT(*) FROM zFound z pointssatbotsgenerate_average_dispsr'   d   zBatch /z: )progress)$r	   r   isdigitqueryr   filteridonenamestatusr   UPDATING
ValueErrorr   r   r   r   r   r   flattenr   int	start_binend_binarangeshapedigitizefetchoner   addr$   r   ranger4   round	AVAILABLE)satbotr%   frame_idr+   r&   Zoriginal_statusr,   datesZ	date_binsbinsr)   r*   r.   r'   Znum_batchesZpoints_processedr(   iZ
new_pointsr;   r   r   r   r8   E   sL    

(,
r8   c                 C   s   z(| j d d}t|d }|d }W nP ttfyx   t " | jdgd W d    Y d S 1 sj0    Y  Y n0 t| || d S )Nzframe-idr5   r   r6   zInvalid Frame ID provided.)log)	decoded_parameterssplitr   KeyErrorAttributeErrorr
   app_contextupdater8   )rQ   r&   r%   rR   r   r   r   main}   s    
(r]   )numpyr   
sqlalchemyr   configr   main.models._mapped_tablesr   main.models.insar.framer   r   $main.services.satbots.scripts.sharedr   r   setupr	   r
   r4   r8   r]   r   r   r   r   <module>   s   ;8