From fd959446d28c901eb95f197d8a20f9c88959a2cf Mon Sep 17 00:00:00 2001 From: Ian Carroll Date: Tue, 17 Sep 2024 23:00:57 -0400 Subject: [PATCH 1/4] format notebooks with ruff, and polish --- docs/howto/edl.ipynb | 489 +---------------------- docs/tutorials/SSL.ipynb | 101 +++-- docs/tutorials/emit-earthaccess.ipynb | 46 ++- docs/tutorials/file-access.ipynb | 6 +- docs/tutorials/restricted-datasets.ipynb | 148 ++----- notebooks/DatasetSearch.ipynb | 15 +- notebooks/Demo.ipynb | 72 +++- notebooks/EarthdataLogin.ipynb | 241 +---------- pyproject.toml | 4 +- 9 files changed, 222 insertions(+), 900 deletions(-) diff --git a/docs/howto/edl.ipynb b/docs/howto/edl.ipynb index 5949ddb5..e5031eb1 100644 --- a/docs/howto/edl.ipynb +++ b/docs/howto/edl.ipynb @@ -14,7 +14,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "ce723d6f-8b5f-43e1-9531-19ee08a056fe", "metadata": {}, "outputs": [], @@ -35,12 +35,12 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "f1f45172-c9c3-4f25-ad7e-acf94fba8b1d", "metadata": {}, "outputs": [], "source": [ - "#s3_credentials = auth.get_s3_credentials(\"NSIDC\")" + "# s3_credentials = auth.get_s3_credentials(\"NSIDC\")" ] }, { @@ -63,7 +63,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "a7bb1a93-6f85-40cd-93b4-ce821a03a8b5", "metadata": {}, "outputs": [], @@ -71,27 +71,16 @@ "nsidc_url = \"https://n5eil01u.ecs.nsidc.org/DP7/ATLAS/ATL06.005/2019.02.21/ATL06_20190221121851_08410203_005_01.h5\"\n", "lpcloud_url = \"https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/EMITL2ARFL.001/EMIT_L2A_RFL_001_20220903T163129_2224611_012/EMIT_L2A_RFL_001_20220903T163129_2224611_012.nc\"\n", "\n", - "# this is a Python requests session \n", + "# this is a Python requests session\n", "session = earthaccess.get_requests_https_session()" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "c0f4e286-8ce9-4cde-b3a2-631b361a0d51", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'�HDF\\r\\n\\x1a\\n\\x00\\x00\\x00\\x00\\x00\\x08\\x08\\x00\\x04\\x00\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00���������HUn\\x00\\x00\\x00\\x00��������\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00`\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00OHDR\\x02'" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "headers = {\"Range\": \"bytes=0-100\"}\n", "r = session.get(lpcloud_url, headers=headers)\n", @@ -108,7 +97,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "1e5f5f7a-0643-42cb-b70c-4ac982824ff9", "metadata": {}, "outputs": [], @@ -118,21 +107,10 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "fbc7bc5f-b984-4324-b095-3648a437fba2", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "b'\\x89HDF\\r\\n\\x1a\\n\\x00\\x00\\x00\\x00\\x00\\x08\\x08\\x00\\x04\\x00\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xd7HUn\\x00\\x00\\x00\\x00\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00`\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00OHDR'" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "with fs.open(lpcloud_url) as f:\n", " data = f.read(100)\n", @@ -141,451 +119,12 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "07433a9f-f276-4d2b-9ed3-f556df2884af", "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "c76e3afc58a84118a04144f2f08ff6bc", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "QUEUEING TASKS | : 0%| | 0/1 [00:00\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset> Size: 3kB\n",
-       "Dimensions:           (bands: 285)\n",
-       "Dimensions without coordinates: bands\n",
-       "Data variables:\n",
-       "    wavelengths       (bands) float32 1kB ...\n",
-       "    fwhm              (bands) float32 1kB ...\n",
-       "    good_wavelengths  (bands) float32 1kB ...
" - ], - "text/plain": [ - " Size: 3kB\n", - "Dimensions: (bands: 285)\n", - "Dimensions without coordinates: bands\n", - "Data variables:\n", - " wavelengths (bands) float32 1kB ...\n", - " fwhm (bands) float32 1kB ...\n", - " good_wavelengths (bands) float32 1kB ..." - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "%%time \n", + "%%time\n", "\n", "import xarray as xr\n", "\n", @@ -613,7 +152,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.14" + "version": "3.11.9" } }, "nbformat": 4, diff --git a/docs/tutorials/SSL.ipynb b/docs/tutorials/SSL.ipynb index 265f1fd7..f12053e1 100644 --- a/docs/tutorials/SSL.ipynb +++ b/docs/tutorials/SSL.ipynb @@ -28,7 +28,6 @@ "source": [ "import earthaccess\n", "\n", - "\n", "print(f\"using earthaccess v{earthaccess.__version__}\")\n", "\n", "auth = earthaccess.login()\n", @@ -64,17 +63,24 @@ "outputs": [], "source": [ "from pprint import pprint\n", + "\n", "# We'll get 4 collections that match with our keywords\n", "collections = earthaccess.search_datasets(\n", - " keyword = \"SEA SURFACE HEIGHT\",\n", - " cloud_hosted = True,\n", - " count = 4\n", + " keyword=\"SEA SURFACE HEIGHT\",\n", + " cloud_hosted=True,\n", + " count=4,\n", ")\n", "\n", "# Let's print 2 collections\n", "for collection in collections[0:2]:\n", " # pprint(collection.summary())\n", - " print(pprint(collection.summary()), collection.abstract(), \"\\n\", collection[\"umm\"][\"DOI\"], \"\\n\\n\")" + " print(\n", + " pprint(collection.summary()),\n", + " collection.abstract(),\n", + " \"\\n\",\n", + " collection[\"umm\"][\"DOI\"],\n", + " \"\\n\\n\",\n", + " )" ] }, { @@ -101,8 +107,8 @@ "outputs": [], "source": [ "granules = earthaccess.search_data(\n", - " short_name = \"SEA_SURFACE_HEIGHT_ALT_GRIDS_L4_2SATS_5DAY_6THDEG_V_JPL2205\",\n", - " count = 1\n", + " short_name=\"SEA_SURFACE_HEIGHT_ALT_GRIDS_L4_2SATS_5DAY_6THDEG_V_JPL2205\",\n", + " count=1,\n", ")" ] }, @@ -182,9 +188,9 @@ "for year in range(1999, 2019):\n", " print(f\"Retrieving data for year: {year}\")\n", " results = earthaccess.search_data(\n", - " doi = \"10.5067/SLREF-CDRV3\",\n", + " doi=\"10.5067/SLREF-CDRV3\",\n", " temporal=(f\"{year}-05\", f\"{year}-05\"),\n", - " count = 1,\n", + " count=1,\n", " )\n", " granules.append(results[0])\n", "print(f\"Total granules: {len(granules)}\")" @@ -213,7 +219,6 @@ "\n", "import xarray as xr\n", "\n", - "\n", "fileset = earthaccess.open(granules)\n", "\n", "print(f\" Using {type(fileset[0])} filesystem\")\n", @@ -239,7 +244,11 @@ }, "outputs": [], "source": [ - "ds.SLA.where((ds.SLA>=0) & (ds.SLA < 10)).std('Time').plot(figsize=(14,6), x='Longitude', y='Latitude')" + "(\n", + " ds.SLA.where((ds.SLA >= 0) & (ds.SLA < 10))\n", + " .std(\"Time\")\n", + " .plot(figsize=(14, 6), x=\"Longitude\", y=\"Latitude\")\n", + ")" ] }, { @@ -251,32 +260,35 @@ }, "outputs": [], "source": [ - "from pyproj import Geod\n", "import numpy as np\n", + "from pyproj import Geod\n", + "\n", "\n", "def ssl_area(lats):\n", - " \"\"\"\n", - " Calculate the area associated with a 1/6 by 1/6 degree box at latitude specified in 'lats'.\n", + " \"\"\"Calculate the area associated with a 1/6 by 1/6 degree box at latitude specified in \"lats\".\n", "\n", - " Parameter\n", - " ==========\n", - " lats: a list or numpy array of size N the latitudes of interest.\n", + " Parameters:\n", + " lats: a list or numpy array of size N the latitudes of interest.\n", "\n", - " Return\n", - " =======\n", - " out: Array (N) area values (unit: m^2)\n", + " Returns:\n", + " Array (N) area values (unit: m^2)\n", " \"\"\"\n", " # Define WGS84 as CRS:\n", - " geod = Geod(ellps='WGS84')\n", - " dx=1/12.0\n", - " # TODO: explain this\n", - " c_area=lambda lat: geod.polygon_area_perimeter(np.r_[-dx,dx,dx,-dx], lat+np.r_[-dx,-dx,dx,dx])[0]\n", - " out=[]\n", + " geod = Geod(ellps=\"WGS84\")\n", + " # Set offsets for a box that will be centered at 0, lat\n", + " dx = 1 / 12.0\n", + " lon_offset = np.array((-dx, dx, dx, -dx))\n", + " lat_offset = np.array((-dx, -dx, dx, dx))\n", + " out = []\n", " for lat in lats:\n", - " out.append(c_area(lat))\n", + " # Run a geodesic area calculator for the given box\n", + " c_area, *_ = geod.polygon_area_perimeter(lon_offset, lat + lat_offset)\n", + " out.append(c_area)\n", " return np.array(out)\n", + "\n", + "\n", "# note: they rotated the data in the last release, this operation used to be (1,-1)\n", - "ssh_area = ssl_area(ds.Latitude.data).reshape(-1,1)\n", + "ssh_area = ssl_area(ds.Latitude.data).reshape(-1, 1)\n", "print(ssh_area.shape)" ] }, @@ -297,42 +309,45 @@ { "cell_type": "code", "execution_count": null, - "id": "fb170068-cefb-4c16-b146-0ecbd2e603ad", - "metadata": { - "tags": [] - }, + "id": "76ef1122-8185-4d68-ab94-88e19a8173f7", + "metadata": {}, "outputs": [], "source": [ "%%time\n", "\n", "import numpy as np\n", "from matplotlib import pyplot as plt\n", - "plt.rcParams[\"figure.figsize\"] = (16,4)\n", + "\n", + "plt.rcParams[\"figure.figsize\"] = (16, 4)\n", "\n", "img = plt.imread(\"underwater.jpeg\")\n", "\n", "fig, axs = plt.subplots()\n", "plt.grid(True)\n", "\n", + "\n", "def global_mean(SLA, **kwargs):\n", - " dout=((SLA*ssh_area).sum()/(SLA/SLA*ssh_area).sum())*1000\n", + " dout = ((SLA * ssh_area).sum() / (SLA / SLA * ssh_area).sum()) * 1000\n", " return dout\n", "\n", - "result = ds.SLA.groupby('Time').apply(global_mean)\n", "\n", - "plt.xlabel('Time (year)',fontsize=16)\n", - "plt.ylabel('Global Mean SLA (meter)',fontsize=12)\n", + "result = ds.SLA.groupby(\"Time\").apply(global_mean)\n", + "\n", + "plt.xlabel(\"Time (year)\", fontsize=16)\n", + "plt.ylabel(\"Global Mean SLA (meter)\", fontsize=12)\n", "# axs.imshow(img, aspect='auto')\n", "plt.grid(True)\n", "\n", - "historic_ts=xr.open_dataset(gmsl)\n", + "historic_ts = xr.open_dataset(gmsl)\n", "\n", - "result.plot(ax=axs, color=\"orange\", marker=\"o\", label='satellite record')\n", - "historic_ts['global_average_sea_level_change'].plot(ax=axs, label='Historical in-situ record', color=\"lightblue\")\n", + "result.plot(ax=axs, color=\"orange\", marker=\"o\", label=\"satellite record\")\n", + "historic_ts[\"global_average_sea_level_change\"].plot(\n", + " ax=axs, label=\"Historical in-situ record\", color=\"lightblue\"\n", + ")\n", "\n", - "x0,x1 = axs.get_xlim()\n", - "y0,y1 = axs.get_ylim()\n", - "axs.imshow(img, extent=[x0, x1, y0, y1], aspect='auto')\n", + "x0, x1 = axs.get_xlim()\n", + "y0, y1 = axs.get_ylim()\n", + "axs.imshow(img, extent=[x0, x1, y0, y1], aspect=\"auto\")\n", "\n", "plt.legend()\n", "plt.show()" @@ -355,7 +370,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.8" + "version": "3.11.9" } }, "nbformat": 4, diff --git a/docs/tutorials/emit-earthaccess.ipynb b/docs/tutorials/emit-earthaccess.ipynb index e3b9f43a..56dfc3b8 100644 --- a/docs/tutorials/emit-earthaccess.ipynb +++ b/docs/tutorials/emit-earthaccess.ipynb @@ -29,11 +29,10 @@ }, "outputs": [], "source": [ + "from pprint import pprint\n", + "\n", "import earthaccess\n", - "import numpy as np\n", "import xarray as xr\n", - "import h5netcdf\n", - "from pprint import pprint\n", "\n", "print(f\"using earthaccess version {earthaccess.__version__}\")\n", "\n", @@ -59,11 +58,11 @@ }, "outputs": [], "source": [ - "results = earthaccess.search_datasets(short_name = \"EMITL2ARFL\", cloud_hosted=True)\n", + "results = earthaccess.search_datasets(short_name=\"EMITL2ARFL\", cloud_hosted=True)\n", "\n", "# Let's print our datasets\n", "for dataset in results:\n", - " print(pprint(dataset.summary()))" + " pprint(dataset.summary())" ] }, { @@ -84,9 +83,11 @@ "outputs": [], "source": [ "# ~Ecuador = -82.05,-3.17,-76.94,-0.52\n", - "granules = earthaccess.search_data(short_name=\"EMITL2ARFL\",\n", - " bounding_box=(-82.05,-3.17,-76.94,-0.52),\n", - " count=10)\n", + "granules = earthaccess.search_data(\n", + " short_name=\"EMITL2ARFL\",\n", + " bounding_box=(-82.05, -3.17, -76.94, -0.52),\n", + " count=10,\n", + ")\n", "print(len(granules))" ] }, @@ -155,10 +156,16 @@ "file_p = file_handlers[4]\n", "\n", "refl = xr.open_dataset(file_p)\n", - "wvl = xr.open_dataset(file_p, group='sensor_band_parameters')\n", - "loc = xr.open_dataset(file_p, group='location')\n", + "wvl = xr.open_dataset(file_p, group=\"sensor_band_parameters\")\n", + "loc = xr.open_dataset(file_p, group=\"location\")\n", "ds = xr.merge([refl, loc])\n", - "ds = ds.assign_coords({'downtrack':(['downtrack'], refl.downtrack.data),'crosstrack':(['crosstrack'],refl.crosstrack.data), **wvl.variables}) \n", + "ds = ds.assign_coords(\n", + " {\n", + " \"downtrack\": ([\"downtrack\"], refl.downtrack.data),\n", + " \"crosstrack\": ([\"crosstrack\"], refl.crosstrack.data),\n", + " **wvl.variables,\n", + " }\n", + ")\n", "\n", "ds" ] @@ -176,20 +183,27 @@ "\n", "```python\n", "\n", + "import holoviews as hv\n", "import hvplot.xarray\n", + "import numpy as np\n", "import panel as pn\n", - "import holoviews as hv\n", "\n", "pn.extension()\n", "\n", - "b850 = np.nanargmin(abs(ds['wavelengths'].values-850)) # Find band nearest to value of 850 nm (NIR)\n", - "image = ds.sel(bands=b850).reflectance_uncertainty.hvplot('crosstrack', 'downtrack', cmap='viridis')\n", + "# Find band nearest to value of 850 nm (NIR)\n", + "b850 = np.nanargmin(abs(ds[\"wavelengths\"].values - 850))\n", + "ref_unc = ds[\"reflectance_uncertainty\"]\n", + "image = ref_unc.sel(bands=b850).hvplot(\"crosstrack\", \"downtrack\", cmap=\"viridis\")\n", "stream = hv.streams.Tap(source=image, x=255, y=484)\n", "\n", + "\n", "def wavelengths_histogram(x, y):\n", - " histo = ds['reflectance_uncertainty'].sel(crosstrack=x, downtrack=y, method='nearest').hvplot(x=\"wavelengths\", color='green')\n", + " histo = ref_unc.sel(crosstrack=x, downtrack=y, method=\"nearest\").hvplot(\n", + " x=\"wavelengths\", color=\"green\"\n", + " )\n", " return histo\n", "\n", + "\n", "tap_dmap = hv.DynamicMap(wavelengths_histogram, streams=[stream])\n", "pn.Column(image, tap_dmap)\n", "\n", @@ -214,7 +228,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.16" + "version": "3.11.9" } }, "nbformat": 4, diff --git a/docs/tutorials/file-access.ipynb b/docs/tutorials/file-access.ipynb index f5011c6f..fa5b0711 100644 --- a/docs/tutorials/file-access.ipynb +++ b/docs/tutorials/file-access.ipynb @@ -38,7 +38,7 @@ " short_name=\"ATL06\",\n", " cloud_hosted=False,\n", " temporal=(\"2019-01\", \"2019-02\"),\n", - " polygon=[(-100, 40), (-110, 40), (-105, 38), (-100, 40)]\n", + " polygon=[(-100, 40), (-110, 40), (-105, 38), (-100, 40)],\n", ")\n", "results[0]" ] @@ -97,7 +97,7 @@ "metadata": {}, "outputs": [], "source": [ - "%%time \n", + "%%time\n", "\n", "import xarray as xr\n", "\n", @@ -124,7 +124,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.16" + "version": "3.11.9" } }, "nbformat": 4, diff --git a/docs/tutorials/restricted-datasets.ipynb b/docs/tutorials/restricted-datasets.ipynb index 285af550..9dc9241b 100644 --- a/docs/tutorials/restricted-datasets.ipynb +++ b/docs/tutorials/restricted-datasets.ipynb @@ -17,7 +17,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "2acb1926-3442-446a-8a35-fcbba8868d4d", "metadata": {}, "outputs": [], @@ -54,19 +54,10 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "a0a5f73d-b4b9-4dad-ac72-12c7ae6278d1", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "You're now authenticated with NASA Earthdata Login\n", - "Using token with expiration date: 07/24/2022\n" - ] - } - ], + "outputs": [], "source": [ "auth.login(strategy=\"environment\")\n", "# are we authenticated?\n", @@ -113,68 +104,32 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "d0dd51cc-b394-47cd-b606-d54750ea629e", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Collections found: 1\n" - ] - }, - { - "data": { - "text/plain": [ - "[{\n", - " \"meta\": {\n", - " \"concept-id\": \"C2144439155-NSIDC_ECS\",\n", - " \"granule-count\": 123484,\n", - " \"provider-id\": \"NSIDC_ECS\"\n", - " },\n", - " \"umm\": {\n", - " \"ShortName\": \"ATL06\",\n", - " \"Version\": \"005\"\n", - " }\n", - " }]" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "# The first step is to create a DataCollections query \n", + "# The first step is to create a DataCollections query\n", "Query = DataCollections()\n", "\n", "# Use chain methods to customize our query\n", - "Query.short_name(\"ATL06\").version(\"005\")\n", + "Query.short_name(\"ATL06\").version(\"006\")\n", "\n", - "print(f'Collections found: {Query.hits()}')\n", + "print(f\"Collections found: {Query.hits()}\")\n", "\n", "# filtering what UMM fields to print, to see the full record we omit the fields filters\n", - "# meta is always included as \n", - "collections = Query.fields(['ShortName','Version']).get(5)\n", + "# meta is always included as\n", + "collections = Query.fields([\"ShortName\", \"Version\"]).get(5)\n", "# Inspect some results printing just the ShortName and Abstract\n", "collections" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "14eee26c-e9d9-4f2f-8b04-06379c29c9d8", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "earthaccess generated a token for CMR with expiration on: 07/24/2022\n" - ] - } - ], + "outputs": [], "source": [ "if not auth.refresh_tokens():\n", " print(\"Something went wrong, we may need to regenerate our tokens manually\")" @@ -182,59 +137,20 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "a17a8afe-0a68-4adf-a6d1-5f5bda6becc9", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Collections found: 1\n" - ] - }, - { - "data": { - "text/plain": [ - "[{\n", - " \"meta\": {\n", - " \"concept-id\": \"C2144439155-NSIDC_ECS\",\n", - " \"granule-count\": 123484,\n", - " \"provider-id\": \"NSIDC_ECS\"\n", - " },\n", - " \"umm\": {\n", - " \"ShortName\": \"ATL06\",\n", - " \"Version\": \"005\"\n", - " }\n", - " },\n", - " {\n", - " \"meta\": {\n", - " \"concept-id\": \"C2153572614-NSIDC_CPRD\",\n", - " \"granule-count\": 123484,\n", - " \"provider-id\": \"NSIDC_CPRD\"\n", - " },\n", - " \"umm\": {\n", - " \"ShortName\": \"ATL06\",\n", - " \"Version\": \"005\"\n", - " }\n", - " }]" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "Query = DataCollections(auth)\n", "\n", "# Use chain methods to customize our query\n", - "Query.short_name(\"ATL06\").version(\"005\")\n", + "Query.short_name(\"ATL06\").version(\"006\")\n", "\n", "# This will say 1, even though we get 2 back.\n", - "print(f'Collections found: {Query.hits()}')\n", + "print(f\"Collections found: {Query.hits()}\")\n", "\n", - "collections = Query.fields(['ShortName','Version']).get()\n", + "collections = Query.fields([\"ShortName\", \"Version\"]).get()\n", "# Inspect some results printing just the ShortName and Abstract\n", "collections" ] @@ -257,21 +173,17 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "id": "9478b3ef-7652-4943-9946-9ce49c085eb6", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Granules found with hits(): 0\n", - "Actual number found: 4\n" - ] - } - ], + "outputs": [], "source": [ - "Query = DataGranules(auth).concept_id(\"C2153572614-NSIDC_CPRD\").bounding_box(-134.7,58.9,-133.9,59.2).temporal(\"2020-03-01\", \"2020-03-30\")\n", + "Query = (\n", + " DataGranules(auth)\n", + " .concept_id(\"C2153572614-NSIDC_CPRD\")\n", + " .bounding_box(-134.7, 58.9, -133.9, 59.2)\n", + " .temporal(\"2020-03-01\", \"2020-03-30\")\n", + ")\n", "\n", "# Unfortunately the hits() methods will behave the same for granule queries\n", "print(f\"Granules found with hits(): {Query.hits()}\")\n", @@ -291,6 +203,14 @@ "store = Store(auth)\n", "files = store.get(cloud_granules, \"./data/C2153572614-NSIDC_CPRD/\")" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9726088c-b7eb-4c3c-9012-9874dd4aa3f8", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { @@ -309,7 +229,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.16" + "version": "3.11.9" } }, "nbformat": 4, diff --git a/notebooks/DatasetSearch.ipynb b/notebooks/DatasetSearch.ipynb index c6bcd6e0..633b3361 100644 --- a/notebooks/DatasetSearch.ipynb +++ b/notebooks/DatasetSearch.ipynb @@ -67,7 +67,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "id": "2e674100-f041-4620-bd33-0ec29f0a8fd8", "metadata": {}, "outputs": [], @@ -131,7 +131,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "id": "197dece4-02dc-4622-964c-41ca6a275cae", "metadata": {}, "outputs": [], @@ -160,7 +160,7 @@ "metadata": {}, "outputs": [], "source": [ - "query = DataCollections().cloud_hosted(True).bounding_box(-25.31,63.23,-11.95,66.65)\n", + "query = DataCollections().cloud_hosted(True).bounding_box(-25.31, 63.23, -11.95, 66.65)\n", "\n", "query.hits()" ] @@ -172,7 +172,12 @@ "metadata": {}, "outputs": [], "source": [ - "for c in DataCollections().cloud_hosted(True).short_name(\"ECCO_L4_GMSL_TIME_SERIES_MONTHLY_V4R4\").get(40):\n", + "query = (\n", + " DataCollections()\n", + " .cloud_hosted(True)\n", + " .short_name(\"ECCO_L4_GMSL_TIME_SERIES_MONTHLY_V4R4\")\n", + ")\n", + "for c in query.get(40):\n", " print(c.summary(), \"\\n\")" ] } @@ -193,7 +198,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.16" + "version": "3.11.9" } }, "nbformat": 4, diff --git a/notebooks/Demo.ipynb b/notebooks/Demo.ipynb index 62e9dfd8..9c4b54a2 100644 --- a/notebooks/Demo.ipynb +++ b/notebooks/Demo.ipynb @@ -42,7 +42,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 28, "id": "2acb1926-3442-446a-8a35-fcbba8868d4d", "metadata": {}, "outputs": [], @@ -91,7 +91,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8d5bf4c9-571b-4c93-af94-e66bd51cb584", + "id": "52cb48b4-5cc6-4203-8734-8fde89431e7b", "metadata": {}, "outputs": [], "source": [ @@ -99,13 +99,17 @@ "# Query = earthaccess.collection_query().keyword('fire').temporal(\"2016-01-01\", \"2020-12-12\")\n", "# Query = earthaccess.collection_query().keyword('GEDI').bounding_box(-134.7,58.9,-133.9,59.2)\n", "\n", - "Query = earthaccess.collection_query().keyword('elevation').bounding_box(-134.7,58.9,-133.9,59.2)\n", + "Query = (\n", + " earthaccess.collection_query()\n", + " .keyword(\"elevation\")\n", + " .bounding_box(-134.7, 58.9, -133.9, 59.2)\n", + ")\n", "\n", - "print(f'Collections found: {Query.hits()}')\n", + "print(f\"Collections found: {Query.hits()}\")\n", "\n", "# filtering what UMM fields to print, to see the full record we omit the fields filters\n", - "# meta is always included as \n", - "collections = Query.fields(['ShortName','Abstract']).get(3)\n", + "# meta is always included as\n", + "collections = Query.fields([\"ShortName\", \"Abstract\"]).get(3)\n", "# Inspect 3 results printing just the ShortName and Abstract\n", "collections[0:3]" ] @@ -153,8 +157,8 @@ "# We can now search for collections using a pythonic API client for CMR.\n", "Query = earthaccess.collection_query().daac(\"PODAAC\")\n", "\n", - "print(f'Collections found: {Query.hits()}')\n", - "collections = Query.fields(['ShortName']).get(20)\n", + "print(f\"Collections found: {Query.hits()}\")\n", + "collections = Query.fields([\"ShortName\"]).get(20)\n", "# Printing 3 collections\n", "collections[0:3]" ] @@ -169,8 +173,8 @@ "# What if we want cloud collections\n", "Query = earthaccess.collection_query().daac(\"PODAAC\").cloud_hosted(True)\n", "\n", - "print(f'Collections found: {Query.hits()}')\n", - "collections = Query.fields(['ShortName']).get(20)\n", + "print(f\"Collections found: {Query.hits()}\")\n", + "collections = Query.fields([\"ShortName\"]).get(20)\n", "# Printing 3 collections\n", "collections[0:3]" ] @@ -196,7 +200,7 @@ "The DataGranules client, accessed via `earthaccess.granule_query()`, provides similar functionality as the collection class. To query for granules in a more reliable way, concept-id would be the main key.\n", "You can search data granules using a short name but that could (and more likely will) return multiple versions of the same data granules. \n", "\n", - "In this example we're querying for 20 data grnaules from ICESat-2 [ATL03](https://nsidc.org/data/ATL03/versions/) version `005` dataset. " + "In this example we're querying for 20 data grnaules from ICESat-2 [ATL03](https://nsidc.org/data/ATL03/versions/) version `006` dataset. " ] }, { @@ -206,9 +210,14 @@ "metadata": {}, "outputs": [], "source": [ - "Query = earthaccess.granule_query().short_name('ATL03').version(\"005\").bounding_box(-134.7,58.9,-133.9,59.2)\n", + "Query = (\n", + " earthaccess.granule_query()\n", + " .short_name(\"ATL03\")\n", + " .version(\"006\")\n", + " .bounding_box(-134.7, 58.9, -133.9, 59.2)\n", + ")\n", "granules = Query.get(20)\n", - "print(granules[0:2])" + "granules[0:2]" ] }, { @@ -251,7 +260,13 @@ "metadata": {}, "outputs": [], "source": [ - "Query = earthaccess.granule_query().short_name(\"ATL03\").temporal(\"2020-03-01\", \"2020-03-30\").bounding_box(-134.7,58.9,-133.9,59.2).version(\"005\")\n", + "Query = (\n", + " earthaccess.granule_query()\n", + " .short_name(\"ATL03\")\n", + " .temporal(\"2020-03-01\", \"2020-03-30\")\n", + " .bounding_box(-134.7, 58.9, -133.9, 59.2)\n", + " .version(\"006\")\n", + ")\n", "# Always inspects the hits before retrieving the granule metadata, just because it's very verbose.\n", "print(f\"Granules found: {Query.hits()}\")" ] @@ -265,7 +280,7 @@ "source": [ "# Now we can print some info about these granules using the built-in methods\n", "granules = Query.get(4)\n", - "data_links = [{'links': g.data_links(), 'size (MB):': g.size()} for g in granules]\n", + "data_links = [{\"links\": g.data_links(), \"size (MB):\": g.size()} for g in granules]\n", "data_links" ] }, @@ -282,7 +297,12 @@ "# C1968980609-POCLOUD: Sentinel-6A MF Jason-CS L2 P4 Altimeter Low Resolution (LR) STC Ocean Surface Topography\n", "# C1575731655-LPDAAC_ECS: ASTER Global Digital Elevation Model NetCDF V003\n", "# Query = earthaccess.granule_query().concept_id(\"C1575731655-LPDAAC_ECS\").bounding_box(-134.7,58.9,-133.9,59.2)\n", - "Query = earthaccess.granule_query().short_name('ATL03').version(\"005\").bounding_box(-134.7,58.9,-133.9,59.2)\n", + "Query = (\n", + " earthaccess.granule_query()\n", + " .short_name(\"ATL03\")\n", + " .version(\"006\")\n", + " .bounding_box(-134.7, 58.9, -133.9, 59.2)\n", + ")\n", "\n", "print(f\"Granules found: {Query.hits()}\")" ] @@ -318,7 +338,7 @@ "outputs": [], "source": [ "# Size in MB\n", - "data_links = [{'links': g.data_links(), 'size (MB):': g.size()} for g in granules]\n", + "data_links = [{\"links\": g.data_links(), \"size (MB):\": g.size()} for g in granules]\n", "data_links" ] }, @@ -348,7 +368,12 @@ "metadata": {}, "outputs": [], "source": [ - "Query = earthaccess.granule_query().short_name(\"ATL06\").bounding_box(-134.7,54.9,-100.9,69.2).debug(True)\n", + "Query = (\n", + " earthaccess.granule_query()\n", + " .short_name(\"ATL06\")\n", + " .bounding_box(-134.7, 54.9, -100.9, 69.2)\n", + " .debug(True)\n", + ")\n", "print(f\"Granule hits: {Query.hits()}\")\n", "# getting more than 6,000 metadata records for demo purposes is going to slow us down a bit so let's get only 100\n", "granules = Query.get(10)" @@ -384,6 +409,7 @@ "source": [ "# since the response is an array of dictionaries we can do pythonic things like ordering the granules by size\n", "import operator\n", + "\n", "granules_by_size = sorted(granules, key=operator.itemgetter(\"size\"))\n", "# now our array is sorted by size from less to more. Let's print the first 3\n", "granules_by_size[0:3]" @@ -418,7 +444,12 @@ "metadata": {}, "outputs": [], "source": [ - "Query = earthaccess.granule_query().short_name(\"ATL06\").cloud_hosted(True).bounding_box(-134.7,54.9,-100.9,69.2)\n", + "Query = (\n", + " earthaccess.granule_query()\n", + " .short_name(\"ATL06\")\n", + " .cloud_hosted(True)\n", + " .bounding_box(-134.7, 54.9, -100.9, 69.2)\n", + ")\n", "print(f\"Granule hits: {Query.hits()}\")\n", "cloud_granules = Query.get(10)\n", "# is this a cloud hosted data granule?\n", @@ -445,6 +476,7 @@ "source": [ "# Let's order them by size again.\n", "import operator\n", + "\n", "cloud_granules_by_size = sorted(cloud_granules, key=operator.itemgetter(\"size\"))\n", "# now our array is sorted by size from less to more. Let's print the first 3\n", "cloud_granules_by_size[0:3]" @@ -518,7 +550,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.9" + "version": "3.11.9" } }, "nbformat": 4, diff --git a/notebooks/EarthdataLogin.ipynb b/notebooks/EarthdataLogin.ipynb index 04aafba6..dd4728d8 100644 --- a/notebooks/EarthdataLogin.ipynb +++ b/notebooks/EarthdataLogin.ipynb @@ -13,36 +13,10 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "adc12546-827a-4d14-b92e-cf10e3823231", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "No .netrc found in /home/beto\n" - ] - }, - { - "name": "stdin", - "output_type": "stream", - "text": [ - "Enter your Earthdata Login username: betolink\n", - "Enter your Earthdata password: ········\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "You're now authenticated with NASA Earthdata Login\n", - "Using token with expiration date: 05/13/2023\n", - "Using user provided credentials for EDL\n", - "Using earthaccess version 0.5.1\n" - ] - } - ], + "outputs": [], "source": [ "import earthaccess\n", "\n", @@ -53,57 +27,30 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "901a1c21-29c1-4534-97bb-e4a75e63a477", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "We are already authenticated with NASA EDL\n" - ] - } - ], + "outputs": [], "source": [ "auth = earthaccess.login(strategy=\"environment\")" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "668d4bce-3a26-4e54-be30-6be2bc82bd44", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "We are already authenticated with NASA EDL\n" - ] - } - ], + "outputs": [], "source": [ "auth = earthaccess.login(strategy=\"netrc\")" ] }, { "cell_type": "code", - "execution_count": 30, + "execution_count": null, "id": "6d9726cd-47f2-464f-80f9-d51fb006c545", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'II*\\x00\\x08\\x00\\x00\\x00\\x13\\x00\\x00\\x01\\x03\\x00\\x01\\x00\\x00\\x00\\x11\\x0e\\x00\\x00\\x01\\x01\\x03\\x00\\x01\\x00\\x00\\x00\\x11\\x0e\\x00\\x00\\x02\\x01\\x03\\x00\\x01\\x00\\x00\\x00\\x10\\x00\\x00\\x00\\x03\\x01\\x03\\x00\\x01\\x00\\x00\\x00\\x05\\x00\\x00\\x00\\x06\\x01\\x03\\x00\\x01\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x15\\x01\\x03\\x00\\x01\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x1c\\x01\\x03\\x00\\x01\\x00\\x00\\x00\\x01\\x00\\x00\\x00=\\x01\\x03\\x00\\x01\\x00\\x00'" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# using earthaccess authenticated session to fetch restricted files behind EDL\n", "req_session = earthaccess.get_requests_https_session()\n", @@ -112,7 +59,7 @@ "restricted_gesdisc_resource = \"https://data.gesdisc.earthdata.nasa.gov/data/MERGED_IR/GPM_MERGIR.1/1998/002/merg_1998010217_4km-pixel.nc4\"\n", "restricted_lpdaac_resource = \"https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/ASTGTM.003/ASTGTMV003_N01E024_dem.tif\"\n", "# reading the first 100 bytes\n", - "data = req_session.get(restricted_lpdaac_resource, headers = {\"Range\": \"bytes=0-100\"})\n", + "data = req_session.get(restricted_lpdaac_resource, headers={\"Range\": \"bytes=0-100\"})\n", "data.text" ] }, @@ -144,39 +91,10 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "9ecafd00-d5d5-4c10-99a8-5e48f2614407", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'cloud-info': {'Region': 'us-west-2',\n", - " 'S3BucketAndObjectPrefixNames': ['nsidc-cumulus-prod-protected/GLAS/GLAH12/034',\n", - " 'nsidc-cumulus-prod-public/GLAS/GLAH12/034'],\n", - " 'S3CredentialsAPIDocumentationURL': 'https://data.nsidc.earthdatacloud.nasa.gov/s3credentialsREADME',\n", - " 'S3CredentialsAPIEndpoint': 'https://data.nsidc.earthdatacloud.nasa.gov/s3credentials'},\n", - " 'concept-id': 'C2153549818-NSIDC_CPRD',\n", - " 'file-type': \"[{'FormatType': 'Native', 'Format': 'HDF', 'FormatDescription': \"\n", - " \"'FTP 15 GB'}]\",\n", - " 'get-data': ['https://search.earthdata.nasa.gov/search?q=GLAH12+V034'],\n", - " 'short-name': 'GLAH12',\n", - " 'version': '034'}\n", - "{'cloud-info': {'Region': 'us-west-2',\n", - " 'S3BucketAndObjectPrefixNames': ['nsidc-cumulus-prod-protected/GLAS/GLAH13/034',\n", - " 'nsidc-cumulus-prod-public/GLAS/GLAH13/034'],\n", - " 'S3CredentialsAPIDocumentationURL': 'https://data.nsidc.earthdatacloud.nasa.gov/s3credentialsREADME',\n", - " 'S3CredentialsAPIEndpoint': 'https://data.nsidc.earthdatacloud.nasa.gov/s3credentials'},\n", - " 'concept-id': 'C2153549910-NSIDC_CPRD',\n", - " 'file-type': \"[{'FormatType': 'Native', 'Format': 'HDF', 'FormatDescription': \"\n", - " \"'FTP 18 GB'}]\",\n", - " 'get-data': ['https://search.earthdata.nasa.gov/search?q=GLAH13+V034'],\n", - " 'short-name': 'GLAH13',\n", - " 'version': '034'}\n" - ] - } - ], + "outputs": [], "source": [ "from pprint import pprint\n", "\n", @@ -190,63 +108,12 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "id": "2044634d-2d60-4890-a357-8dcbc9f03fd2", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "
\n", - "
\n", - "

Data: GLAH12_634_1102_001_0071_0_01_0001.H5

\n", - "

Size: 22.43 MB

\n", - "

Spatial: {'HorizontalSpatialDomain': {'Orbit': {'AscendingCrossing': 104.08523, 'StartLatitude': 50.0, 'StartDirection': 'A', 'EndLatitude': 50.0, 'EndDirection': 'A'}}}

\n", - "
\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "
\n", - " " - ], - "text/plain": [ - "Collection: {'EntryTitle': 'GLAS/ICESat L2 Global Antarctic and Greenland Ice Sheet Altimetry Data (HDF5) V034'}\n", - "Spatial coverage: {'HorizontalSpatialDomain': {'Orbit': {'AscendingCrossing': 104.08523, 'StartLatitude': 50.0, 'StartDirection': 'A', 'EndLatitude': 50.0, 'EndDirection': 'A'}}}\n", - "Temporal coverage: {'RangeDateTime': {'BeginningDateTime': '2003-02-20T21:48:32.000Z', 'EndingDateTime': '2003-02-21T19:12:15.000Z'}}\n", - "Size(MB): 22.4292\n", - "Data: ['https://data.nsidc.earthdatacloud.nasa.gov/nsidc-cumulus-prod-protected/GLAS/GLAH12/034/2003/2/GLAH12_634_1102_001_0071_0_01_0001.H5']" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# C2153549818-NSIDC_CPRD\n", "granules = earthaccess.granule_query().concept_id(\"C2153549818-NSIDC_CPRD\").get(10)\n", @@ -256,62 +123,12 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "id": "159b710c-531b-4c65-ae44-d7c2a0f3c9bb", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " Getting 2 granules, approx download size: 0.05 GB\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "c5a1ffd648254c4f98dfe04410532948", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "QUEUEING TASKS | : 0%| | 0/2 [00:00=6.0.1", ] docs = [ + "cftime >=1.6.4", + "dask >=2024.9.0", "jupyterlab >=3", "ipywidgets >=7.7.0", "widgetsnbextension >=3.6.0", @@ -150,8 +152,6 @@ stubPath = "./stubs" [tool.ruff] line-length = 88 src = ["earthaccess", "stubs", "tests"] -# HACK: Don't lint or format Jupyter Notebooks for now. -extend-exclude = ["*.ipynb"] [tool.ruff.lint] extend-select = ["I", "T20", "D", "G"] From 703a697f8be8f6efad3a5c372dc92a7ee523a89d Mon Sep 17 00:00:00 2001 From: Ian Carroll Date: Tue, 17 Sep 2024 23:25:19 -0400 Subject: [PATCH 2/4] lint notebooks --- docs/tutorials/SSL.ipynb | 1 - pyproject.toml | 11 +++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/docs/tutorials/SSL.ipynb b/docs/tutorials/SSL.ipynb index f12053e1..bed7877e 100644 --- a/docs/tutorials/SSL.ipynb +++ b/docs/tutorials/SSL.ipynb @@ -315,7 +315,6 @@ "source": [ "%%time\n", "\n", - "import numpy as np\n", "from matplotlib import pyplot as plt\n", "\n", "plt.rcParams[\"figure.figsize\"] = (16, 4)\n", diff --git a/pyproject.toml b/pyproject.toml index e31e56bb..b219714f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -157,13 +157,16 @@ src = ["earthaccess", "stubs", "tests"] extend-select = ["I", "T20", "D", "G"] ignore = ["D1", "D205", "D401", "D417", "G004"] -[tool.ruff.lint.pydocstyle] -convention = "google" - - [tool.ruff.lint.isort] combine-as-imports = true +[tool.ruff.lint.per-file-ignores] +# Allow `print` and `pprint` in notebooks +"*.ipynb" = ["T201", "T203"] + +[tool.ruff.lint.pydocstyle] +convention = "google" + [tool.bumpversion] current_version = "0.10.0" commit = false From 8bb27bcc66a4955f4d151952b020e2d7d47549e1 Mon Sep 17 00:00:00 2001 From: Ian Carroll Date: Wed, 18 Sep 2024 13:50:43 -0400 Subject: [PATCH 3/4] update uv.lock --- .pre-commit-config.yaml | 2 +- pyproject.toml | 64 ++++++++++++++++---------------- uv.lock | 81 ++++++++++++++++++++++++++++++----------- 3 files changed, 93 insertions(+), 54 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index aaa70b69..b594f520 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -35,7 +35,7 @@ repos: - id: ruff-format - repo: https://github.com/astral-sh/uv-pre-commit - rev: "0.4.7" + rev: "0.4.12" hooks: - id: uv-lock diff --git a/pyproject.toml b/pyproject.toml index b219714f..d8ef87dd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -79,38 +79,38 @@ test = [ "vcrpy >=6.0.1", ] docs = [ - "cftime >=1.6.4", - "dask >=2024.9.0", - "jupyterlab >=3", - "ipywidgets >=7.7.0", - "widgetsnbextension >=3.6.0", - # Prevent install of 1.6.0 because the module mkdocs.tests - # is no longer exported, which causes mkdocs-jupyter to - # break with a ModuleNotFoundError. - # for notebook integrations and documentation examples - "mkdocs >=1.2,!=1.6.0", - "mkdocs-material >=7.1,<10.0", - "mkdocs-redirects >=1.2.1", - "markdown-callouts >=0.2.0", - "markdown-include >=0.6", - "mkdocs-jupyter >=0.19.0", - "mkdocstrings[python] >=0.19.0", - "pymdown-extensions >=9.2", - "pygments >=2.11.1", - "xarray >=2023.01", - "matplotlib >=3.3", - "h5netcdf >=0.11", - "pyproj >=3.5.0; python_version < '3.12'", - "pyproj >=3.6.1; python_version >= '3.12'", - # The following error occurs when building the docs, so we must explicitly - # include lxml-html-clean as a dev dependency until mkdocs-jupyter is updated: - # - # ImportError: lxml.html.clean module is now a separate project lxml_html_clean. - # Install lxml[html_clean] or lxml_html_clean directly. - # - # See https://github.com/danielfrg/mkdocs-jupyter/issues/200 - # See https://github.com/danielfrg/mkdocs-jupyter/issues/197 - "lxml-html-clean >=0.1.1", + "jupyterlab >=3", + "ipywidgets >=7.7.0", + "widgetsnbextension >=3.6.0", + # Prevent install of 1.6.0 because the module mkdocs.tests + # is no longer exported, which causes mkdocs-jupyter to + # break with a ModuleNotFoundError. + # for notebook integrations and documentation examples + "mkdocs >=1.2,!=1.6.0", + "mkdocs-material >=7.1,<10.0", + "mkdocs-redirects >=1.2.1", + "markdown-callouts >=0.2.0", + "markdown-include >=0.6", + "mkdocs-jupyter >=0.19.0", + "mkdocstrings[python] >=0.19.0", + "pymdown-extensions >=9.2", + "pygments >=2.11.1", + "xarray >=2023.01", + "matplotlib >=3.3", + "h5netcdf >=0.11", + "pyproj >=3.5.0; python_version < '3.12'", + "pyproj >=3.6.1; python_version >= '3.12'", + # The following error occurs when building the docs, so we must explicitly + # include lxml-html-clean as a dev dependency until mkdocs-jupyter is updated: + # + # ImportError: lxml.html.clean module is now a separate project lxml_html_clean. + # Install lxml[html_clean] or lxml_html_clean directly. + # + # See https://github.com/danielfrg/mkdocs-jupyter/issues/200 + # See https://github.com/danielfrg/mkdocs-jupyter/issues/197 + "lxml-html-clean >=0.1.1", + "dask>=2024.8.0", + "cftime>=1.6.4", ] diff --git a/uv.lock b/uv.lock index e4c8a627..7d3b8fa6 100644 --- a/uv.lock +++ b/uv.lock @@ -460,6 +460,41 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c5/55/51844dd50c4fc7a33b653bfaba4c2456f06955289ca770a5dbd5fd267374/cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", size = 7249 }, ] +[[package]] +name = "cftime" +version = "1.6.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f1/35/6e0a7d0998dcf197a2097876767f9bf5d0881ef0bce6a0367ac66ae8eb58/cftime-1.6.4.tar.gz", hash = "sha256:e325406193758a7ed67308deb52e727782a19e384e183378e7ff62098be0aedc", size = 54615 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/39/ea/4b7b2d3bf9474627875f63eca37aa94622881adc68e75f5acf107571e8e2/cftime-1.6.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ee70074df4bae0d9ee98f201cf5f11fd302791cf1cdeb73c34f685d6b632e17d", size = 232928 }, + { url = "https://files.pythonhosted.org/packages/d9/50/781f3480d92e88e3934bf243968afecdd61c26cb76d21cde4c8857b562a5/cftime-1.6.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e5456fd58d4cc6b8d7b4932b749617ee142b62a52bc5d8e3c282ce69ce3a20ba", size = 213848 }, + { url = "https://files.pythonhosted.org/packages/29/54/5b80f25f36a31981871bf5c29a8bb176f9cad9e13571400b97e1156d55d3/cftime-1.6.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1289e08617be350a6b26c6e4352a0cb088625ac33d25e95110df549c26d6ab8e", size = 1252526 }, + { url = "https://files.pythonhosted.org/packages/56/9b/b020a7fac001782d9a71e25b4702084c3a5d5bdaa73ca3e4f3516e196746/cftime-1.6.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18b132d9225b4a109929866200846c72302316db9069e2de3ec8d8ec377f567f", size = 1290537 }, + { url = "https://files.pythonhosted.org/packages/61/b0/4a260ef28d4928cd15f63786e0f779dbf185ac4c9c93d6cd174f87a6cd3f/cftime-1.6.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ca1a264570e68fbb611bba251641b8efd0cf88c0ad2dcab5fa784df264232b75", size = 1317558 }, + { url = "https://files.pythonhosted.org/packages/48/63/e6bb7e9b127d2d88a08dd18225ba7816a373e00e85d221563db9f9baf005/cftime-1.6.4-cp310-cp310-win_amd64.whl", hash = "sha256:6fc82928cbf477bebf233f41914e64bff7b9e894c7f0c34170784a48250f8da7", size = 189358 }, + { url = "https://files.pythonhosted.org/packages/72/76/58f3ca717bcbd669dca114256e5376298de20932ece46ee2c846ceef4f13/cftime-1.6.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c1558d9b477bd29626cd8bfc89e736635f72887d1a993e2834ab579bba7abb8c", size = 233363 }, + { url = "https://files.pythonhosted.org/packages/7f/ec/8333fb2229a3efd17f59a7fcc295c09cce8db3dd956de58c20f55926b533/cftime-1.6.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:03494e7b66a2fbb6b04e364ab67185130dee0ced660abac5c1559070571d143d", size = 214370 }, + { url = "https://files.pythonhosted.org/packages/a8/0e/274db35df3dec9cd033bce2b1921eb1287ea1273b1c512be15d53ecd554c/cftime-1.6.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4dcb2a01d4e614437582af33b36db4fb441b7666758482864827a1f037d2b639", size = 1381235 }, + { url = "https://files.pythonhosted.org/packages/16/fa/68ce3e1cdc785739ce53f9659201768179f8ea6e912519c890aedcd794ff/cftime-1.6.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b47bf25195fb3889bbae34df0e80957eb69c48f66902f5d538c7a8ec34253f6", size = 1416044 }, + { url = "https://files.pythonhosted.org/packages/f2/c9/ec07fdb44a9f25cc46b75f4e7f73d8806abde4c632076f5971817d14dcb2/cftime-1.6.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d4f2cc0d5c6ffba9c5b0fd1ecd0c7c1c426d0be7b8de1480e2a9fb857c1905e9", size = 1451307 }, + { url = "https://files.pythonhosted.org/packages/3a/a8/91d5cad40336f74a9eb92dabdc3aa59f3ccf13864ddbc71080b024808d7b/cftime-1.6.4-cp311-cp311-win_amd64.whl", hash = "sha256:76b8f1e5d1e424accdf760a43e0a1793a7b640bab83cb067273d5c9dbb336c44", size = 190388 }, + { url = "https://files.pythonhosted.org/packages/3e/32/ad5e2c596aec41caaec9cfa5e109f8db70f5489a69bd30d76d8b96de27c8/cftime-1.6.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c349a91fa7ac9ec50118b04a8746bdea967bd2fc525d87c776003040b8d3392", size = 226531 }, + { url = "https://files.pythonhosted.org/packages/d9/b7/1a9773d903a57946e29d878f1d2b0ddd6ddab81d59fc6d9913b8cadd099e/cftime-1.6.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:588d073400798adc24ece759cd1cb24ef730f55d1f70e31a898e7686f9d763d8", size = 209120 }, + { url = "https://files.pythonhosted.org/packages/06/93/3f730e0402034746b39d202a18abe72eb3d092dec882fb6e07df7703ac30/cftime-1.6.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e07b91b488570573bbeb6f815656a8974d13d15b2279c82de2927f4f692bbcd", size = 1321662 }, + { url = "https://files.pythonhosted.org/packages/04/56/233d817ef571d778281f3d639049b342f6ff0bb4de4c5ee630befbd55319/cftime-1.6.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f92f2e405eeda47b30ab6231d8b7d136a55f21034d394f93ade322d356948654", size = 1367699 }, + { url = "https://files.pythonhosted.org/packages/d8/24/f83ad4c120cbf5aa0768be22f1e276edf2b6557a955cb0e04812f37fd075/cftime-1.6.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:567574df94d0de1101bb5da76e7fbc6eabfddeeb2eb8cf83286b3599a136bbf7", size = 1386424 }, + { url = "https://files.pythonhosted.org/packages/17/98/ba5b4a2f37c6c88454b696dd5c7a4e76fc8bfd014364b47ddd7e2cec0fcd/cftime-1.6.4-cp312-cp312-win_amd64.whl", hash = "sha256:5b5ad7559a16bedadb66af8e417b6805f758acb57aa38d2730844dfc63a1e667", size = 178575 }, + { url = "https://files.pythonhosted.org/packages/93/07/f276b1d9afc627e0a171615a9052eef38fde1e884ed6700246d98db24941/cftime-1.6.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c20f03e12af39534c3450bba376272803bfb850b5ce6433c839bfaa99f8d835a", size = 233224 }, + { url = "https://files.pythonhosted.org/packages/a1/37/ee4a8ea2d853e4163be7c05271c563d7db97053044fca190a1e0f379513c/cftime-1.6.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:90609b3c1a31a756a68ecdbc961a4ce0b22c1620f166c8dabfa3a4c337ac8b9e", size = 214157 }, + { url = "https://files.pythonhosted.org/packages/e1/9e/c6de11b037c7c1928bfdd71e96033854854bd51c18a40cd7cc273b2aedb4/cftime-1.6.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbe11ad73b2a0ddc79995da21459fc2a3fd6b1593ca73f00a60e4d81c3e230f3", size = 1255353 }, + { url = "https://files.pythonhosted.org/packages/e7/3d/bf2d058e272828338f40be26ab262e19a67264e687fde9327b87fbe52900/cftime-1.6.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25f043703e785de0bd7cd8222c0a53317e9aeb3dfc062588b05e6f3ebb007468", size = 1291964 }, + { url = "https://files.pythonhosted.org/packages/1a/3e/aab712c3b240248f01df46a5dbc5c6298953f529a5dd658734e9068c123f/cftime-1.6.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f9acc272df1022f24fe7dbe9de43fa5d8271985161df14549e4d8d28c90dc9ea", size = 1315440 }, + { url = "https://files.pythonhosted.org/packages/85/1a/bb71b93d83524b7a829a04c99736ec1a93d03d1f931207c1d9eeaf5833be/cftime-1.6.4-cp39-cp39-win_amd64.whl", hash = "sha256:e8467b6fbf8dbfe0be8c04d61180765fdd3b9ab0fe51313a0bbf87e63634a3d8", size = 189485 }, +] + [[package]] name = "charset-normalizer" version = "3.3.2" @@ -844,6 +879,8 @@ dev = [ { name = "uv" }, ] docs = [ + { name = "cftime" }, + { name = "dask" }, { name = "h5netcdf" }, { name = "ipywidgets" }, { name = "jupyterlab" }, @@ -882,6 +919,8 @@ test = [ [package.metadata] requires-dist = [ { name = "bump-my-version", marker = "extra == 'dev'", specifier = ">=0.10.0" }, + { name = "cftime", marker = "extra == 'docs'", specifier = ">=1.6.4" }, + { name = "dask", marker = "extra == 'docs'", specifier = ">=2024.8.0" }, { name = "dask", marker = "extra == 'kerchunk'" }, { name = "fsspec", specifier = ">=2022.11" }, { name = "h5netcdf", marker = "extra == 'docs'", specifier = ">=0.11" }, @@ -3952,27 +3991,27 @@ wheels = [ [[package]] name = "uv" -version = "0.4.7" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/16/a8/138c8967af143014e9ab1c7f473c1a93efc8fe9cd323197eb3309cb2dc97/uv-0.4.7.tar.gz", hash = "sha256:d6c8e43bbdfa2f7910245335acb93fcb5a4e34995b7ce60de4e814071690b3c5", size = 1864989 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/79/88/42a31a882afac996dc1e8f382afc73ca4b6eda0238cdfe04c50fedf7b148/uv-0.4.7-py3-none-linux_armv6l.whl", hash = "sha256:63b59e0cfa303a97ce5ba19fa8fc27a6339516561bc4b821cca52ed15721cbdb", size = 11138983 }, - { url = "https://files.pythonhosted.org/packages/4b/e5/e9c8ca8c71984afeb92ae378e9a354ba458d56e9b61c7a21fc3a4bf3deff/uv-0.4.7-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:9356449439d4fa42419d17736d775cd1701b1b4a054ab445faf1477a6920a505", size = 11542168 }, - { url = "https://files.pythonhosted.org/packages/5e/00/7a065e1d4564f426f7d6a7cbc0118e72099dce177c1da524d0c62302b9ab/uv-0.4.7-py3-none-macosx_11_0_arm64.whl", hash = "sha256:bfbd6e28b0543b774db7d97d61963c384c70284e95056004c8f74252e69616c7", size = 10683924 }, - { url = "https://files.pythonhosted.org/packages/13/12/69a6ad1ae1ee04f010b318fc0fa4eb4a461d86ef819ba864fb8c38094cf8/uv-0.4.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:54c3dde3c01d96fba484c2728e020c7c867e05a88de143ddb6df1091d1ffdfb7", size = 11011610 }, - { url = "https://files.pythonhosted.org/packages/78/dd/3552caf1d46de4c03e937e8631721464b5f69aafa92d3a56b1e81ed9f7ae/uv-0.4.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1357fb27047cff94422bb82cf9a82d7285ce8341a204fc1925b0b89c8d108249", size = 10951240 }, - { url = "https://files.pythonhosted.org/packages/81/20/9ceeab908a79ace5f07b37b52131afa3fcbd15eaa782e9c3566b28937447/uv-0.4.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:106fc5449a63137da6b3c4fd25775e3eeda3b11c8cea12439d95201237a95484", size = 11590608 }, - { url = "https://files.pythonhosted.org/packages/ef/5d/dbd4990bfa708f8a6ee259fe33e5c636910d87c7e2c40c6db145af4cd41c/uv-0.4.7-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:e1f3285bebfeab6e076e651ec47f6adf7a83a4f014dd9d7e73efc034e77d42cd", size = 12389925 }, - { url = "https://files.pythonhosted.org/packages/d8/9f/aa646dbe07bc42c1332953720a595791b7f837beb82a9cdf2ea67fa53f8a/uv-0.4.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:904763380be165f5213dcbacb8d6c17d5cf138ea4bd24b4a37a1b6046b5650a1", size = 12179202 }, - { url = "https://files.pythonhosted.org/packages/1d/c0/bcb66d0b66c6da1b0105fabbc6434dd0ca046ac77bf5220669dbaa29f045/uv-0.4.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ab7308c0604268f21b1a5bce4e1b61bcf56831f4aef59bee93c2b5815f4bc6a8", size = 15345161 }, - { url = "https://files.pythonhosted.org/packages/99/45/3cc3d9cdec4fa0572d077648d7263a876911870081696d4d4b209258e207/uv-0.4.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec49a00317799226d33135bf40e8da44262f44e3980a5bb9e6dae7250523c963", size = 11934876 }, - { url = "https://files.pythonhosted.org/packages/53/55/1866fccd01a2e0558986e2c15658cfa0ea60f134f7252c9413a261a43965/uv-0.4.7-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:00aa7299edefcc4069d73b988a7331d590e3fedd29f5695b1680905af1ccba04", size = 11106549 }, - { url = "https://files.pythonhosted.org/packages/9b/ce/f171f35cc6f57d040a2ef408ea273b6a0c873458e54da96b9c25a5b7bfed/uv-0.4.7-py3-none-musllinux_1_1_armv7l.whl", hash = "sha256:0fef80011c96dc8e284f4895b7ca92945e450fb517872115a557e72789c0e2c5", size = 10943998 }, - { url = "https://files.pythonhosted.org/packages/d6/3a/532d19792ce9c474b42d409993bdc90f2948f1bea1e2a7e609c3996aac26/uv-0.4.7-py3-none-musllinux_1_1_i686.whl", hash = "sha256:a1850d93f78eeb6d0ace3dc0335e1bf141a4b6a26844ab75f00055de2a4817cd", size = 11396231 }, - { url = "https://files.pythonhosted.org/packages/6b/19/1e3931566dfde41167aff5cca6f49071137d15062056489352153b3969d4/uv-0.4.7-py3-none-musllinux_1_1_ppc64le.whl", hash = "sha256:e8bc35e30f2bb03f0e1812f1c0dce0e73d8ab01e90392d39f334da9d75e522b0", size = 13169721 }, - { url = "https://files.pythonhosted.org/packages/64/7c/4c537c97a84486dd4a96d5bfedd9ed1d785663ce85920d763ee838489882/uv-0.4.7-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:2ab5f6701046b373cdedca7334e20a8dc7726eb4c3e2f6e18297dbbda09afba9", size = 12072053 }, - { url = "https://files.pythonhosted.org/packages/6b/a0/ba28620a680d2178db72063fb35660047519b3fa0bdae8823b5a9ba1a273/uv-0.4.7-py3-none-win32.whl", hash = "sha256:319a585f53c0b63b989526206383716e1d7c0f3483425058b94bf47402a81841", size = 11304199 }, - { url = "https://files.pythonhosted.org/packages/31/31/0e7d565e77c06612de3333e9b06e3e8e833f13439f041d5d86f5c2d0f10c/uv-0.4.7-py3-none-win_amd64.whl", hash = "sha256:23283699e6035ef536b204f9094e7297093a527f958b86d4ce26613c603f564c", size = 12537968 }, +version = "0.4.12" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e8/f8/186757710d7262fd36aa0c4dfeacdb2288ecb17e3c1e40798c5d63243866/uv-0.4.12.tar.gz", hash = "sha256:0f00d15108af7b17f49d70714a31927eed27e192d5e5410822c098399d61196d", size = 1901581 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/9d/404e068b70a779c1438c2e9268366f2344c84fb6ad6fa80d24a9990a1722/uv-0.4.12-py3-none-linux_armv6l.whl", hash = "sha256:31f7689c6f49b0489dc727b1e6f0f008f7db21388c3cf374577a445bd7d727b8", size = 11526223 }, + { url = "https://files.pythonhosted.org/packages/c0/e7/4face1444a283c2402d8be1c245eed0993b7bf6b1e5aacee81b66bc5e864/uv-0.4.12-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:9aa768f4b94335a4145d74e73ff4721cb1a3e1fd1269f4bb95187a9f8d41f8e1", size = 11907813 }, + { url = "https://files.pythonhosted.org/packages/f3/24/151ccb4586c43957743b28e675894d385daff3e7783595d53e5cd9e1714c/uv-0.4.12-py3-none-macosx_11_0_arm64.whl", hash = "sha256:c081b13c7789b518a2077ed0c49d33c9d855e110a2f670e4f354696245089edc", size = 11007331 }, + { url = "https://files.pythonhosted.org/packages/7b/04/ece989bccef9c86cd4a0b137a2a5d8707d024d6a832e73c2c4f20cd2117b/uv-0.4.12-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:c6861b3c92da1cdc2cb18c76b0e05004413ce1cc95782a4b34b7ee002006efb8", size = 11313895 }, + { url = "https://files.pythonhosted.org/packages/9e/1a/71d63b6db35a80e3234794cee95a6283eb812ba825002092d28b27d3369f/uv-0.4.12-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0840d0141f54f64474c9dbd46787971859fac9deacc701091b44f1c47d066823", size = 11328920 }, + { url = "https://files.pythonhosted.org/packages/08/57/69a5b304f4c915b30127841c604df59fe39265ef277c58dafdb00b84382b/uv-0.4.12-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:649d2974da5d867ca0230a15aa75d6e4625c2a71eddc0abaeebe7a167038f56b", size = 11962488 }, + { url = "https://files.pythonhosted.org/packages/5a/e3/80090829f1fac0f0dfd82c81251a3b55a77797d5c36a03833d4e35409e27/uv-0.4.12-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:6922ca516056069a6c835f0cf60053241bb3438e4ccc0356c223d4f5c0d92254", size = 12818066 }, + { url = "https://files.pythonhosted.org/packages/fa/a7/6b8753a35c647da588f5be4e831bc7af0ad84e3c2bffa50d412dc04299ce/uv-0.4.12-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a1d2ada46563178cacfeb2ff8a3b2764381a953cee87002fad0b9181f4a35e0d", size = 12631775 }, + { url = "https://files.pythonhosted.org/packages/6e/67/8905dedc2ee06cd2d40e2faab3cd7dcaf1c29bba0440c85f5f43b57ec957/uv-0.4.12-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86635a9dd024d08499405c9e1c1087aa24ffbfe89eb6dde010e5a60855e661bc", size = 16036126 }, + { url = "https://files.pythonhosted.org/packages/f3/d4/42365daf1772e11278973243053ab362e9b9ba22b3a795554c4f995e0a48/uv-0.4.12-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67327c5997a9c4531c0e13be8545aa6568a15c99a97770ac65f6dcc5600e8a9c", size = 12277845 }, + { url = "https://files.pythonhosted.org/packages/ca/b5/c3f6115a10c162173af4737455af266243ae5a5e19b13f5ec9a0319d1f8a/uv-0.4.12-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:8a102ee30a41909634b28cb9d7d5a03af2953aa86ff941e24916093f4a74d44f", size = 11510705 }, + { url = "https://files.pythonhosted.org/packages/70/71/5675cdff0bb363c40615f21a496a2238f87254759f8ec5f0af341e17d36e/uv-0.4.12-py3-none-musllinux_1_1_armv7l.whl", hash = "sha256:e931a2add4dfec717184164a54608b99d37e0000b9c151bb020a0a2dcc6d5cc1", size = 11268523 }, + { url = "https://files.pythonhosted.org/packages/38/55/6cf828f4031046bdeda0218055cd03d545b477ac3e49ebb60d9afeb43695/uv-0.4.12-py3-none-musllinux_1_1_i686.whl", hash = "sha256:8cbfa5ed4ea167291260416d71d54ffb949b0b98bcf945190adb8c65e30492be", size = 11760792 }, + { url = "https://files.pythonhosted.org/packages/53/02/26f980f3ecccbab1ce29b2438ae69d8eee9ee7565033c2245da8bc7cd586/uv-0.4.12-py3-none-musllinux_1_1_ppc64le.whl", hash = "sha256:a3c1b7b4a6e5258c0b20079beb1d22c3d306f7695eab8a3d3aea93b37db01b3a", size = 13582935 }, + { url = "https://files.pythonhosted.org/packages/82/4a/485f0ed081c713686186bfd9dc6548aefb02f1cfd764ec132cb32ca4a428/uv-0.4.12-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:dc638ff81e817a1c049c8bd51c623238dccf9bfbfb17e20878eaece6c74338bb", size = 12458025 }, + { url = "https://files.pythonhosted.org/packages/64/bb/7f14f9317e1000dc06023a8d7d35260023b5faa3420df1c6a3fd7144a7cb/uv-0.4.12-py3-none-win32.whl", hash = "sha256:0d548c090bf38fb76b6493c90bbfbad30bfc4b41365019953bffbc54d32394ed", size = 11696330 }, + { url = "https://files.pythonhosted.org/packages/c3/e2/472bf7a0acaffa3f25ea127b7671299164630d971a4234434547a5f1e23a/uv-0.4.12-py3-none-win_amd64.whl", hash = "sha256:56901b53c9bcce81305826c89378058922b405d0fbfb5c2742dda7dc5fdf891c", size = 12817590 }, ] [[package]] From 185c0ba22681018951a9feaec23e645d42d42cb7 Mon Sep 17 00:00:00 2001 From: Ian Carroll Date: Wed, 18 Sep 2024 14:03:40 -0400 Subject: [PATCH 4/4] add #788 fix to chngelog --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cb5a09a0..e86712c3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,9 @@ - Removed Broken Link "Introduction to NASA earthaccess" ([#779](https://github.com/nsidc/earthaccess/issues/779)) ([**@Sherwin-14**](https://github.com/Sherwin-14)) +- Restore automation for tidying notebooks used in documentation + ([#788](https://github.com/nsidc/earthaccess/issues/788)) + ([**@itcarroll**](https://github.com/itcarroll)) ## [0.10.0] 2024-07-19