{
  "__type": "IngestedDoc",
  "__tag": 4010,
  "_content": {},
  "_ordered_sections": [],
  "item_file": null,
  "item_line": null,
  "item_type": null,
  "aliases": [],
  "example_section_data": {
    "__type": "Section",
    "__tag": 4015,
    "children": [],
    "title": [],
    "level": 0,
    "target": null
  },
  "see_also": [],
  "signature": null,
  "references": null,
  "qa": "tutorial:io",
  "arbitrary": [
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Admonition",
          "__tag": 4056,
          "kind": "seealso",
          "base_type": "note",
          "children": [
            {
              "__type": "AdmonitionTitle",
              "__tag": 4055,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "seealso `NumPy IO routines <https://www.numpy.org/devdocs/reference/routines.io.html>`__"
                }
              ]
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "File IO ("
        },
        {
          "__type": "InlineRole",
          "__tag": 4003,
          "value": "scipy.io",
          "domain": null,
          "role": "mod",
          "inventory": null
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": ")"
        }
      ],
      "level": 0,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Code",
          "__tag": 4050,
          "value": ".. autosummary:: \n    loadmat\n    savemat\n    whosmat",
          "execution_status": null
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "MATLAB files"
        }
      ],
      "level": 1,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "We'll start by importing "
            },
            {
              "__type": "CrossRef",
              "__tag": 4002,
              "value": "scipy.io",
              "reference": {
                "__type": "RefInfo",
                "__tag": 4000,
                "module": "scipy",
                "version": "*",
                "kind": "api",
                "path": "scipy.io"
              },
              "kind": "module"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and calling it "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "sio"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " for convenience:"
            }
          ]
        },
        {
          "__type": "Blockquote",
          "__tag": 4059,
          "children": [
            {
              "__type": "Code",
              "__tag": 4050,
              "value": ">>> import scipy.io as sio",
              "execution_status": null
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "If you are using IPython, try tab-completing on "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "sio"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". Among the many options, you will find     "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "sio.loadmat\nsio.savemat\nsio.whosmat",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "These are the high-level functions you will most likely use when working with MATLAB files. You'll also find     "
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "sio.matlab",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "This is the package from which "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "loadmat"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "savemat"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "whosmat"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " are imported. Within "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "sio.matlab"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ", you will find the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "mio"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " module This module contains the machinery that "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "loadmat"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " and "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "savemat"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " use. From time to time you may find yourself re-using this machinery."
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "The basic functions"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "You may have a "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": ".mat"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " file that you want to read into SciPy. Or, you want to pass some variables from SciPy / NumPy into MATLAB."
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "To save us using a MATLAB license, let's start in "
            },
            {
              "__type": "InlineRole",
              "__tag": 4003,
              "value": "Octave_",
              "domain": null,
              "role": null,
              "inventory": null
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ". Octave has MATLAB-compatible save and load functions. Start Octave ("
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "octave"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " at the command line for me):"
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "octave:1> a = 1:12\na =\n\n   1   2   3   4   5   6   7   8   9  10  11  12\n\noctave:2> a = reshape(a, [1 3 4])\na =\n\nans(:,:,1) =\n\n   1   2   3\n\nans(:,:,2) =\n\n   4   5   6\n\nans(:,:,3) =\n\n   7   8   9\n\nans(:,:,4) =\n\n   10   11   12\n\noctave:3> save -6 octave_a.mat a % MATLAB 6 compatible\noctave:4> ls octave_a.mat\noctave_a.mat",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Now, to Python:"
            }
          ]
        },
        {
          "__type": "Blockquote",
          "__tag": 4059,
          "children": [
            {
              "__type": "Code",
              "__tag": 4050,
              "value": ">>> mat_contents = sio.loadmat('octave_a.mat')\n>>> mat_contents\n{'__header__': b'MATLAB 5.0 MAT-file, written\n by Octave 3.2.3, 2010-05-30 02:13:40 UTC',\n '__version__': '1.0',\n '__globals__': [],\n 'a': array([[[ 1.,  4.,  7., 10.],\n              [ 2.,  5.,  8., 11.],\n              [ 3.,  6.,  9., 12.]]])}\n>>> oct_a = mat_contents['a']\n>>> oct_a\narray([[[  1.,   4.,   7.,  10.],\n        [  2.,   5.,   8.,  11.],\n        [  3.,   6.,   9.,  12.]]])\n>>> oct_a.shape\n(1, 3, 4)",
              "execution_status": null
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Now let's try the other way round:"
            }
          ]
        },
        {
          "__type": "Blockquote",
          "__tag": 4059,
          "children": [
            {
              "__type": "Code",
              "__tag": 4050,
              "value": ">>> import numpy as np\n>>> vect = np.arange(10)\n>>> vect.shape\n(10,)\n>>> sio.savemat('np_vector.mat', {'vect':vect})",
              "execution_status": null
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Then back to Octave:"
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "octave:8> load np_vector.mat\noctave:9> vect\nvect =\n\n  0  1  2  3  4  5  6  7  8  9\n\noctave:10> size(vect)\nans =\n\n    1   10",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "If you want to inspect the contents of a MATLAB file without reading the data into memory, use the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "whosmat"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " command:"
            }
          ]
        },
        {
          "__type": "Blockquote",
          "__tag": 4059,
          "children": [
            {
              "__type": "Code",
              "__tag": 4050,
              "value": ">>> sio.whosmat('octave_a.mat')\n[('a', (1, 3, 4), 'double')]",
              "execution_status": null
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "whosmat"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " returns a list of tuples, one for each array (or other object) in the file. Each tuple contains the name, shape and data type of the array."
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "How do I start?"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "MATLAB structs are a little bit like Python dicts, except the field names must be strings. Any MATLAB object can be a value of a field. As for all objects in MATLAB, structs are, in fact, arrays of structs, where a single struct is an array of shape (1, 1)."
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "octave:11> my_struct = struct('field1', 1, 'field2', 2)\nmy_struct =\n{\n  field1 =  1\n  field2 =  2\n}\n\noctave:12> save -6 octave_struct.mat my_struct",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "We can load this in Python:"
            }
          ]
        },
        {
          "__type": "Blockquote",
          "__tag": 4059,
          "children": [
            {
              "__type": "Code",
              "__tag": 4050,
              "value": ">>> mat_contents = sio.loadmat('octave_struct.mat')\n>>> mat_contents\n {'__header__': b'MATLAB 5.0 MAT-file, written by Octave 3.2.3, 2010-05-30 02:00:26 UTC',\n  '__version__': '1.0',\n  '__globals__': [],\n  'my_struct': array([[(array([[1.]]), array([[2.]]))]], dtype=[('field1', 'O'), ('field2', 'O')])\n }",
              "execution_status": null
            },
            {
              "__type": "Code",
              "__tag": 4050,
              "value": ">>> oct_struct = mat_contents['my_struct']\n>>> oct_struct.shape\n(1, 1)\n>>> val = oct_struct[0, 0]\n>>> val\nnp.void((array([[1.]]), array([[2.]])), dtype=[('field1', 'O'), ('field2', 'O')])\n>>> val['field1']\narray([[ 1.]])\n>>> val['field2']\narray([[ 2.]])\n>>> val.dtype\ndtype([('field1', 'O'), ('field2', 'O')])",
              "execution_status": null
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "In the SciPy versions from 0.12.0, MATLAB structs come back as NumPy structured arrays, with fields named for the struct fields. You can see the field names in the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "dtype"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " output above. Note also:"
            }
          ]
        },
        {
          "__type": "Blockquote",
          "__tag": 4059,
          "children": [
            {
              "__type": "Code",
              "__tag": 4050,
              "value": ">>> val = oct_struct[0, 0]",
              "execution_status": null
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "and:"
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "octave:13> size(my_struct)\nans =\n\n   1   1",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "So, in MATLAB, the struct array must be at least 2-D, and we replicate that when we read into SciPy. If you want all length 1 dimensions squeezed out, try this:"
            }
          ]
        },
        {
          "__type": "Blockquote",
          "__tag": 4059,
          "children": [
            {
              "__type": "Code",
              "__tag": 4050,
              "value": ">>> mat_contents = sio.loadmat('octave_struct.mat', squeeze_me=True)\n>>> oct_struct = mat_contents['my_struct']\n>>> oct_struct.shape\n()",
              "execution_status": null
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Sometimes, it's more convenient to load the MATLAB structs as Python objects rather than NumPy structured arrays - it can make the access syntax in Python a bit more similar to that in MATLAB.  In order to do this, use the "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "struct_as_record=False"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " parameter setting to "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "loadmat"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "."
            }
          ]
        },
        {
          "__type": "Blockquote",
          "__tag": 4059,
          "children": [
            {
              "__type": "Code",
              "__tag": 4050,
              "value": ">>> mat_contents = sio.loadmat('octave_struct.mat', struct_as_record=False)\n>>> oct_struct = mat_contents['my_struct']\n>>> oct_struct[0,0].field1\narray([[ 1.]])",
              "execution_status": null
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "struct_as_record=False"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " works nicely with "
            },
            {
              "__type": "InlineCode",
              "__tag": 4051,
              "value": "squeeze_me"
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": ":"
            }
          ]
        },
        {
          "__type": "Blockquote",
          "__tag": 4059,
          "children": [
            {
              "__type": "Code",
              "__tag": 4050,
              "value": ">>> mat_contents = sio.loadmat('octave_struct.mat', struct_as_record=False, squeeze_me=True)\n>>> oct_struct = mat_contents['my_struct']\n>>> oct_struct.shape # but no - it's a scalar\nTraceback (most recent call last):\n  File \"<stdin>\", line 1, in <module>\nAttributeError: 'mat_struct' object has no attribute 'shape'\n>>> type(oct_struct)\n<class 'scipy.io.matlab._mio5_params.mat_struct'>\n>>> oct_struct.field1\n1.0",
              "execution_status": null
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Saving struct arrays can be done in various ways. One simple method is to use dicts:"
            }
          ]
        },
        {
          "__type": "Blockquote",
          "__tag": 4059,
          "children": [
            {
              "__type": "Code",
              "__tag": 4050,
              "value": ">>> a_dict = {'field1': 0.5, 'field2': 'a string'}\n>>> sio.savemat('saved_struct.mat', {'a_dict': a_dict})",
              "execution_status": null
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "loaded as:"
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "octave:21> load saved_struct\noctave:22> a_dict\na_dict =\n\n  scalar structure containing the fields:\n\n    field2 = a string\n    field1 =  0.50000",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "You can also save structs back again to MATLAB (or Octave in our case) like this:"
            }
          ]
        },
        {
          "__type": "Blockquote",
          "__tag": 4059,
          "children": [
            {
              "__type": "Code",
              "__tag": 4050,
              "value": ">>> dt = [('f1', 'f8'), ('f2', 'S10')]\n>>> arr = np.zeros((2,), dtype=dt)\n>>> arr\narray([(0.0, ''), (0.0, '')],\n      dtype=[('f1', '<f8'), ('f2', 'S10')])\n>>> arr[0]['f1'] = 0.5\n>>> arr[0]['f2'] = 'python'\n>>> arr[1]['f1'] = 99\n>>> arr[1]['f2'] = 'not perl'\n>>> sio.savemat('np_struct_arr.mat', {'arr': arr})",
              "execution_status": null
            }
          ]
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "MATLAB structs"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Cell arrays in MATLAB are rather like Python lists, in the sense that the elements in the arrays can contain any type of MATLAB object. In fact, they are most similar to NumPy object arrays, and that is how we load them into NumPy."
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "octave:14> my_cells = {1, [2, 3]}\nmy_cells =\n{\n  [1,1] =  1\n  [1,2] =\n\n     2   3\n\n}\n\noctave:15> save -6 octave_cells.mat my_cells",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Back to Python:"
            }
          ]
        },
        {
          "__type": "Blockquote",
          "__tag": 4059,
          "children": [
            {
              "__type": "Code",
              "__tag": 4050,
              "value": ">>> mat_contents = sio.loadmat('octave_cells.mat')\n>>> oct_cells = mat_contents['my_cells']\n>>> print(oct_cells.dtype)\nobject\n>>> val = oct_cells[0,0]\n>>> val\narray([[ 1.]])\n>>> print(val.dtype)\nfloat64",
              "execution_status": null
            }
          ]
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Saving to a MATLAB cell array just involves making a NumPy object array:"
            }
          ]
        },
        {
          "__type": "Blockquote",
          "__tag": 4059,
          "children": [
            {
              "__type": "Code",
              "__tag": 4050,
              "value": ">>> obj_arr = np.zeros((2,), dtype=object)\n>>> obj_arr[0] = 1\n>>> obj_arr[1] = 'a string'\n>>> obj_arr\narray([1, 'a string'], dtype=object)\n>>> sio.savemat('np_cells.mat', {'obj_arr': obj_arr})",
              "execution_status": null
            }
          ]
        },
        {
          "__type": "Code",
          "__tag": 4050,
          "value": "octave:16> load np_cells.mat\noctave:17> obj_arr\nobj_arr =\n{\n  [1,1] = 1\n  [2,1] = a string\n}",
          "execution_status": null
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "MATLAB cell arrays"
        }
      ],
      "level": 2,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Code",
          "__tag": 4050,
          "value": ".. autosummary:: \n    readsav",
          "execution_status": null
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "IDL files"
        }
      ],
      "level": 1,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Code",
          "__tag": 4050,
          "value": ".. autosummary:: \n    mminfo\n    mmread\n    mmwrite",
          "execution_status": null
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Matrix Market files"
        }
      ],
      "level": 1,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Code",
          "__tag": 4050,
          "value": ".. autosummary:: \n    read\n    write",
          "execution_status": null
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Wav sound files ("
        },
        {
          "__type": "InlineRole",
          "__tag": 4003,
          "value": "scipy.io.wavfile",
          "domain": null,
          "role": "mod",
          "inventory": null
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": ")"
        }
      ],
      "level": 1,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Code",
          "__tag": 4050,
          "value": ".. autosummary:: \n    loadarff",
          "execution_status": null
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Arff files ("
        },
        {
          "__type": "InlineRole",
          "__tag": 4003,
          "value": "scipy.io.arff",
          "domain": null,
          "role": "mod",
          "inventory": null
        },
        {
          "__type": "Text",
          "__tag": 4046,
          "value": ")"
        }
      ],
      "level": 1,
      "target": null
    },
    {
      "__type": "Section",
      "__tag": 4015,
      "children": [
        {
          "__type": "Code",
          "__tag": 4050,
          "value": ".. autosummary:: \n    netcdf_file",
          "execution_status": null
        },
        {
          "__type": "Paragraph",
          "__tag": 4045,
          "children": [
            {
              "__type": "Text",
              "__tag": 4046,
              "value": "Allows reading of  NetCDF files (version of "
            },
            {
              "__type": "Link",
              "__tag": 4049,
              "children": [
                {
                  "__type": "Text",
                  "__tag": 4046,
                  "value": "pupynere"
                }
              ],
              "url": "https://pypi.org/project/pupynere/",
              "title": ""
            },
            {
              "__type": "Text",
              "__tag": 4046,
              "value": " package)"
            }
          ]
        },
        {
          "__type": "Target",
          "__tag": 4061,
          "label": "pupynere"
        },
        {
          "__type": "Target",
          "__tag": 4061,
          "label": "octave"
        },
        {
          "__type": "Target",
          "__tag": 4061,
          "label": "matlab"
        }
      ],
      "title": [
        {
          "__type": "Text",
          "__tag": 4046,
          "value": "Netcdf"
        }
      ],
      "level": 1,
      "target": null
    }
  ],
  "local_refs": []
}