
    j-                        d dl mZ d dlmZmZmZmZ d dlmZm	Z	m
Z
mZmZ d dlmZ ddlmZmZ ddlmZ ded	efd
Zdeej0                     d	eeeef   eeef   f   fdZ	 ddededeej0                     deeej6                        d	df
dZ	 	 ddededej:                  dedee   d	dfdZded	dfdZded	dfdZ dedejB                  d	dfdZ"y)    )defaultdict)DictListOptionalTuple)alignconsolepaneltabletext)types   )test_resultevaluation_result)score_resultsecondsreturnc                     t        | d      \  }}t        |d      \  }} t        |      ddt        |      ddt        |       dS )Ni  <   02d:)divmodint)r   hours	remainderminutess       o/Users/manta/Documents/Projects/TheRoad-I1/backend/.venv/lib/python3.12/site-packages/opik/evaluation/report.py_format_timer      sP    gt,E9i,GW%jQs7|C0#g,s1CDD    test_resultsc                 d   t        t              }t        t              }t        t              }| D ]  }|j                  D ]  }|j                  r/||j
                  xx   dz  cc<   ||j
                  xx   dz  cc<   >||j
                  xx   |j                  z  cc<   ||j
                  xx   dz  cc<   ||j
                  xx   dz  cc<     |j                         D ci c]  \  }}||dk(  rdn	||   |z  d }}}|j                         D ci c]  }|||   
 }	}||	fS c c}}w c c}w )Nr   r   None.4f)	r   floatr   score_resultsscoring_failednamevalueitemskeys)
r    score_totalsscore_countsscore_failedresultscorer'   countsaverage_scoresfailed_scoress
             r   _compute_average_scoresr3      s:    &1%7L#.s#3L#.s#3L))E##UZZ(A-(UZZ(A-(UZZ(EKK7(UZZ(A-(UZZ(A-( *  )..00LD& 	!fL,>,G+LM0   ;G:K:K:MN:M$T<--:MMN=(( Os   #D'D-Ndataset_name
total_timeexperiment_scoresc                 Z   t        |      \  }}t        |      }|D ch c].  }|j                  j                  |j                  j                  0 }}|rt        |      n|}	t	        j
                  dt        |             }
|
j                  ddd       t        j                  j                  |
      }
||	k7  rt	        j
                  d|	dd|dd      }nt	        j
                  d	|	d      }|j                  ddd       t        j                  j                  |      }t	        j
                  d
      }|j                         D ]f  \  }}|t	        j
                  | d| dd      z  }||   dkD  r!|t	        j
                  d||    dd      z  }|t	        j
                  d      z  }h |rS|D ]N  }|t	        j
                  |j                   d|j                  dd      z  }|t	        j
                  d      z  }P t        j                  j                  |      }t        j                  j!                         }|j#                  t	        j
                  d
             |j#                  |
       |j#                  |       |j#                  t	        j
                  d
             |j#                  |       ||	k7  r|  d|	 d| d}n|  d|	 d}t%        j&                  ||dd      }t)        j*                         }|j-                  |       |j-                  d       y c c}w )NTotal time:        boldr      Number of items:   , ( runs)zNumber of samples:  : z (avg)
green boldstylez - z failedred
r#    items, z	 samples)leftFtitletitle_alignexpandzUploading results to Opik ... )r3   len	test_casedataset_item_idr   Textr   stylizer   AlignrG   r)   r'   r(   r   Tablegridadd_rowr
   Panelr	   Consoleprint)r4   r5   r    r6   r1   r2   nb_runsr.   unique_item_idsnb_items	time_textnb_samples_textscore_stringsr'   	avg_scorer/   aligned_test_resultscontentpanel_titlepanel_contentconsole_containers                        r   display_experiment_resultsrd   .   s    %<L$I!NM,G
 #"F++7 	(("  
 (7s?#GH		/Z0H/IJKIfa$  +I ())!(1R{&A
 ))&9(1$FGFAr*kk&&7O IIbMM)//1idV2i[#?|TT"TYY]4-@,A'IQVWWM4(	 2 &ETYY::,bS 12, M TYYt_,M	 ' !;;++M: kk GOODIIbM"OOIOOO$OODIIbM"OO() (%b
(7)6J%b
)<KK	M  )M*<=}s   3L(
suite_namesuite_resultverboseexperiment_urlc                   +, |j                   j                         D cg c]  }|j                  D ]  }|  }}}t        |      }|j                  }	|j
                  }
|j                  }|j                  }t        t              +t        t              ,|D ]  }|j                  D ]{  },|j                  xx   dz  cc<   |j                   xr9 t        |j                  t              xr |j                  xs |j                  dk(  }|se+|j                  xx   dz  cc<   }  t        j                   dt#        |             }|j%                  ddd       t&        j(                  j+                  |      }t        j                   d|	dd|dd	      }|j%                  ddd       t&        j(                  j+                  |      }|dkD  r|
|z  nd }|dk(  rd
}d}n|rd}d}nd}d}t        j                   d| |      }|j%                  ddd       t&        j(                  j+                  |      }t        j                   d|
 d|       }|j%                  ddd       t&        j(                  j+                  |      }||dnd}t        j                   d|       }|j%                  ddd       t&        j(                  j+                  |      }|D cg c]  }|j,                  |j,                   }}|D cg c]  }|j.                  |j.                   }}t0        j2                  j5                         }|j7                  t        j                   d             |ut        j                   j9                  d| d      }|j7                  t&        j(                  j+                  |             |j7                  t        j                   d             |j7                  |       |j7                  |       |j7                  |       |j7                  |       |j7                  |       |rk|rht;        |      t        |      z  }t;        |      t        |      z  }||z   }t        j                   d|dd      }|j%                  ddd       t        j                   d|dd      } | j%                  ddd       t        j                   d|dd      }!|!j%                  ddd       |j7                  t        j                   d             |j7                  t&        j(                  j+                  |             |j7                  t&        j(                  j+                  |              |j7                  t&        j(                  j+                  |!             |dk\  rՉ,rt=        ,j?                         +,fd !      }"t        j                   d      }#|"D ]H  }$+|$   }%,|$   }&|&dkD  r|%|&z  nd"}'|%|&k(  rdnd}(|#t        j                   |$ d#|'d$d%|% d|& d&|(      z  }#J |j7                  t        j                   d             |j7                  t&        j(                  j+                  |#             tA        jB                  ||  d|	 d'| d	d(d)*      })tE        jF                         }*|*jI                  |)       y c c}}w c c}w c c}w )+Nr   r8   r9   r   r:   r;   r<   r=   r>   zyellow boldzNO ITEMSrA   PASSEDzred boldFAILEDzSuite result:      rB   zItems passed:      /z.1%N/AzPass rate:         r?   z[bold cyan][link=z2]View results in Opik dashboard[/link][/bold cyan]zAvg task time:     z.2fszAvg scoring time:  zAvg total time:       c                 .    |    dkD  r|    |    z  S dS )Nr            )nassertion_passed_countassertion_total_counts    r   <lambda>z'display_suite_results.<locals>.<lambda>   s2    (+a/ 'q),A!,DD r   )keyrq   r@   z.0%z	 passed (z)
rF   rG   FrH   )%item_resultsvaluesr    rL   items_totalitems_passedall_items_passedr   r   r%   r'   r&   
isinstancer(   boolr   rO   r   rP   r   rQ   rG   task_execution_timescoring_timer   rR   rS   rT   from_markupsumsortedr*   r
   rU   r	   rV   rW   )-re   r5   rf   rg   rh   item_resulttrr    rX   rZ   r{   rz   suite_passedr/   score_passedr[   r\   	pass_rate
pass_style
pass_label	pass_text
items_text
rate_value	rate_text
task_timesscoring_timesr`   	link_textavg_taskavg_scoring	avg_totalavg_task_textavg_scoring_textavg_total_textsorted_assertionsr]   r'   passedtotalraterC   rb   rc   rt   ru   s-                                              @@r   display_suite_resultsr   y   s    (44;;==K**B 	* 	=  
 ,G''H,,L**K00L-8-=,7,<%%E!%**-2-$333 EKK.>5;;S5;;RSCS  &uzz2a72 &  		/Z0H/IJKIfa$  +Iii"5hq\GA;f UVOFAr*kk&&7O.9Ao{*4Ia"

	!



		/
|<JOIfa$  +I0a}MNJvq"%!!*-J'0'<Ic?%J		/
|<=Ifa$  +I
 B!!- 	   #/".B"//2M,   kk GOODIIbM"!II))//ab
	 	((34		"&OOIOOO$OOIOOJOOImz?S_4-(3}+=={*			$7~Q"GHfa,99':;s:K1%MN  B/%83q#IJvq"-		"&((78(()9:;((89!|-"!&&(
 		"%D+D1F)$/E%*QY6E>CD$*eOLETYY&4*IfXQugSA M & 			"&((78KKBxj	@	M  )M*Gp
s   Z?[?[
[
c                 V    t        j                         }|j                  d|  d       y )NzView the results [link=z]in your Opik dashboard[/link].r	   rV   rW   rh   rc   s     r   display_experiment_linkr     s+    )
!.!11PQr   c                 V    t        j                         }|j                  d|  d       y )NzHRunning evaluation suite, results will be available in [bold cyan][link=z#]Opik dashboard[/link][/bold cyan].r   r   s     r   display_evaluation_in_progressr     s1    )*++N	Pr   evaluation_resultsc                    |j                         }|j                  syt        j                         }|j	                  ddd       |j	                  ddd	       |j	                  d
dd	       |j	                  ddd	       |j	                  ddd	       |j                  j                         D ]Z  \  }}|j                  |j                  dnd}|j                  ||j                  d|j                  d|j                  d|       \ t        j                  |d|  dd      }t        j                         }|j                  |       y)aC  
    Displays evaluation scores statistics for a given dataset.

    The function generates a summary of evaluation scores including mean, max,
    min, and optionally standard deviation for each metric in the evaluation
    results. The summarized scores are formatted and presented in a table
    within a panel for user clarity.

    Args:
        dataset_name: Name of the dataset for which evaluation statistics are
            being displayed.
        evaluation_results: An object containing evaluation results with
            aggregated scores and statistical data.
    NNamecyanT)rC   no_wrapMeanrightgreen)justifyrC   MinyellowMaxStdmagentar#   rm   zEvaluation statistics for rG   FrH   )aggregate_evaluation_scoresaggregated_scoresr   rR   
add_columnr)   stdrT   meanminmaxr
   rU   r	   rV   rW   )	r4   r   aggregated_viewstats_tabler'   stats	std_valuerb   rc   s	            r   $display_evaluation_scores_statisticsr     sB   $ )DDFO,, ++-K6>67'B5'B5'B5'C '88>>@e*/))*?uyyoU	zz#yyoyyo	
 A KK*<.9	M  )M*r   )N)ro   N)#collectionsr   typingr   r   r   r   richr   r	   r
   r   r   )opik.api_objects.dataset.evaluation_suiter   suite_typesr?   r   r   metricsr   r$   strr   
TestResultr   r3   ScoreResultrd   EvaluationSuiteResultr   r   r   EvaluationResultr   rr   r   r   <module>r      sn   # . . 3 3 K , !E% EC E){--.)
4S>4S>)*)> CG	H>H>H> {--.H>  \%=%= >?	H>
 
H>^ $(J+J+J+ 33J+ 	J+
 SMJ+ 
J+ZC D 3 4 3+3+)::3+ 
3+r   