
    iK                         d Z ddlZddlmZmZmZ ddlmZmZm	Z	m
Z
mZmZmZ deeef   dedefd	Zdeeef   d
edefdZdee   defdZdededefdZy)zR
Pure helpers for StatisticalAnalyzer (entropy, HHI, recency weight, confidence).
    N)DictAnyOptional   )RECENCY_WEIGHT_7_DAYSRECENCY_WEIGHT_30_DAYSRECENCY_WEIGHT_60_DAYSRECENCY_WEIGHT_OLDERCONFIDENCE_NORMALIZERCONFIDENCE_HHI_OFFSETCONFIDENCE_HHI_FACTORcountstotalreturnc                     |dk  s| syd}| j                         D ](  }|dk  r	||z  }||t        j                  |      z  z  }* t        |d      S )z7Shannon entropy (base 2). total = sum(counts.values()).r              )valuesmathlog2round)r   r   entcountps        K/var/www/html/userprofiledev.eatanceapp.com/statistical_analysis/helpers.pyentropy_from_countsr      s[    z
CA:EMq499Q<	 !
 a=    _totalc                     | sy| j                         D cg c]
  }|dkD  s	| }}t        |      dk  ryt        t        fd|D              d      S c c}w )zYHerfindahl-Hirschman Index. Uses only strictly positive counts; denominator is their sum.r   r   c              3   .   K   | ]  }|z  d z    yw)r   N ).0cts     r   	<genexpr>z"hhi_from_counts.<locals>.<genexpr>(   s     59aa!e\9s   r   )r   sumr   )r   r   r#   	positivesr$   s       @r   hhi_from_countsr(       sY    "MMO5Oqq1uOI5IAAv5955q99	 6s
   
AAlast_order_days_agoc                 V    | y| dk  rt         S | dk  rt        S | dk  rt        S t        S )z.Recency decay weight from last order days ago.r         <   )r   r   r	   r
   )r)   s    r   weighted_recencyr.   +   s;    "a$$b %%b %%r   total_ordersrestaurant_hhic                     | dk  ryt        j                  |       t        |t        z  z   z  }t	        t        d|t        z        d      S )z/Normalized confidence from order count and HHI.r   r   g      ?r   )r   log1pr   r   r   minr   )r/   r0   raws      r   math_confidencer5   8   sF    q
**\
"&;~Pe?e&f
gCS# 556::r   )__doc__r   typingr   r   r   	constantsr   r   r	   r
   r   r   r   strintfloatr   r(   r.   r5   r!   r   r   <module>r<      s     & &  
S#X 
s 
u 
:DcN :C :E :
 (3- 
 E 
 ;# ;u ; ;r   