Skip to main content

A tool to convert yaml NeXus application definitions (nyaml) to nexus definitions language (nxdl).

Project description

PyPI - Python Version PyPI Pytest Code style: black

Nyaml to nxdl

A tool to convert yaml NeXus application definitions (nyaml) to nexus definitions language (nxdl) and vice versa.

This tool is a simple command line interface and can be used by calling nyaml2nxdl or its shortcut n2n:

user@box:~$ nyaml2nxdl --help
Usage: nyaml2nxdl [OPTIONS] INPUT_FILE

  Main function that distinguishes the input file format and launches the
  tools.

Options:
  --output-file TEXT   The output file path to write the converted file to
  --check-consistency  Check if yaml and nxdl can be converted from one to
                       another version recursively and get the same version of
                       file. E.g. from NXexample.nxdl.xml to
                       NXexample_consistency.nxdl.xml.
  --do-not-store-nxdl  Whether the input nxdl file will be stored as a comment
                       at the end of output yaml file.
  --verbose            Print in standard output keywords and value types to
                       help possible issues in yaml files
  --help               Show this message and exit.

How the tool works:

  1. Reads the user-specified NeXus instance, either in yaml or xml format.
  2. If input is in yaml, creates an instantiated nxdl schema xml tree by walking the dictionary nest. If input is in xml, creates a yaml file walking the dictionary nest.
  3. Write the tree into a yaml file or a properly formatted nxdl file to disk.
  4. Optionally, if --append argument is given, the XML or yaml input file is interpreted as an extension of a base class and the entries contained in it are appended below a standard NeXus base class. You need to specify both your input file (with yaml or xml extension) and NeXus class (with no extension). Both .yaml and .nxdl.xml file of the extended class are printed.

How to install

The tool can be easily installed via pip

pip install nyaml

or as a development install from this repository

git clone https://github.com/FAIRmat-NFDI/nyaml.git
cd nyaml
pip install -e ".[dev]"

Documentation

Rule set: From transcoding YAML files we need to follow several rules.

  • Named NeXus groups, which are instances of NeXus classes especially base or contributed classes. Creating (NXbeam) is a simple example of a request to define a group named according to NeXus default rules. mybeam1(NXbeam) or mybeam2(NXbeam) are examples how to create multiple named instances at the same hierarchy level.
  • Members of groups so-called fields or attributes. A simple example of a member is voltage. Here the datatype is implied automatically as the default NeXus NX_CHAR type. By contrast, voltage(NX_FLOAT) can be used to instantiate a member of class which should be of NeXus type NX_FLOAT.
  • And attributes of either groups or fields. The mark '@' have to precede the name of attributes.
  • Optionality: For all fields, groups and attributes in application definitions are required by default, except anything (recommended or optional) mentioned.

Special keywords: Several keywords can be used as children of groups, fields, and attributes to specify the members of these. Groups, fields and attributes are nodes of the XML tree.

  • doc:

    • A human-readable description/docstring
    • Doc string may also come as a list of doc parts when user wants to add reference for a concept. Or doc string could be a single doc block.
         energy:  # field
            doc:
               - |
                 Part1 of the entire doc.
                 part1 of the entire doc.
               - |  # Reference for concept
                 xref:
                   spec: <spec>
                   term: <term>
                   url: <url>"
               - |
                 Rest of the doc
                 rest of the doc
         velocity:  # field
            doc: |
               A single block of doc string.
      
      Such structure of doc would appear in nxdl as
      ...
      <field name="energy">
        <doc>
            Part1 of the entire doc.
            part1 of the entire doc.
      
                This concept is related to term `&lt;term&gt;`_ of the &lt;spec&gt; standard.
            .. _&lt;term&gt;: &lt;url&gt;
      
            Rest of the doc
            rest of the doc
        </doc>
      </field>
      <field name="velocity">
        <doc>
            A single block of doc string.
        </doc>
      </field>
      
  • exists Options are recommended, required, [min, 1, max, infty] numbers like here 1 can be replaced by any uint (unsigned integer), or infty to indicate no restriction on how frequently the entry can occur inside the NXDL schema at the same hierarchy level.

  • link Define links between nodes.

  • units A statement introducing NeXus-compliant NXDL units arguments, like NX_VOLTAGE

  • dimensions Details which dimensional arrays to expect

  • dim Shorthand notation for dimensions, e.g., (n, ) for an 1D array of length n or (n, m) for an 2D array of size n x m.

  • enumeration Python list of strings which are considered as recommended entries to choose from.

  • dim_parameters dim which is a child of dimension and the dim might have several attributes ref, incr including index and value. So while writing yaml file schema definition please following structure:

dimensions:
   rank: integer value
   dim: [[ind_1, val_1], [ind_2, val_2], ...]
   dim_parameters:
      ref: [ref_value_1, ref_value_2, ...]
      incr: [incr_value_1, incr_value_2, ...]

Keep in mind that length of all the lists must have the same size. Important Note: The attributes ref, incr, index are deprecated.

Project roadmap

The NOMAD team is currently working to establish a one-to-one mapping between NeXus definitions and the NOMAD MetaInfo(scientific data model in nomad). As soon as this is in place the YAML files will be annotated with further metadata so that they can serve two purposes. On the one hand they can serve as an instance for a schema to create a GUI representation of a NOMAD Oasis ELN schema. On the other hand the YAML to NXDL converter will skip all those pieces of information which are irrelevant from a NeXus perspective.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nyaml-0.0.4.tar.gz (92.4 kB view details)

Uploaded Source

Built Distribution

nyaml-0.0.4-py3-none-any.whl (46.0 kB view details)

Uploaded Python 3

File details

Details for the file nyaml-0.0.4.tar.gz.

File metadata

  • Download URL: nyaml-0.0.4.tar.gz
  • Upload date:
  • Size: 92.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for nyaml-0.0.4.tar.gz
Algorithm Hash digest
SHA256 423e66c5ee94d6c1fbda304a5af937815bf3ca1e9c9ed5d8aa54df1bfe195c54
MD5 19554bf52191ce4a8b0ee61b76bcf9c2
BLAKE2b-256 6895702b4d36f50a177a3b06618ee461493f37e75c852d24a0b124140b3da319

See more details on using hashes here.

File details

Details for the file nyaml-0.0.4-py3-none-any.whl.

File metadata

  • Download URL: nyaml-0.0.4-py3-none-any.whl
  • Upload date:
  • Size: 46.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for nyaml-0.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 cf7904e37bce05de433a5bab317f785d8b451838bfdecc8e375e0b45415266ff
MD5 925ee28127f5e5e53a62846f585b5a2f
BLAKE2b-256 6033448c89004814aeee55df05bade59d186cf37d27516af59db6a252a0b19da

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page