zobristnicholas / pysonnet

Python tools for working with Sonnet E&M data
MIT License
2 stars 4 forks source link

Bug with `std.any` #5

Open Danipulok opened 2 months ago

Danipulok commented 2 months ago

Package version: Version: 0.0.2

Code:

snippet = """
local myArray = [3, 7, 12, 5, 9];

local condition = function(x) x > 10;

local booleanArray = std.map(function(x) condition(x), myArray);

local result = std.any(booleanArray);

{
  "myArray": myArray,
  "condition": "x > 10",
  "result": result
}
"""

import pysonnet
res = pysonnet.loads(snippet)
print(res)

Expected:

{
    "condition": "x > 10",
    "myArray": [
        3,
        7,
        12,
        5,
        9
    ],
    "result": true
}

Actual:

Traceback (most recent call last):
  File "D:\project\.venv\Lib\site-packages\pysonnet\evaluator.py", line 261, in _evaluate_binary
    value = left[right]
            ~~~~^^^^^^^
KeyError: 'any'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "D:\project\.jsonnet_mre.py", line 22, in <module>
    res = pysonnet.loads(snippet)
          ^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\project\.venv\Lib\site-packages\pysonnet\__init__.py", line 55, in loads
    return value.to_json()
           ^^^^^^^^^^^^^^^
  File "D:\project\.venv\Lib\site-packages\pysonnet\objects.py", line 324, in to_json
    return {key: value.to_json() for key, value in self.items() if self.visibility(key) != Object.Visibility.HIDDEN}
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\project\.venv\Lib\site-packages\pysonnet\objects.py", line 324, in <dictcomp>
    return {key: value.to_json() for key, value in self.items() if self.visibility(key) != Object.Visibility.HIDDEN}
                 ^^^^^^^^^^^^^^^
  File "D:\project\.venv\Lib\site-packages\pysonnet\objects.py", line 67, in to_json
    return self().to_json()
           ^^^^^^
  File "D:\project\.venv\Lib\site-packages\pysonnet\objects.py", line 52, in __call__
    value = self._constructor()
            ^^^^^^^^^^^^^^^^^^^
  File "D:\project\.venv\Lib\site-packages\pysonnet\evaluator.py", line 17, in <lambda>
    return Lazy(lambda evalualtor=evaluator, node=node, context=context: evaluator(node, context))  # type: ignore[misc]
                                                                         ^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\project\.venv\Lib\site-packages\pysonnet\evaluator.py", line 524, in __call__
    return self._evaluate_identifier(node, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\project\.venv\Lib\site-packages\pysonnet\evaluator.py", line 74, in _evaluate_identifier
    value = value()
            ^^^^^^^
  File "D:\project\.venv\Lib\site-packages\pysonnet\objects.py", line 52, in __call__
    value = self._constructor()
            ^^^^^^^^^^^^^^^^^^^
  File "D:\project\.venv\Lib\site-packages\pysonnet\evaluator.py", line 17, in <lambda>
    return Lazy(lambda evalualtor=evaluator, node=node, context=context: evaluator(node, context))  # type: ignore[misc]
                                                                         ^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\project\.venv\Lib\site-packages\pysonnet\evaluator.py", line 530, in __call__
    return self._evaluate_apply(node, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\project\.venv\Lib\site-packages\pysonnet\evaluator.py", line 270, in _evaluate_apply
    callee = self(node.callee, context)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\project\.venv\Lib\site-packages\pysonnet\evaluator.py", line 527, in __call__
    return self._evaluate_binary(node, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\project\.venv\Lib\site-packages\pysonnet\evaluator.py", line 263, in _evaluate_binary
    raise PysonnetRuntimeError(f"Field does not exist: {right}")
pysonnet.errors.PysonnetRuntimeError: Field does not exist: any