diff --git a/notebooks/Dask/convert_SAFE_Zarr.ipynb b/notebooks/Dask/convert_SAFE_Zarr.ipynb new file mode 100644 index 0000000..7ea76ec --- /dev/null +++ b/notebooks/Dask/convert_SAFE_Zarr.ipynb @@ -0,0 +1,299 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "b164685c-dedb-4542-b9e6-93cd7a29e484", + "metadata": {}, + "source": [ + "Sample Notebook to show how to download and convert SAFE data to Zarr" + ] + }, + { + "cell_type": "markdown", + "id": "45ed0da2-ac1f-47e8-8f3d-49c1daba3c36", + "metadata": {}, + "source": [ + "Install missing eopf package" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b88a7c65-2f4d-4a66-8715-86c973caf6db", + "metadata": {}, + "outputs": [], + "source": [ + "pip install eopf==2.6.2" + ] + }, + { + "cell_type": "markdown", + "id": "7dc7a2c2-1151-4a03-bba8-e73b755e4d24", + "metadata": {}, + "source": [ + "Set CDSE S3 credentials, get them at https://eodata-s3keysmanager.dataspace.copernicus.eu/" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c2b55770-0c0a-4f3f-878e-e1ed04f360b7", + "metadata": {}, + "outputs": [], + "source": [ + "access_key = \"CXJ4X1DAG8XKQEHFXQNJ\"\n", + "secret_key = \"chPR3UMwNo2O5DV7hIzKkbF0L6fJ2kwjNKRnaAaj\"" + ] + }, + { + "cell_type": "markdown", + "id": "c7137ec2-4298-4ff8-8818-e05b973de71a", + "metadata": {}, + "source": [ + "Download a Sentinel-2 L2A product from the eodata bucket:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bf4f56e0-43e0-4119-a569-f09bbfaf20f0", + "metadata": {}, + "outputs": [], + "source": [ + "import boto3\n", + "import os\n", + "\n", + "session = boto3.session.Session()\n", + "s3 = boto3.resource(\n", + " 's3',\n", + " endpoint_url='https://eodata.dataspace.copernicus.eu',\n", + " aws_access_key_id=access_key,\n", + " aws_secret_access_key=secret_key,\n", + " region_name='default'\n", + ") # generated secrets\n", + "\n", + "def download(bucket, product: str, target: str = \"\") -> None:\n", + " \"\"\"\n", + " Downloads every file in bucket with provided product as prefix\n", + "\n", + " Raises FileNotFoundError if the product was not found\n", + "\n", + " Args:\n", + " bucket: boto3 Resource bucket object\n", + " product: Path to product\n", + " target: Local catalog for downloaded files. Should end with an `/`. Default current directory.\n", + " \"\"\"\n", + " files = bucket.objects.filter(Prefix=product)\n", + " if not list(files):\n", + " raise FileNotFoundError(f\"Could not find any files for {product}\")\n", + " for file in files:\n", + " os.makedirs(os.path.dirname(file.key), exist_ok=True)\n", + " if not os.path.isdir(file.key):\n", + " bucket.download_file(file.key, f\"{target}{file.key}\")\n", + "\n", + "# path to the product to download\n", + "download(s3.Bucket(\"eodata\"), \"Sentinel-2/MSI/L2A/2024/01/15/S2A_MSIL2A_20240115T235221_N0510_R130_T55HGS_20240116T021554.SAFE/\")" + ] + }, + { + "cell_type": "markdown", + "id": "f1ae2b0d-45e4-40f0-9351-8bf665f0840c", + "metadata": {}, + "source": [ + "Convert the product using eopf:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d3afff35-68e3-4444-be79-3de3693cbdbb", + "metadata": {}, + "outputs": [], + "source": [ + "# from dask_gateway import Gateway\n", + "\n", + "# gate = Gateway()\n", + "# cluster = gate.new_cluster()\n", + "# cluster.scale(4)\n", + "# client = cluster.get_client()\n", + "# client" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "83fc4b5b-04c8-41ce-b876-32fc677e5680", + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:eopf.dask_utils.dask_context_manager:Initialising an ClusterType.LOCAL cluster with client conf : {} ,cluster config {'memory_limit': '8GiB', 'processes': True, 'threads_per_worker': 1} and dask config {}\n", + "INFO:eopf.dask_utils.dask_context_manager:DASK Cluster : LocalCluster(702d9b09, 'tcp://127.0.0.1:35667', workers=3, threads=3, memory=24.00 GiB)\n", + "INFO:eopf.dask_utils.dask_context_manager:Dask Client : \n", + "INFO:eopf.dask_utils.dask_context_manager:Dask dashboard address: http://127.0.0.1:8787/status\n", + "INFO:eopf.dask_utils.dask_context_manager:Waiting for 4 workers to be ready\n", + "INFO:eopf.store.convert:Converting /home/jovyan/workspace/Sentinel-2/MSI/L2A/2024/01/15/S2A_MSIL2A_20240115T235221_N0510_R130_T55HGS_20240116T021554.SAFE to /home/jovyan/workspace/S2A_MSIL2A_20240115T235221_N0510_R130_T55HGS_20240116T021554.zarr\n", + "INFO:eopf.store.safe:Found product type : S02MSIL2A with processing version: 04.00\n", + "/opt/conda/lib/python3.12/site-packages/xarray/backends/plugins.py:110: RuntimeWarning: Engine 'eopf-zarr' loading failed:\n", + "Numba needs NumPy 2.2 or less. Got NumPy 2.3.\n", + " external_backend_entrypoints = backends_dict_from_pkg(entrypoints_unique)\n", + "/opt/conda/lib/python3.12/site-packages/cfgrib/xarray_plugin.py:131: FutureWarning: In a future version, xarray will not decode the variable 'step' into a timedelta64 dtype based on the presence of a timedelta-like 'units' attribute by default. Instead it will rely on the presence of a timedelta64 'dtype' attribute, which is now xarray's default way of encoding timedelta64 values.\n", + "To continue decoding into a timedelta64 dtype, either set `decode_timedelta=True` when opening this dataset, or add the attribute `dtype='timedelta64[ns]'` to this variable on disk.\n", + "To opt-in to future behavior, set `decode_timedelta=False`.\n", + " vars, attrs, coord_names = xr.conventions.decode_cf_variables(\n", + "/opt/conda/lib/python3.12/site-packages/cfgrib/xarray_plugin.py:131: FutureWarning: In a future version, xarray will not decode the variable 'step' into a timedelta64 dtype based on the presence of a timedelta-like 'units' attribute by default. Instead it will rely on the presence of a timedelta64 'dtype' attribute, which is now xarray's default way of encoding timedelta64 values.\n", + "To continue decoding into a timedelta64 dtype, either set `decode_timedelta=True` when opening this dataset, or add the attribute `dtype='timedelta64[ns]'` to this variable on disk.\n", + "To opt-in to future behavior, set `decode_timedelta=False`.\n", + " vars, attrs, coord_names = xr.conventions.decode_cf_variables(\n", + "INFO:eopf.store.convert:EOProduct S2A_MSIL2A_20240115T235221_N0510_R130_T55HGS_20240116T021554 successfully loaded, starting to write to /home/jovyan/workspace/S2A_MSIL2A_20240115T235221_N0510_R130_T55HGS_20240116T021554.zarr.zarr\n", + "/opt/conda/lib/python3.12/site-packages/dask/array/chunk.py:278: RuntimeWarning: invalid value encountered in cast\n", + " return x.astype(astype_dtype, **kwargs)\n", + "/opt/conda/lib/python3.12/site-packages/dask/array/chunk.py:278: RuntimeWarning: invalid value encountered in cast\n", + " return x.astype(astype_dtype, **kwargs)\n", + "2025-11-05 07:39:12,170 - distributed.worker.state_machine - WARNING - Async instruction for -2dd0f6533a1deafafb2af38ea39a6f78', 0, 0, 0))\" coro=> ended with CancelledError\n", + "2025-11-05 07:39:12,170 - distributed.worker.state_machine - WARNING - Async instruction for -285b1c9938b5c603e0c0aafc47b2309f', 0, 0, 0))\" coro=> ended with CancelledError\n", + "2025-11-05 07:39:12,171 - distributed.worker.state_machine - WARNING - Async instruction for -f4f01ff1695da7cbe36d71e7863a9297', 0, 0, 0))\" coro=> ended with CancelledError\n", + "2025-11-05 07:39:12,175 - distributed.worker.state_machine - WARNING - Async instruction for -cb26373c2c55986a4a233122024ec8ec', 0, 0, 0))\" coro=> ended with CancelledError\n", + "WARNING:distributed.nanny:Worker process still alive after 4.0 seconds, killing\n", + "WARNING:distributed.nanny:Worker process still alive after 4.0 seconds, killing\n", + "WARNING:distributed.nanny:Worker process still alive after 4.0 seconds, killing\n", + "WARNING:distributed.nanny:Worker process still alive after 4.0 seconds, killing\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 19.1 s, sys: 2.92 s, total: 22 s\n", + "Wall time: 5min 20s\n" + ] + }, + { + "ename": "TimeoutError", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[31m---------------------------------------------------------------------------\u001b[39m", + "\u001b[31mTimeoutError\u001b[39m Traceback (most recent call last)", + "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[1]\u001b[39m\u001b[32m, line 1\u001b[39m\n\u001b[32m----> \u001b[39m\u001b[32m1\u001b[39m \u001b[43mget_ipython\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m.\u001b[49m\u001b[43mrun_cell_magic\u001b[49m\u001b[43m(\u001b[49m\u001b[33;43m'\u001b[39;49m\u001b[33;43mtime\u001b[39;49m\u001b[33;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[33;43m'\u001b[39;49m\u001b[33;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[38;5;130;43;01m\\n\u001b[39;49;00m\u001b[33;43mimport os\u001b[39;49m\u001b[38;5;130;43;01m\\n\u001b[39;49;00m\u001b[33;43mfrom eopf.store.convert import convert\u001b[39;49m\u001b[38;5;130;43;01m\\n\u001b[39;49;00m\u001b[33;43mfrom eopf.common.constants import OpeningMode\u001b[39;49m\u001b[38;5;130;43;01m\\n\u001b[39;49;00m\u001b[38;5;130;43;01m\\n\u001b[39;49;00m\u001b[33;43mpath_to_safe = os.path.join(os.getcwd(), \u001b[39;49m\u001b[33;43m'\u001b[39;49m\u001b[33;43mSentinel-2/MSI/L2A/2024/01/15/S2A_MSIL2A_20240115T235221_N0510_R130_T55HGS_20240116T021554.SAFE\u001b[39;49m\u001b[33;43m'\u001b[39;49m\u001b[33;43m)\u001b[39;49m\u001b[38;5;130;43;01m\\n\u001b[39;49;00m\u001b[33;43mpath_to_zarr = os.path.join(os.getcwd(), \u001b[39;49m\u001b[33;43m'\u001b[39;49m\u001b[33;43mS2A_MSIL2A_20240115T235221_N0510_R130_T55HGS_20240116T021554.zarr\u001b[39;49m\u001b[33;43m'\u001b[39;49m\u001b[33;43m)\u001b[39;49m\u001b[38;5;130;43;01m\\n\u001b[39;49;00m\u001b[38;5;130;43;01m\\n\u001b[39;49;00m\u001b[33;43m# Add this parameter if you want to overwrite the output of the conversion if it already exists\u001b[39;49m\u001b[38;5;130;43;01m\\n\u001b[39;49;00m\u001b[33;43mtarget_store_config = dict(mode=OpeningMode.CREATE_OVERWRITE)\u001b[39;49m\u001b[38;5;130;43;01m\\n\u001b[39;49;00m\u001b[38;5;130;43;01m\\n\u001b[39;49;00m\u001b[33;43m# Apply conversion\u001b[39;49m\u001b[38;5;130;43;01m\\n\u001b[39;49;00m\u001b[33;43mconvert(path_to_safe, path_to_zarr, target_store_kwargs=target_store_config)\u001b[39;49m\u001b[38;5;130;43;01m\\n\u001b[39;49;00m\u001b[33;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n", + "\u001b[36mFile \u001b[39m\u001b[32m/opt/conda/lib/python3.12/site-packages/IPython/core/interactiveshell.py:2565\u001b[39m, in \u001b[36mInteractiveShell.run_cell_magic\u001b[39m\u001b[34m(self, magic_name, line, cell)\u001b[39m\n\u001b[32m 2563\u001b[39m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mself\u001b[39m.builtin_trap:\n\u001b[32m 2564\u001b[39m args = (magic_arg_s, cell)\n\u001b[32m-> \u001b[39m\u001b[32m2565\u001b[39m result = \u001b[43mfn\u001b[49m\u001b[43m(\u001b[49m\u001b[43m*\u001b[49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 2567\u001b[39m \u001b[38;5;66;03m# The code below prevents the output from being displayed\u001b[39;00m\n\u001b[32m 2568\u001b[39m \u001b[38;5;66;03m# when using magics with decorator @output_can_be_silenced\u001b[39;00m\n\u001b[32m 2569\u001b[39m \u001b[38;5;66;03m# when the last Python token in the expression is a ';'.\u001b[39;00m\n\u001b[32m 2570\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mgetattr\u001b[39m(fn, magic.MAGIC_OUTPUT_CAN_BE_SILENCED, \u001b[38;5;28;01mFalse\u001b[39;00m):\n", + "\u001b[36mFile \u001b[39m\u001b[32m/opt/conda/lib/python3.12/site-packages/IPython/core/magics/execution.py:1470\u001b[39m, in \u001b[36mExecutionMagics.time\u001b[39m\u001b[34m(self, line, cell, local_ns)\u001b[39m\n\u001b[32m 1468\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m interrupt_occured:\n\u001b[32m 1469\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m exit_on_interrupt \u001b[38;5;129;01mand\u001b[39;00m captured_exception:\n\u001b[32m-> \u001b[39m\u001b[32m1470\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m captured_exception\n\u001b[32m 1471\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m\n\u001b[32m 1472\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m out\n", + "\u001b[36mFile \u001b[39m\u001b[32m/opt/conda/lib/python3.12/site-packages/IPython/core/magics/execution.py:1439\u001b[39m, in \u001b[36mExecutionMagics.time\u001b[39m\u001b[34m(self, line, cell, local_ns)\u001b[39m\n\u001b[32m 1437\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m expr_val \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[32m 1438\u001b[39m code_2 = \u001b[38;5;28mself\u001b[39m.shell.compile(expr_val, source, \u001b[33m'\u001b[39m\u001b[33meval\u001b[39m\u001b[33m'\u001b[39m)\n\u001b[32m-> \u001b[39m\u001b[32m1439\u001b[39m out = \u001b[38;5;28;43meval\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mcode_2\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mglob\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mlocal_ns\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 1440\u001b[39m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyboardInterrupt\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[32m 1441\u001b[39m captured_exception = e\n", + "\u001b[36mFile \u001b[39m\u001b[32m:12\u001b[39m\n", + "\u001b[36mFile \u001b[39m\u001b[32m/opt/conda/lib/python3.12/site-packages/eopf/store/convert.py:158\u001b[39m, in \u001b[36mconvert\u001b[39m\u001b[34m(source_path, target_path, target_format, mask_and_scale, direct_read, source_store_kwargs, target_store_kwargs)\u001b[39m\n\u001b[32m 156\u001b[39m mode: \u001b[38;5;28mstr\u001b[39m = target_store_kwargs.get(\u001b[33m\"\u001b[39m\u001b[33mmode\u001b[39m\u001b[33m\"\u001b[39m, \u001b[33m\"\u001b[39m\u001b[33mw+\u001b[39m\u001b[33m\"\u001b[39m)\n\u001b[32m 157\u001b[39m target_store.open(mode=mode)\n\u001b[32m--> \u001b[39m\u001b[32m158\u001b[39m \u001b[43mtarget_store\u001b[49m\u001b[43m[\u001b[49m\u001b[43mproduct_name\u001b[49m\u001b[43m]\u001b[49m = eop\n\u001b[32m 159\u001b[39m target_store.close()\n\u001b[32m 160\u001b[39m elapsed_time = time.time() - start_time\n", + "\u001b[36mFile \u001b[39m\u001b[32m/opt/conda/lib/python3.12/site-packages/eopf/store/zarr.py:811\u001b[39m, in \u001b[36mEOZarrStore.__setitem__\u001b[39m\u001b[34m(self, _EOZarrStore__key, _EOZarrStore__value)\u001b[39m\n\u001b[32m 808\u001b[39m eo_obj = copy.deepcopy(__value)\n\u001b[32m 810\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(eo_obj, (EOProduct, EOContainer)):\n\u001b[32m--> \u001b[39m\u001b[32m811\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_setitem_container\u001b[49m\u001b[43m(\u001b[49m\u001b[43m__key\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43meo_obj\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 812\u001b[39m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(eo_obj, EOGroup):\n\u001b[32m 813\u001b[39m \u001b[38;5;28mself\u001b[39m._setitem_group(__key, eo_obj)\n", + "\u001b[36mFile \u001b[39m\u001b[32m/opt/conda/lib/python3.12/site-packages/eopf/store/zarr.py:903\u001b[39m, in \u001b[36mEOZarrStore._setitem_container\u001b[39m\u001b[34m(self, _EOZarrStore__key, _EOZarrStore__value)\u001b[39m\n\u001b[32m 901\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(__value, EOProduct):\n\u001b[32m 902\u001b[39m __value.update_variables_short_names()\n\u001b[32m--> \u001b[39m\u001b[32m903\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_write_eog\u001b[49m\u001b[43m(\u001b[49m\u001b[43mgroup_fspath\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mgroup_fspath\u001b[49m\u001b[43m.\u001b[49m\u001b[43mto_zarr_store\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m__value\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 904\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[32m 905\u001b[39m \u001b[38;5;28mself\u001b[39m._write_eoc(group_fspath, __value)\n", + "\u001b[36mFile \u001b[39m\u001b[32m/opt/conda/lib/python3.12/site-packages/eopf/store/zarr.py:683\u001b[39m, in \u001b[36mEOZarrStore._write_eog\u001b[39m\u001b[34m(self, group_anypath, group_fsstore, eo_obj, sub_group_prefix, level)\u001b[39m\n\u001b[32m 681\u001b[39m \u001b[38;5;28mself\u001b[39m._consolidate_list.append(group_fsstore)\n\u001b[32m 682\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mself\u001b[39m._delayed_consolidate:\n\u001b[32m--> \u001b[39m\u001b[32m683\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mdask_flush\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[36mFile \u001b[39m\u001b[32m/opt/conda/lib/python3.12/site-packages/eopf/store/zarr.py:387\u001b[39m, in \u001b[36mEOZarrStore.dask_flush\u001b[39m\u001b[34m(self)\u001b[39m\n\u001b[32m 379\u001b[39m \u001b[38;5;250m\u001b[39m\u001b[33;03m\"\"\"\u001b[39;00m\n\u001b[32m 380\u001b[39m \u001b[33;03mCompute dask delayed and clear the list\u001b[39;00m\n\u001b[32m 381\u001b[39m \n\u001b[32m (...)\u001b[39m\u001b[32m 384\u001b[39m \u001b[33;03mNone\u001b[39;00m\n\u001b[32m 385\u001b[39m \u001b[33;03m\"\"\"\u001b[39;00m\n\u001b[32m 386\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(\u001b[38;5;28mself\u001b[39m._futures_list) != \u001b[32m0\u001b[39m:\n\u001b[32m--> \u001b[39m\u001b[32m387\u001b[39m \u001b[43mdask_helpers\u001b[49m\u001b[43m.\u001b[49m\u001b[43mwait_and_get_results\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_futures_list\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 388\u001b[39m \u001b[38;5;28mself\u001b[39m._futures_list = []\n\u001b[32m 389\u001b[39m \u001b[38;5;28mself\u001b[39m._delayed_list = []\n", + "\u001b[36mFile \u001b[39m\u001b[32m/opt/conda/lib/python3.12/site-packages/eopf/dask_utils/dask_helpers.py:130\u001b[39m, in \u001b[36mwait_and_get_results\u001b[39m\u001b[34m(futures, cancel_at_first_error, **kwargs)\u001b[39m\n\u001b[32m 128\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m client \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[32m 129\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m DaskComputingError(\u001b[33m\"\u001b[39m\u001b[33mDask future computation requested but no Client available !!!!\u001b[39m\u001b[33m\"\u001b[39m)\n\u001b[32m--> \u001b[39m\u001b[32m130\u001b[39m \u001b[43m_wait_and_get_results_dask\u001b[49m\u001b[43m(\u001b[49m\u001b[43mclient\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mreal_futures\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mresults\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcancel_at_first_error\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 132\u001b[39m \u001b[38;5;66;03m# Process FakeFutures (already done in essence)\u001b[39;00m\n\u001b[32m 133\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m index, future \u001b[38;5;129;01min\u001b[39;00m fake_futures.items():\n", + "\u001b[36mFile \u001b[39m\u001b[32m/opt/conda/lib/python3.12/site-packages/eopf/dask_utils/dask_helpers.py:167\u001b[39m, in \u001b[36m_wait_and_get_results_dask\u001b[39m\u001b[34m(client, real_futures, results, cancel_at_first_error, **kwargs)\u001b[39m\n\u001b[32m 164\u001b[39m \u001b[38;5;66;03m# Process real Dask Futures as they complete\u001b[39;00m\n\u001b[32m 165\u001b[39m timeout = kwargs.pop(\u001b[33m\"\u001b[39m\u001b[33mtimeout\u001b[39m\u001b[33m\"\u001b[39m, EOConfiguration()[\u001b[33m\"\u001b[39m\u001b[33mdask_utils__timeout\u001b[39m\u001b[33m\"\u001b[39m])\n\u001b[32m--> \u001b[39m\u001b[32m167\u001b[39m \u001b[43m\u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mfuture\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mas_completed\u001b[49m\u001b[43m(\u001b[49m\u001b[43mreal_futures\u001b[49m\u001b[43m.\u001b[49m\u001b[43mvalues\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[43m=\u001b[49m\u001b[43mtimeout\u001b[49m\u001b[43m)\u001b[49m\u001b[43m:\u001b[49m\n\u001b[32m 168\u001b[39m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mtry\u001b[39;49;00m\u001b[43m:\u001b[49m\n\u001b[32m 169\u001b[39m \u001b[43m \u001b[49m\u001b[43mindex\u001b[49m\u001b[43m \u001b[49m\u001b[43m=\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mnext\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mi\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mi\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mf\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mreal_futures\u001b[49m\u001b[43m.\u001b[49m\u001b[43mitems\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mif\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mf\u001b[49m\u001b[43m \u001b[49m\u001b[43m==\u001b[49m\u001b[43m \u001b[49m\u001b[43mfuture\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;66;43;03m# Find correct index\u001b[39;49;00m\n", + "\u001b[36mFile \u001b[39m\u001b[32m/opt/conda/lib/python3.12/site-packages/distributed/client.py:5688\u001b[39m, in \u001b[36mas_completed.__next__\u001b[39m\u001b[34m(self)\u001b[39m\n\u001b[32m 5686\u001b[39m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28mself\u001b[39m.queue.empty():\n\u001b[32m 5687\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m._deadline.expired:\n\u001b[32m-> \u001b[39m\u001b[32m5688\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mTimeoutError\u001b[39;00m()\n\u001b[32m 5689\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m.is_empty():\n\u001b[32m 5690\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mStopIteration\u001b[39;00m()\n", + "\u001b[31mTimeoutError\u001b[39m: " + ] + } + ], + "source": [ + "%%time\n", + "\n", + "import os\n", + "from eopf.store.convert import convert\n", + "from eopf.common.constants import OpeningMode\n", + "\n", + "path_to_safe = os.path.join(os.getcwd(), 'Sentinel-2/MSI/L2A/2024/01/15/S2A_MSIL2A_20240115T235221_N0510_R130_T55HGS_20240116T021554.SAFE')\n", + "path_to_zarr = os.path.join(os.getcwd(), 'S2A_MSIL2A_20240115T235221_N0510_R130_T55HGS_20240116T021554.zarr')\n", + "\n", + "# Add this parameter if you want to overwrite the output of the conversion if it already exists\n", + "target_store_config = dict(mode=OpeningMode.CREATE_OVERWRITE)\n", + "\n", + "# Apply conversion\n", + "convert(path_to_safe, path_to_zarr, target_store_kwargs=target_store_config)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "da226f67-2c88-4084-a001-55987116b8b9", + "metadata": {}, + "outputs": [], + "source": [ + "import xarray as xr\n", + "dt = xr.open_datatree(\"S2A_MSIL2A_20240115T235221_N0510_R130_T55HGS_20240116T021554.zarr\", chunks={}, engine=\"zarr\", consolidated=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "e83b22eb-b036-4408-a907-e1a3e5915dfe", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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evUK/HmIiIgKklRH/9HXoVjniSzKUlNTYWpqipSUFM6JJCKiPBXG74ucezy7W0UnC2usqj/h77evQLEeziYiIiL1ZQkCsrTse9K2PhUdDCKJiIhILZwTSbkV6zmRRERERKQZ9kQSERGRWqQQkMWeSPr/GEQSERGRWjicTblxOJuIiIiIRGNPJBEREamFq7MpNwaRREREpBbp//9oew36OnA4m4iIiIhEY08kERERqSVLB6uzta1PRQeDSCIiIlJLlpD90fYa9HVgEElERERq4ZxIyo1zIomIiIhINPZEEhERkVqkkCALEq2vQV8HBpFERESkFqmQ/dH2GvR14HA2EREREYnGnkgiIiJSS5YOhrO1rU9FB4NIIiIiUguDSMqNw9lEREREJBp7IomIiEgtUkECqaDl6mwt61PRwSCSiIiI1MLhbMqNw9lEREREJBp7IomIiEgtWdBDlpb9T1k6agt9fgwiiYiISC2CDuZECpwT+dVgEElERERq4ZxIyo1zIomIiIhINAaRREREpJYsQU8nH7HWrVsHe3t7GBsbw8PDA//++2++5UNDQ+Hh4QFjY2M4ODhgw4YNeZbdtWsXJBIJunTpIrpdxR2DSCIiIlKLFBJIoaflR9xw9u7duzFu3DhMmzYNV69eRaNGjdCuXTvExcUpLR8bG4v27dujUaNGuHr1Kv773/9izJgx2L9/v0LZR48eYeLEiWjUqJFG76O4YxBJRERERdaKFSswaNAgDB48GC4uLli5ciVsbGywfv16peU3bNiAqlWrYuXKlXBxccHgwYPh6+uLZcuWyZXLyspCv379MHv2bDg4OBTGo3x1GEQSERGRWnIW1mj7AYDU1FS5T1pamsL90tPTcfnyZbRu3VrueOvWrREeHq60jREREQrl27Rpg0uXLiEjI0N2bM6cOahUqRIGDRqk7WspthhEEhERkVp0OSfSxsYGpqamss/ChQsV7peUlISsrCyYm5vLHTc3N0dCQoLSNiYkJCgtn5mZiaSkJADA2bNnERgYiI0bN+ritRRbTPFDREREhe7x48coW7as7LuRkVGeZSUS+XmUgiAoHFNVPuf4mzdv8MMPP2Djxo2oWLGiJk2n/49BJBEREakle2GNdnkec+qXLVtWLohUpmLFitDX11fodUxMTFTobcxhYWGhtHyJEiVQoUIF3Lp1Cw8fPkTHjh3/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4QIeP36MBg0a4OzZs1zJTEREVIRx28PPIyIiAidPnkSlSpWgp6cHPT09NGzYEAsXLsSYMWNw9epVpfVGjBiBChUqICAgAL/++qusx1JfXx8eHh7Ytm2b6P24cyu0IBIAypUrh0WLFqm1xQ8RERERZQ9X56QWrFixIp49e4bq1avD1tYWd+/ezbdur1690KtXL2RkZCApKUl2jfzWsairUINIIiIi+oIJQvZH22uQKG5ubrh+/TocHBxQr149LFmyBIaGhvjtt98U8nbnxcDAQCe71OQmOk/kgAEDcObMGZ02goiIiIo+5on8PKZPnw6pNHu/yHnz5uHRo0do1KgRjhw5gtWrV3+2donuiXzz5g1at24NGxsbDBw4EP3794e1tXVBtI2IiIio2GvTpo3sZwcHB9y+fRsvX75E+fLlNdpGUVdE90Tu378fT58+xahRo7B3717Y2dmhXbt22LdvHzIyMgqijURERFQUCDr6kNbMzMw+awAJaBBEAkCFChUwduxYXL16FRcuXICTkxN8fHxgZWUFPz8/REdH67qdRERE9JlxOJty0yiIzBEfH4/g4GAEBwdDX18f7du3x61bt+Dq6prnFjtERERE9OUTHURmZGRg//79+P7772Fra4u9e/fCz88P8fHx2Lp1K4KDg/HHH39gzpw5BdFeIiIi+lykgm4+9FUQvbDG0tISUqkUffr0wYULF/Dtt98qlGnTpg3KlSung+YRERFRkcEdaygX0UFkQEAA/vOf/8DYOO8N2MuXL4/Y2FitGkZERERFiwQ62LFGJy2hokB0EOnj41MQ7SAiIiKiLwh3rCEiIiL1cMcayoVBJBEREalFFyl6mOLn66FVih8iIiIiKp7YE0lERETq4epsyoVBJBEREalFIgiQaDmnUdv6VHRwOJuIiIiIRGNPJBEREalH+v8/2l6DvgoMIomIiEgtHM6m3DicTURERESisSeSiIiI1MPV2ZQLg0giIiJSD3esoVwYRBIREZFauGMN5cY5kUREREQkGnsiiYiISD0czqZcGEQSERGRWiTS7I+216CvA4eziYiIiEg09kQSERGRejicTbkwiCQiIiL1ME8k5cLhbCIiIiISjT2RREREpBbunU25MYgkIiIi9XBOJOXC4WwiIiIiEo09kURERKQeAYC2eR7ZEfnVYBBJREREauGcSMqNQSQRERGp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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "dt.measurements.reflectance.r60m.b04.plot.imshow()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a93e0e74-eb2d-4d56-afe7-5d16da3e6dab", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "663149cf-9818-4bdd-a1a4-6c088313f24c", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.11" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}