
    +#ha'                         d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlZ	 d dl	m
Z
 d dl	mZ d dlmZmZ d dl 	  G d d	      Zd
 Zd Zd Zy# e$ r eZd Z
Y .w xY w)    N)logging_redirect_tqdm)HTML)displayc                     | S )N xs    S/var/www/html/sandstorm/venv/lib/python3.12/site-packages/dspy/evaluate/evaluate.pyr   r      s        )ThreadPoolExecutoras_completed)*c                   J    e Zd ZddddddddZd Zd Zd	 Z	 	 	 	 	 	 	 dd
Zy)EvaluateN   F   )metricnum_threadsdisplay_progressdisplay_table
max_errorsreturn_outputsc                    || _         || _        || _        || _        || _        || _        d| _        t        j                         | _	        || _
        d|v r t        j                  j                  d       y y )Nr   r   zDeprecationWarning: 'display' has been deprecated. To see all information for debugging, use 'dspy.set_log_level('debug')'. In the future this will raise an error.)devsetr   r   r   r   r   error_count	threadingLock
error_lockr   dspyloggerwarning)	selfr   r   r   r   r   r   r   _kwargss	            r
   __init__zEvaluate.__init__    st     & 0*$#..*,KK v  r   c                 l   d}d}g }t        j                   t        |      d| t        j                        }|D ]X  \  }}	t	               5   |||	      \  }
}}}|j                  |
|||f       ||z  }|dz  }| j                  |||       d d d        Z |j                          |||fS # 1 sw Y   yxY w)Nr   T)totaldynamic_ncolsdisablefiler   )tqdmlensysstdoutr   append_update_progressclose)r"   wrapped_programr   r   ncorrectntotalreordered_devsetpbaridxargexample_idxexample
predictionscores                 r
   _execute_single_threadzEvaluate._execute_single_thread;   s    yys6{$L\H\cfcmcmn 	>HC&( >:I#s:S7Wj% ''gz5(QRE!!%%dHf=> >	> 	

611> >s   
AB**B3	c           
         d}d}g }t        |      5 }|D 	
ch c]  \  }	}
|j                  ||	|
       }}	}
t        j                  t        |      d|       }t	        |      D ]I  }|j                         \  }}}}|j                  ||||f       ||z  }|dz  }| j                  |||       K |j                          d d d        |||fS c c}
}	w # 1 sw Y   xY w)Nr   )max_workersT)r&   r'   r(   r   )	r   submitr*   r+   r   resultr.   r/   r0   )r"   r1   r   r   r   r2   r3   r4   executorr6   r7   futuresr5   futurer8   r9   r:   r;   s                     r
   _execute_multi_threadzEvaluate._execute_multi_threadM   s    K8 
	HRXYhc3xSAYGY993v;dP`L`aD&w/ >:@--/7Wj% ''gz5(QRE!!%%dHf=> JJL
	  611 Z
	 
	s   CCBCCCc                 z    |j                  d| d| dt        d|z  |z  d       d       |j                          y )NAverage Metric:  / z  (d   r   ))set_descriptionroundupdate)r"   r5   r2   r3   s       r
   r/   zEvaluate._update_progress`   sD    /zVHCcT\n_eNeghHiGjjklmr   c	                 T    n j                   ||n j                  }||n j                  }||n j                  }||n j                  }|dur|n j
                  }g }	 fd}
t        t        |            }t        j                  j                  j                          |dk(  r j                  |
||      \  }}}n j                  |
|||      \  }}}t        j                  j                  d| d| dt!        d|z  |z  d       d       t#        |      }|r|D cg c]  \  }}}}|||f }	}}}}|D cg c]  \  }}}}t%        ||      d	|iz   }}}}}t'        j(                  |      }t+        |d
      r|j-                  t.              }n|j1                  t.              }t3        t4        j6                        rj8                  nj:                  j8                  }|j=                  d	|id       |rt3        |t>              r.|jA                  |      jC                         }tE        |      |z
  }n|jC                         }d}tG        ||      }tI        |       |dkD  rd| d}tI        tK        |             |r*|r(t!        d|z  |z  d      |	|D cg c]  ^ }}|	 c}}fS |r't!        d|z  |z  d      |D cg c]  ^ }}|	 c}}fS |rt!        d|z  |z  d      |	fS t!        d|z  |z  d      S c c}}}}w c c}}}}w c c}}w c c}}w )NFc                    t         j                  j                  }t        j                         |v}|r8t        t         j                  j                        |t        j                         <   	  	di |j                         } ||      }t        	d      r2	xj                  t         j                  j                  d      z  c_	        t        	d      r2	xj                  t         j                  j                  d      z  c_        | |||f|r|t        j                         = S S # t        $ r}
j                  5  
xj                  dz  c_        
j                  }d d d        n# 1 sw Y   nxY w
j                  k\  r|t         j                   j#                  d|        | |i dfcY d }~|r|t        j                         = S S d }~ww xY w# |r|t        j                         = w w xY w)	N_assert_failuresassert_failures_suggest_failuressuggest_failuresr   z!Error for example in dev set: 		 g        r   )r   settingsstack_by_threadr   	get_identlist
main_stackinputshasattrrO   getrQ   	Exceptionr   r   r   r    error)r8   r9   thread_stackscreating_new_threadr:   r;   ecurrent_error_countr   programr"   s           r
   r1   z*Evaluate.__call__.<locals>.wrapped_programw   s    MM99M"+"5"5"7}"L"7;DMM<T<T7Ui1134=$8w~~'78
 7$67,,0A0ABS0TT,7$78--1B1BCU1VV-"GZ> '%i&9&9&;< '  	5__ ;$$)$*.*:*:'; ; ; '$//9G!!$Gs"KL"GR44&%i&9&9&;< '	5 '%i&9&9&;< 'sI   -B D& &	G/G;"E&	G&E/	+?G*G+G GG G*r   rF   rG   z (rH   z%)correctmapT)columnsinplacer   z
                <div style='
                    text-align: center;
                    font-size: 16px;
                    font-weight: bold;
                    color: #555;
                    margin: 10px 0;'>
                    ... zD more rows not displayed ...
                </div>
                   )&r   r   r   r   r   r   rV   	enumerater*   
_instancesclearr<   rD   r   r    inforK   sortedmerge_dictspd	DataFramerY   rc   truncate_cellapplymap
isinstancetypesFunctionType__name__	__class__renameintheadcopyr+   configure_dataframe_displayipython_displayr   )r"   ra   r   r   r   r   r   return_all_scoresr   resultsr1   r4   r2   r3   predicted_devset_r9   r:   r;   datadfmetric_namedf_to_displaytruncated_rows	styled_dfmessages   ```                       r
   __call__zEvaluate.__call__d   sF    "-4;;!-4;;%0%<k$BRBR/?/K+QUQfQf)6)BHZHZ+9+FDL_L_!	=F i'(		""$!151L1L_^dfv1w.h151K1K 	2.h 	+H:S5xZ`I`bcCdBeeghi!"23Yijj8U7JPUU3jGj hx
 
FcaR\^cK,	5/AA
 
 \\$ 2u&B]+B *4FE<N<N)OfooU[UeUeUnUn
		9k2D	A-- " 6 ; ; =!$R=!8 "	!"3M;OII&! (( )	  W.x&0!4gWg?h)1e?hhhx&0!4N^6_!Uu6___x&0!4g==S8^f,a00g k
V @i6_s   -L

L
,L
L$)NNNNNFF)rt   
__module____qualname__r$   r<   rD   r/   r   r   r   r
   r   r      sG    
 62$2& {1r   r   c                     i }| j                         D ]  \  }}||v r	||d| <   |||<    |j                         D ]  \  }}|| v r	||d| <   |||<    |S )Nexample_pred_)items)d1d2mergedkvs        r
   rl   rl      s    F
 17%&FXaS>"F1I	 
 17"#FU1#;F1I	 Mr   c                     t        |       j                         }t        |      dkD  rdj                  |dd       dz   S | S )z'Truncate content of a cell to 25 words.    Nz...)strsplitr+   join)contentwordss     r
   ro   ro      s>    L E
5zBxxcr
#e++Nr   c           	      <   dt         j                  j                  _        t        j                  dd       t        j                  dd       | |   j                  d       | |<    | j                  j                  ddgd	d
dgd	g      j                  di dddddS )z1Set various pandas display options for DataFrame.Nzdisplay.max_colwidth   zdisplay.widthi  c                 (    | rd|  dS t        |       S )Nu   ✔️ [])r   r   s    r
   <lambda>z-configure_dataframe_display.<locals>.<lambda>  s    1o PSTUPV r   th)
text-alignleft)selectorpropstdr   zpre-wrapz
break-word400px)r   zwhite-spacez	word-wrapz	max-widthr   )	rm   optionsr   max_colwidth
set_optionapplystyleset_table_stylesset_properties)r   r   s     r
   rz   rz      s    &*BJJ#MM("-MM/3' o++,VWB{O288$$)?(@A)?(@A	

 n !%% 	
 r   )r,   r   rr   pandasrm   r*   tqdm.contrib.loggingr   r   IPython.displayr   r   r{   ImportErrorprintconcurrent.futuresr   r   dsp.evaluation.utilsr   rl   ro   rz   r   r   r
   <module>r      sk    
     6 $: @ "@1 @1F"[  Os   A 
AA