From e929b71fe1952a04443c3753ccc9d950752451b8 Mon Sep 17 00:00:00 2001 From: Sandor Brockhauser Date: Wed, 14 Jun 2023 14:55:38 +0200 Subject: [PATCH] revert FAIRmat changes, but kept code for first reference --- .github/workflows/ci.yaml | 4 +- Makefile | 7 +- manual/source/conf.py | 80 ++--------- manual/source/index.rst | 54 +++---- nxdl.xsd | 290 +++++++++++++++++++------------------- 5 files changed, 185 insertions(+), 250 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 229211149..34dc020d4 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -4,11 +4,9 @@ on: push: branches: - main # push commit to the main branch - - fairmat pull_request: branches: - main # pull request to the main branch - - fairmat workflow_dispatch: # allow manual triggering inputs: deploy: @@ -81,8 +79,10 @@ jobs: - name: Build User Manual run: | + make pdf make html ls -lAFgh build/manual/build/html/index.html + ls -lAFgh build/manual/build/latex/nexus.pdf - name: Build and Commit the User Manual if: ${{ github.event.inputs.deploy && env.python_version == '3.7' }} diff --git a/Makefile b/Makefile index e8a0ae2b5..44c076c34 100644 --- a/Makefile +++ b/Makefile @@ -60,7 +60,7 @@ pdf :: cp $(BUILD_DIR)/manual/build/latex/nexus.pdf $(BUILD_DIR)/manual/source/_static/NeXusManual.pdf html :: - $(SPHINX) -b html $(BUILD_DIR)/manual/source/ $(BUILD_DIR)/manual/build/html + $(SPHINX) -b html -W $(BUILD_DIR)/manual/source/ $(BUILD_DIR)/manual/build/html impatient-guide :: $(SPHINX) -b html -W $(BUILD_DIR)/impatient-guide/ $(BUILD_DIR)/impatient-guide/build/html @@ -84,11 +84,6 @@ all :: @echo "HTML built: `ls -lAFgh $(BUILD_DIR)/manual/build/html/index.html`" @echo "PDF built: `ls -lAFgh $(BUILD_DIR)/manual/build/latex/nexus.pdf`" -nexus-fairmat-proposal :: - $(MAKE) test - $(MAKE) clean - $(MAKE) prepare - $(SPHINX) -b html $(BUILD_DIR)/manual/source/ $(BUILD_DIR)/manual/build/html # NeXus - Neutron and X-ray Common Data Format # diff --git a/manual/source/conf.py b/manual/source/conf.py index 936ce323a..51b35e4bb 100644 --- a/manual/source/conf.py +++ b/manual/source/conf.py @@ -19,10 +19,10 @@ # -- Project information ----------------------------------------------------- -project = 'NeXus-FAIRmat' -author = 'The FAIRmat collaboration' -copyright = u'2022-{}, {}'.format(datetime.datetime.now().year, author) -description = u'Proposal of NeXus expansion for FAIRmat data' +project = 'nexus' +author = 'NIAC, https://www.nexusformat.org' +copyright = u'1996-{}, {}'.format(datetime.datetime.now().year, author) +description = u'NeXus: A Common Data Format for Neutron, X-ray, and Muon Science' # The full version, including alpha/beta/rc tags version = u'unknown NXDL version' @@ -46,7 +46,6 @@ 'sphinx.ext.ifconfig', 'sphinx.ext.viewcode', 'sphinx.ext.githubpages', - 'sphinx_comments', 'sphinx.ext.todo', 'sphinx_tabs.tabs' ] @@ -68,9 +67,8 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # -html_theme = 'alabaster' -# html_theme = 'sphinxdoc' -# html_theme = 'sphinx_rtd_theme' +# html_theme = 'alabaster' +html_theme = 'sphinxdoc' # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, @@ -79,70 +77,20 @@ # Add extra files html_extra_path = ['CNAME'] -html_logo = 'img/FAIRmat.png' - -if html_theme== 'sphinx_rtd_theme': - html_theme_options = { - 'logo_only': False, - 'collapse_navigation': True, - 'sticky_navigation': True, - 'navigation_depth': 4, - 'includehidden': True, - 'titles_only': False - } - def setup(app): - app.add_css_file('to_rtd.css') -elif html_theme== 'alabaster': # Alabaster allows a very high degree of control form Sphinx conf.py - html_sidebars = { - '**': [ - 'about.html', - 'navigation.html', - 'relations.html', - 'searchbox.html', - 'google_search.html' - ], - } - html_theme_options = { - 'body_text_align': 'justify', - 'logo_name': True, - 'github_button': True, - 'github_type': 'watch', - 'github_repo': 'nexus_definitions/tree/fairmat', - 'github_user': 'FAIRmat-Experimental', - 'github_count': 'false', # We don't get the cute counter baloon if we want to point to the branch - 'sidebar_width': '235px', - 'page_width': '1000px', - 'font_size': '12pt', - 'font_family': 'Arial', - 'description': 'Proposal of NeXus expansion for FAIRmat data.', - 'show_powered_by': True, - 'sidebar_header': '#ffffff', - 'sidebar_hr': '#ffffff', - 'sidebar_link': '#ffffff', - 'sidebar_list': '#ffffff', - 'sidebar_link_underscore': '#ffffff', - 'sidebar_text': '#ffffff' - } - def setup(app): - app.add_css_file('to_alabaster.css') -else: - html_sidebars = { + +html_sidebars = { '**': [ - 'localtoc.html', - 'relations.html', - 'sourcelink.html', - 'searchbox.html', + 'localtoc.html', + 'relations.html', + 'sourcelink.html', + 'searchbox.html', 'google_search.html' - ], - } + ], +} # Output file base name for HTML help builder. htmlhelp_basename = 'NeXusManualdoc' -comments_config = { - "hypothesis": True - } - # -- Options for Latex output ------------------------------------------------- latex_elements = { 'maxlistdepth':7, # some application definitions are deeply nested diff --git a/manual/source/index.rst b/manual/source/index.rst index 25f293f57..bb4717055 100644 --- a/manual/source/index.rst +++ b/manual/source/index.rst @@ -1,40 +1,35 @@ +.. image:: img/NeXus.png + :width: 40% + ======================================= User Manual and Reference Documentation ======================================= -Welcome to the user manual of the NeXus for FAIRmat project. - https://www.nexusformat.org/ .. toctree:: :maxdepth: 2 - - fairmat-cover - nexus-index - em-structure - mpes-structure - ellipsometry-structure - apm-structure - transport-structure - stm-structure - cgms-structure - laboratory-structure - north-structure - - + :numbered: 4 + + user_manual + examples/index + ref_doc + napi + community + installation + utilities + history + docs_about ----------- .. rubric:: Publishing Information -| This commit time code <>. -| This commit identifier <>. -| This manual built |today|. - +This manual built |today|. .. seealso:: - The extended NeXus documentation: + This document is available in these formats online: :HTML: https://manual.nexusformat.org/ @@ -51,14 +46,11 @@ https://www.nexusformat.org/ :PDF: https://manual.nexusformat.org/_static/NXImpatient.pdf - FAIRmat website: - - ``_ - - NOMAD website: - - ``_ - - - +.. Suggestions for adding to this manual: + Look for some other "section" such as "introduction.rst" and act similarly. + Any examples go as text files in the examples/ subdirectory and are pulled into + Sphinx inside a :directive:`literalcode` directive. Look for the pattern + or wing it. If you are ambitious, add index entries. Many examples of the + constructs you might use are already in the manual. + diff --git a/nxdl.xsd b/nxdl.xsd index f5e733dd1..a2ef83e80 100755 --- a/nxdl.xsd +++ b/nxdl.xsd @@ -11,38 +11,38 @@ NeXus - Neutron and X-ray Common Data Format Copyright (C) 2008-2022 NeXus International Advisory Committee (NIAC) - + This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. - + This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. - + You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - + For further information, see http://www.nexusformat.org - + - + - Definitions of the basic data types and unit types + Definitions of the basic data types and unit types allowed in NXDL instance files. - + - + @@ -51,27 +51,27 @@ is the ``group`` at the root of every NXDL specification. It may *only* appear - at the root of an NXDL file and must only appear + at the root of an NXDL file and must only appear **once** for the NXDL to be *well-formed*. - + - + - Used for allowed names of elements and attributes. + Used for allowed names of elements and attributes. Note: No ``-`` characters (among others) are allowed and you cannot start or end with a period (``.``). - HDF4 had a 64 character limit on names - (possibly including NULL) and the NAPI enforces this - via the ``NX_MAXNAMELEN`` variable with + HDF4 had a 64 character limit on names + (possibly including NULL) and the NAPI enforces this + via the ``NX_MAXNAMELEN`` variable with a **64** character limit (which may be 63 on a practical basis if one considers a NULL terminating byte). - (This data type is used internally in the NXDL schema + (This data type is used internally in the NXDL schema to define a data type.) NOTE: In some languages, it may be necessary to add a ``^`` at the start and a ``$`` at the end of the regular @@ -83,49 +83,49 @@ - + Used for allowed names of NX class types (e.g. NXdetector). Note this is *not* the instance name (e.g. ``bank1``) which is covered by ``validItemName``. - (This data type is used internally in the NXDL schema + (This data type is used internally in the NXDL schema to define a data type.) - - + + - + This is a valid link target - currently it must be an absolute path made up of valid names with the ``/`` character delimiter. But we may want to consider allowing "``..``" (parent of directory) at some point. - If the ``name`` attribute is helpful, then use it in the path + If the ``name`` attribute is helpful, then use it in the path with the syntax of *name:type* as in these examples:: - + /NXentry/NXinstrument/analyzer:NXcrystal/ef /NXentry/NXinstrument/monochromator:NXcrystal/ei /NX_other - + Must also consider use of ``name`` attribute in resolving ``link`` targets. - (This data type is used internally in the NXDL schema + (This data type is used internally in the NXDL schema to define a data type.) - - + + From the HDF5 documentation: - - *Note that relative path names in HDF5 do not employ the ``../`` notation, + + *Note that relative path names in HDF5 do not employ the ``../`` notation, the UNIX notation indicating a parent directory, to indicate a parent group.* - - Thus, if we only consider the case of + + Thus, if we only consider the case of ``[name:]type``, the matching regular expression syntax is written: ``/[a-zA-Z_][\w_]*(:[a-zA-Z_][\w_]*)?)+``. Note that HDF5 also permits relative path names, such as: @@ -136,28 +136,28 @@ - + - + - The presence of the ``deprecated`` attribute + The presence of the ``deprecated`` attribute indicates to the data file validation process that an advisory message (specified as the content of the - ``deprecated`` attribute) will be reported. + ``deprecated`` attribute) will be reported. Future versions of the NXDL file might not define (or even re-use) the component marked with this attribute. - + The value of the attribute will be printed in the documentation. Make it descriptive (limited to no line breaks). For example:: - + deprecated="as of release MAJOR.MINOR" - - Note: because ``deprecated`` is an attribute, - the XML rules do not permit it to have any + + Note: because ``deprecated`` is an attribute, + the XML rules do not permit it to have any element content. @@ -173,25 +173,25 @@ A ``definition`` is the root element of every NXDL definition. - It may *only* appear at the root of an NXDL file and must only + It may *only* appear at the root of an NXDL file and must only appear **once** for the NXDL to be *well-formed*. - The ``definitionType`` defines the documentation, + The ``definitionType`` defines the documentation, attributes, fields, and groups that will be used as children of the ``definition`` element. Could contain these elements: - + * ``attribute`` * ``doc`` * ``field`` * ``group`` * ``link`` - Note that a ``definition`` element also includes the definitions of the + Note that a ``definition`` element also includes the definitions of the ``basicComponent`` data type. - (The ``definitionType`` data type is used internally in the NXDL schema + (The ``definitionType`` data type is used internally in the NXDL schema to define elements and attributes to be used by users in NXDL specifications.) - + Note that the first line of text in a ``doc`` element in a ``definition`` is used as a summary in the manual. Follow the pattern as shown in the base class NXDL files. @@ -201,7 +201,7 @@ - Use a ``symbols`` list + Use a ``symbols`` list to define each of the mnemonics that represent the length of each dimension in a vector or array. @@ -299,7 +299,7 @@ their definition in the NeXus base classes and application definitions. Any items found that do not match the definition in the NXDL will generate a warning message. - + The ``ignoreExtraGroups`` attribute should be used sparingly! @@ -315,7 +315,7 @@ their definition in the NeXus base classes and application definitions. Any items found that do not match the definition in the NXDL will generate a warning message. - + The ``ignoreExtraFields`` attribute should be used sparingly! @@ -331,14 +331,14 @@ against their definition in the NeXus base classes and application definitions. Any items found that do not match the definition in the NXDL will generate a warning message. - + The ``ignoreExtraAttributes`` attribute should be used sparingly! - + @@ -352,9 +352,9 @@ - + - + @@ -368,7 +368,7 @@ NeXus base class that could be used here. - The group will take the ``@name`` attribute + The group will take the ``@name`` attribute defined by the parent ``choice`` element so do not specify the ``@name`` attribute of the group here. @@ -380,32 +380,32 @@ - The name to be applied to the selected child group. - None of the child groups should define a + The name to be applied to the selected child group. + None of the child groups should define a ``@name`` attribute. - + - + - A group element refers to the definition of + A group element refers to the definition of an existing NX object or a locally-defined component. Could contain these elements: - + * ``attribute`` * ``doc`` * ``field`` * ``group`` * ``link`` - - Note that a ``group`` element also includes the definitions of the + + Note that a ``group`` element also includes the definitions of the ``basicComponent`` data type. - (The ``groupType`` data type is used internally in the NXDL schema + (The ``groupType`` data type is used internally in the NXDL schema to define elements and attributes to be used by users in NXDL specifications.) @@ -419,8 +419,8 @@ - The ``type`` attribute *must* - contain the name of a + The ``type`` attribute *must* + contain the name of a NeXus base class, application definition, or contributed definition. @@ -433,16 +433,16 @@ required to specify the ``name`` attribute in the NXDL file. It is suggested to always specify a ``name`` - to avoid ambiguity. It is also suggested to - derive the ``name`` from the + to avoid ambiguity. It is also suggested to + derive the ``name`` from the type, using an additional number suffix as necessary. - For example, consider a data file with only one - ``NXentry``. The suggested default + For example, consider a data file with only one + ``NXentry``. The suggested default ``name`` would be ``entry``. For a data file with two or more ``NXentry`` groups, the suggested names would be ``entry1``, ``entry2``, ... - Alternatively, a scientific application such as small-angle + Alternatively, a scientific application such as small-angle scattering might require a different naming procedure; two different ``NXaperture`` groups might be given the names ``beam_defining_slit`` @@ -491,7 +491,7 @@ - A ``groupGroup`` defines the allowed children of a + A ``groupGroup`` defines the allowed children of a ``group`` specification. @@ -499,12 +499,12 @@ - Describe the purpose of this ``group``. + Describe the purpose of this ``group``. This documentation will go into the manual. The first line should summarize as a complete sentence with no line break. (The automatic documentation will pick just the first line as a - summary.) Then a blank line should be added + summary.) Then a blank line should be added before any further documentation. Indentation should be consistent with rules for reStructured text. @@ -514,7 +514,7 @@ - Use an ``attribute`` if additional information + Use an ``attribute`` if additional information needs to be associated with a ``group``. @@ -544,7 +544,7 @@ - Use a ``link`` to refer locally to + Use a ``link`` to refer locally to information placed elsewhere else in the data storage hierarchy. The ``name`` attribute uniquely identifies the element in this ``group``. @@ -557,9 +557,9 @@ The value, as written in the NXDL file, will be a suggestion of the path to the source of the link. For example:: - + - + The value of ``target`` is written using the NeXus class names since this is a suggestion and does not actually use the element names from a particular data file. @@ -612,19 +612,19 @@ - + A ``field`` declares a new element in the component being defined. A ``field`` is synonymous with the HDF4 SDS (Scientific Data Set) and the HDF5 *dataset* terms. Could contain these elements: - + * ``attribute`` * ``dimensions`` * ``doc`` * ``enumeration`` - + Note that a ``field`` element also includes the definitions of the ``basicComponent`` data type. (The ``fieldType`` data type is used internally in the NXDL schema @@ -678,7 +678,7 @@ Presence of the ``signal`` attribute means this field is an ordinate. - + Integer marking this field as plottable data (ordinates). The value indicates the priority of selection or interest. Some facilities only use ``signal=1`` @@ -686,7 +686,7 @@ plottable data of secondary interest. Higher numbers are possible but not common and interpretation is not standard. - + A field with a ``signal`` attribute should not have an ``axis`` attribute. @@ -698,7 +698,7 @@ *field* is discouraged. It is for legacy support. You should use the ``axes`` group attribute (such as in NXdata) instead. - + This attribute contains a string array that defines the independent data fields used in the default plot for all of the dimensions @@ -722,28 +722,28 @@ NOTE: Use of this attribute is discouraged. It is for legacy support. You should use the ``axes`` group attribute (such as in NXdata) instead. - + Presence of the ``axis`` attribute means this field is an abscissa. - + The attribute value is an integer indicating this field as an axis that is part of the data set. The data set is a field with the attribute ``signal=1`` in the same group. The value can range from 1 up to the number of independent axes (abscissae) in the data set. - + A value of ``axis=1``" indicates that this field contains the data for the first independent axis. For example, the X axis in an XY data set. - + A value of ``axis=2`` indicates that this field contains the data for the second independent axis. For example, the Y axis in a 2-D data set. - + A value of ``axis=3`` indicates that this field contains the data for the third independent axis. For example, the Z axis in a 3-D data set. - + A field with an ``axis`` attribute should not have a ``signal`` attribute. @@ -754,7 +754,7 @@ Integer indicating the priority of selection of this field for plotting (or visualization) as an axis. - + Presence of the ``primary`` attribute means this field is an abscissa. @@ -807,11 +807,11 @@ The ``stride`` and ``data_offset`` attributes - are used together to index the array of data items in a + are used together to index the array of data items in a multi-dimensional array. They may be used as an alternative method to address a data array that is not stored in the standard NeXus method of "C" order. - + The ``stride`` list chooses array locations from the data array with each value in the ``stride`` list determining how many elements to move in each dimension. @@ -822,11 +822,11 @@ data array. A value in the ``stride`` list may be positive to move forward or negative to step backward. A value of zero will not step (and is of no particular use). - + See https://support.hdfgroup.org/HDF5/Tutor/phypereg.html or *4. Dataspace Selection Operations* in https://portal.hdfgroup.org/display/HDF5/Dataspaces - + The ``stride`` attribute contains a comma-separated list of integers. (In addition to the required comma delimiter, @@ -849,15 +849,15 @@ multi-dimensional array. They may be used as an alternative method to address a data array that is not stored in the standard NeXus method of "C" order. - + The ``data_offset`` attribute determines the starting coordinates of the data array for each dimension. - + See https://support.hdfgroup.org/HDF5/Tutor/phypereg.html or *4. Dataspace Selection Operations* in https://portal.hdfgroup.org/display/HDF5/Dataspaces - + The ``data_offset`` attribute contains a comma-separated list of integers. (In addition to the required comma delimiter, @@ -875,7 +875,7 @@ This instructs the consumer of the data what the last dimensions of the data are. It allows plotting software to work out the natural way of displaying the data. - + For example a single-element, energy-resolving, fluorescence detector with 512 bins should have ``interpretation="spectrum"``. If the detector is scanned over a 512 x 512 spatial grid, the data reported @@ -883,9 +883,9 @@ In this example, the initial plotting representation should default to data of the same dimensions of a 512 x 512 pixel ``image`` detector where the images where taken at 512 different pressure values. - + In simple terms, the allowed values mean: - + * ``scalar`` = 0-D data to be plotted * ``scaler`` = DEPRECATED, use ``scalar`` * ``spectrum`` = 1-D data to be plotted @@ -931,18 +931,18 @@ - + Any new group or field may expect or require some common attributes. - + .. Could contain these elements: - + * ``doc`` * ``enumeration`` - + (This data type is used internally in the NXDL schema to define elements and attributes to be used by users in NXDL specifications.) @@ -1030,7 +1030,7 @@ - + @@ -1046,24 +1046,24 @@ Declares the absolute HDF5 address of an existing field or group. - + The target attribute is added for NeXus to distinguish the HDF5 path to the original dataset. - + Could contain these elements: - + * ``doc`` - + Matching regular expression:: - + (/[a-zA-Z_][\w_]*(:[a-zA-Z_][\w_]*)?)+ - + For example, given a ``/entry/instrument/detector/polar_angle`` field, link it into the ``NXdata`` group (at ``/entry/data/polar_angle``). This would be the NeXus data file structure:: - + /: NeXus/HDF5 data file /entry:NXentry /data:NXdata @@ -1073,7 +1073,7 @@ /detector:NXdetector /polar_angle:NX_NUMBER @target="/entry/instrument/detector/polar_angle" - + @@ -1082,7 +1082,7 @@ Group attribute that provides a URL to a group in another file. More information is described in the *NeXus Programmers Reference*. - + http://manual.nexusformat.org/_static/NeXusIntern.pdf @@ -1090,7 +1090,7 @@ - + @@ -1103,17 +1103,17 @@ Descriptive name of sample - + This is suitable for basic descriptions that do not need extra formatting such as a bullet-list or a table. For more advanced control, use the rules of restructured text, such as in the :ref:`NXdetector` specification. Refer to examples in the NeXus base class NXDL files such as :ref:`NXdata`. Could contain these elements: - + * *any* - - (This data type is used internally in the NXDL schema + + (This data type is used internally in the NXDL schema to define elements and attributes to be used by users in NXDL specifications.) Note: @@ -1128,14 +1128,14 @@ - + Each ``symbol`` has a ``name`` and optional documentation. Please provide documentation that indicates what each symbol represents. For example:: - + number of reflecting surfaces number of wavelengths @@ -1183,7 +1183,7 @@ - + @@ -1191,15 +1191,15 @@ Each value is specified using an ``item`` element, such as: ``<item value="Synchrotron X-ray Source" />``. Could contain these elements: - + * ``doc`` * ``item`` - - (This data type is used internally in the NXDL schema + + (This data type is used internally in the NXDL schema to define elements and attributes to be used by users in NXDL specifications.) - + :: - + source operating mode @@ -1220,7 +1220,7 @@ Defines the value of one selection for an ``enumeration`` list. Each enumerated item must have a value (it cannot have an empty text node). - + @@ -1245,10 +1245,10 @@ - + - @@ -1275,10 +1275,10 @@ the ``rank`` of the array. For example, these terms describe a 2-D array with lengths (``nsurf``, ``nwl``): - + .. code-block:: xml :linenos: - + @@ -1314,9 +1314,9 @@ - Deprecated: 2016-11-23 telco + Deprecated: 2016-11-23 telco (https://github.com/nexusformat/definitions/issues/330) - + The dimension specification is the same as that in the ``ref`` field, specified either by a relative path, such as ``polar_angle`` or ``../Qvec`` or absolute path, such as @@ -1327,9 +1327,9 @@ - Deprecated: 2016-11-23 telco + Deprecated: 2016-11-23 telco (https://github.com/nexusformat/definitions/issues/330) - + The dimension specification is the same as the ``refindex`` axis within the ``ref`` field. Requires ``ref`` attribute to be present. @@ -1339,9 +1339,9 @@ - Deprecated: 2016-11-23 telco + Deprecated: 2016-11-23 telco (https://github.com/nexusformat/definitions/issues/330) - + The dimension specification is related to the ``refindex`` axis within the ``ref`` field by an offset of ``incr``. Requires ``ref`` and ``refindex`` @@ -1353,9 +1353,9 @@ This dimension is required (true: default) or not required (false). - + The default value is ``true``. - + When ``required="false"`` is specified, all subsequent ``<dim`` nodes (with higher ``index`` value) @@ -1370,10 +1370,10 @@ Rank (number of dimensions) of the data structure. - + Value could be either an unsigned integer or a symbol as defined in the *symbol* table of the NXDL file. - + For example: ``a[5]`` has ``rank="1"`` while ``b[8,5,6,4]`` has ``rank="4"``. See https://en.wikipedia.org/wiki/Rank_%28computer_programming%29 for more details. @@ -1381,5 +1381,5 @@ - +