Ë
    È¨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   € ØÐÜ˜T 9Ó-¨hÑ7Ð7Ü
�t˜YÓ
'€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ÐF�o¤}°T¸9Ó'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˜Ô#Ü�T˜9¤g¨d°I¸yÓ&IÌ7ÐSYË?Ð\bÐdgÓ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 ¬G°D¸)ÀYÓ,OÔQXÐY_ÓQ`ÐbhÐjnÐpsÓ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¸Ó0AÑPWÐXdÓPeó Gó ðGð ‡�ÐÓØ59ÉgÐV^ÓN_Ñnuð  wCó  oDó 'ó ð'ð ‡�ˆLÓØ0:ÐQUÐimØ*.Á7È8ÓCTÑcjÐkwÓcxðiØ'ðiØ6@ðiØ\`òió ðið ‡�ÐÓØ6@ÐW[ÐiqØ*.ÈÙ+2°8Ó+<É7ÐS_ÓK`ðuØ'ðuØ;Eðuà(ðuàDHòuó  ñur    