compositional-explanations 0.0.2__tar.gz → 0.0.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (21) hide show
  1. {compositional_explanations-0.0.2/src/compositional_explanations.egg-info → compositional_explanations-0.0.3}/PKG-INFO +1 -1
  2. {compositional_explanations-0.0.2 → compositional_explanations-0.0.3}/pyproject.toml +1 -1
  3. {compositional_explanations-0.0.2 → compositional_explanations-0.0.3}/src/compositional_explanations/optimal_sample_heuristic.py +44 -1
  4. {compositional_explanations-0.0.2 → compositional_explanations-0.0.3}/src/compositional_explanations/optimal_sum_heuristic.py +17 -1
  5. {compositional_explanations-0.0.2 → compositional_explanations-0.0.3/src/compositional_explanations.egg-info}/PKG-INFO +1 -1
  6. {compositional_explanations-0.0.2 → compositional_explanations-0.0.3}/LICENSE +0 -0
  7. {compositional_explanations-0.0.2 → compositional_explanations-0.0.3}/README.md +0 -0
  8. {compositional_explanations-0.0.2 → compositional_explanations-0.0.3}/setup.cfg +0 -0
  9. {compositional_explanations-0.0.2 → compositional_explanations-0.0.3}/src/compositional_explanations/beam.py +0 -0
  10. {compositional_explanations-0.0.2 → compositional_explanations-0.0.3}/src/compositional_explanations/formula.py +0 -0
  11. {compositional_explanations-0.0.2 → compositional_explanations-0.0.3}/src/compositional_explanations/metrics.py +0 -0
  12. {compositional_explanations-0.0.2 → compositional_explanations-0.0.3}/src/compositional_explanations/optimal.py +0 -0
  13. {compositional_explanations-0.0.2 → compositional_explanations-0.0.3}/src/compositional_explanations/path_heuristic.py +0 -0
  14. {compositional_explanations-0.0.2 → compositional_explanations-0.0.3}/src/compositional_explanations.egg-info/SOURCES.txt +0 -0
  15. {compositional_explanations-0.0.2 → compositional_explanations-0.0.3}/src/compositional_explanations.egg-info/dependency_links.txt +0 -0
  16. {compositional_explanations-0.0.2 → compositional_explanations-0.0.3}/src/compositional_explanations.egg-info/requires.txt +0 -0
  17. {compositional_explanations-0.0.2 → compositional_explanations-0.0.3}/src/compositional_explanations.egg-info/top_level.txt +0 -0
  18. {compositional_explanations-0.0.2 → compositional_explanations-0.0.3}/src/utils/constants.py +0 -0
  19. {compositional_explanations-0.0.2 → compositional_explanations-0.0.3}/src/utils/general_utils.py +0 -0
  20. {compositional_explanations-0.0.2 → compositional_explanations-0.0.3}/src/utils/mask_utils.py +0 -0
  21. {compositional_explanations-0.0.2 → compositional_explanations-0.0.3}/src/utils/optimal_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: compositional_explanations
3
- Version: 0.0.2
3
+ Version: 0.0.3
4
4
  Summary: Package to compute Compositional Explanations both in their optimal and beam format.
5
5
  Author-email: Biagio La Rosa <bilarosa@ucsc.edu>
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "compositional_explanations"
7
- version = "0.0.2"
7
+ version = "0.0.3"
8
8
  authors = [
9
9
  { name="Biagio La Rosa", email="bilarosa@ucsc.edu" },
10
10
  ]
@@ -227,7 +227,7 @@ def estimate_label_info(label, left_quantities, right_quantities, neuron_quantit
227
227
 
228
228
  # Quantities used by all the operators
229
229
  _, neuron_common_tuple, _, _, common_space_extras_tuple, _ = neuron_quantities
230
- neuron_common, _ = neuron_common_tuple
230
+ neuron_common, neuron_common_sum = neuron_common_tuple
231
231
  common_space_extras, _ = common_space_extras_tuple
232
232
  max_left_common_intersection = optimal_utils.get_quantity(
233
233
  label_info=left_quantities,
@@ -308,6 +308,18 @@ def estimate_label_info(label, left_quantities, right_quantities, neuron_quantit
308
308
  )
309
309
 
310
310
  if isinstance(label, F.Or):
311
+ max_right_common_intersection_sum = optimal_utils.get_quantity(
312
+ label_info=right_quantities,
313
+ quantity_name="common_intersection",
314
+ quantity_type="max",
315
+ quantity_scope="sum",
316
+ )
317
+ max_left_common_intersection_sum = optimal_utils.get_quantity(
318
+ label_info=left_quantities,
319
+ quantity_name="common_intersection",
320
+ quantity_type="max",
321
+ quantity_scope="sum",
322
+ )
311
323
  # Auxiliary info: Sum of the right quantities, right unique extras and intersection
312
324
  right_unique_intersection_sum = optimal_utils.get_quantity(
313
325
  label_info=right_quantities,
@@ -315,6 +327,19 @@ def estimate_label_info(label, left_quantities, right_quantities, neuron_quantit
315
327
  quantity_type="max",
316
328
  quantity_scope="sum",
317
329
  )
330
+
331
+ min_left_common_intersection_sum = optimal_utils.get_quantity(
332
+ label_info=left_quantities,
333
+ quantity_name="common_intersection",
334
+ quantity_type="min",
335
+ quantity_scope="sum",
336
+ )
337
+ min_right_common_intersection_sum = optimal_utils.get_quantity(
338
+ label_info=right_quantities,
339
+ quantity_name="common_intersection",
340
+ quantity_type="min",
341
+ quantity_scope="sum",
342
+ )
318
343
  right_unique_extras_sum = optimal_utils.get_quantity(
319
344
  label_info=right_quantities,
320
345
  quantity_name="unique_extras",
@@ -334,6 +359,24 @@ def estimate_label_info(label, left_quantities, right_quantities, neuron_quantit
334
359
  quantity_scope="sample",
335
360
  )
336
361
 
362
+ if (right_unique_intersection_sum == 0 and max_right_common_intersection_sum == 0) or (
363
+ left_unique_intersection_sum == 0 and max_left_common_intersection_sum == 0) or (
364
+ right_unique_intersection_sum == 0 and min_left_common_intersection_sum == neuron_common_sum
365
+ ) or (
366
+ left_unique_intersection_sum == 0 and min_right_common_intersection_sum == neuron_common_sum):
367
+ # If one of the two side does not change to the intersection, we can discard this formula because
368
+ # OR can't reduce the extras
369
+ return None
370
+
371
+ left_can_be_improved = np.where(min_left_common_intersection < neuron_common, True, False) & np.where(min_right_common_intersection > 0, True, False)
372
+ right_can_be_improved = np.where(min_right_common_intersection < neuron_common, True, False) & np.where(min_left_common_intersection > 0, True, False)
373
+ if (right_unique_intersection_sum == 0 and not left_can_be_improved.any()) or (left_unique_intersection_sum == 0 and not right_can_be_improved.any()):
374
+ # If for a sample the min left intersection is already maximum, the right component cannot improve the score
375
+ # Similarly, if the minimum common intersection of the right element is 0, it cannot improve the score for that sample
376
+ return None
377
+
378
+
379
+
337
380
  # OR simply sums the unique elements
338
381
  unique_intersection = left_unique_intersection + right_unique_intersection # I^u(L) + I^u(c)
339
382
 
@@ -245,9 +245,25 @@ def estimate_label_info(label, *, left_quantities, right_quantities, neuron_quan
245
245
  quantity_type="max",
246
246
  quantity_scope="sum",
247
247
  )
248
+ min_left_common_intersection_sum = optimal_utils.get_quantity(
249
+ label_info=left_quantities,
250
+ quantity_name="common_intersection",
251
+ quantity_type="min",
252
+ quantity_scope="sum",
253
+ )
248
254
 
249
- if isinstance(label, F.Or):
250
255
 
256
+ if isinstance(label, F.Or):
257
+ if (right_unique_intersection_sum == 0 and max_right_common_intersection_sum == 0) or (
258
+ left_unique_intersection_sum == 0 and max_left_common_intersection_sum == 0) or (
259
+ right_unique_intersection_sum == 0 and min_left_common_intersection_sum == neuron_common_sum
260
+ ) or (
261
+ left_unique_intersection_sum == 0 and min_right_common_intersection_sum == neuron_common_sum):
262
+ # If one of the two side does not change to the intersection, we can discard this formula because
263
+ # OR can't reduce the extras
264
+ return None
265
+
266
+
251
267
  # Unique elements are additive since they are disjoint
252
268
  unique_intersection_sum = left_unique_intersection_sum + right_unique_intersection_sum
253
269
  unique_extras_sum = left_unique_extras_sum + right_unique_extras_sum
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: compositional_explanations
3
- Version: 0.0.2
3
+ Version: 0.0.3
4
4
  Summary: Package to compute Compositional Explanations both in their optimal and beam format.
5
5
  Author-email: Biagio La Rosa <bilarosa@ucsc.edu>
6
6
  License: MIT