
    lj                    P    d Z ddlmZ ddlZddlZddlZddlmZ ddlZ	g dZ
ddZy)zDemo engine: proves the loop end to end. Reads the uploaded schedule,
simulates the pipeline stages with believable timing, writes a real summary
workbook, detailed workbook, and flags JSON. Replaced by the real engine.    )annotationsN)Path))   Checking your filezReading columns and dates)   zMatching evidencezSearching historical broadcasts)K   Estimating audiences )Z   zRunning safety checkszComparing against market sizes)c   zPreparing your reportszFormatting workbooksc                   t        j                  |       }t        dt        |            } |dd|dd       t	        j
                  d       t        D ]~  \  }}}t        |dz        }	t        |	|dz   d      D ]W  }
|}|dk(  r/t        |t        dt        ||
z  d	z                    }d
|dd|d} ||
||       t	        j
                  d       Y  t        j                  |      }|j                         }t        t        |            D cg c]  }t        |j                  dd      d        c}|d<   t        t        |            D cg c]  }|j                  g d       c}|d<   t        |      r&|j!                  t        dt        |            d      n|}|| dz  }|| dz  }|j#                  d      j%                  |d       |j%                  |d       |j'                         D cg c]  \  }}t        |      dz   t)        |j+                  dt        |      r|j,                  d   nd            t)        |j+                  dd            t)        |j+                  d|j+                  dd                   |d   d!d" }}}|| d#z  j/                  t1        j2                  |             g d$}t        t        |            D cg c]  }|j                  |g d%&       }}t5        |j+                  dt        j6                  g d'            j9                               xs d(g}g d)}g d*}t        j:                  |d   ||d+      j=                         j?                  |      jA                  d      }t        j:                  |d   jC                  d,d-d.d/d      g d0g d12      j=                         }t        j6                  |      j=                         j?                  |      jA                  d      }|jE                  t        t        |            D cg c]  }|j                  |       c}3      jG                  d4      d   jI                         jK                  d5      j#                  d6      }|jE                  t        t        |            D cg c]  }|j                  |       c}|j+                  dt        j6                  d7gt        |      z              |j+                  dt        j6                  d8gt        |      z              |j+                  d9t        j6                  d:gt        |      z              ||d   d;z  j                  d      |d   d<z  j                  d      d=>      }d?|jL                  |jN                  jQ                  |jN                        d@f<   g dA} ||t        tS        |d   jU                               d      dBt        |      dC||jW                         D !cg c]  }!t        |!       c}!dDg ddD "cg c]  }"t        |j+                  |"d             c}"dD||jW                         D !cg c]  }!t        |!       c}!dD|jN                  jW                         D #cg c]  }#t)        |#       c}#|jW                         D !cg c]  }!t        tS        |!      d       c}!dDdEd?g|t        |      z
  t        |      gdD||    jY                  dFG      dH}$|| dIz  j/                  t1        j2                  |$             ||t        |      ||dJS c c}w c c}w c c}}w c c}w c c}w c c}w c c}!w c c}"w c c}!w c c}#w c c}!w )KN      r   ,z rows foundg      ?g?r	   d   zrow z of ffffff?   i  estimated_ama_000)	Very HighHighMediumLow
confidence)random_statez_summary.xlsxz_detailed.xlsx2   F)index   channel_namer   Channelcountry_nameMarketprogramme_name
event_name	Programmez2Estimate is above 15% of this market's TV universe)rowchannelcountry	programmeamawhyz_flags.json)zSame channelz
Same teamszSame marketzCross-marketzTime-slot history)r   皙?r+   g333333?g?)p)IndiaUAEUKr-   )	z0-5kz5-20kz20-50kz50-100kz100-250kz250-500kz500k-1Mz1M-5Mz5M+)
r   r      r   r      i  i  i  g   mB)binslabelsright_   P   D   -   )r   <   r   r   r   )r   r   r   r   )r2   r3   )_cr:   )	ascendingr   zSports 1Eventtelecast_typeLIVEg?g      ?r
   )r    r   r#   r=   strategyinterval80_lowinterval80_highflagREVIEW_ABOVE_15PCT_TVUrB   )
r#   r    r   r=   r   r@   rA   r   r?   rB   gS@)
rows_totalrows_estimated
median_amamean_confidenceflagged)r3   valuesNonerecords)orient)kpidistributionconfidence_bandstierstop_marketsflagsrowsz_chartdata.json)rD   rE   rows_flaggedsummary_pathdetailed_path)-pd
read_excelmaxlentimesleepSTAGESintrangeminrandomRandomcopyrounduniformchoicesampleheadto_exceliterrowsstrgetiloc
write_textjsondumpslistSeriesuniquecutvalue_countsreindexfillnamapassigngroupbysumsort_valueslocr   isinfloatmediantolistto_dict)%upload_pathexports_dirrun_idon_progressdfntargetstagedetailstartpctdr%   rngout_rH   summarydetailedirrR   rP   	tier_pick	countriesbins_labelsedgeshist	conf_bandtier_countsrQ   tablecolsvkxchart_payloads%                                        engine_stub.pyrun_pipeliner      s   	{	#BAs2wA'Aa5)<=JJsO!' vFTM"
A. 	CA..!SCC#$6783q'aU+UA&JJt	 --
C
'')CGLSQTXW!ckk!S&91 =WCUZ[^_b[cUdePQ$JKeC>A#hcjjQC)j:CGvhm44Gx~66HHHRL'/LLL' !))+- A VaZQUU>A166!9IVWQUU>8<=quu%5quu\;7WXY*+IK -E - fX[))55djj6GH _EFKCPSHoVE%;<VIVSWW^RYY7M-NOVVXYf^e]fIcK2E66#)*{RWXeegoop{|  D  D  EF  GDs<(,,"BPRY[-\],5XZZfZfZh ))I&335==eDKKANK**c#h P1I!6 P*QYYZ^_`stxxz  G  G  RW  G  X  ]  ]  ^_  `KJJE#c(O$TqSZZ	%:$T$'GGNBIIzlSVWZS[F[<\$]"%'',		7)CPSHBT8U"V%(WW_biiQTUXQYHY>Z%[ )3?R;STW;W:^:^_`:a(+,?(@(E'L'LQ'OVX  ZE :REIIekkw}}-v56ND  1"5-@)A)H)H)J#KQO"&3u:? $/4;;=:Ya3q6:YZ'JIl'mAIMM!A,>(?'mo!k>P>P>R-Sc!f-ST3>3D3D3K3K3M"Na3q6"N>I>P>P>R"S5q!#4"SU#$<=!CPUJ,X[\aXbIcdd##9#5M fX_--99$**]:STq#e*#h@ @g  Xe- W !Q$T ;Z'm-S"N"SsC   #]	]:B]],],]#]()"]-
"]2]7:]<)r   r   r   r   r   rk   )__doc__
__future__r   ro   ra   r[   pathlibr   pandasrW   r]   r        r   <module>r      s*   M #    
E@r   