Skip to content

Commit

Permalink
On object call, pymadng is now made aware of errors
Browse files Browse the repository at this point in the history
(To prevent side effects)
  • Loading branch information
jgray-19 committed Nov 27, 2023
1 parent 1797f81 commit 0d6f9f2
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 5 deletions.
6 changes: 3 additions & 3 deletions src/pymadng/madp_classes.py
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ def __call__(self, *args, **kwargs):
kwargs_str, kwargs_to_send = get_kwargs_string(self._mad.py_name, **kwargs)
args_str, args_to_send = get_args_string(self._mad.py_name, *args)

self._mad.send(
self._mad.psend(
f"{last_obj._name} = __mklast__( {self._name} {{ {kwargs_str[1:-1]} {args_str} }} )"
)
for var in kwargs_to_send + args_to_send:
Expand Down Expand Up @@ -154,7 +154,7 @@ def to_df(self, columns: list = None):
DataFrame, header = pd.DataFrame, "attrs"

py_name, obj_name = self._mad.py_name, self._name
self._mad.send( # Sending every value individually is slow (sending vectors is fast)
self._mad.psend( # Sending every value individually is slow (sending vectors is fast)
f"""
local is_vector, is_number in MAD.typeid
local colnames = {obj_name}:colnames() -- Get the column names
Expand Down Expand Up @@ -214,7 +214,7 @@ def __call_func(self, funcName: str, *args):
"""Call the function funcName and store the result in ``_last``."""
rtrn_ref = madhl_reflast(self._mad)
args_string, vars_to_send = get_args_string(self._mad.py_name, *args)
self._mad.send(f"{rtrn_ref._name} = __mklast__({funcName}({args_string}))\n")
self._mad.psend(f"{rtrn_ref._name} = __mklast__({funcName}({args_string}))\n")
for var in vars_to_send:
self._mad.send(var)
return rtrn_ref
Expand Down
2 changes: 1 addition & 1 deletion src/pymadng/madp_object.py
Original file line number Diff line number Diff line change
Expand Up @@ -288,7 +288,7 @@ def loadfile(self, path: str, *vars: str):
f"assert(loadfile('{path}', nil, {self.py_name}._env))()"
)
else:
script = f"local __req = require('{path}')"
script = f"local __req = require('{path}')"
for var in vars:
script += f"{var} = __req.{var}\n"
self.__process.send(script)
Expand Down
8 changes: 7 additions & 1 deletion tests/obj_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,13 @@ def test_call_last(self):
mad.send("func_test = \\a-> \\b-> \\c-> a+b*c")
self.assertRaises(TypeError, lambda: mad.MAD())
self.assertEqual(mad.func_test(1)(2)(3), 7)

def test_call_fail(self):
with MAD() as mad:
mad.send("func_test = \\a-> \\b-> \\c-> 'a'+b")
mad.func_test(1)(2)(3)
self.assertRaises(RuntimeError, lambda: mad.recv())
self.assertRaises(RuntimeError, lambda: mad.mtable.read("'abad.tfs'").eval())

def test_call_func(self):
with MAD() as mad:
Expand Down Expand Up @@ -377,7 +384,6 @@ def testFailure(self):
self.assertTrue(isinstance(df, tfs.TfsDataFrame))
self.assertEqual(df["string"].tolist(), ["a", "b"])
self.assertEqual(df["number"].tolist(), [1.1, 2.2])

class TestSpeed(unittest.TestCase):

def test_benchmark(self):
Expand Down

0 comments on commit 0d6f9f2

Please sign in to comment.