pytorch
1# Safely load fast C Yaml loader/dumper if they are available
2try:3from yaml import CSafeLoader as Loader4except ImportError:5from yaml import SafeLoader as Loader # type: ignore[assignment, misc]6
7try:8from yaml import CSafeDumper as Dumper9except ImportError:10from yaml import SafeDumper as Dumper # type: ignore[assignment, misc]11YamlDumper = Dumper12
13
14# A custom loader for YAML that errors on duplicate keys.
15# This doesn't happen by default: see https://github.com/yaml/pyyaml/issues/165
16class YamlLoader(Loader):17def construct_mapping(self, node, deep=False): # type: ignore[no-untyped-def]18mapping = []19for key_node, value_node in node.value:20key = self.construct_object(key_node, deep=deep) # type: ignore[no-untyped-call]21assert (22key not in mapping23), f"Found a duplicate key in the yaml. key={key}, line={node.start_mark.line}"24mapping.append(key)25mapping = super().construct_mapping(node, deep=deep) # type: ignore[no-untyped-call]26return mapping27