
    j              
         d Z ddlmZ ddlmZmZmZ ddlmZ ddl	m	Z	 ddl
mZmZmZ ddlmZmZmZ dd	lmZmZ dd
lmZmZ  eddg      ZddZddZej7                  d       ee       ee      fdd       Zej7                  d      d ee       ee      fdd       Zej7                  d      dddd ee       ee      f	 	 	 	 	 dd       Zej7                  d      ddddd ee       ee      f	 	 	 	 	 	 	 d d       Zy)!u@   Calibration statistics (descriptive — see app/calibration.py).    )annotations)	APIRouterDependsHTTPException)
Connection   )audit)Usercurrent_userrequire_center)	agreementempirical_tableproblem_usage)active_configconfig_by_id)fetchoneget_connz/statsstats)prefixtagsc                n    |t        | |      d   S t        | |      }|d   |k7  rt        dd      |d   S )Nconfig	center_id  z Config belongs to another center)r   r   r   )connr   	config_idrows       ./var/www/avy-guidance/api/app/routers/stats.py_configr      sK    T9-h77
tY
'C
;9$C!CDDx=    c                &    | dvrt        dd      | S )N)importedtoolr   z#source must be 'imported' or 'tool')r   )sources    r   _sourcer%      s    ))C!FGGMr    z	/overviewc                \    t        ||        t        |dd| i      }i |dt        ||       iS )Na  SELECT (SELECT count(*)::int FROM forecasts WHERE center_id = %(c)s) AS forecasts,
                  (SELECT count(*)::int FROM forecasts WHERE center_id = %(c)s AND guidance_era = 'legacy') AS legacy_forecasts,
                  (SELECT min(valid_date) FROM forecasts WHERE center_id = %(c)s) AS first_forecast,
                  (SELECT max(valid_date) FROM forecasts WHERE center_id = %(c)s) AS last_forecast,
                  (SELECT count(*)::int FROM tool_runs WHERE center_id = %(c)s AND status = 'finalized') AS finalized_runs,
                  (SELECT count(*)::int FROM tool_runs WHERE center_id = %(c)s AND status = 'draft') AS draft_runscr   )r   r   r   )r   r   usercountss       r   overviewr*       sE    4#	v 
i	F GfFo}T9'EFFr    z/guidance-auditNc                4    t        ||        t        || |      S )zDHow often past forecasts diverge from the current Forecast Guidance.)r   r	   )r   erar   r(   s       r   guidance_auditr-   0   s     4#y#&&r    z
/agreementr"   c           	     b    t        ||        t        || t        || |      t        |      ||      S )N)r   r   r   r%   )r   r$   seasonr,   r   r   r(   s          r   get_agreementr0   7   s3     4#T9gdIy&I7SY?\bdghhr    z/empirical-tablesinglec           	         t        ||        |dvrt        dd      t        || t        || |      t	        |      |||      S )N)r1   dominantr   z#mode must be 'single' or 'dominant')r   r   r   r   r%   )r   r$   r/   moder,   r   r   r(   s           r   get_empirical_tabler5   >   sO     4#))C!FGG4GD)Y,OQXY_Q`bhjnpsttr    )r   r   r   intr   
int | Nonereturndict)r$   strr8   r:   )r   r6   r   r   r(   r
   )r   r6   r,   
str | Noner   r   r(   r
   )r   r6   r$   r:   r/   r;   r,   r;   r   r7   r   r   r(   r
   )r   r6   r$   r:   r/   r;   r4   r:   r,   r;   r   r7   r   r   r(   r
   ) __doc__
__future__r   fastapir   r   r   psycopgr   r	   authr
   r   r   calibrationr   r   r   configsr   r   dbr   r   routerr   r%   getr*   r-   r0   r5    r    r   <module>rG      sc   F " 5 5   5 5 C C 1 #	('	3 K070APWXdPe G G 59gV^N_nu  wC  oD ' ' L0:QUim*.78CTcjkwcxi'i6@i\`i i 6@W[iq*.+28+<7S_K`u'u;Eu(uDHu  ur    