psyke 0.8.2.dev9__tar.gz → 0.8.2.dev12__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.

Potentially problematic release.


This version of psyke might be problematic. Click here for more details.

Files changed (77) hide show
  1. {psyke-0.8.2.dev9/psyke.egg-info → psyke-0.8.2.dev12}/PKG-INFO +1 -1
  2. psyke-0.8.2.dev12/VERSION +1 -0
  3. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke/extraction/hypercubic/__init__.py +40 -10
  4. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12/psyke.egg-info}/PKG-INFO +1 -1
  5. psyke-0.8.2.dev9/VERSION +0 -1
  6. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/LICENSE +0 -0
  7. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/MANIFEST.in +0 -0
  8. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/README.md +0 -0
  9. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke/__init__.py +0 -0
  10. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke/clustering/__init__.py +0 -0
  11. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke/clustering/cream/__init__.py +0 -0
  12. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke/clustering/exact/__init__.py +0 -0
  13. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke/clustering/utils.py +0 -0
  14. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke/extraction/__init__.py +0 -0
  15. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke/extraction/cart/__init__.py +0 -0
  16. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke/extraction/cart/predictor.py +0 -0
  17. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke/extraction/hypercubic/cosmik/__init__.py +0 -0
  18. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke/extraction/hypercubic/creepy/__init__.py +0 -0
  19. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke/extraction/hypercubic/divine/__init__.py +0 -0
  20. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke/extraction/hypercubic/gridex/__init__.py +0 -0
  21. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke/extraction/hypercubic/gridrex/__init__.py +0 -0
  22. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke/extraction/hypercubic/hex/__init__.py +0 -0
  23. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke/extraction/hypercubic/hypercube.py +0 -0
  24. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke/extraction/hypercubic/iter/__init__.py +0 -0
  25. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke/extraction/hypercubic/strategy.py +0 -0
  26. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke/extraction/hypercubic/utils.py +0 -0
  27. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke/extraction/real/__init__.py +0 -0
  28. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke/extraction/real/utils.py +0 -0
  29. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke/extraction/trepan/__init__.py +0 -0
  30. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke/extraction/trepan/utils.py +0 -0
  31. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke/hypercubepredictor.py +0 -0
  32. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke/schema/__init__.py +0 -0
  33. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke/tuning/__init__.py +0 -0
  34. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke/tuning/crash/__init__.py +0 -0
  35. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke/tuning/orchid/__init__.py +0 -0
  36. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke/tuning/pedro/__init__.py +0 -0
  37. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke/utils/__init__.py +0 -0
  38. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke/utils/dataframe.py +0 -0
  39. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke/utils/logic.py +0 -0
  40. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke/utils/metrics.py +0 -0
  41. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke/utils/plot.py +0 -0
  42. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke/utils/sorted.py +0 -0
  43. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke.egg-info/SOURCES.txt +0 -0
  44. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke.egg-info/dependency_links.txt +0 -0
  45. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke.egg-info/not-zip-safe +0 -0
  46. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke.egg-info/requires.txt +0 -0
  47. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/psyke.egg-info/top_level.txt +0 -0
  48. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/pyproject.toml +0 -0
  49. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/setup.cfg +0 -0
  50. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/setup.py +0 -0
  51. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/test/psyke/__init__.py +0 -0
  52. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/test/psyke/clustering/__init__.py +0 -0
  53. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/test/psyke/extraction/__init__.py +0 -0
  54. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/test/psyke/extraction/cart/__init__.py +0 -0
  55. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/test/psyke/extraction/cart/test_cart.py +0 -0
  56. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/test/psyke/extraction/cart/test_simplified_cart.py +0 -0
  57. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/test/psyke/extraction/hypercubic/__init__.py +0 -0
  58. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/test/psyke/extraction/hypercubic/gridex/__init__.py +0 -0
  59. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/test/psyke/extraction/hypercubic/gridex/test_gridex.py +0 -0
  60. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/test/psyke/extraction/hypercubic/iter/__init__.py +0 -0
  61. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/test/psyke/extraction/hypercubic/iter/test_iter.py +0 -0
  62. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/test/psyke/extraction/hypercubic/test_hypercube.py +0 -0
  63. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/test/psyke/extraction/real/__init__.py +0 -0
  64. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/test/psyke/extraction/real/test_real.py +0 -0
  65. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/test/psyke/extraction/real/test_rule.py +0 -0
  66. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/test/psyke/extraction/trepan/__init__.py +0 -0
  67. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/test/psyke/extraction/trepan/test_node.py +0 -0
  68. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/test/psyke/extraction/trepan/test_split.py +0 -0
  69. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/test/psyke/extraction/trepan/test_trepan.py +0 -0
  70. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/test/psyke/utils/__init__.py +0 -0
  71. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/test/psyke/utils/test_prune.py +0 -0
  72. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/test/psyke/utils/test_simplify.py +0 -0
  73. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/test/psyke/utils/test_simplify_formatter.py +0 -0
  74. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/test/resources/__init__.py +0 -0
  75. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/test/resources/datasets/__init__.py +0 -0
  76. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/test/resources/predictors/__init__.py +0 -0
  77. {psyke-0.8.2.dev9 → psyke-0.8.2.dev12}/test/resources/tests/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: psyke
3
- Version: 0.8.2.dev9
3
+ Version: 0.8.2.dev12
4
4
  Summary: Python-based implementation of PSyKE, i.e. a Platform for Symbolic Knowledge Extraction
5
5
  Home-page: https://github.com/psykei/psyke-python
6
6
  Author: Matteo Magnini
@@ -0,0 +1 @@
1
+ 0.8.2.dev12
@@ -44,38 +44,68 @@ class HyperCubeExtractor(HyperCubePredictor, PedagogicalExtractor, ABC):
44
44
  self._surrounding.update(dataframe, self.predictor)
45
45
  return theory
46
46
 
47
- def predict_counter(self, data: dict[str, float]):
47
+ def pairwise_fairness(self, data: dict[str, float], neighbor: dict[str, float]):
48
+ cube1 = self._find_cube(data.copy())
49
+ cube2 = self._find_cube(neighbor.copy())
50
+ different_prediction_reasons = []
51
+
52
+ if cube1.output == cube2.output:
53
+ print("Prediction", cube1.output, "is FAIR")
54
+ else:
55
+ print("Prediction", cube1.output, "may be UNFAIR")
56
+ print("It could be", cube2.output, "if:")
57
+ for d in data:
58
+ a, b = cube2.dimensions[d]
59
+ if data[d] < a:
60
+ print(' ', d, 'increases above', round(a, 1))
61
+ different_prediction_reasons.append(d)
62
+ elif data[d] > b:
63
+ print(' ', d, 'decreases below', round(b, 1))
64
+ different_prediction_reasons.append(d)
65
+ return different_prediction_reasons
66
+
67
+ def predict_counter(self, data: dict[str, float], verbose=True):
68
+ output = ""
69
+ prediction = None
48
70
  cube = self._find_cube(data.copy())
49
71
  if cube is None:
50
- print("The extracted knowledge is not exhaustive; impossible to predict this instance")
72
+ output += "The extracted knowledge is not exhaustive; impossible to predict this instance"
51
73
  else:
52
- print("The output is", self._predict_from_cubes(data))
74
+ prediction = self._predict_from_cubes(data)
75
+ output += f"The output is {prediction}\n"
53
76
 
54
77
  point = Point(list(data.keys()), list(data.values()))
55
78
  cubes = self._hypercubes if cube is None else [c for c in self._hypercubes if cube.output != c.output]
56
79
  cubes = sorted([(cube.surface_distance(point), cube.volume(), cube) for cube in cubes])
57
80
  outputs = []
81
+ different_prediction_reasons = []
58
82
  for _, _, c in cubes:
59
83
  if c.output not in outputs:
60
84
  outputs.append(c.output)
61
- print("The output may be", c.output, 'if')
85
+ output += f"The output may be {c.output} if"
62
86
 
63
87
  for d in point.dimensions.keys():
64
88
  lower, upper = c[d]
65
89
  p = point[d]
66
90
  if p < lower:
67
- print(' ', d, '=', round(lower, 1))
91
+ output += f"\n {d} increases above {round(lower, 1)}"
92
+ different_prediction_reasons.append((d, '>=', lower))
68
93
  elif p > upper:
69
- print(' ', d, '=', round(upper, 1))
94
+ output += f"\n {d} decreses below {round(upper, 1)}"
95
+ different_prediction_reasons.append((d, '<=', upper))
96
+ if verbose:
97
+ print(output)
98
+ return prediction, different_prediction_reasons
70
99
 
71
- def __get_local_conditions(self, cube: GenericCube) -> dict[list[Value]]:
100
+ def __get_local_conditions(self, data: dict[str, float], cube: GenericCube) -> dict[list[Value]]:
72
101
  conditions = {d: [] for d in cube.dimensions}
73
102
  for d in cube.finite_dimensions:
74
103
  conditions[d].append(Between(*cube.dimensions[d]))
75
104
  subcubes = cube.subcubes(self._hypercubes)
76
105
  for c in [c for c in subcubes if sum(c in sc and c != sc for sc in subcubes) == 0]:
77
- for d in c.finite_dimensions:
78
- conditions[d].append(Outside(*c.dimensions[d]))
106
+ for d in [d for d in c.finite_dimensions if d in data]:
107
+ if c.dimensions[d][0] > data[d] or c.dimensions[d][1] < data[d]:
108
+ conditions[d].append(Outside(*c.dimensions[d]))
79
109
  return conditions
80
110
 
81
111
  def predict_why(self, data: dict[str, float]):
@@ -85,7 +115,7 @@ class HyperCubeExtractor(HyperCubePredictor, PedagogicalExtractor, ABC):
85
115
  else:
86
116
  output = self._predict_from_cubes(data)
87
117
  print(f"The output is {output} because")
88
- conditions = self.__get_local_conditions(cube)
118
+ conditions = self.__get_local_conditions(data, cube)
89
119
  for d in data.keys():
90
120
  simplified = HyperCubeExtractor.__simplify(conditions[d])
91
121
  for i, condition in enumerate(simplified):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: psyke
3
- Version: 0.8.2.dev9
3
+ Version: 0.8.2.dev12
4
4
  Summary: Python-based implementation of PSyKE, i.e. a Platform for Symbolic Knowledge Extraction
5
5
  Home-page: https://github.com/psykei/psyke-python
6
6
  Author: Matteo Magnini
psyke-0.8.2.dev9/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.8.2.dev9
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes