{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import os \n", "import time \n", "import glob \n", "import numpy as np \n", "\n", "import xarray as xr\n", " \n", "os.environ['ROOK_URL'] = 'http://rook.dkrz.de/wps' \n", "# os.environ['ROOK_URL'] = 'http://localhost:5000/wps' \n", "from rooki import rooki \n", "import rooki.operators as ops \n", "rooki.url" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def time_it(func, *args, **kwargs):\n", " s = time.time()\n", "\n", " print(f'[INFO] Running: {func.__name__} with {args}, {kwargs}')\n", " resp = func(*args, **kwargs)\n", "\n", " e = time.time()\n", " print(f'[INFO] Call to {func.__name__} with {args}, {kwargs}')\n", " print(f' took: {e-s:.2f} seconds') \n", "\n", " return resp" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def _check_response(resp, var_id=None, maximum=None):\n", " assert resp.size > 100\n", " ds = resp.datasets()[0]\n", " assert isinstance(ds, xr.Dataset)\n", "\n", " if var_id and maximum:\n", " mx = float(ds[var_id].max())\n", " # assert np.isclose(mx, maximum)\n", " if not np.isclose(mx, maximum):\n", " print(f\"[Warning] max={mx}, expected={maximum}\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def test_workflow_subset_time_time_c3s_cmip5_small_method1():\n", " wf = ops.Subset(\n", " ops.Subset(\n", " ops.Input(\n", " 'tas', ['c3s-cmip5.output1.ICHEC.EC-EARTH.historical.day.atmos.day.r1i1p1.tas.latest']\n", " ),\n", " time=\"1867-01-01/1867-12-30\",\n", " ),\n", " time=\"1867-04-01/1867-06-30\",\n", " )\n", " \n", " resp = wf.orchestrate()\n", " _check_response(resp, 'tas', 313.928)\n", "\n", "\n", "time_it(test_workflow_subset_time_time_c3s_cmip5_small_method1)\n", "# Took (s):\n", "# CEDA SLURM: 55, 51, 46, 46, 40, 45, 39\n", "# DKRZ VM: 78, 180" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def test_workflow_subset_time_time_c3s_cmip5_small_method2():\n", " wf = ops.Input('tas', ['c3s-cmip5.output1.ICHEC.EC-EARTH.historical.day.atmos.day.r1i1p1.tas.latest'])\n", " wf = ops.Subset(wf, time='1867-01-01/1867-12-30') \n", " wf = ops.Subset(wf, time='1867-04-01/1867-06-30')\n", " \n", " resp = wf.orchestrate()\n", " _check_response(resp, 'tas', 313.928)\n", "\n", "time_it(test_workflow_subset_time_time_c3s_cmip5_small_method2)\n", "# Took (s):\n", "# CEDA: 46, 48\n", "# DKRZ: 115, 130" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def test_workflow_subset_time_time_c3s_cmip5_large():\n", " wf = ops.Subset(\n", " ops.Subset(\n", " ops.Input(\n", " 'tas', ['c3s-cmip5.output1.ICHEC.EC-EARTH.historical.day.atmos.day.r1i1p1.tas.latest']\n", " ),\n", " time=\"1850-01-01/1861-12-30\",\n", " ),\n", " time=\"1861-01-01/1861-02-15\",\n", " )\n", "\n", " resp = wf.orchestrate()\n", " _check_response(resp, 'tas', 310.861)\n", "\n", "time_it(test_workflow_subset_time_time_c3s_cmip5_large)\n", "# Took (s):\n", "# CEDA:\n", "# DKRZ: 88, 93, 91" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Clean up if needed**" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def cleanup_tmpdir():\n", " for dr in glob.glob('/tmp/tmp*'):\n", "\n", " try:\n", " os.removedirs(dr)\n", " print(f'REMOVED tmpdir: {dr}')\n", " except:\n", " pass # did not delete content owned by others\n", "\n", "\n", "# cleanup_tmpdir()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.9.2" } }, "nbformat": 4, "nbformat_minor": 4 }