@@ -167,6 +167,7 @@ <h1>Source code for cyclops.evaluate.evaluator</h1><div class="highlight"><pre>
167
167
< span > </ span > < span class ="sd "> """Evaluate one or more models on a dataset."""</ span >
168
168
169
169
< span class ="kn "> import</ span > < span class ="nn "> logging</ span >
170
+ < span class ="kn "> import</ span > < span class ="nn "> warnings</ span >
170
171
< span class ="kn "> from</ span > < span class ="nn "> dataclasses</ span > < span class ="kn "> import</ span > < span class ="n "> asdict</ span >
171
172
< span class ="kn "> from</ span > < span class ="nn "> typing</ span > < span class ="kn "> import</ span > < span class ="n "> Any</ span > < span class ="p "> ,</ span > < span class ="n "> Callable</ span > < span class ="p "> ,</ span > < span class ="n "> Dict</ span > < span class ="p "> ,</ span > < span class ="n "> List</ span > < span class ="p "> ,</ span > < span class ="n "> Optional</ span > < span class ="p "> ,</ span > < span class ="n "> Sequence</ span > < span class ="p "> ,</ span > < span class ="n "> Union</ span > < span class ="p "> ,</ span > < span class ="n "> get_args</ span >
172
173
@@ -208,6 +209,7 @@ <h1>Source code for cyclops.evaluate.evaluator</h1><div class="highlight"><pre>
208
209
< span class ="n "> slice_spec</ span > < span class ="p "> :</ span > < span class ="n "> Optional</ span > < span class ="p "> [</ span > < span class ="n "> SliceSpec</ span > < span class ="p "> ]</ span > < span class ="o "> =</ span > < span class ="kc "> None</ span > < span class ="p "> ,</ span >
209
210
< span class ="n "> split</ span > < span class ="p "> :</ span > < span class ="n "> Optional</ span > < span class ="p "> [</ span > < span class ="n "> Union</ span > < span class ="p "> [</ span > < span class ="nb "> str</ span > < span class ="p "> ,</ span > < span class ="n "> Split</ span > < span class ="p "> ]]</ span > < span class ="o "> =</ span > < span class ="kc "> None</ span > < span class ="p "> ,</ span >
210
211
< span class ="n "> batch_size</ span > < span class ="p "> :</ span > < span class ="n "> Optional</ span > < span class ="p "> [</ span > < span class ="nb "> int</ span > < span class ="p "> ]</ span > < span class ="o "> =</ span > < span class ="n "> config</ span > < span class ="o "> .</ span > < span class ="n "> DEFAULT_MAX_BATCH_SIZE</ span > < span class ="p "> ,</ span >
212
+ < span class ="n "> raise_on_empty_slice</ span > < span class ="p "> :</ span > < span class ="nb "> bool</ span > < span class ="o "> =</ span > < span class ="kc "> False</ span > < span class ="p "> ,</ span >
211
213
< span class ="n "> fairness_config</ span > < span class ="p "> :</ span > < span class ="n "> Optional</ span > < span class ="p "> [</ span > < span class ="n "> FairnessConfig</ span > < span class ="p "> ]</ span > < span class ="o "> =</ span > < span class ="kc "> None</ span > < span class ="p "> ,</ span >
212
214
< span class ="n "> override_fairness_metrics</ span > < span class ="p "> :</ span > < span class ="nb "> bool</ span > < span class ="o "> =</ span > < span class ="kc "> True</ span > < span class ="p "> ,</ span >
213
215
< span class ="n "> load_dataset_kwargs</ span > < span class ="p "> :</ span > < span class ="n "> Optional</ span > < span class ="p "> [</ span > < span class ="n "> Dict</ span > < span class ="p "> [</ span > < span class ="nb "> str</ span > < span class ="p "> ,</ span > < span class ="n "> Any</ span > < span class ="p "> ]]</ span > < span class ="o "> =</ span > < span class ="kc "> None</ span > < span class ="p "> ,</ span >
@@ -262,6 +264,9 @@ <h1>Source code for cyclops.evaluate.evaluator</h1><div class="highlight"><pre>
262
264
< span class ="sd "> The batch size to use when computing metrics. If None or a negative</ span >
263
265
< span class ="sd "> integer, the entire dataset will be loaded into memory and metrics</ span >
264
266
< span class ="sd "> will be computed in one batch.</ span >
267
+ < span class ="sd "> raise_on_empty_slice : bool, default=False</ span >
268
+ < span class ="sd "> Whether to raise an error if a slice is empty. If False, a warning will</ span >
269
+ < span class ="sd "> be logged and the metric values will be set to `NaN`.</ span >
265
270
< span class ="sd "> fairness_config : Optional[FairnessConfig], optional</ span >
266
271
< span class ="sd "> The configuration for computing fairness metrics. If None, no fairness</ span >
267
272
< span class ="sd "> metrics will be computed. Before computing fairness metrics, the following</ span >
@@ -346,6 +351,7 @@ <h1>Source code for cyclops.evaluate.evaluator</h1><div class="highlight"><pre>
346
351
< span class ="n "> prediction_column_prefix</ span > < span class ="o "> =</ span > < span class ="n "> prediction_column_prefix</ span > < span class ="p "> ,</ span >
347
352
< span class ="n "> remove_columns</ span > < span class ="o "> =</ span > < span class ="n "> remove_columns</ span > < span class ="p "> ,</ span >
348
353
< span class ="n "> batch_size</ span > < span class ="o "> =</ span > < span class ="n "> batch_size</ span > < span class ="p "> ,</ span >
354
+ < span class ="n "> raise_on_empty_slice</ span > < span class ="o "> =</ span > < span class ="n "> raise_on_empty_slice</ span > < span class ="p "> ,</ span >
349
355
< span class ="p "> )</ span >
350
356
< span class ="k "> if</ span > < span class ="s2 "> "default"</ span > < span class ="ow "> in</ span > < span class ="n "> metric_results</ span > < span class ="p "> :</ span >
351
357
< span class ="k "> if</ span > < span class ="n "> models</ span > < span class ="ow "> is</ span > < span class ="ow "> not</ span > < span class ="kc "> None</ span > < span class ="ow "> and</ span > < span class ="nb "> len</ span > < span class ="p "> (</ span > < span class ="n "> models</ span > < span class ="p "> )</ span > < span class ="o "> ></ span > < span class ="mi "> 1</ span > < span class ="p "> :</ span >
@@ -486,6 +492,7 @@ <h1>Source code for cyclops.evaluate.evaluator</h1><div class="highlight"><pre>
486
492
< span class ="n "> prediction_column_prefix</ span > < span class ="p "> :</ span > < span class ="nb "> str</ span > < span class ="o "> =</ span > < span class ="s2 "> "predictions"</ span > < span class ="p "> ,</ span >
487
493
< span class ="n "> remove_columns</ span > < span class ="p "> :</ span > < span class ="n "> Optional</ span > < span class ="p "> [</ span > < span class ="n "> Union</ span > < span class ="p "> [</ span > < span class ="nb "> str</ span > < span class ="p "> ,</ span > < span class ="n "> List</ span > < span class ="p "> [</ span > < span class ="nb "> str</ span > < span class ="p "> ]]]</ span > < span class ="o "> =</ span > < span class ="kc "> None</ span > < span class ="p "> ,</ span >
488
494
< span class ="n "> batch_size</ span > < span class ="p "> :</ span > < span class ="n "> Optional</ span > < span class ="p "> [</ span > < span class ="nb "> int</ span > < span class ="p "> ]</ span > < span class ="o "> =</ span > < span class ="n "> config</ span > < span class ="o "> .</ span > < span class ="n "> DEFAULT_MAX_BATCH_SIZE</ span > < span class ="p "> ,</ span >
495
+ < span class ="n "> raise_on_empty_slice</ span > < span class ="p "> :</ span > < span class ="nb "> bool</ span > < span class ="o "> =</ span > < span class ="kc "> False</ span > < span class ="p "> ,</ span >
489
496
< span class ="p "> )</ span > < span class ="o "> -></ span > < span class ="n "> Dict</ span > < span class ="p "> [</ span > < span class ="nb "> str</ span > < span class ="p "> ,</ span > < span class ="n "> Dict</ span > < span class ="p "> [</ span > < span class ="nb "> str</ span > < span class ="p "> ,</ span > < span class ="n "> Any</ span > < span class ="p "> ]]:</ span >
490
497
< span class ="w "> </ span > < span class ="sd "> """Compute metrics for a dataset."""</ span >
491
498
< span class ="k "> if</ span > < span class ="nb "> isinstance</ span > < span class ="p "> (</ span > < span class ="n "> target_columns</ span > < span class ="p "> ,</ span > < span class ="nb "> str</ span > < span class ="p "> ):</ span >
@@ -516,14 +523,24 @@ <h1>Source code for cyclops.evaluate.evaluator</h1><div class="highlight"><pre>
516
523
< span class ="n "> desc</ span > < span class ="o "> =</ span > < span class ="sa "> f</ span > < span class ="s2 "> "Filter -> </ span > < span class ="si "> {</ span > < span class ="n "> slice_name</ span > < span class ="si "> }</ span > < span class ="s2 "> "</ span > < span class ="p "> ,</ span >
517
524
< span class ="p "> )</ span >
518
525
519
- < span class ="k "> if</ span > < span class ="nb "> len</ span > < span class ="p "> (</ span > < span class ="n "> sliced_dataset</ span > < span class ="p "> )</ span > < span class ="o "> ==</ span > < span class ="mi "> 0</ span > < span class ="p "> :</ span >
526
+ < span class ="k "> if</ span > < span class ="nb "> len</ span > < span class ="p "> (</ span > < span class ="n "> sliced_dataset</ span > < span class ="p "> )</ span > < span class ="o "> ==</ span > < span class ="mi "> 0</ span > < span class =" ow " > and </ span > < span class =" n " > raise_on_empty_slice </ span > < span class ="p "> :</ span >
520
527
< span class ="k "> raise</ span > < span class ="ne "> RuntimeError</ span > < span class ="p "> (</ span >
521
528
< span class ="sa "> f</ span > < span class ="s2 "> "Slice </ span > < span class ="si "> {</ span > < span class ="n "> slice_name</ span > < span class ="si "> }</ span > < span class ="s2 "> is empty. Please check your slice "</ span >
522
529
< span class ="sa "> f</ span > < span class ="s2 "> "configuration or the data."</ span > < span class ="p "> ,</ span >
523
530
< span class ="p "> )</ span >
524
531
525
532
< span class ="k "> for</ span > < span class ="n "> prediction_column</ span > < span class ="ow "> in</ span > < span class ="n "> prediction_columns</ span > < span class ="p "> :</ span >
526
- < span class ="k "> if</ span > < span class ="p "> (</ span >
533
+ < span class ="k "> if</ span > < span class ="nb "> len</ span > < span class ="p "> (</ span > < span class ="n "> sliced_dataset</ span > < span class ="p "> )</ span > < span class ="o "> ==</ span > < span class ="mi "> 0</ span > < span class ="p "> :</ span >
534
+ < span class ="n "> warnings</ span > < span class ="o "> .</ span > < span class ="n "> warn</ span > < span class ="p "> (</ span >
535
+ < span class ="s2 "> "Got an empty dataset after applying the slice "</ span >
536
+ < span class ="s2 "> "</ span > < span class ="si "> %s</ span > < span class ="s2 "> . Metric values will be set to `None`."</ span > < span class ="o "> %</ span > < span class ="n "> slice_name</ span > < span class ="p "> ,</ span >
537
+ < span class ="ne "> RuntimeWarning</ span > < span class ="p "> ,</ span >
538
+ < span class ="n "> stacklevel</ span > < span class ="o "> =</ span > < span class ="mi "> 1</ span > < span class ="p "> ,</ span >
539
+ < span class ="p "> )</ span >
540
+ < span class ="n "> metric_output</ span > < span class ="o "> =</ span > < span class ="p "> {</ span >
541
+ < span class ="n "> metric_name</ span > < span class ="p "> :</ span > < span class ="nb "> float</ span > < span class ="p "> (</ span > < span class ="s2 "> "NaN"</ span > < span class ="p "> )</ span > < span class ="k "> for</ span > < span class ="n "> metric_name</ span > < span class ="ow "> in</ span > < span class ="n "> metrics</ span >
542
+ < span class ="p "> }</ span >
543
+ < span class ="k "> elif</ span > < span class ="p "> (</ span >
527
544
< span class ="n "> batch_size</ span > < span class ="ow "> is</ span > < span class ="kc "> None</ span > < span class ="ow "> or</ span > < span class ="n "> batch_size</ span > < span class ="o "> <</ span > < span class ="mi "> 0</ span >
528
545
< span class ="p "> ):</ span > < span class ="c1 "> # dataset.iter does not support getting all batches at once</ span >
529
546
< span class ="n "> targets</ span > < span class ="o "> =</ span > < span class ="n "> get_columns_as_numpy_array</ span > < span class ="p "> (</ span >
0 commit comments