Crash with numeric literal in place of units
The simple input print(1 [0])
causes a crash:
Traceback (most recent call last):
File "vre-language/src/virtmat/language/utilities/errors.py", line 306, in wrapper
return func(*args, **kwargs)
File "vre-language/src/virtmat/language/interpreter/workflow_executor.py", line 296, in print_value
raise err
File "vre-language/src/virtmat/language/interpreter/workflow_executor.py", line 291, in print_value
val = par.value
File "/usr/lib64/python3.9/functools.py", line 993, in __get__
val = self.func(instance)
File "vre-language/src/virtmat/language/utilities/errors.py", line 213, in wrapper
raise TextXError(str(err), **get_location_context(obj)) from err
textx.exceptions.TextXError: None:1:583: Unit expression cannot have a scaling factor. => '1 [0]'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "vre-language/src/virtmat/language/utilities/errors.py", line 306, in wrapper
return func(*args, **kwargs)
File "vre-language/src/virtmat/language/interpreter/session_manager.py", line 164, in get_model_value
return getattr(self.session.get_model(*args, uuid=self.uuid, **kwargs), 'value', '')
File "vre-language/src/virtmat/language/interpreter/instant_executor.py", line 55, in program_value
vals = [p.value for p in get_children_of_type('Print', self) if p.value]
File "vre-language/src/virtmat/language/interpreter/instant_executor.py", line 55, in <listcomp>
vals = [p.value for p in get_children_of_type('Print', self) if p.value]
File "vre-language/src/virtmat/language/utilities/errors.py", line 308, in wrapper
process_error(err)
File "vre-language/src/virtmat/language/utilities/errors.py", line 296, in process_error
raise err.__cause__
File "vre-language/src/virtmat/language/utilities/errors.py", line 209, in wrapper
return func(*args, **kwargs)
File "vre-language/src/virtmat/language/utilities/typemap.py", line 117, in wrapper
return checktype_(func(obj), obj.type_)
File "vre-language/src/virtmat/language/interpreter/workflow_executor.py", line 364, in func_value
return func(*[p.value for p in pars])
File "vre-language/src/virtmat/language/interpreter/deferred_executor.py", line 134, in <lambda>
return (lambda: typemap['Quantity'](*pars), tuple())
File "jupyter-tensorflow-2023-10-10/lib64/python3.9/site-packages/pint/facets/plain/quantity.py", line 212, in __new__
units = inst._REGISTRY.parse_units(units)._units
File "jupyter-tensorflow-2023-10-10/lib64/python3.9/site-packages/pint/facets/plain/registry.py", line 1202, in parse_units
self.parse_units_as_container(input_string, as_delta, case_sensitive)
File "jupyter-tensorflow-2023-10-10/lib64/python3.9/site-packages/pint/facets/nonmultiplicative/registry.py", line 69, in parse_units_as_container
return super().parse_units_as_container(input_string, as_delta, case_sensitive)
File "jupyter-tensorflow-2023-10-10/lib64/python3.9/site-packages/pint/facets/plain/registry.py", line 1217, in parse_units_as_container
return self._parse_units_as_container(input_string, as_delta, case_sensitive)
File "jupyter-tensorflow-2023-10-10/lib64/python3.9/site-packages/pint/facets/plain/registry.py", line 1247, in _parse_units_as_container
raise ValueError("Unit expression cannot have a scaling factor.")
ValueError: Unit expression cannot have a scaling factor.
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "vre-language/src/virtmat/language/utilities/errors.py", line 306, in wrapper
return func(*args, **kwargs)
File "vre-language/src/virtmat/language/interpreter/session_manager.py", line 184, in process_input
output = self.get_model_value(model_str=f'print({input_str})')
File "vre-language/src/virtmat/language/utilities/errors.py", line 341, in wrapper
raise RuntimeError('non-handled exception') from err
RuntimeError: non-handled exception
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "vre-language/src/virtmat/language/utilities/errors.py", line 306, in wrapper
return func(*args, **kwargs)
File "vre-language/src/virtmat/language/cli/run_session.py", line 98, in main
mgr.main_loop()
File "vre-language/src/virtmat/language/interpreter/session_manager.py", line 143, in main_loop
self.interact(banner='Welcome to textS/textM. Type %help for some help.',
File "/usr/lib64/python3.9/code.py", line 232, in interact
more = self.push(line)
File "/usr/lib64/python3.9/code.py", line 258, in push
more = self.runsource(source, self.filename)
File "vre-language/src/virtmat/language/interpreter/session_manager.py", line 155, in runsource
need_inp = self.process_input(source)
File "vre-language/src/virtmat/language/utilities/errors.py", line 341, in wrapper
raise RuntimeError('non-handled exception') from err
RuntimeError: non-handled exception
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "vre-language/src/virtmat/language/utilities/errors.py", line 306, in wrapper
return func(*args, **kwargs)
File "vre-language/src/virtmat/language/cli/__init__.py", line 36, in texts
clargs.func(clargs)
File "vre-language/src/virtmat/language/utilities/errors.py", line 341, in wrapper
raise RuntimeError('non-handled exception') from err
RuntimeError: non-handled exception
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "jupyter-tensorflow-2023-10-10/bin/texts", line 8, in <module>
sys.exit(texts())
File "vre-language/src/virtmat/language/utilities/errors.py", line 341, in wrapper
raise RuntimeError('non-handled exception') from err
RuntimeError: non-handled exception
Even if this exception is wrapped it will be issued at run time in this meaningful case: s = (n: 1, 2); print(s:array[0])
. The intention is to print the first element but the parser expects units. The problem does not occur in this case: arr = [1, 2]; print(arr[0])
. Obviously, it has occurs in the case :array
is applied to series.
Edited by Ivan Kondov