{ "cells": [ { "cell_type": "markdown", "id": "e246a903-0b85-4609-888c-7a27b1a7d3ce", "metadata": {}, "source": [ "# Step by step CDF creation" ] }, { "cell_type": "code", "execution_count": 1, "id": "ef278868-e2b1-484a-81e7-667c4ecf872f", "metadata": {}, "outputs": [], "source": [ "from datetime import datetime, timedelta\n", "\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import pycdfpp\n", "import requests\n", "import xarray as xr\n", "\n", "%matplotlib widget" ] }, { "cell_type": "markdown", "id": "593ac912-7857-476e-8d95-03e004de8f26", "metadata": {}, "source": [ "## 1. Create an empty CD object" ] }, { "cell_type": "code", "execution_count": 2, "id": "faee3c97-66b8-4bc3-9afe-f6fa55bd31a4", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CDF:\n", " version: 3.9.0\n", " majority: row\n", " compression: None\n", "\n", "Attributes:\n", "\n", "Variables:\n", "\n", "\n" ] } ], "source": [ "my_cdf = pycdfpp.CDF()\n", "print(my_cdf)" ] }, { "cell_type": "markdown", "id": "e67e43fd-efc6-4c53-9882-fdff1c4ab93e", "metadata": {}, "source": [ "## 2. Add some global attributes" ] }, { "cell_type": "code", "execution_count": 3, "id": "16f95e02-ba24-4994-9f8e-e7f2786fd854", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\u001b[0;31mDocstring:\u001b[0m add_attribute(self: pycdfpp._pycdfpp.CDF, name: str, values: List[Union[None, str, List[str], List[int], List[int], List[int], List[int], List[int], List[int], List[int], List[float], List[float], List[pycdfpp._pycdfpp.tt2000_t], List[pycdfpp._pycdfpp.epoch], List[pycdfpp._pycdfpp.epoch16], List[datetime.datetime]]]) -> pycdfpp._pycdfpp.Attribute\n", "\u001b[0;31mType:\u001b[0m method" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "my_cdf.add_attribute?" ] }, { "cell_type": "code", "execution_count": 4, "id": "5ee17948-c2c5-4d6a-ae8f-af6b634fa54f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "TITLE: \"My new CDF file\"" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "my_cdf.add_attribute(\"TITLE\", [\"My new CDF file\"])" ] }, { "cell_type": "code", "execution_count": 5, "id": "00128ffe-56f2-4afd-bd4b-4b33983f7300", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Creation date: [ [ [ 2023-09-04T16:17:03.494246\n", " ] ] ]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "my_cdf.add_attribute(\"Creation date\", [[datetime.now()]])" ] }, { "cell_type": "code", "execution_count": 6, "id": "bb39539a-4cc8-4096-9251-6148914a958b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CDF:\n", " version: 3.9.0\n", " majority: row\n", " compression: None\n", "\n", "Attributes:\n", " TITLE: \"My new CDF file\"\n", " Creation date: [ [ [ 2023-09-04T16:17:03.494246\n", " ] ] ]\n", "\n", "Variables:\n", "\n", "\n" ] } ], "source": [ "print(my_cdf)" ] }, { "cell_type": "markdown", "id": "f0a75373-b9a7-4405-aa29-d17270f41944", "metadata": {}, "source": [ "## 3. Add some variables" ] }, { "cell_type": "code", "execution_count": 7, "id": "e309818a-bda9-4e42-ba0e-fecffad4bcd4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\u001b[0;31mSignature:\u001b[0m\n", "\u001b[0mmy_cdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0madd_variable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0mvalues\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mnumpy\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mndarray\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0mdata_type\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0mis_nrv\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mbool\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0mcompression\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mpycdfpp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_pycdfpp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mCompressionType\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m<\u001b[0m\u001b[0mCompressionType\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mno_compression\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m>\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0mattributes\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mMapping\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mstr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mList\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mAny\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mDocstring:\u001b[0m \n", "\u001b[0;31mFile:\u001b[0m ~/PySide6env-p3.11/lib64/python3.11/site-packages/pycdfpp/__init__.py\n", "\u001b[0;31mType:\u001b[0m method" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "my_cdf.add_variable?" ] }, { "cell_type": "markdown", "id": "38e92623-2b9e-4a9a-94c2-b8993f1e50e3", "metadata": {}, "source": [ "### 3.1 Time related variables" ] }, { "cell_type": "code", "execution_count": 8, "id": "a52ed958-1a40-4011-a2fc-d45b9695faa5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Epoch:\n", " shape: [ 100 ]\n", " type: CDF_TIME_TT2000\n", " record varry: True\n", " compression: GNU GZIP\n", "\n", " Attributes:" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "my_cdf.add_variable(\n", " \"Epoch\",\n", " values=[\n", " datetime(2020, 1, 1, 12, 0, 5, microsecond=10000) + timedelta(seconds=i)\n", " for i in range(100)\n", " ],\n", " compression=pycdfpp.CompressionType.gzip_compression,\n", ")" ] }, { "cell_type": "code", "execution_count": 9, "id": "b164ce3a-69e6-454c-99d1-7b70a428fc1b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Epoch_from_dt64:\n", " shape: [ 10 ]\n", " type: CDF_TIME_TT2000\n", " record varry: True\n", " compression: GNU GZIP\n", "\n", " Attributes:" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "my_cdf.add_variable(\n", " \"Epoch_from_dt64\",\n", " values=np.arange(1e18, 11e17, 1e16, dtype=np.int64).astype(\"datetime64[ns]\"),\n", " compression=pycdfpp.CompressionType.gzip_compression,\n", ")" ] }, { "cell_type": "markdown", "id": "2d019239-5063-4c1c-a7d8-ea0cf9fbc10a", "metadata": {}, "source": [ "### 3.2 String variables such as [ISTP metada](https://spdf.gsfc.nasa.gov/istp_guide/variables.html#Metadata)" ] }, { "cell_type": "code", "execution_count": 10, "id": "2dd7ff7e-ba55-447b-9722-319154245130", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Var1_labels:\n", " shape: [ 3, 2 ]\n", " type: CDF_CHAR\n", " record varry: Flase\n", " compression: None\n", "\n", " Attributes:" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "my_cdf.add_variable(\"Var1_labels\", values=[\"Bx\", \"By\", \"Bz\"], is_nrv=True)" ] }, { "cell_type": "markdown", "id": "9eca4292-46d1-4629-8026-4d0145a2532a", "metadata": {}, "source": [ "### 3.3 Regular data variables" ] }, { "cell_type": "code", "execution_count": 11, "id": "a229d2dc-352a-4c9e-ab86-b6028d82bdad", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Var1:\n", " shape: [ 100, 3 ]\n", " type: CDF_DOUBLE\n", " record varry: True\n", " compression: GNU GZIP\n", "\n", " Attributes:\n", " DEPEND_0: \"Epoch\"" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "my_cdf.add_variable(\n", " \"Var1\",\n", " values=np.ones((100, 3)),\n", " compression=pycdfpp.CompressionType.gzip_compression,\n", " attributes={\"DEPEND_0\": \"Epoch\"},\n", ")" ] }, { "cell_type": "code", "execution_count": 12, "id": "e5115bc4-1a00-40bc-80b1-41260a38f6c5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Some variable with many dimensions:\n", " shape: [ 100, 3, 5, 6 ]\n", " type: CDF_INT2\n", " record varry: True\n", " compression: GNU GZIP\n", "\n", " Attributes:\n", " DEPEND_0: \"Epoch\"" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "my_cdf.add_variable(\n", " \"Some variable with many dimensions\",\n", " values=np.ones((100, 3, 5, 6), dtype=np.int16),\n", " compression=pycdfpp.CompressionType.gzip_compression,\n", " data_type=pycdfpp.DataType.CDF_INT2,\n", " attributes={\"DEPEND_0\": \"Epoch\"},\n", ")" ] }, { "cell_type": "markdown", "id": "b4dc4c34-806c-423d-987b-3badd593991a", "metadata": {}, "source": [ "### 3.4 Add attributes to variables" ] }, { "cell_type": "code", "execution_count": 13, "id": "fb074b47-4181-4ca2-ba02-3d3de8286cf7", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Sum: [ [ [ 300 ] ] ]" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "my_cdf[\"Var1\"].add_attribute(\"Sum\", [np.sum(my_cdf[\"Var1\"])])" ] }, { "cell_type": "code", "execution_count": 14, "id": "bc672261-d850-47f5-9a02-a5176c27c6ab", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Var1:\n", " shape: [ 100, 3 ]\n", " type: CDF_DOUBLE\n", " record varry: True\n", " compression: GNU GZIP\n", "\n", " Attributes:\n", " DEPEND_0: \"Epoch\"\n", " Sum: [ [ [ 300 ] ] ]" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "my_cdf[\"Var1\"]" ] }, { "cell_type": "code", "execution_count": 15, "id": "e00e2b47-3ab2-4678-a077-21abf3727ede", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[300.0]" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "my_cdf[\"Var1\"].attributes[\"Sum\"][0]" ] }, { "cell_type": "markdown", "id": "7dca869e-344c-4ee9-87e1-1de2f5a62743", "metadata": {}, "source": [ "## 4. Save CDF object" ] }, { "cell_type": "code", "execution_count": 16, "id": "c40fd45a-c01c-498a-9a37-0b0301e30314", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pycdfpp.save(my_cdf, \"/tmp/my_cdf.cdf\")" ] }, { "cell_type": "code", "execution_count": 17, "id": "a954f173-9884-4db4-84ee-ea8c0fd541b3", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Validating \"/tmp/my_cdf.cdf\"...\n", " Checking CDR...@8\n", " Checking GDR...@320\n", " Checking CVVR...@1603\n", " Checking CVVR...@2529\n", " Checking VVR...@3044\n", " Checking CVVR...@3486\n", " Checking CVVR...@3994\n", " Checking ADR...@404\n", " Checking AEDR...@728\n", " Checking ADR...@799\n", " Checking AEDR...@1123\n", " Checking ADR...@4071\n", " Checking AEDR...@4395\n", " Checking AEDR...@4456\n", " Checking ADR...@4517\n", " Checking AEDR...@4841\n", " Checking VDR...@1187\n", " Checking VXR...@1531\n", " Checking CPR...@1575\n", " Checking VDR...@2113\n", " Checking VXR...@2457\n", " Checking CPR...@2501\n", " Checking VDR...@2656\n", " Checking VXR...@3000\n", " Checking VDR...@3062\n", " Checking VXR...@3414\n", " Checking CPR...@3458\n", " Checking VDR...@3554\n", " Checking VXR...@3922\n", " Checking CPR...@3966\n" ] } ], "source": [ "!/usr/local/cdf/bin/cdfvalidate -debug /tmp/my_cdf.cdf" ] }, { "cell_type": "code", "execution_count": 18, "id": "bd183328-e1ab-4d3a-8efc-ba865a282b23", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "b'\\xcd\\xf3\\x00\\x01\\x00\\x00\\xff\\xff\\x00\\x00\\x00\\x00\\x00\\x00\\x018\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x01@\\x00\\x00\\x00\\x03\\x00\\x00\\x00\\x08\\x00\\x00\\x00\\x06\\x00\\x00\\x00\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x00\\x00\\x00\\x00\\nCommon Data Format (CDF)\\\\nhttps://cdf.gsfc.nasa.gov\\nSpace Physics Data Facility\\nNASA/Goddard Space Flight Center\\nGreenbelt, Maryland 20771 USA\\n(User support: gsfc-cdf-support@lists.nasa.gov)\\n\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00T\\x00\\x00\\x00\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x04\\xa3\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x94\\x00\\x00\\x00\\x00\\x00\\x00\\x13%\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x04\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x05\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x013\\xc5u\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01D\\x00\\x00\\x00\\x04\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x1f\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\xd8\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\xff\\xff\\xff\\xff\\x00\\x00\\x00\\x00TITLE\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00G\\x00\\x00\\x00\\x05\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x003\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x0f\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00My new CDF file\\x00\\x00\\x00\\x00\\x00\\x00\\x01D\\x00\\x00\\x00\\x04\\x00\\x00\\x00\\x00\\x00\\x00\\x0f\\xe7\\x00\\x00\\x00\\x00\\x00\\x00\\x04c\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\xff\\xff\\xff\\xff\\x00\\x00\\x00\\x00Creation date\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00@\\x00\\x00\\x00\\x05\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x00\\x00\\x00!\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00p^\\xfeNOJ^\\n\\x00\\x00\\x00\\x00\\x00\\x00\\x01X\\x00\\x00\\x00\\x08\\x00\\x00\\x00\\x00\\x00\\x00\\x08A\\x00\\x00\\x00!\\x00\\x00\\x00c\\x00\\x00\\x00\\x00\\x00\\x00\\x05\\xfb\\x00\\x00\\x00\\x00\\x00\\x00\\x05\\xfb\\x00\\x00\\x00\\x05\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x06\\'\\x00\\x00\\x00@Epoch\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00,\\x00\\x00\\x00\\x06\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00c\\x00\\x00\\x00\\x00\\x00\\x00\\x06C\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x1c\\x00\\x00\\x00\\x0b\\x00\\x00\\x00\\x05\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\t\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\xfe\\x00\\x00\\x00\\r\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\xe6\\x1f\\x8b\\x08\\x00\\x00\\x00\\x00\\x00\\x00\\xff\\x1d\\xc5[h\\x12`\\x00\\x80Q\\x8b0)\\xa90\\x186J\\xa2\\xa4\\xc2\"d\\x94\\x14X\\x0c\\x1b5\"\\xa5\\x8b\\xc1\\x1a#G\\xe1\\x8a\\x19\\x03a\\xa4ms3]6\\xad\\xb9\\x153\\x06\\x8eJ)F1cdT[\\xb1\\x85\\xe4\\xa8\\x14j\\x15.F\\x8b\\x92\\n\\x83a\\xa3d\\x90\\xb41\\xfe\\xef\\xbc\\x1cwo(\\xe60&d\\xeeS\\xda_\\xbc-\\xa5v\\x8ag\\xad\\xb5\\xfcB\\xd2\\xc7\\x81\\xf0\\x04\\x9bu\\xab/\\x88U\\xe3&\\xce\\xd9\\x02\\xfcP:\\xc6-\\x91EM\\xe2\\xfd\\xfa=\\xbcj\\xc2\\xc9\\x93\\xf6G|G>\\xc3\\r\\xfd[\\x9b\\xc5\\xbb\\x0cgx\\xf1T\\x94\\xd3\\x8e/|CQ\\xda\"\\xae\\x8d\\x1dgM\\xe55.d\\xd3<\\xe2\\x92\\xb9\\xc4\\x1d\\xca\\n>\\x1ao\\xe3\\xb5\\xa6g\\xfc37\\xcb\\x83\\xde\\xb2Vq\\x93\\xaa\\x81+\\x86\\xee\\xf1\\n\\xf3\\x0f\\xfe\\x94_\\xdf&\\x8e\\xfak\\xf8\\x9c\\xba\\x97u\\xa3\\x1fXR\\xbd\\xd2-~S8\\xc8=]>>\\xa9I\\xf0\\x96\\xe4\\x1c\\xff\\xb1\\xec\\xbe(~^ld_h\\x90\\x0fk\\xa7\\xb94\\xb5\\xd9#\\xfen=\\xcd\\x0f$\\xb7\\xd8\\x19\\x9ed\\x83\\xae\\xc4+\\x96\\x8f\\x1f\\xe1\\x8c\\xad\\x93oK_s}dI\\xbbx\\x87\\xbe\\x9c\\xe73\\xcd\\xfc\\xca\\xfe\\x84\\xaf\\xcb\\xffrM\\xff\\xf6K\\xe2M\\x86z\\x9e\\xf9|\\x97\\x87\\x1d\\xdf\\xb8]\\xb1\\xce\\'6\\xc5\\xaaXY\\xd9\\xc3\\xd9\\xec[\\x1ep-\\xbf,>\\xaf<\\xc0\\xe5q\\x0f/3\\x8d\\xf0\\xc7\\xdc?\\xbe\\xe9\\xdd\\xd9!>\\xab\\xb2s\\xd9\\xd0\\x00\\xff?\\x96\\xe3\\xb1\\xfcF\\xbf\\xb8\\xdbo\\xe1ju\\x98\\xd5\\xa3\\x19\\xce\\x9fP\\x04\\xc4O\\x0bF\\xf6t\\xf9\\xf9\\x90&\\xc9%I\\xc9\\x15\\xf1W\\x8b\\x9e\\xef\\x17\\x1d\\xdc\\x18\\x8a\\xf3^\\xedo\\x96\\xa54W\\xc5\\xef\\xadu\\xdc\\'\\x89r]x\\x8a\\xb5\\xba5\\x9d\\xe2\\xe2;3\\xbf\\xb4usP\\x9a\\xe6\\xaa\\xc8\\xd2\\xa0x\\x83~\\x1fOgZ\\xf9\\xb1}8hL\\xc8\\x16\\x00\\xd6\\x7f\\x915 \\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01X\\x00\\x00\\x00\\x08\\x00\\x00\\x00\\x00\\x00\\x00\\n`\\x00\\x00\\x00!\\x00\\x00\\x00\\t\\x00\\x00\\x00\\x00\\x00\\x00\\t\\x99\\x00\\x00\\x00\\x00\\x00\\x00\\t\\x99\\x00\\x00\\x00\\x05\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\t\\xc5\\x00\\x00\\x00@Epoch_from_dt64\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00,\\x00\\x00\\x00\\x06\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\t\\x00\\x00\\x00\\x00\\x00\\x00\\t\\xe1\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x1c\\x00\\x00\\x00\\x0b\\x00\\x00\\x00\\x05\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\t\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x7f\\x00\\x00\\x00\\r\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00g\\x1f\\x8b\\x08\\x00\\x00\\x00\\x00\\x00\\x00\\xff\\x01P\\x00\\xaf\\xff\\x00\\x9e#\\xfe\\xa8B\\xbd\\x00\\x00\\x9e\\xe4m\\x9b\\xc9\\xe0\\x00\\x00\\x9e\\xa5\\xdd\\x8dP\\x04\\x01\\x00\\x9efM\\x80\\xd7\\'\\x01\\x00\\x9e\\'\\xbdr^K\\x01\\x00\\x9e\\xe8,e\\xe5n\\x01\\x00\\x9e\\xa9\\x9cWl\\x92\\x01\\x00\\x9ej\\x0cJ\\xf3\\xb5\\x01\\x00\\x9e+|