diff --git a/tutorials/IS2_Harmony.ipynb b/tutorials/IS2_Harmony.ipynb index a851591f..b20c42fe 100644 --- a/tutorials/IS2_Harmony.ipynb +++ b/tutorials/IS2_Harmony.ipynb @@ -34,18 +34,11 @@ "source": [ "## Summary\n", "\n", - "In this tutorial, we will use NASA's Earthdata Harmony Services to subset and access ICESat-2 data with the `harmony-py` Python library. Harmony can be used to subset Level-2 and Level-3A ICESat-2 data products. In this tutorial, we will subset the [ATL03 Global Geolocated Photon Data](https://nsidc.org/data/atl03/versions/6) product as an example.\n", + "In this tutorial, we will use NASA's Earthdata Harmony Services to subset and access ICESat-2 data using the `harmony-py` Python library. Harmony can be used to subset Level-2 and Level-3A ICESat-2 data products. In this tutorial, we will subset the [ATL03 Global Geolocated Photon Data](https://nsidc.org/data/atl03/versions/6) product as an example.\n", "\n", "**What is Harmony?** [Harmony](https://harmony.earthdata.nasa.gov/) is a service that allows you to customize many NASA datasets, including the ability to subset, reproject and reformat files. Data can be subsetted for a geographic region, a temporal range and by variable. Data can be \"reprojected\" from its native coordinate reference system (CRS) to the coordinate reference system relevant to your analysis. And data can be reformatted from its native file format to a format that is more relevant for your application. These services are collectively called _transformation services_. However, not all services are available for all datasets. You will learn how to discover which services are available for a given dataset.\n", "\n", - "Data transformed by Harmony services are staged on NASA Amazon Web Services (AWS) S3 buckets or on user-owned AWS S3 buckets. Data in NASA S3 buckets are accessed using signed URLs or temporary access credentials. This data can be downloaded to your local machine or you can access the data directly if you are working in an AWS cloud instance, such as a Jupyter Hub, in AWS `us-west-2`. \n", - "\n", - "_Add links or provide background to terminology_\n", - "_AS: I added a few links above. I think this is sufficient but feel free to add other references if you'd like_\n", - "\n", - "_Stuff for later, maybe_\n", - "_AS: I don't think this additional info is needed here but it's a great explanation. I wonder if it ought to be incorporated into NSIDC's cloud access guide: https://nsidc.org/data/user-resources/help-center/nasa-earthdata-cloud-data-access-guide\n", - "Data in NASA’s Earthdata Cloud, including the subsetted data processed by Harmony, reside in Amazon Web Services (AWS) Simple Storage Service (S3) buckets. Access is provided via temporary credentials; this free access is limited to requests made within the US West (Oregon) (code: us-west-2) AWS region. While this compute location is required for direct S3 access, all data in Earthdata Cloud are still freely available via download." + "Data transformed by Harmony services are staged on NASA Amazon Web Services (AWS) S3 buckets or on user-owned AWS S3 buckets. Data in NASA S3 buckets are accessed using signed URLs or temporary access credentials. This data can be downloaded to your local machine or you can access the data directly if you are working in an AWS cloud instance, such as a Jupyter Hub, in AWS `us-west-2`. " ] }, { @@ -95,7 +88,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 1, "id": "9d8e9be7-c7ab-4e87-baae-0d516e1d9a37", "metadata": {}, "outputs": [], @@ -124,30 +117,27 @@ "source": [ "### Step 2: start a Harmony client\n", "\n", - "A Harmony client is the interface to Harmony services and is used to submit requests and retrieve the results of those requests.\n", - "\n", - "To create a Harmony Client we need to supply our Earthdata Login credentials. We will use `earthaccess.login()` to do this.\n", + "A Harmony [`Client`](https://harmony-py.readthedocs.io/en/latest/api.html#harmony.Client) is the interface to Harmony services and is used to submit requests and retrieve the results of those requests. We only need to start the client once. That client can then be used to discover what options are available for a dataset, request subsetting, check on the status of that request and retrieve the results.\n", "\n", - ":::{note}\n", - "`earthaccess.login()` will search for you Earthdata Login credentials stored as environment variables or in a `.netrc` file. If no environment variables or `.netrc` file is found, we will be prompted for a _username_ and _password_.\n", - "\n", - "See the [`earthaccess` documentation](https://earthaccess.readthedocs.io/en/latest/user_guide/authenticate/) for more details.\n", - ":::\n", + "We need to supply our Earthdata Login credentials to use Harmony services. `hamony.Client` will use EDL_USERNAME & EDL_PASSWORD environment variables or the credentials in our `.netrc` file, if one is available. If we don't have either of these set up, we can enter our credentials directly.\n", "\n", - "We only need to start the client once. That client can then be used to discover what options are available for a dataset, request subsetting, check on the status of that request and retrieve the results.\n", + "```\n", + "harmony_client = Client(auth=('edl_username','edl_password'))\n", + "```\n", "\n", - "_AS ANDY: I removed the comment on the auth line. I'm not sure if earthaccess is even needed if a .netrc exists, as I believe `Client()` is also looking for a netrc. Please update if I am misinterpreting_ " + ":::{note}\n", + "If you don't have environment variables or a `.netrc` file setup, replace the command in the following code cell with the one above, and use your actual username and password.\n", + ":::" ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 2, "id": "94650df1-161f-499d-a5be-4eff06a55e3a", "metadata": {}, "outputs": [], "source": [ - "auth = earthaccess.login()\n", - "harmony_client = Client() " + "harmony_client = Client()" ] }, { @@ -167,7 +157,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 3, "id": "21a1f815-b187-4059-a4ef-0337721da3e8", "metadata": {}, "outputs": [], @@ -186,7 +176,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 4, "id": "bc59afbe-e218-4240-8315-5f73a51e6125", "metadata": {}, "outputs": [], @@ -209,7 +199,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 5, "id": "20a8a6c4-095a-4aeb-8fc6-6ff96db182c7", "metadata": { "scrolled": true @@ -252,7 +242,7 @@ "" ] }, - "execution_count": 22, + "execution_count": 5, "metadata": { "application/json": { "expanded": false, @@ -312,7 +302,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 6, "id": "5bb08390-ddb0-4356-905e-c0a3244b9247", "metadata": {}, "outputs": [], @@ -334,26 +324,24 @@ "source": [ "#### Submit the request\n", "\n", - "The request is submitted in the same way as the Capabilities request. This starts the subsetting process, which may take a while depending on the size of the request. Submitting request returns a Job ID, which is a unique identifier for your request that is used to track the progress of the request and to access the results.\n", + "The request is submitted in the same way as the Capabilities request. This starts the subsetting process, which may take a while depending on the size of the request. Submitting the request returns a Job ID, which is a unique identifier for your request that is used to track the progress of the request and to access the results.\n", "\n", - "If the request involves a lot of files (more than 300), Harmony will only process the first 300 files. See section below on [Handling Large Jobs](https://openscapes.2i2c.cloud/user/andypbarrett/lab/workspaces/auto-e/tree/earthdata-cloud-cookbook/tutorials/IS2_Harmony.ipynb#handling-large-requests) on how to work around this restriction. \n", - "\n", - "_AS: ANDY: The link above is broken for me; it looks like it's pointing to your local jupyter instance. Maybe we could just leave this unlinked for now._" + "If the request involves a lot of files (more than 300), Harmony will only process the first 300 files. See section below on Handling Large Jobs on how to work around this restriction." ] }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 7, "id": "c1c312bc-a986-4ebd-951f-c0d11208d19f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "'16ef9962-7be4-4434-891a-963189aa7854'" + "'4e07cf87-d846-4f59-8ea0-d1c52477b377'" ] }, - "execution_count": 24, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -375,7 +363,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 8, "id": "9b253c1e-da1e-4d14-883d-7fbd87834133", "metadata": {}, "outputs": [ @@ -401,20 +389,20 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 9, "id": "be41beda-a445-419f-9af2-080fb7e7b1d3", "metadata": {}, "outputs": [ { "data": { "application/json": { - "createdAt": "2024-11-01T21:37:52.381Z", - "dataExpiration": "2024-12-01T21:37:52.381Z", - "jobID": "16ef9962-7be4-4434-891a-963189aa7854", + "createdAt": "2024-11-05T18:54:20.607Z", + "dataExpiration": "2024-12-05T18:54:20.607Z", + "jobID": "4e07cf87-d846-4f59-8ea0-d1c52477b377", "labels": [], "links": [ { - "href": "https://harmony.earthdata.nasa.gov/stac/16ef9962-7be4-4434-891a-963189aa7854/", + "href": "https://harmony.earthdata.nasa.gov/stac/4e07cf87-d846-4f59-8ea0-d1c52477b377/", "rel": "stac-catalog-json", "title": "STAC catalog", "type": "application/json" @@ -426,7 +414,7 @@ -103.60569, 59.54235 ], - "href": "https://harmony.earthdata.nasa.gov/service-results/harmony-prod-staging/public/16ef9962-7be4-4434-891a-963189aa7854/80019316/ATL03_20200427193622_04930702_006_02_subsetted.h5", + "href": "https://harmony.earthdata.nasa.gov/service-results/harmony-prod-staging/public/4e07cf87-d846-4f59-8ea0-d1c52477b377/80698796/ATL03_20200427193622_04930702_006_02_subsetted.h5", "rel": "data", "temporal": { "end": "2020-04-27T19:44:52.680Z", @@ -436,7 +424,7 @@ "type": "application/x-hdf5" }, { - "href": "https://harmony.earthdata.nasa.gov/jobs/16ef9962-7be4-4434-891a-963189aa7854?linktype=https&page=1&limit=2000", + "href": "https://harmony.earthdata.nasa.gov/jobs/4e07cf87-d846-4f59-8ea0-d1c52477b377?linktype=https&page=1&limit=2000", "rel": "self", "title": "The current page", "type": "application/json" @@ -447,14 +435,14 @@ "progress": 100, "request": "https://harmony.earthdata.nasa.gov/C2596864127-NSIDC_CPRD/ogc-api-coverages/1.0.0/collections/all/coverage/rangeset?forceAsync=true&subset=lat(40%3A41.0)&subset=lon(-105.5%3A-105)&subset=time(%222020-04-27T00%3A00%3A00%22%3A%222020-05-28T00%3A00%3A00%22)", "status": "successful", - "updatedAt": "2024-11-01T21:40:25.144Z", - "username": "amy.steiker" + "updatedAt": "2024-11-05T18:58:09.109Z", + "username": "apbarret" }, "text/plain": [ "" ] }, - "execution_count": 26, + "execution_count": 9, "metadata": { "application/json": { "expanded": false, @@ -476,11 +464,9 @@ "source": [ "### Step 6: access the subsetted data\n", "\n", - "The subsetted files can be accessed by downloading the files to a local machine, such as a laptop or desktop workstation, or by _streaming_ the data. We will use both access methods in the two examples below.\n", - "\n", - "Results are staged for 30 days in the Harmony s3 bucket.\n", + "The subsetted files can be accessed by downloading the files to a local machine, such as a laptop or desktop workstation, or by _streaming_ the data. We will use both access methods in the two examples below. \n", "\n", - "_AS: ANDY, you had a note to explain the staging location. I updated the sentence above but I don't think this really needs any additional explanation. You have already explained S3 in the initial summary. The key point here is that the data are only available for 30 days._" + "Results are staged for 30 days in the Harmony s3 bucket." ] }, { @@ -499,33 +485,19 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 13, "id": "2e8f110a-4aa3-4bec-9ac3-65eef9f0e4aa", "metadata": {}, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "./ATL03_20200427193622_04930702_006_02_subsetted.h5\n" - ] - }, { "data": { "text/plain": [ "'./ATL03_20200427193622_04930702_006_02_subsetted.h5'" ] }, - "execution_count": 27, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "./ATL03_20200427193622_04930702_006_02_subsetted.h5\n" - ] } ], "source": [ @@ -543,22 +515,24 @@ "\n", "The `download_all` method can use the _job-id_ or the _result-json_, which contains result urls. \n", "\n", - "As with `download`, the download directory path on the local machine can be specified with the `directory` keyword. To save downloading the same file, the `overwrite` keyword can be set to False. " + "As with `download`, the download directory path on the local machine can be specified with the `directory` keyword. To save downloading the same file, the `overwrite` keyword can be set to False.\n", + "\n", + "The paths fo the files are returned as a list." ] }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 16, "id": "951581ed-03a3-4aa2-b147-ed2054b75905", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "['./ATL03_20200427193622_04930702_006_02_subsetted.h5']" + "1" ] }, - "execution_count": 28, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -566,12 +540,20 @@ "source": [ "futures = harmony_client.download_all(job_id, directory=\".\", overwrite=False)\n", "filelist = [f.result() for f in futures] # get filepaths\n", - "filelist" + "len(filelist)" + ] + }, + { + "cell_type": "markdown", + "id": "443960f2-3983-4fa6-ae00-6e3bd7dee39e", + "metadata": {}, + "source": [ + "In this case, there is only one file download. Individual filepaths can be accessed using the normal methods for Python lists." ] }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 15, "id": "203a3c23-4bdc-47ee-a874-b361296d584b", "metadata": {}, "outputs": [ @@ -581,7 +563,7 @@ "'./ATL03_20200427193622_04930702_006_02_subsetted.h5'" ] }, - "execution_count": 32, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -606,25 +588,449 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 17, "id": "ae13153c-2968-44c1-a668-0f72f07a7d8c", "metadata": {}, "outputs": [ { - "ename": "ValueError", - "evalue": "numpy.dtype size changed, may indicate binary incompatibility. Expected 96 from C header, got 88 from PyObject", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[33], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m ds \u001b[38;5;241m=\u001b[39m \u001b[43mxr\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mopen_dataset\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfilelist\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mgroup\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mgt1l/heights\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 2\u001b[0m ds\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/xarray/backends/api.py:573\u001b[0m, in \u001b[0;36mopen_dataset\u001b[0;34m(filename_or_obj, engine, chunks, cache, decode_cf, mask_and_scale, decode_times, decode_timedelta, use_cftime, concat_characters, decode_coords, drop_variables, inline_array, chunked_array_type, from_array_kwargs, backend_kwargs, **kwargs)\u001b[0m\n\u001b[1;32m 561\u001b[0m decoders \u001b[38;5;241m=\u001b[39m _resolve_decoders_kwargs(\n\u001b[1;32m 562\u001b[0m decode_cf,\n\u001b[1;32m 563\u001b[0m open_backend_dataset_parameters\u001b[38;5;241m=\u001b[39mbackend\u001b[38;5;241m.\u001b[39mopen_dataset_parameters,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 569\u001b[0m decode_coords\u001b[38;5;241m=\u001b[39mdecode_coords,\n\u001b[1;32m 570\u001b[0m )\n\u001b[1;32m 572\u001b[0m overwrite_encoded_chunks \u001b[38;5;241m=\u001b[39m kwargs\u001b[38;5;241m.\u001b[39mpop(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124moverwrite_encoded_chunks\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mNone\u001b[39;00m)\n\u001b[0;32m--> 573\u001b[0m backend_ds \u001b[38;5;241m=\u001b[39m \u001b[43mbackend\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mopen_dataset\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 574\u001b[0m \u001b[43m \u001b[49m\u001b[43mfilename_or_obj\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 575\u001b[0m \u001b[43m \u001b[49m\u001b[43mdrop_variables\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdrop_variables\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 576\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mdecoders\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 577\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 578\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 579\u001b[0m ds \u001b[38;5;241m=\u001b[39m _dataset_from_backend_dataset(\n\u001b[1;32m 580\u001b[0m backend_ds,\n\u001b[1;32m 581\u001b[0m filename_or_obj,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 591\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs,\n\u001b[1;32m 592\u001b[0m )\n\u001b[1;32m 593\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m ds\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/xarray/backends/netCDF4_.py:646\u001b[0m, in \u001b[0;36mNetCDF4BackendEntrypoint.open_dataset\u001b[0;34m(self, filename_or_obj, mask_and_scale, decode_times, concat_characters, decode_coords, drop_variables, use_cftime, decode_timedelta, group, mode, format, clobber, diskless, persist, lock, autoclose)\u001b[0m\n\u001b[1;32m 625\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mopen_dataset\u001b[39m( \u001b[38;5;66;03m# type: ignore[override] # allow LSP violation, not supporting **kwargs\u001b[39;00m\n\u001b[1;32m 626\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 627\u001b[0m filename_or_obj: \u001b[38;5;28mstr\u001b[39m \u001b[38;5;241m|\u001b[39m os\u001b[38;5;241m.\u001b[39mPathLike[Any] \u001b[38;5;241m|\u001b[39m BufferedIOBase \u001b[38;5;241m|\u001b[39m AbstractDataStore,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 643\u001b[0m autoclose\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m,\n\u001b[1;32m 644\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Dataset:\n\u001b[1;32m 645\u001b[0m filename_or_obj \u001b[38;5;241m=\u001b[39m _normalize_path(filename_or_obj)\n\u001b[0;32m--> 646\u001b[0m store \u001b[38;5;241m=\u001b[39m \u001b[43mNetCDF4DataStore\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mopen\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 647\u001b[0m \u001b[43m \u001b[49m\u001b[43mfilename_or_obj\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 648\u001b[0m \u001b[43m \u001b[49m\u001b[43mmode\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmode\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 649\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mformat\u001b[39;49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mformat\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 650\u001b[0m \u001b[43m \u001b[49m\u001b[43mgroup\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mgroup\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 651\u001b[0m \u001b[43m \u001b[49m\u001b[43mclobber\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mclobber\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 652\u001b[0m \u001b[43m \u001b[49m\u001b[43mdiskless\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdiskless\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 653\u001b[0m \u001b[43m \u001b[49m\u001b[43mpersist\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpersist\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 654\u001b[0m \u001b[43m \u001b[49m\u001b[43mlock\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mlock\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 655\u001b[0m \u001b[43m \u001b[49m\u001b[43mautoclose\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mautoclose\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 656\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 658\u001b[0m store_entrypoint \u001b[38;5;241m=\u001b[39m StoreBackendEntrypoint()\n\u001b[1;32m 659\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m close_on_error(store):\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/xarray/backends/netCDF4_.py:376\u001b[0m, in \u001b[0;36mNetCDF4DataStore.open\u001b[0;34m(cls, filename, mode, format, group, clobber, diskless, persist, lock, lock_maker, autoclose)\u001b[0m\n\u001b[1;32m 362\u001b[0m \u001b[38;5;129m@classmethod\u001b[39m\n\u001b[1;32m 363\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mopen\u001b[39m(\n\u001b[1;32m 364\u001b[0m \u001b[38;5;28mcls\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 374\u001b[0m autoclose\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m,\n\u001b[1;32m 375\u001b[0m ):\n\u001b[0;32m--> 376\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mnetCDF4\u001b[39;00m\n\u001b[1;32m 378\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(filename, os\u001b[38;5;241m.\u001b[39mPathLike):\n\u001b[1;32m 379\u001b[0m filename \u001b[38;5;241m=\u001b[39m os\u001b[38;5;241m.\u001b[39mfspath(filename)\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/netCDF4/__init__.py:3\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;66;03m# init for netCDF4. package\u001b[39;00m\n\u001b[1;32m 2\u001b[0m \u001b[38;5;66;03m# Docstring comes from extension module _netCDF4.\u001b[39;00m\n\u001b[0;32m----> 3\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_netCDF4\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;241m*\u001b[39m\n\u001b[1;32m 4\u001b[0m \u001b[38;5;66;03m# Need explicit imports for names beginning with underscores\u001b[39;00m\n\u001b[1;32m 5\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_netCDF4\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;18m__doc__\u001b[39m\n", - "File \u001b[0;32msrc/netCDF4/_netCDF4.pyx:1\u001b[0m, in \u001b[0;36minit netCDF4._netCDF4\u001b[0;34m()\u001b[0m\n", - "\u001b[0;31mValueError\u001b[0m: numpy.dtype size changed, may indicate binary incompatibility. Expected 96 from C header, got 88 from PyObject" - ] + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset> Size: 92MB\n",
+       "Dimensions:         (delta_time: 1848992, ds_surf_type: 5)\n",
+       "Coordinates:\n",
+       "  * delta_time      (delta_time) datetime64[ns] 15MB 2020-04-27T19:39:45.8497...\n",
+       "    lat_ph          (delta_time) float64 15MB ...\n",
+       "    lon_ph          (delta_time) float64 15MB ...\n",
+       "Dimensions without coordinates: ds_surf_type\n",
+       "Data variables:\n",
+       "    dist_ph_across  (delta_time) float32 7MB ...\n",
+       "    dist_ph_along   (delta_time) float32 7MB ...\n",
+       "    h_ph            (delta_time) float32 7MB ...\n",
+       "    pce_mframe_cnt  (delta_time) uint32 7MB ...\n",
+       "    ph_id_channel   (delta_time) uint8 2MB ...\n",
+       "    ph_id_count     (delta_time) uint8 2MB ...\n",
+       "    ph_id_pulse     (delta_time) uint8 2MB ...\n",
+       "    quality_ph      (delta_time) int8 2MB ...\n",
+       "    signal_conf_ph  (delta_time, ds_surf_type) int8 9MB ...\n",
+       "    weight_ph       (delta_time) uint8 2MB ...\n",
+       "Attributes:\n",
+       "    Description:  Contains arrays of the parameters for each received photon.\n",
+       "    data_rate:    Data are stored at the photon detection rate.
" + ], + "text/plain": [ + " Size: 92MB\n", + "Dimensions: (delta_time: 1848992, ds_surf_type: 5)\n", + "Coordinates:\n", + " * delta_time (delta_time) datetime64[ns] 15MB 2020-04-27T19:39:45.8497...\n", + " lat_ph (delta_time) float64 15MB ...\n", + " lon_ph (delta_time) float64 15MB ...\n", + "Dimensions without coordinates: ds_surf_type\n", + "Data variables:\n", + " dist_ph_across (delta_time) float32 7MB ...\n", + " dist_ph_along (delta_time) float32 7MB ...\n", + " h_ph (delta_time) float32 7MB ...\n", + " pce_mframe_cnt (delta_time) uint32 7MB ...\n", + " ph_id_channel (delta_time) uint8 2MB ...\n", + " ph_id_count (delta_time) uint8 2MB ...\n", + " ph_id_pulse (delta_time) uint8 2MB ...\n", + " quality_ph (delta_time) int8 2MB ...\n", + " signal_conf_ph (delta_time, ds_surf_type) int8 9MB ...\n", + " weight_ph (delta_time) uint8 2MB ...\n", + "Attributes:\n", + " Description: Contains arrays of the parameters for each received photon.\n", + " data_rate: Data are stored at the photon detection rate." + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ @@ -657,17 +1063,17 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 18, "id": "a8d8a29d-91df-4872-9d9c-6a116bc92774", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "['s3://harmony-prod-staging/public/16ef9962-7be4-4434-891a-963189aa7854/80019316/ATL03_20200427193622_04930702_006_02_subsetted.h5']" + "['s3://harmony-prod-staging/public/4e07cf87-d846-4f59-8ea0-d1c52477b377/80698796/ATL03_20200427193622_04930702_006_02_subsetted.h5']" ] }, - "execution_count": 34, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -682,15 +1088,12 @@ "id": "815db398-723b-4278-ae30-2ad5f9764912", "metadata": {}, "source": [ - "We need AWS credentials to access the S3 bucket with the results. These are returned using the `aws_credentials` method.\n", - "\n", - "_what about if we use our own bucket?_\n", - "_AS: Andy, why don't we leave this guidance out for the first iterationa and add a new Issue as a future enhancement. I don't think this is necessary for our intial publication and it could take some time to learn and document in the tutorial. But agree it's a great addition to include (in the future)_ " + "We need AWS credentials to access the S3 bucket with the results. These are returned using the `aws_credentials` method." ] }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 19, "id": "d58df790-d40c-410c-a295-22d6d39dfd5b", "metadata": {}, "outputs": [], @@ -708,7 +1111,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 20, "id": "73bc9a2d-b009-4cf9-8a47-531a308833b0", "metadata": {}, "outputs": [], @@ -735,7 +1138,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 21, "id": "f29584a0-357a-4f1a-8a3b-ab72fc20d6e4", "metadata": {}, "outputs": [], @@ -753,209 +1156,449 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 22, "id": "8860630c-2050-4256-88c2-f1879456a9a1", "metadata": {}, "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n", - "A module that was compiled using NumPy 1.x cannot be run in\n", - "NumPy 2.1.2 as it may crash. To support both 1.x and 2.x\n", - "versions of NumPy, modules must be compiled with NumPy 2.0.\n", - "Some module may need to rebuild instead e.g. with 'pybind11>=2.12'.\n", - "\n", - "If you are a user of the module, the easiest solution will be to\n", - "downgrade to 'numpy<2' or try to upgrade the affected module.\n", - "We expect that some modules will need time to support NumPy 2.\n", - "\n", - "Traceback (most recent call last): File \"/srv/conda/envs/notebook/lib/python3.10/runpy.py\", line 196, in _run_module_as_main\n", - " return _run_code(code, main_globals, None,\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/runpy.py\", line 86, in _run_code\n", - " exec(code, run_globals)\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/ipykernel_launcher.py\", line 18, in \n", - " app.launch_new_instance()\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/traitlets/config/application.py\", line 1075, in launch_instance\n", - " app.start()\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/ipykernel/kernelapp.py\", line 739, in start\n", - " self.io_loop.start()\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/tornado/platform/asyncio.py\", line 205, in start\n", - " self.asyncio_loop.run_forever()\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/asyncio/base_events.py\", line 603, in run_forever\n", - " self._run_once()\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/asyncio/base_events.py\", line 1909, in _run_once\n", - " handle._run()\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/asyncio/events.py\", line 80, in _run\n", - " self._context.run(self._callback, *self._args)\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/ipykernel/kernelbase.py\", line 545, in dispatch_queue\n", - " await self.process_one()\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/ipykernel/kernelbase.py\", line 534, in process_one\n", - " await dispatch(*args)\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/ipykernel/kernelbase.py\", line 437, in dispatch_shell\n", - " await result\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/ipykernel/ipkernel.py\", line 359, in execute_request\n", - " await super().execute_request(stream, ident, parent)\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/ipykernel/kernelbase.py\", line 778, in execute_request\n", - " reply_content = await reply_content\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/ipykernel/ipkernel.py\", line 446, in do_execute\n", - " res = shell.run_cell(\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/ipykernel/zmqshell.py\", line 549, in run_cell\n", - " return super().run_cell(*args, **kwargs)\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/IPython/core/interactiveshell.py\", line 3075, in run_cell\n", - " result = self._run_cell(\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/IPython/core/interactiveshell.py\", line 3130, in _run_cell\n", - " result = runner(coro)\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/IPython/core/async_helpers.py\", line 129, in _pseudo_sync_runner\n", - " coro.send(None)\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/IPython/core/interactiveshell.py\", line 3334, in run_cell_async\n", - " has_raised = await self.run_ast_nodes(code_ast.body, cell_name,\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/IPython/core/interactiveshell.py\", line 3517, in run_ast_nodes\n", - " if await self.run_code(code, result, async_=asy):\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/IPython/core/interactiveshell.py\", line 3577, in run_code\n", - " exec(code_obj, self.user_global_ns, self.user_ns)\n", - " File \"/tmp/ipykernel_791/3576303952.py\", line 2, in \n", - " ds\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/IPython/core/displayhook.py\", line 268, in __call__\n", - " format_dict, md_dict = self.compute_format_data(result)\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/IPython/core/displayhook.py\", line 157, in compute_format_data\n", - " return self.shell.display_formatter.format(result)\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/IPython/core/formatters.py\", line 182, in format\n", - " data = formatter(obj)\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/decorator.py\", line 232, in fun\n", - " return caller(func, *(extras + args), **kw)\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/IPython/core/formatters.py\", line 226, in catch_format_error\n", - " r = method(self, *args, **kwargs)\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/IPython/core/formatters.py\", line 711, in __call__\n", - " printer.pretty(obj)\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/IPython/lib/pretty.py\", line 411, in pretty\n", - " return _repr_pprint(obj, self, cycle)\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/IPython/lib/pretty.py\", line 779, in _repr_pprint\n", - " output = repr(obj)\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/xarray/core/dataset.py\", line 2540, in __repr__\n", - " return formatting.dataset_repr(self)\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/reprlib.py\", line 21, in wrapper\n", - " result = user_function(self)\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/xarray/core/formatting.py\", line 724, in dataset_repr\n", - " summary.append(coords_repr(ds.coords, col_width=col_width, max_rows=max_rows))\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/xarray/core/formatting.py\", line 434, in coords_repr\n", - " return _mapping_repr(\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/xarray/core/formatting.py\", line 407, in _mapping_repr\n", - " summary += [\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/xarray/core/formatting.py\", line 408, in \n", - " summarizer(k, v, col_width, **summarizer_kwargs[k])\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/xarray/core/formatting.py\", line 344, in summarize_variable\n", - " values_str = inline_variable_array_repr(variable, values_width)\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/xarray/core/formatting.py\", line 303, in inline_variable_array_repr\n", - " dask_array_type = array_type(\"dask\")\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/xarray/namedarray/pycompat.py\", line 83, in array_type\n", - " return _get_cached_duck_array_module(mod).type\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/xarray/namedarray/pycompat.py\", line 74, in _get_cached_duck_array_module\n", - " duckmod = DuckArrayModule(mod)\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/xarray/namedarray/pycompat.py\", line 43, in __init__\n", - " duck_array_type = (import_module(\"dask.array\").Array,)\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/importlib/__init__.py\", line 126, in import_module\n", - " return _bootstrap._gcd_import(name[level:], package, level)\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/dask/array/__init__.py\", line 4, in \n", - " from dask.array import backends, fft, lib, linalg, ma, overlap, random\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/dask/array/backends.py\", line 8, in \n", - " from dask.array.core import Array\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/dask/array/core.py\", line 37, in \n", - " from dask.array.chunk_types import is_valid_array_chunk, is_valid_chunk_type\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/dask/array/chunk_types.py\", line 131, in \n", - " import scipy.sparse\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/scipy/sparse/__init__.py\", line 295, in \n", - " from ._csr import *\n", - " File \"/srv/conda/envs/notebook/lib/python3.10/site-packages/scipy/sparse/_csr.py\", line 11, in \n", - " from ._sparsetools import (csr_tocsc, csr_tobsr, csr_count_blocks,\n" - ] - }, - { - "ename": "AttributeError", - "evalue": "_ARRAY_API not found", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", - "\u001b[0;31mAttributeError\u001b[0m: _ARRAY_API not found" - ] - }, - { - "ename": "ValueError", - "evalue": "numpy.dtype size changed, may indicate binary incompatibility. Expected 96 from C header, got 88 from PyObject", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/IPython/core/formatters.py:711\u001b[0m, in \u001b[0;36mPlainTextFormatter.__call__\u001b[0;34m(self, obj)\u001b[0m\n\u001b[1;32m 704\u001b[0m stream \u001b[38;5;241m=\u001b[39m StringIO()\n\u001b[1;32m 705\u001b[0m printer \u001b[38;5;241m=\u001b[39m pretty\u001b[38;5;241m.\u001b[39mRepresentationPrinter(stream, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mverbose,\n\u001b[1;32m 706\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmax_width, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mnewline,\n\u001b[1;32m 707\u001b[0m max_seq_length\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmax_seq_length,\n\u001b[1;32m 708\u001b[0m singleton_pprinters\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msingleton_printers,\n\u001b[1;32m 709\u001b[0m type_pprinters\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtype_printers,\n\u001b[1;32m 710\u001b[0m deferred_pprinters\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdeferred_printers)\n\u001b[0;32m--> 711\u001b[0m \u001b[43mprinter\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpretty\u001b[49m\u001b[43m(\u001b[49m\u001b[43mobj\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 712\u001b[0m printer\u001b[38;5;241m.\u001b[39mflush()\n\u001b[1;32m 713\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m stream\u001b[38;5;241m.\u001b[39mgetvalue()\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/IPython/lib/pretty.py:411\u001b[0m, in \u001b[0;36mRepresentationPrinter.pretty\u001b[0;34m(self, obj)\u001b[0m\n\u001b[1;32m 408\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m meth(obj, \u001b[38;5;28mself\u001b[39m, cycle)\n\u001b[1;32m 409\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mcls\u001b[39m \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mobject\u001b[39m \\\n\u001b[1;32m 410\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mcallable\u001b[39m(\u001b[38;5;28mcls\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__dict__\u001b[39m\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m__repr__\u001b[39m\u001b[38;5;124m'\u001b[39m)):\n\u001b[0;32m--> 411\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_repr_pprint\u001b[49m\u001b[43m(\u001b[49m\u001b[43mobj\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcycle\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 413\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m _default_pprint(obj, \u001b[38;5;28mself\u001b[39m, cycle)\n\u001b[1;32m 414\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/IPython/lib/pretty.py:779\u001b[0m, in \u001b[0;36m_repr_pprint\u001b[0;34m(obj, p, cycle)\u001b[0m\n\u001b[1;32m 777\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"A pprint that just redirects to the normal repr function.\"\"\"\u001b[39;00m\n\u001b[1;32m 778\u001b[0m \u001b[38;5;66;03m# Find newlines and replace them with p.break_()\u001b[39;00m\n\u001b[0;32m--> 779\u001b[0m output \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mrepr\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mobj\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 780\u001b[0m lines \u001b[38;5;241m=\u001b[39m output\u001b[38;5;241m.\u001b[39msplitlines()\n\u001b[1;32m 781\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m p\u001b[38;5;241m.\u001b[39mgroup():\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/xarray/core/dataset.py:2540\u001b[0m, in \u001b[0;36mDataset.__repr__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 2539\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__repr__\u001b[39m(\u001b[38;5;28mself\u001b[39m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28mstr\u001b[39m:\n\u001b[0;32m-> 2540\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mformatting\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdataset_repr\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/reprlib.py:21\u001b[0m, in \u001b[0;36mrecursive_repr..decorating_function..wrapper\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 19\u001b[0m repr_running\u001b[38;5;241m.\u001b[39madd(key)\n\u001b[1;32m 20\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m---> 21\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[43muser_function\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 22\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[1;32m 23\u001b[0m repr_running\u001b[38;5;241m.\u001b[39mdiscard(key)\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/xarray/core/formatting.py:724\u001b[0m, in \u001b[0;36mdataset_repr\u001b[0;34m(ds)\u001b[0m\n\u001b[1;32m 721\u001b[0m summary\u001b[38;5;241m.\u001b[39mappend(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mdims_start\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m(\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mdims_values\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m)\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 723\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m ds\u001b[38;5;241m.\u001b[39mcoords:\n\u001b[0;32m--> 724\u001b[0m summary\u001b[38;5;241m.\u001b[39mappend(\u001b[43mcoords_repr\u001b[49m\u001b[43m(\u001b[49m\u001b[43mds\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcoords\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcol_width\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcol_width\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmax_rows\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmax_rows\u001b[49m\u001b[43m)\u001b[49m)\n\u001b[1;32m 726\u001b[0m unindexed_dims_str \u001b[38;5;241m=\u001b[39m unindexed_dims_repr(ds\u001b[38;5;241m.\u001b[39mdims, ds\u001b[38;5;241m.\u001b[39mcoords, max_rows\u001b[38;5;241m=\u001b[39mmax_rows)\n\u001b[1;32m 727\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m unindexed_dims_str:\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/xarray/core/formatting.py:434\u001b[0m, in \u001b[0;36mcoords_repr\u001b[0;34m(coords, col_width, max_rows)\u001b[0m\n\u001b[1;32m 432\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m col_width \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 433\u001b[0m col_width \u001b[38;5;241m=\u001b[39m _calculate_col_width(coords)\n\u001b[0;32m--> 434\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_mapping_repr\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 435\u001b[0m \u001b[43m \u001b[49m\u001b[43mcoords\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 436\u001b[0m \u001b[43m \u001b[49m\u001b[43mtitle\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mCoordinates\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 437\u001b[0m \u001b[43m \u001b[49m\u001b[43msummarizer\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msummarize_variable\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 438\u001b[0m \u001b[43m \u001b[49m\u001b[43mexpand_option_name\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mdisplay_expand_coords\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 439\u001b[0m \u001b[43m \u001b[49m\u001b[43mcol_width\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcol_width\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 440\u001b[0m \u001b[43m \u001b[49m\u001b[43mindexes\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcoords\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mxindexes\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 441\u001b[0m \u001b[43m \u001b[49m\u001b[43mmax_rows\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmax_rows\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 442\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/xarray/core/formatting.py:407\u001b[0m, in \u001b[0;36m_mapping_repr\u001b[0;34m(mapping, title, summarizer, expand_option_name, col_width, max_rows, indexes)\u001b[0m\n\u001b[1;32m 402\u001b[0m summary \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m [\n\u001b[1;32m 403\u001b[0m summarizer(k, mapping[k], col_width, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39msummarizer_kwargs[k])\n\u001b[1;32m 404\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m k \u001b[38;5;129;01min\u001b[39;00m keys[\u001b[38;5;241m-\u001b[39mlast_rows:]\n\u001b[1;32m 405\u001b[0m ]\n\u001b[1;32m 406\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 407\u001b[0m summary \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m [\n\u001b[1;32m 408\u001b[0m summarizer(k, v, col_width, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39msummarizer_kwargs[k])\n\u001b[1;32m 409\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m k, v \u001b[38;5;129;01min\u001b[39;00m mapping\u001b[38;5;241m.\u001b[39mitems()\n\u001b[1;32m 410\u001b[0m ]\n\u001b[1;32m 411\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 412\u001b[0m summary \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m [EMPTY_REPR]\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/xarray/core/formatting.py:408\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 402\u001b[0m summary \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m [\n\u001b[1;32m 403\u001b[0m summarizer(k, mapping[k], col_width, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39msummarizer_kwargs[k])\n\u001b[1;32m 404\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m k \u001b[38;5;129;01min\u001b[39;00m keys[\u001b[38;5;241m-\u001b[39mlast_rows:]\n\u001b[1;32m 405\u001b[0m ]\n\u001b[1;32m 406\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 407\u001b[0m summary \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m [\n\u001b[0;32m--> 408\u001b[0m \u001b[43msummarizer\u001b[49m\u001b[43m(\u001b[49m\u001b[43mk\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mv\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcol_width\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43msummarizer_kwargs\u001b[49m\u001b[43m[\u001b[49m\u001b[43mk\u001b[49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 409\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m k, v \u001b[38;5;129;01min\u001b[39;00m mapping\u001b[38;5;241m.\u001b[39mitems()\n\u001b[1;32m 410\u001b[0m ]\n\u001b[1;32m 411\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 412\u001b[0m summary \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m [EMPTY_REPR]\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/xarray/core/formatting.py:344\u001b[0m, in \u001b[0;36msummarize_variable\u001b[0;34m(name, var, col_width, max_width, is_index)\u001b[0m\n\u001b[1;32m 341\u001b[0m front_str \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mfirst_col\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;132;01m{\u001b[39;00mdims_str\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;132;01m{\u001b[39;00mvariable\u001b[38;5;241m.\u001b[39mdtype\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;132;01m{\u001b[39;00mnbytes_str\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 343\u001b[0m values_width \u001b[38;5;241m=\u001b[39m max_width \u001b[38;5;241m-\u001b[39m \u001b[38;5;28mlen\u001b[39m(front_str)\n\u001b[0;32m--> 344\u001b[0m values_str \u001b[38;5;241m=\u001b[39m \u001b[43minline_variable_array_repr\u001b[49m\u001b[43m(\u001b[49m\u001b[43mvariable\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvalues_width\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 346\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m front_str \u001b[38;5;241m+\u001b[39m values_str\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/xarray/core/formatting.py:303\u001b[0m, in \u001b[0;36minline_variable_array_repr\u001b[0;34m(var, max_width)\u001b[0m\n\u001b[1;32m 301\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m var\u001b[38;5;241m.\u001b[39m_in_memory:\n\u001b[1;32m 302\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m format_array_flat(var, max_width)\n\u001b[0;32m--> 303\u001b[0m dask_array_type \u001b[38;5;241m=\u001b[39m \u001b[43marray_type\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mdask\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 304\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(var\u001b[38;5;241m.\u001b[39m_data, dask_array_type):\n\u001b[1;32m 305\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m inline_dask_repr(var\u001b[38;5;241m.\u001b[39mdata)\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/xarray/namedarray/pycompat.py:83\u001b[0m, in \u001b[0;36marray_type\u001b[0;34m(mod)\u001b[0m\n\u001b[1;32m 81\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21marray_type\u001b[39m(mod: ModType) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m DuckArrayTypes:\n\u001b[1;32m 82\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Quick wrapper to get the array class of the module.\"\"\"\u001b[39;00m\n\u001b[0;32m---> 83\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_get_cached_duck_array_module\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmod\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39mtype\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/xarray/namedarray/pycompat.py:74\u001b[0m, in \u001b[0;36m_get_cached_duck_array_module\u001b[0;34m(mod)\u001b[0m\n\u001b[1;32m 72\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_get_cached_duck_array_module\u001b[39m(mod: ModType) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m DuckArrayModule:\n\u001b[1;32m 73\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m mod \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m _cached_duck_array_modules:\n\u001b[0;32m---> 74\u001b[0m duckmod \u001b[38;5;241m=\u001b[39m \u001b[43mDuckArrayModule\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmod\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 75\u001b[0m _cached_duck_array_modules[mod] \u001b[38;5;241m=\u001b[39m duckmod\n\u001b[1;32m 76\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m duckmod\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/xarray/namedarray/pycompat.py:43\u001b[0m, in \u001b[0;36mDuckArrayModule.__init__\u001b[0;34m(self, mod)\u001b[0m\n\u001b[1;32m 40\u001b[0m duck_array_version \u001b[38;5;241m=\u001b[39m Version(duck_array_module\u001b[38;5;241m.\u001b[39m__version__)\n\u001b[1;32m 42\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m mod \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdask\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[0;32m---> 43\u001b[0m duck_array_type \u001b[38;5;241m=\u001b[39m (\u001b[43mimport_module\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mdask.array\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39mArray,)\n\u001b[1;32m 44\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m mod \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mpint\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[1;32m 45\u001b[0m duck_array_type \u001b[38;5;241m=\u001b[39m (duck_array_module\u001b[38;5;241m.\u001b[39mQuantity,)\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/importlib/__init__.py:126\u001b[0m, in \u001b[0;36mimport_module\u001b[0;34m(name, package)\u001b[0m\n\u001b[1;32m 124\u001b[0m \u001b[38;5;28;01mbreak\u001b[39;00m\n\u001b[1;32m 125\u001b[0m level \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m1\u001b[39m\n\u001b[0;32m--> 126\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_bootstrap\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_gcd_import\u001b[49m\u001b[43m(\u001b[49m\u001b[43mname\u001b[49m\u001b[43m[\u001b[49m\u001b[43mlevel\u001b[49m\u001b[43m:\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpackage\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mlevel\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m:1050\u001b[0m, in \u001b[0;36m_gcd_import\u001b[0;34m(name, package, level)\u001b[0m\n", - "File \u001b[0;32m:1027\u001b[0m, in \u001b[0;36m_find_and_load\u001b[0;34m(name, import_)\u001b[0m\n", - "File \u001b[0;32m:1006\u001b[0m, in \u001b[0;36m_find_and_load_unlocked\u001b[0;34m(name, import_)\u001b[0m\n", - "File \u001b[0;32m:688\u001b[0m, in \u001b[0;36m_load_unlocked\u001b[0;34m(spec)\u001b[0m\n", - "File \u001b[0;32m:883\u001b[0m, in \u001b[0;36mexec_module\u001b[0;34m(self, module)\u001b[0m\n", - "File \u001b[0;32m:241\u001b[0m, in \u001b[0;36m_call_with_frames_removed\u001b[0;34m(f, *args, **kwds)\u001b[0m\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/dask/array/__init__.py:4\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m__future__\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m annotations\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m----> 4\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mdask\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01marray\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m backends, fft, lib, linalg, ma, overlap, random\n\u001b[1;32m 5\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mdask\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01marray\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mblockwise\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m atop, blockwise\n\u001b[1;32m 6\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mdask\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01marray\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mchunk_types\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m register_chunk_type\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/dask/array/fft.py:11\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 10\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mscipy\u001b[39;00m\n\u001b[0;32m---> 11\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mscipy\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mfftpack\u001b[39;00m\n\u001b[1;32m 12\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mImportError\u001b[39;00m:\n\u001b[1;32m 13\u001b[0m scipy \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/scipy/fftpack/__init__.py:93\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 2\u001b[0m \u001b[38;5;124;03m=========================================================\u001b[39;00m\n\u001b[1;32m 3\u001b[0m \u001b[38;5;124;03mLegacy discrete Fourier transforms (:mod:`scipy.fftpack`)\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 77\u001b[0m \n\u001b[1;32m 78\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 81\u001b[0m __all__ \u001b[38;5;241m=\u001b[39m [\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfft\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mifft\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfftn\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mifftn\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mrfft\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mirfft\u001b[39m\u001b[38;5;124m'\u001b[39m,\n\u001b[1;32m 82\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfft2\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mifft2\u001b[39m\u001b[38;5;124m'\u001b[39m,\n\u001b[1;32m 83\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdiff\u001b[39m\u001b[38;5;124m'\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 90\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdct\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124midct\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdst\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124midst\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdctn\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124midctn\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdstn\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124midstn\u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[1;32m 91\u001b[0m ]\n\u001b[0;32m---> 93\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_basic\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;241m*\u001b[39m\n\u001b[1;32m 94\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_pseudo_diffs\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;241m*\u001b[39m\n\u001b[1;32m 95\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_helper\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;241m*\u001b[39m\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/scipy/fftpack/_basic.py:8\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[38;5;66;03m# Created by Pearu Peterson, August,September 2002\u001b[39;00m\n\u001b[1;32m 5\u001b[0m __all__ \u001b[38;5;241m=\u001b[39m [\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfft\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mifft\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfftn\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mifftn\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mrfft\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mirfft\u001b[39m\u001b[38;5;124m'\u001b[39m,\n\u001b[1;32m 6\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfft2\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mifft2\u001b[39m\u001b[38;5;124m'\u001b[39m]\n\u001b[0;32m----> 8\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mscipy\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mfft\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m _pocketfft\n\u001b[1;32m 9\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_helper\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m _good_shape\n\u001b[1;32m 12\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mfft\u001b[39m(x, n\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, axis\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m, overwrite_x\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m):\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/scipy/fft/__init__.py:90\u001b[0m\n\u001b[1;32m 85\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_basic\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m (\n\u001b[1;32m 86\u001b[0m fft, ifft, fft2, ifft2, fftn, ifftn,\n\u001b[1;32m 87\u001b[0m rfft, irfft, rfft2, irfft2, rfftn, irfftn,\n\u001b[1;32m 88\u001b[0m hfft, ihfft, hfft2, ihfft2, hfftn, ihfftn)\n\u001b[1;32m 89\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_realtransforms\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m dct, idct, dst, idst, dctn, idctn, dstn, idstn\n\u001b[0;32m---> 90\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_fftlog\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m fht, ifht, fhtoffset\n\u001b[1;32m 91\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_helper\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m next_fast_len, fftfreq, rfftfreq, fftshift, ifftshift\n\u001b[1;32m 92\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_backend\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m (set_backend, skip_backend, set_global_backend,\n\u001b[1;32m 93\u001b[0m register_backend)\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/scipy/fft/_fftlog.py:10\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_basic\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m _dispatch\n\u001b[1;32m 9\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mscipy\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_lib\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01muarray\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Dispatchable\n\u001b[0;32m---> 10\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_fftlog_backend\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m fhtoffset\n\u001b[1;32m 11\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mnumpy\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mnp\u001b[39;00m\n\u001b[1;32m 13\u001b[0m __all__ \u001b[38;5;241m=\u001b[39m [\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfht\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mifht\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfhtoffset\u001b[39m\u001b[38;5;124m'\u001b[39m]\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/scipy/fft/_fftlog_backend.py:4\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mwarnings\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m warn\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_basic\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m rfft, irfft\n\u001b[0;32m----> 4\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mspecial\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m loggamma, poch\n\u001b[1;32m 6\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mscipy\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_lib\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_array_api\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m array_namespace, copy\n\u001b[1;32m 8\u001b[0m __all__ \u001b[38;5;241m=\u001b[39m [\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfht\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mifht\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfhtoffset\u001b[39m\u001b[38;5;124m'\u001b[39m]\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/scipy/special/__init__.py:777\u001b[0m\n\u001b[1;32m 773\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mwarnings\u001b[39;00m\n\u001b[1;32m 775\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_sf_error\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m SpecialFunctionWarning, SpecialFunctionError\n\u001b[0;32m--> 777\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m _ufuncs\n\u001b[1;32m 778\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_ufuncs\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;241m*\u001b[39m\n\u001b[1;32m 780\u001b[0m \u001b[38;5;66;03m# Replace some function definitions from _ufuncs to add Array API support\u001b[39;00m\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/scipy/special/_ufuncs.pyx:1\u001b[0m, in \u001b[0;36minit scipy.special._ufuncs\u001b[0;34m()\u001b[0m\n", - "\u001b[0;31mValueError\u001b[0m: numpy.dtype size changed, may indicate binary incompatibility. Expected 96 from C header, got 88 from PyObject" - ] - }, - { - "ename": "ValueError", - "evalue": "numpy.dtype size changed, may indicate binary incompatibility. Expected 96 from C header, got 88 from PyObject", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/IPython/core/formatters.py:347\u001b[0m, in \u001b[0;36mBaseFormatter.__call__\u001b[0;34m(self, obj)\u001b[0m\n\u001b[1;32m 345\u001b[0m method \u001b[38;5;241m=\u001b[39m get_real_method(obj, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mprint_method)\n\u001b[1;32m 346\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m method \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m--> 347\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mmethod\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 348\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 349\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/xarray/core/dataset.py:2545\u001b[0m, in \u001b[0;36mDataset._repr_html_\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 2543\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m OPTIONS[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdisplay_style\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtext\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[1;32m 2544\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m
\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mescape(\u001b[38;5;28mrepr\u001b[39m(\u001b[38;5;28mself\u001b[39m))\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m
\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m-> 2545\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mformatting_html\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdataset_repr\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/xarray/core/formatting_html.py:337\u001b[0m, in \u001b[0;36mdataset_repr\u001b[0;34m(ds)\u001b[0m\n\u001b[1;32m 331\u001b[0m obj_type \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mxarray.\u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mtype\u001b[39m(ds)\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__name__\u001b[39m\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 333\u001b[0m header_components \u001b[38;5;241m=\u001b[39m [\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m
\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mescape(obj_type)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m
\u001b[39m\u001b[38;5;124m\"\u001b[39m]\n\u001b[1;32m 335\u001b[0m sections \u001b[38;5;241m=\u001b[39m [\n\u001b[1;32m 336\u001b[0m dim_section(ds),\n\u001b[0;32m--> 337\u001b[0m \u001b[43mcoord_section\u001b[49m\u001b[43m(\u001b[49m\u001b[43mds\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcoords\u001b[49m\u001b[43m)\u001b[49m,\n\u001b[1;32m 338\u001b[0m datavar_section(ds\u001b[38;5;241m.\u001b[39mdata_vars),\n\u001b[1;32m 339\u001b[0m index_section(_get_indexes_dict(ds\u001b[38;5;241m.\u001b[39mxindexes)),\n\u001b[1;32m 340\u001b[0m attr_section(ds\u001b[38;5;241m.\u001b[39mattrs),\n\u001b[1;32m 341\u001b[0m ]\n\u001b[1;32m 343\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m _obj_repr(ds, header_components, sections)\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/xarray/core/formatting_html.py:200\u001b[0m, in \u001b[0;36m_mapping_section\u001b[0;34m(mapping, name, details_func, max_items_collapse, expand_option_name, enabled)\u001b[0m\n\u001b[1;32m 193\u001b[0m expanded \u001b[38;5;241m=\u001b[39m _get_boolean_with_default(\n\u001b[1;32m 194\u001b[0m expand_option_name, n_items \u001b[38;5;241m<\u001b[39m max_items_collapse\n\u001b[1;32m 195\u001b[0m )\n\u001b[1;32m 196\u001b[0m collapsed \u001b[38;5;241m=\u001b[39m \u001b[38;5;129;01mnot\u001b[39;00m expanded\n\u001b[1;32m 198\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m collapsible_section(\n\u001b[1;32m 199\u001b[0m name,\n\u001b[0;32m--> 200\u001b[0m details\u001b[38;5;241m=\u001b[39m\u001b[43mdetails_func\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmapping\u001b[49m\u001b[43m)\u001b[49m,\n\u001b[1;32m 201\u001b[0m n_items\u001b[38;5;241m=\u001b[39mn_items,\n\u001b[1;32m 202\u001b[0m enabled\u001b[38;5;241m=\u001b[39menabled,\n\u001b[1;32m 203\u001b[0m collapsed\u001b[38;5;241m=\u001b[39mcollapsed,\n\u001b[1;32m 204\u001b[0m )\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/xarray/core/formatting_html.py:116\u001b[0m, in \u001b[0;36msummarize_coords\u001b[0;34m(variables)\u001b[0m\n\u001b[1;32m 114\u001b[0m li_items \u001b[38;5;241m=\u001b[39m []\n\u001b[1;32m 115\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m k, v \u001b[38;5;129;01min\u001b[39;00m variables\u001b[38;5;241m.\u001b[39mitems():\n\u001b[0;32m--> 116\u001b[0m li_content \u001b[38;5;241m=\u001b[39m \u001b[43msummarize_variable\u001b[49m\u001b[43m(\u001b[49m\u001b[43mk\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mv\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mis_index\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mk\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mvariables\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mxindexes\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 117\u001b[0m li_items\u001b[38;5;241m.\u001b[39mappend(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m
  • \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mli_content\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m
  • \u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 119\u001b[0m vars_li \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mjoin(li_items)\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/xarray/core/formatting_html.py:89\u001b[0m, in \u001b[0;36msummarize_variable\u001b[0;34m(name, var, is_index, dtype)\u001b[0m\n\u001b[1;32m 86\u001b[0m data_id \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdata-\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;241m+\u001b[39m \u001b[38;5;28mstr\u001b[39m(uuid\u001b[38;5;241m.\u001b[39muuid4())\n\u001b[1;32m 87\u001b[0m disabled \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(var\u001b[38;5;241m.\u001b[39mattrs) \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdisabled\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m---> 89\u001b[0m preview \u001b[38;5;241m=\u001b[39m escape(\u001b[43minline_variable_array_repr\u001b[49m\u001b[43m(\u001b[49m\u001b[43mvariable\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m35\u001b[39;49m\u001b[43m)\u001b[49m)\n\u001b[1;32m 90\u001b[0m attrs_ul \u001b[38;5;241m=\u001b[39m summarize_attrs(var\u001b[38;5;241m.\u001b[39mattrs)\n\u001b[1;32m 91\u001b[0m data_repr \u001b[38;5;241m=\u001b[39m short_data_repr_html(variable)\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/xarray/core/formatting.py:303\u001b[0m, in \u001b[0;36minline_variable_array_repr\u001b[0;34m(var, max_width)\u001b[0m\n\u001b[1;32m 301\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m var\u001b[38;5;241m.\u001b[39m_in_memory:\n\u001b[1;32m 302\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m format_array_flat(var, max_width)\n\u001b[0;32m--> 303\u001b[0m dask_array_type \u001b[38;5;241m=\u001b[39m \u001b[43marray_type\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mdask\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 304\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(var\u001b[38;5;241m.\u001b[39m_data, dask_array_type):\n\u001b[1;32m 305\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m inline_dask_repr(var\u001b[38;5;241m.\u001b[39mdata)\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/xarray/namedarray/pycompat.py:83\u001b[0m, in \u001b[0;36marray_type\u001b[0;34m(mod)\u001b[0m\n\u001b[1;32m 81\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21marray_type\u001b[39m(mod: ModType) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m DuckArrayTypes:\n\u001b[1;32m 82\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Quick wrapper to get the array class of the module.\"\"\"\u001b[39;00m\n\u001b[0;32m---> 83\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_get_cached_duck_array_module\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmod\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39mtype\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/xarray/namedarray/pycompat.py:74\u001b[0m, in \u001b[0;36m_get_cached_duck_array_module\u001b[0;34m(mod)\u001b[0m\n\u001b[1;32m 72\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_get_cached_duck_array_module\u001b[39m(mod: ModType) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m DuckArrayModule:\n\u001b[1;32m 73\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m mod \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m _cached_duck_array_modules:\n\u001b[0;32m---> 74\u001b[0m duckmod \u001b[38;5;241m=\u001b[39m \u001b[43mDuckArrayModule\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmod\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 75\u001b[0m _cached_duck_array_modules[mod] \u001b[38;5;241m=\u001b[39m duckmod\n\u001b[1;32m 76\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m duckmod\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/xarray/namedarray/pycompat.py:43\u001b[0m, in \u001b[0;36mDuckArrayModule.__init__\u001b[0;34m(self, mod)\u001b[0m\n\u001b[1;32m 40\u001b[0m duck_array_version \u001b[38;5;241m=\u001b[39m Version(duck_array_module\u001b[38;5;241m.\u001b[39m__version__)\n\u001b[1;32m 42\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m mod \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdask\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[0;32m---> 43\u001b[0m duck_array_type \u001b[38;5;241m=\u001b[39m (\u001b[43mimport_module\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mdask.array\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39mArray,)\n\u001b[1;32m 44\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m mod \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mpint\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[1;32m 45\u001b[0m duck_array_type \u001b[38;5;241m=\u001b[39m (duck_array_module\u001b[38;5;241m.\u001b[39mQuantity,)\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/importlib/__init__.py:126\u001b[0m, in \u001b[0;36mimport_module\u001b[0;34m(name, package)\u001b[0m\n\u001b[1;32m 124\u001b[0m \u001b[38;5;28;01mbreak\u001b[39;00m\n\u001b[1;32m 125\u001b[0m level \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m1\u001b[39m\n\u001b[0;32m--> 126\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_bootstrap\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_gcd_import\u001b[49m\u001b[43m(\u001b[49m\u001b[43mname\u001b[49m\u001b[43m[\u001b[49m\u001b[43mlevel\u001b[49m\u001b[43m:\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpackage\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mlevel\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m:1050\u001b[0m, in \u001b[0;36m_gcd_import\u001b[0;34m(name, package, level)\u001b[0m\n", - "File \u001b[0;32m:1027\u001b[0m, in \u001b[0;36m_find_and_load\u001b[0;34m(name, import_)\u001b[0m\n", - "File \u001b[0;32m:1006\u001b[0m, in \u001b[0;36m_find_and_load_unlocked\u001b[0;34m(name, import_)\u001b[0m\n", - "File \u001b[0;32m:688\u001b[0m, in \u001b[0;36m_load_unlocked\u001b[0;34m(spec)\u001b[0m\n", - "File \u001b[0;32m:883\u001b[0m, in \u001b[0;36mexec_module\u001b[0;34m(self, module)\u001b[0m\n", - "File \u001b[0;32m:241\u001b[0m, in \u001b[0;36m_call_with_frames_removed\u001b[0;34m(f, *args, **kwds)\u001b[0m\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/dask/array/__init__.py:4\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m__future__\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m annotations\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m----> 4\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mdask\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01marray\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m backends, fft, lib, linalg, ma, overlap, random\n\u001b[1;32m 5\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mdask\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01marray\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mblockwise\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m atop, blockwise\n\u001b[1;32m 6\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mdask\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01marray\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mchunk_types\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m register_chunk_type\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/dask/array/fft.py:11\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 10\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mscipy\u001b[39;00m\n\u001b[0;32m---> 11\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mscipy\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mfftpack\u001b[39;00m\n\u001b[1;32m 12\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mImportError\u001b[39;00m:\n\u001b[1;32m 13\u001b[0m scipy \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/scipy/fftpack/__init__.py:93\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 2\u001b[0m \u001b[38;5;124;03m=========================================================\u001b[39;00m\n\u001b[1;32m 3\u001b[0m \u001b[38;5;124;03mLegacy discrete Fourier transforms (:mod:`scipy.fftpack`)\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 77\u001b[0m \n\u001b[1;32m 78\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 81\u001b[0m __all__ \u001b[38;5;241m=\u001b[39m [\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfft\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mifft\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfftn\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mifftn\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mrfft\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mirfft\u001b[39m\u001b[38;5;124m'\u001b[39m,\n\u001b[1;32m 82\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfft2\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mifft2\u001b[39m\u001b[38;5;124m'\u001b[39m,\n\u001b[1;32m 83\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdiff\u001b[39m\u001b[38;5;124m'\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 90\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdct\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124midct\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdst\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124midst\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdctn\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124midctn\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdstn\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124midstn\u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[1;32m 91\u001b[0m ]\n\u001b[0;32m---> 93\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_basic\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;241m*\u001b[39m\n\u001b[1;32m 94\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_pseudo_diffs\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;241m*\u001b[39m\n\u001b[1;32m 95\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_helper\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;241m*\u001b[39m\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/scipy/fftpack/_basic.py:8\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[38;5;66;03m# Created by Pearu Peterson, August,September 2002\u001b[39;00m\n\u001b[1;32m 5\u001b[0m __all__ \u001b[38;5;241m=\u001b[39m [\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfft\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mifft\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfftn\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mifftn\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mrfft\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mirfft\u001b[39m\u001b[38;5;124m'\u001b[39m,\n\u001b[1;32m 6\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfft2\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mifft2\u001b[39m\u001b[38;5;124m'\u001b[39m]\n\u001b[0;32m----> 8\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mscipy\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mfft\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m _pocketfft\n\u001b[1;32m 9\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_helper\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m _good_shape\n\u001b[1;32m 12\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mfft\u001b[39m(x, n\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, axis\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m, overwrite_x\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m):\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/scipy/fft/__init__.py:90\u001b[0m\n\u001b[1;32m 85\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_basic\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m (\n\u001b[1;32m 86\u001b[0m fft, ifft, fft2, ifft2, fftn, ifftn,\n\u001b[1;32m 87\u001b[0m rfft, irfft, rfft2, irfft2, rfftn, irfftn,\n\u001b[1;32m 88\u001b[0m hfft, ihfft, hfft2, ihfft2, hfftn, ihfftn)\n\u001b[1;32m 89\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_realtransforms\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m dct, idct, dst, idst, dctn, idctn, dstn, idstn\n\u001b[0;32m---> 90\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_fftlog\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m fht, ifht, fhtoffset\n\u001b[1;32m 91\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_helper\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m next_fast_len, fftfreq, rfftfreq, fftshift, ifftshift\n\u001b[1;32m 92\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_backend\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m (set_backend, skip_backend, set_global_backend,\n\u001b[1;32m 93\u001b[0m register_backend)\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/scipy/fft/_fftlog.py:10\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_basic\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m _dispatch\n\u001b[1;32m 9\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mscipy\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_lib\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01muarray\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Dispatchable\n\u001b[0;32m---> 10\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_fftlog_backend\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m fhtoffset\n\u001b[1;32m 11\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mnumpy\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mnp\u001b[39;00m\n\u001b[1;32m 13\u001b[0m __all__ \u001b[38;5;241m=\u001b[39m [\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfht\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mifht\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfhtoffset\u001b[39m\u001b[38;5;124m'\u001b[39m]\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/scipy/fft/_fftlog_backend.py:4\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mwarnings\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m warn\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_basic\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m rfft, irfft\n\u001b[0;32m----> 4\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mspecial\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m loggamma, poch\n\u001b[1;32m 6\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mscipy\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_lib\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_array_api\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m array_namespace, copy\n\u001b[1;32m 8\u001b[0m __all__ \u001b[38;5;241m=\u001b[39m [\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfht\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mifht\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfhtoffset\u001b[39m\u001b[38;5;124m'\u001b[39m]\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/scipy/special/__init__.py:777\u001b[0m\n\u001b[1;32m 773\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mwarnings\u001b[39;00m\n\u001b[1;32m 775\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_sf_error\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m SpecialFunctionWarning, SpecialFunctionError\n\u001b[0;32m--> 777\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m _ufuncs\n\u001b[1;32m 778\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_ufuncs\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;241m*\u001b[39m\n\u001b[1;32m 780\u001b[0m \u001b[38;5;66;03m# Replace some function definitions from _ufuncs to add Array API support\u001b[39;00m\n", - "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.10/site-packages/scipy/special/_ufuncs.pyx:1\u001b[0m, in \u001b[0;36minit scipy.special._ufuncs\u001b[0;34m()\u001b[0m\n", - "\u001b[0;31mValueError\u001b[0m: numpy.dtype size changed, may indicate binary incompatibility. Expected 96 from C header, got 88 from PyObject" - ] + "data": { + "text/html": [ + "
    \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
    <xarray.Dataset> Size: 92MB\n",
    +       "Dimensions:         (delta_time: 1848993, ds_surf_type: 5)\n",
    +       "Coordinates:\n",
    +       "  * delta_time      (delta_time) datetime64[ns] 15MB 2020-04-27T19:39:45.8497...\n",
    +       "    lat_ph          (delta_time) float64 15MB ...\n",
    +       "    lon_ph          (delta_time) float64 15MB ...\n",
    +       "Dimensions without coordinates: ds_surf_type\n",
    +       "Data variables:\n",
    +       "    dist_ph_across  (delta_time) float32 7MB ...\n",
    +       "    dist_ph_along   (delta_time) float32 7MB ...\n",
    +       "    h_ph            (delta_time) float32 7MB ...\n",
    +       "    pce_mframe_cnt  (delta_time) uint32 7MB ...\n",
    +       "    ph_id_channel   (delta_time) uint8 2MB ...\n",
    +       "    ph_id_count     (delta_time) uint8 2MB ...\n",
    +       "    ph_id_pulse     (delta_time) uint8 2MB ...\n",
    +       "    quality_ph      (delta_time) int8 2MB ...\n",
    +       "    signal_conf_ph  (delta_time, ds_surf_type) int8 9MB ...\n",
    +       "    weight_ph       (delta_time) uint8 2MB ...\n",
    +       "Attributes:\n",
    +       "    Description:  Contains arrays of the parameters for each received photon.\n",
    +       "    data_rate:    Data are stored at the photon detection rate.
    " + ], + "text/plain": [ + " Size: 92MB\n", + "Dimensions: (delta_time: 1848993, ds_surf_type: 5)\n", + "Coordinates:\n", + " * delta_time (delta_time) datetime64[ns] 15MB 2020-04-27T19:39:45.8497...\n", + " lat_ph (delta_time) float64 15MB ...\n", + " lon_ph (delta_time) float64 15MB ...\n", + "Dimensions without coordinates: ds_surf_type\n", + "Data variables:\n", + " dist_ph_across (delta_time) float32 7MB ...\n", + " dist_ph_along (delta_time) float32 7MB ...\n", + " h_ph (delta_time) float32 7MB ...\n", + " pce_mframe_cnt (delta_time) uint32 7MB ...\n", + " ph_id_channel (delta_time) uint8 2MB ...\n", + " ph_id_count (delta_time) uint8 2MB ...\n", + " ph_id_pulse (delta_time) uint8 2MB ...\n", + " quality_ph (delta_time) int8 2MB ...\n", + " signal_conf_ph (delta_time, ds_surf_type) int8 9MB ...\n", + " weight_ph (delta_time) uint8 2MB ...\n", + "Attributes:\n", + " Description: Contains arrays of the parameters for each received photon.\n", + " data_rate: Data are stored at the photon detection rate." + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ @@ -976,118 +1619,9 @@ "id": "ba0d2015-f342-4987-aa16-e0b67b6e35b3", "metadata": {}, "source": [ - "_AS Andy: We could also remove this entirely for the first iteration and just point to harmony-py docs above when you first reference the 300 limit. This could be a future enhancement to add more examples or use cases as an Appendix._\n", - "\n", "### A. Handling large requests\n", "\n", - "Need to explain large-jobs and previews, pausing\n", - "\n", - "https://github.com/nasa/harmony-py/blob/main/examples/job_pause_resume.ipynb\n", - "\n", - "By default Harmony will only process first 300 granules\n", - "\n", - "https://harmony.earthdata.nasa.gov/docs#skipping-preview" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "7ca0b14a-7f6d-40f4-8eeb-b7f871a851da", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'status': 'running',\n", - " 'message': 'The job is being processed',\n", - " 'progress': 0,\n", - " 'created_at': datetime.datetime(2024, 10, 29, 22, 14, 21, 784000, tzinfo=tzlocal()),\n", - " 'updated_at': datetime.datetime(2024, 10, 29, 22, 14, 21, 784000, tzinfo=tzlocal()),\n", - " 'created_at_local': '2024-10-29T22:14:21+00:00',\n", - " 'updated_at_local': '2024-10-29T22:14:21+00:00',\n", - " 'request': 'https://harmony.earthdata.nasa.gov/C2596864127-NSIDC_CPRD/ogc-api-coverages/1.0.0/collections/all/coverage/rangeset?forceAsync=true&subset=lat(40%3A41.0)&subset=lon(-105.5%3A-105)',\n", - " 'num_input_granules': 134,\n", - " 'data_expiration': datetime.datetime(2024, 11, 28, 22, 14, 21, 784000, tzinfo=tzlocal()),\n", - " 'data_expiration_local': '2024-11-28T22:14:21+00:00'}" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "request = Request(\n", - " collection = Collection(id=capabilities[\"conceptId\"]),\n", - " spatial=BBox(-105.5,40,-105,41.),\n", - " # temporal={\n", - " # 'start': dt.datetime(2020, 4, 27),\n", - " # 'stop': dt.datetime(2020, 5, 28)\n", - " # }\n", - ")\n", - "job_id = harmony_client.submit(request)\n", - "harmony_client.status(job_id)" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "00b36a4a-d673-45d5-b0a4-9c7bba958852", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - " [ Processing: 80% ] |######################################## | [/]\n", - "Job is running with errors.\n", - " [ Processing: 100% ] |###################################################| [|]\n" - ] - } - ], - "source": [ - "harmony_client.wait_for_processing(job_id, show_progress=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "6710674d-d124-4b9d-9a39-265b65baa749", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'status': 'complete_with_errors',\n", - " 'message': 'The job has completed with errors. See the errors field for more details',\n", - " 'progress': 100,\n", - " 'created_at': datetime.datetime(2024, 10, 29, 22, 14, 21, 784000, tzinfo=tzlocal()),\n", - " 'updated_at': datetime.datetime(2024, 10, 29, 22, 29, 32, 444000, tzinfo=tzlocal()),\n", - " 'created_at_local': '2024-10-29T22:14:21+00:00',\n", - " 'updated_at_local': '2024-10-29T22:29:32+00:00',\n", - " 'request': 'https://harmony.earthdata.nasa.gov/C2596864127-NSIDC_CPRD/ogc-api-coverages/1.0.0/collections/all/coverage/rangeset?forceAsync=true&subset=lat(40%3A41.0)&subset=lon(-105.5%3A-105)',\n", - " 'num_input_granules': 134,\n", - " 'data_expiration': datetime.datetime(2024, 11, 28, 22, 14, 21, 784000, tzinfo=tzlocal()),\n", - " 'data_expiration_local': '2024-11-28T22:14:21+00:00',\n", - " 'errors': [{'url': 'https://data.nsidc.earthdatacloud.nasa.gov/nsidc-cumulus-prod-protected/ATLAS/ATL03/006/2023/08/20/ATL03_20230820094935_09352002_006_02.h5',\n", - " 'message': 'WorkItem failed: sds/trajectory-subsetter:0.1.21: L2 Trajectory Subsetter failed with error: No data found that matched subset constraints.'},\n", - " {'url': 'https://data.nsidc.earthdatacloud.nasa.gov/nsidc-cumulus-prod-protected/ATLAS/ATL03/006/2020/08/25/ATL03_20200825135211_09350802_006_01.h5',\n", - " 'message': 'WorkItem failed: sds/trajectory-subsetter:0.1.21: L2 Trajectory Subsetter failed with error: No data found that matched subset constraints.'},\n", - " {'url': 'https://data.nsidc.earthdatacloud.nasa.gov/nsidc-cumulus-prod-protected/ATLAS/ATL03/006/2018/11/28/ATL03_20181128201334_09350102_006_02.h5',\n", - " 'message': 'WorkItem failed: sds/trajectory-subsetter:0.1.21: L2 Trajectory Subsetter failed with error: No data found that matched subset constraints.'},\n", - " {'url': 'https://data.nsidc.earthdatacloud.nasa.gov/nsidc-cumulus-prod-protected/ATLAS/ATL03/006/2022/11/20/ATL03_20221120225059_09351702_006_02.h5',\n", - " 'message': 'WorkItem failed: sds/trajectory-subsetter:0.1.21: L2 Trajectory Subsetter failed with error: No data found that matched subset constraints.'},\n", - " {'url': 'https://data.nsidc.earthdatacloud.nasa.gov/nsidc-cumulus-prod-protected/ATLAS/ATL03/006/2021/02/21/ATL03_20210221172745_09121006_006_01.h5',\n", - " 'message': 'WorkItem failed: sds/trajectory-subsetter:0.1.21: L2 Trajectory Subsetter failed with error: No data found that matched subset constraints.'}]}" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "harmony_client.status(job_id)" + "By default Harmony will only process first 300 granules for large requests. This allows users to check that results look correct. Once we are satified that our request is correct, the job can be resumed. See this [notebook](https://github.com/nasa/harmony-py/blob/main/examples/job_pause_resume.ipynb) for examples." ] }, {