Skip to content

ConfigParser can't get references with same prefix #5931

@Nic-Ma

Description

@Nic-Ma

Describe the bug
Issue reported by @dongyang0122 , the ConfigParser module can't get references in the same expression with same prefix.
Program to reproduce it:

>>> from monai.bundle import ConfigParser
>>> 
>>> data = {"training": {"num_epochs": 1, "num_epochs_per_validation": 2}, "total_iters": "$@training#num_epochs + @training#num_epochs_per_validation + 1"}
>>> parser = ConfigParser(config=data)
>>> print(parser.get_parsed_content("total_iters"))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/workspace/data/medical/MONAI/monai/bundle/config_parser.py", line 287, in get_parsed_content
    return self.ref_resolver.get_resolved_content(id=id, **kwargs)
  File "/workspace/data/medical/MONAI/monai/bundle/reference_resolver.py", line 188, in get_resolved_content
    return self._resolve_one_item(id=id, **kwargs)
  File "/workspace/data/medical/MONAI/monai/bundle/reference_resolver.py", line 170, in _resolve_one_item
    item.evaluate(globals={f"{self._vars}": self.resolved_content}) if run_eval else item
  File "/workspace/data/medical/MONAI/monai/bundle/config_item.py", line 363, in evaluate
    optional_module = self._parse_import_string(value[len(self.prefix) :])
  File "/workspace/data/medical/MONAI/monai/bundle/config_item.py", line 333, in _parse_import_string
    node = first(ast.iter_child_nodes(ast.parse(import_string)))
  File "/usr/lib/python3.8/ast.py", line 47, in parse
    return compile(source, filename, mode, flags,
  File "<unknown>", line 1
    __local_refs['training#num_epochs'] + __local_refs['training#num_epochs']_per_validation + 1
                                                                             ^
SyntaxError: invalid syntax

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

Relationships

None yet

Development

No branches or pull requests

Issue actions