U ~g.@sddlmZddlmZddlTddlZddlmZddZ ej e e e dd d Zej ed d d ZddZej dddZd$e ej dddZddZd%ej e e dddZej e dddZe dddZd&e d d!d"Zed#kreedS)')deepcopy)partial)*N)FirecCsB||d@dks|dkr tdd}|dkr>|dL}|d7}q$|S)Nrzn must be a positive power of 2) ValueError)nexponentr a/home/deftson/nfs-deftson/2024/VA_internal/varco_arena/streamlit_app_components/analysis_utils.pylog2_power_of_twos r )df alpha2namesreturncCs2||ddk}t|dkr*|jdj}nd}|S)Nroundfinalrr)lenilocwinner_resolved)r rZfinalsfirstr r r get_1sts  r)r rcCs4t|j|jg}dd|D}t|}|S)NcSsg|] }|r|qSr r ).0pr r r *sz+get_unique_participants..)pdconcatmodel_amodel_buniquetolistsorted)r Z participantsr r r get_unique_participants(sr!c Cs6|j}t}t|dD]}||j|k||<qt|ddD]}dddd|d}t||}t||d}g}|D]&}||kr|t|} || d<|| q|tj ||t |gdd ||<d |t ||} | dkrDt |g| }tj |||gdd ||<qDtj | dd } | j d d jd d} | S)Nrrr-)rrwinnerZmatch_order_in_rounddepthindexaxisr&byTdrop)r&maxdictrangecopyr!rappendrr DataFramervalues sort_values reset_index) r max_depthZ imputed_partsr&Z null_v_nullZplayersZ proceededZimputedrZp_v_nullZ n_null_v_nullZ df_imputedr r r _impute_byes/sJ     r9)rcCsxd|jd|j|d<|jdddd|d<d |jkrtd dd d }dttd dd}t||d}|d||d <|S)Nzinst: z src: inst_srccSs|jd|jS)Nz: )Ztournament_idxr:rowr r r gz%index_test_scenario..rr( idx_inst_srcr&rr*)rz semi-finalz quarter-final)rndrcSsR|dkrd}n@||kr$||}n*|drNt|dd}t|d}|S)Nzround-r#r)keys startswithintreplacestripr )r@mappingsr&numr r r _convert_round_to_depthrs    z4index_test_scenario.._convert_round_to_depth)rFr)N)Z instructionsourceapplycolumnsstrrCr)r rFrHconvr r r index_test_scenariods   rN)rrcCs|jddjdd}|jdd|_|dkrHd}t|}tt||}tt||}t |}t ||}t ||dd kd krt d ||fS) Nr&r+Tr-cSsd|S)NZmodel_)lower)txtr r r r=r>z+init_tournament_dataframe..uABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ ㉠㉡㉢㉣㉤㉥㉦㉧㉨㉩㉪㉫㉬㉭ ㉮㉯㉰㉱㉲㉳㉴㉵㉶㉷㉸㉹㉺㉻ ㄱㄴㄷㄹㅁㅂㅅㅇㅈㅊㅋㅌㅍㅎ ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ αβγδεζηθικλμνξοπρστυφχψωrrrz$final match need to be one and only.) r6r7r%rJr!r0zipr5rAr9_make_readablesrr)r r alphabetsZmodel_full_names names2alphar r r init_tournament_dataframes rUcs|j|d<|j|d<|jfdd|_|jfdd|_|jdddd|d <|jd ddd|d <|jd ddd|d <|S)Nhuman_readable_model_ahuman_readable_model_bcs|r |SdSNxr Z modelnamerTr r r=r>z!_make_readables..cs|r |SdSrXr rZr[r r r=r>c Ss6|jd|jd|jd|jd|jr,|jndd S)N: z (z) vs. rY))namerVrrWrr;r r r r=r>rr(human_readable_idxcSs ||jS)N)r%r;r r r r=r>rcSs|jd|jddS)N: )rr^ljustr;r r r r=r> winner_nodes)rr2rrJ)r rTr r[r rRs$    rRcCsdtjtttddd}g}d}|j}t|dD]0}|j}||||d\}}}|||fq6|dd d dd} || } d| d g} d d d |D} |} d | }d | | |g}|S)N)r r&winners_in_orderrcSsj||j|k}|j}d||d}d|}|dd}d|}d|dd}|dkrz|dksttd|d |j}g}g} |D]L} |d | ||g|d | d } | | j| | j q||krnD||j|dk} t | D](\} }| d |d j}|| | <qd |}d|}d|dd}|gt |d}d |}||| fS)Nr*u─rarbu┐rrzwinners_in_order=z4 is only allowed when drawing the top (=final match)r#zwinner_nodes==''zwinner_resolved=='│) r&r/AssertionErrorrdr3joinqueryritemr enumerater)r r&redf_nowr8widthZ connect_leftZ connect_rightZround_drawing_partsZdescending_round_winnersnodeZrow_nowZ df_descendiZ winner_alphaZ node_intrZ round_drawingZdescending_unitZdescending_lines_partsZdescending_linesr r r _draw_roundsD       zdraw.._draw_roundr)r&rerr`u 🥇winner: rg cSsg|]}d|qS)rr)ri)rtupr r r rszdraw..z )NN) rr4rClistTupler&r/r1r3splitri)r rrqZdrawingsrer8r&Z winner_drwZ lines_descZchampion_alphabetZchampion_readableZ bracket_topZ bracket_midZinitial_participantsZ bracket_botZ full_figurer r r draws6 1    rw) result_dfrcCsDtt|}tt||d}dt|d|d|}|||fS)Nrztotal z* matches = (n_models-1) * size_testset = (z-1) * )rr!rC)rxn_models size_testsetinterpretationr r r number_breakdown_from_dfs r|c Cst||}dd|D}tt|}|D]"\}}|||kr4d|||<q4d}|D] }||}|d|d|7}q`|S)NcSsi|]\}}||ddqS)🥇 r#)rD)rkvr r r sz#make_legend_str..r}z legend:rr )ritemsr rtrA) r rrZ alpha_orderedr~rres_stralphaZ name_w_medalr r r make_legend_str s  r result.json)jslnamec Cstj|dd}|jddgd}t|}|j}t|D]t\}}z||j|k}t|dtkrd|ndd\}}dtkr|}dtkst t ||d} t ||} t | | t | | t |d d d t d |t |d d d |jD]&} t| dd} |j| } | j}qWq8tk r}ztt |t |dd d t dt |dd d t |t |dd d |dddddddgj|ddddW5d}~XYq8Xq8dS)u 테스트 코드 records)orienttstamplogs)rKrN)rz.txtw)filez ar\rz_err.txtr#r&rrdrr%rrz _err.jsonlT)linesr)r read_jsonr.rNr?rrlrUdirrhrwrprintopenr_rCrvlocr% Exceptionto_json)rr selectionsrpselrmrdf_now_processed _alpha2namesbracket_drawinglegendmatch_idx_human match_idxr<r%er r r mainsR          r__main__)N)N)r)r2r functoolsrtypingpandasrZfirerr r4r0OptionalrLrrtr!r9rNrUrRrwr|rr__name__r r r r s(     5M 1