Skip to content

Commit ee03296

Browse files
committed
ENH(op): validate function results against operation provides.
1 parent 4b29845 commit ee03296

File tree

1 file changed

+15
-8
lines changed

1 file changed

+15
-8
lines changed

graphtik/op.py

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,12 @@ def __repr__(self):
128128
f"provides={provides!r}, fn{returns_dict_marker}={fn_name!r})"
129129
)
130130

131+
def _validate_results(self, results: dict, real_provides: list):
132+
if set(results) != set(real_provides):
133+
raise ValueError(
134+
f"Results({results}) mismatched provides({real_provides})!\n {self}"
135+
)
136+
131137
def compute(self, named_inputs, outputs=None) -> dict:
132138
try:
133139
args = [
@@ -151,18 +157,19 @@ def compute(self, named_inputs, outputs=None) -> dict:
151157

152158
if not provides:
153159
# All outputs were sideffects?
154-
return {}
160+
results = {}
155161

156-
if not self.returns_dict:
162+
elif not self.returns_dict:
157163
if len(provides) == 1:
158164
results = [results]
159165

160-
results = zip(provides, results)
161-
if outputs:
162-
outputs = set(n for n in outputs if not isinstance(n, sideffect))
163-
results = {key: val for key, val in results if key in outputs}
164-
else:
165-
results = dict(results)
166+
results = dict(zip(provides, results))
167+
168+
self._validate_results(results, provides)
169+
170+
if outputs:
171+
outputs = set(n for n in outputs if not isinstance(n, sideffect))
172+
results = {key: val for key, val in results.items() if key in outputs}
166173

167174
return results
168175
except Exception as ex:

0 commit comments

Comments
 (0)