nwb-linkml/docs/_notes/pynwb.md
Yaroslav Halchenko 2e2ecf10c0 [DATALAD RUNCMD] Do interactive fixing of leftover ambigous typos
=== Do not change lines below ===
{
 "chain": [],
 "cmd": "codespell -w -i 3 -C 2",
 "exit": 0,
 "extra_inputs": [],
 "inputs": [],
 "outputs": [],
 "pwd": "."
}
^^^ Do not change lines above ^^^
2024-04-17 16:00:34 -04:00

3.3 KiB

PyNWB notes

How does pynwb use the schema?

  • nwb-schema is included as a git submodule within pynwb
  • __get_resources encodes the location of the directory
  • __TYPE_MAP eventually contains the schema information
  • on import, load_namespaces populates __TYPE_MAP
  • register_class decorator is used on all pynwb classes to register with __TYPE_MAP
    • Unclear how the schema is used if the containers contain the same information
  • the register_container_type method in hdmf's TypeMap class seems to overwrite the loaded schema???
    • __NS_CATALOG seems to actually hold references to the schema but it doesn't seem to be used anywhere except within __TYPE_MAP ?
  • NWBHDF5IO uses TypeMap to create a BuildManager
    • Parent class HDF5IO then reimplements a lot of basic functionality from elsewhere
    • Parent-parent metaclass HDMFIO appears to be the final writing class?
    • BuildManager.build then calls TypeMap.build ???
  • TypeMap.build ...
  • The DatasetBuilder is returned to the BuildManager which seems to just store it?
  • HDMFIO.write then calls write_builder to use the builder, which is unimplemented in the metaclass
    • HDF5IO.write_builder implements it for HDF5, which then calls write_group, write_dataset, write_link, depending on the builder types, each of which are extremely heavy methods!
    • eg. write_dataset is basically unreadable to me, but seems to implement every type of dataset writing in a single method.
  • At this point it is entirely unclear how the schema is involved, but the file is written.