Recursion error with new unit annotations
The new useDisplayUnit
hook may end up in infinite recursion when looking up the unit_system
. This is because the schemas may have cyclical structures, and the unit_system
cannot be resolved simply from the metainfo definition, but we also need the path where this definition is used.
Can be reproduced with something like this:
import numpy as np
from nomad.metainfo import Quantity, Package, MSection, SubSection, SectionProxy
from nomad.datamodel.data import EntryData
from nomad.datamodel.metainfo.annotations import ELNAnnotation, ELNComponentEnum
m_package = Package()
class MySectionRecursiveA(MSection):
child_a = SubSection(section_def=SectionProxy('MySectionRecursiveB'))
volume_a = Quantity(
type=np.float64,
unit='ml',
a_eln=dict(component='NumberEditQuantity', defaultDisplayUnit='ml')
)
class MySectionRecursiveB(MSection):
child_b = SubSection(section_def=MySectionRecursiveA)
volume_b = Quantity(
type=np.float64,
unit='ml',
a_eln=dict(component='NumberEditQuantity', defaultDisplayUnit='ml')
)
class MySchema(EntryData):
child_root = SubSection(section_def=MySectionRecursiveA)
volume_root = Quantity(
type=np.float64,
unit='ml',
a_eln=dict(component='NumberEditQuantity', defaultDisplayUnit='ml')
)
m_package.__init_metainfo__()
Edited by Lauri Himanen