From 151b91ae0f0dec4c72af7ed2e4766b78dadd8756 Mon Sep 17 00:00:00 2001 From: jenny kupzigSCRIPT Date: Thu, 21 May 2026 09:39:20 +0000 Subject: [PATCH 1/7] [helpers-for-plotting] enhance readme --- README.md | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8203906..513e3be 100644 --- a/README.md +++ b/README.md @@ -70,7 +70,7 @@ writing component code. Once you are done writing your code, including unit tests, use `./run check` to see if your code quality is sufficient. ### Documentation -Fr documentation we use the tool sphinx. Please apply `./run build_docs` to create the current state of documentation. It will be stored in **docs**. You can open the documentation by opening `docs/index.html`, e.g. with your browser. +For documentation we use the tool sphinx. Please apply `./run build_docs` to create the current state of documentation. It will be stored in **docs**. You can open the documentation by opening `docs/index.html`, e.g. with your browser. ### Build, Release and Publish The first step for publishing a new package version is creating and merging a pull request from develop to main. @@ -96,7 +96,19 @@ To **publish** the build from the `dist` subdirectory to PyPI, 1) tag your main branch with the specified package version -2) use `uv publish --index testpypi --token `. You need a (Test-)PyPI account with a token and you need maintainer/owner access to the [hdhelpers (Test-)PyPI project](https://pypi.org/project/hdhelpers/). +2) use `uv publish --index testpypi --token `. You need a Test-PyPI account with a token and you need maintainer/owner access to the [hdhelpers Test-PyPI project](https://test.pypi.org/project/hdhelpers/). + +3) verifiy that package can be installed by using: +```bash +uv run --with 'hdhelpers==' + --refresh-package hdhelpers + --default-index https://test.pypi.org/simple/ + --index https://test.pypi.org/simple/ + --no-project + -- python -c "import hdhelpers; print(hdhelpers.__version__)" +``` + +4) use `uv publish dist/*` to upload the package on [hdhelpers PyPI project](https://pypi.org/project/hdhelpers/). 3) After publishing please communicate to the hetida designer team so upgrade there dependencies. The hetida designer docker compose setup installs hdhelpers from [PyPI](https://pypi.org) as it does with any dependency listed in `runtime/requirements.in`. From 228784d2cfff9fb9e5b4f1abbdec9831dfa38bab Mon Sep 17 00:00:00 2001 From: jenny kupzigSCRIPT Date: Tue, 23 Jun 2026 09:30:23 +0000 Subject: [PATCH 2/7] modifiy timezone applicable to empty series/dataframe and datetime object --- pyproject.toml | 2 +- src/hdhelpers/__init__.py | 2 +- src/hdhelpers/helpers/timezone_handling.py | 17 +++++++++++------ tests/helpers/test_timezone_handling.py | 16 ++++++++++++++++ uv.lock | 2 +- 5 files changed, 30 insertions(+), 9 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 30a3c6b..66a2fb0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,7 +20,7 @@ exclude = [ [project] name = "hdhelpers" -version = "0.0.2" +version = "0.0.3" description = "Streamlines metadata & timezone handling, and plotting in hetida designer components" readme = "README.md" maintainers = [ diff --git a/src/hdhelpers/__init__.py b/src/hdhelpers/__init__.py index e737311..7e1b713 100644 --- a/src/hdhelpers/__init__.py +++ b/src/hdhelpers/__init__.py @@ -5,7 +5,7 @@ from .plot_target_settings import StatusColors # do not edit line of __version__ as it is automatically modified by running ./run build_package -__version__ = "0.0.2" +__version__ = "0.0.3" # function can be automated with from hdhelpers import * __all__ = [ diff --git a/src/hdhelpers/helpers/timezone_handling.py b/src/hdhelpers/helpers/timezone_handling.py index f43d441..0ee2d71 100644 --- a/src/hdhelpers/helpers/timezone_handling.py +++ b/src/hdhelpers/helpers/timezone_handling.py @@ -1,6 +1,7 @@ import logging from functools import singledispatch +import datetime import pandas as pd import pytz @@ -19,8 +20,9 @@ def _convert_to_optional_timezone(object_to_convert, to_timezone: str | None): ) -@_convert_to_optional_timezone.register(pd.Timestamp | pd.DatetimeIndex) +@_convert_to_optional_timezone.register(pd.Timestamp | pd.DatetimeIndex| datetime.datetime ) def _[T: (pd.Timestamp, pd.DatetimeIndex)](object_to_convert: T, to_timezone: str | None) -> T: + object_to_convert = pd.to_datetime(object_to_convert) if to_timezone is None: if object_to_convert.tz is None: return object_to_convert.tz_localize("UTC") @@ -41,7 +43,7 @@ def _(object_to_convert: pd.Series, to_timezone: str | None) -> pd.Series: return object_to_convert.dt.tz_convert(to_timezone) -def modify_timezone[T: (pd.Timestamp, pd.Series, pd.DataFrame)]( # noqa: PLR0912 +def modify_timezone[T: (pd.Timestamp, datetime.datetime, pd.Series, pd.DataFrame)]( # noqa: PLR0912 object_to_convert: T, to_timezone: str | None = None, column_names: list[str] | None = None, @@ -73,9 +75,9 @@ def modify_timezone[T: (pd.Timestamp, pd.Series, pd.DataFrame)]( # noqa: PLR091 3600 """ - if not isinstance(object_to_convert, pd.Timestamp | pd.Series | pd.DataFrame): + if not isinstance(object_to_convert, pd.Timestamp | pd.Series | pd.DataFrame | datetime.datetime): raise TypeError( - f"object_to_convert is {type(object_to_convert)} not pd.Series | pd.DataFrame" + f"object_to_convert is {type(object_to_convert)} not pd.Timestamp | pd.Series | pd.DataFrame | datetime.datetime" ) if column_names is None: column_names = [] @@ -86,9 +88,12 @@ def modify_timezone[T: (pd.Timestamp, pd.Series, pd.DataFrame)]( # noqa: PLR091 if plot_target_settings.plot_target_timezone is not None: to_timezone = plot_target_settings.plot_target_timezone - if isinstance(object_to_convert, pd.Timestamp): + if isinstance(object_to_convert, pd.Timestamp | datetime.datetime): return _convert_to_optional_timezone(object_to_convert, to_timezone) + if object_to_convert.empty: + return object_to_convert + if isinstance(object_to_convert, pd.Series): new_object = object_to_convert.to_frame(name=object_to_convert.name) else: @@ -99,7 +104,7 @@ def modify_timezone[T: (pd.Timestamp, pd.Series, pd.DataFrame)]( # noqa: PLR091 new_object.index = _convert_to_optional_timezone( pd.to_datetime(new_object.index), to_timezone ) - msg = f"Converted index to datetime starting with {object_to_convert.index[0]}" + msg = f"Converted index to datetime starting with {object_to_convert.index.min()}" logger.debug(msg=msg) elif isinstance(new_object, pd.DataFrame) and "timestamp" in new_object.columns: new_object["timestamp"] = _convert_to_optional_timezone( diff --git a/tests/helpers/test_timezone_handling.py b/tests/helpers/test_timezone_handling.py index 322a5d9..543f058 100644 --- a/tests/helpers/test_timezone_handling.py +++ b/tests/helpers/test_timezone_handling.py @@ -96,6 +96,15 @@ def test_modify_timezone_wrong_tzname(series_summer): with pytest.raises(ValueError, match="Timezone not known*"): _ = modify_timezone(series_summer, to_timezone="Europe/Berlin2") +def test_empty_series(): + data = pd.Series() + modified_data = modify_timezone(data, to_timezone="Europe/Berlin") + assert modified_data.empty + +def test_empty_dataframe(): + data = pd.DataFrame() + modified_data = modify_timezone(data, to_timezone="Europe/Berlin", column_names=["timestamp"]) + assert modified_data.empty def test_named_series(series_summer): data = pd.Series(series_summer.index) @@ -182,3 +191,10 @@ def test_modify_timestamp(): pd.to_datetime("2023-03-25 23:00", utc=True), to_timezone="Europe/Berlin" ) assert modified_timestamp.utcoffset() == datetime.timedelta(seconds=3600) + +def test_modify_timestamp_datetime(): + example_date = pd.to_datetime("2023-03-25 23:00", utc=True) + modified_timestamp = modify_timezone( + example_date.to_pydatetime(), to_timezone="Europe/Berlin" + ) + assert modified_timestamp.utcoffset() == datetime.timedelta(seconds=3600) diff --git a/uv.lock b/uv.lock index 0a8a16e..2dea45c 100644 --- a/uv.lock +++ b/uv.lock @@ -263,7 +263,7 @@ wheels = [ [[package]] name = "hdhelpers" -version = "0.0.2" +version = "0.0.3" source = { editable = "." } dependencies = [ { name = "glom" }, From 63877482abf7a984e59deb6711d57ae9a74d9f87 Mon Sep 17 00:00:00 2001 From: jenny kupzigSCRIPT Date: Tue, 23 Jun 2026 12:50:17 +0000 Subject: [PATCH 3/7] disarm required dependencies to ease compatibility with designer development --- pyproject.toml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 66a2fb0..ce5e6a4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,11 +32,11 @@ maintainers = [ requires-python = ">=3.12" dependencies = [ - "pandas>=2,<3", - "plotly>=6,<7", - "pydantic>=2,<3", + "pandas", + "plotly", + "pydantic", "glom>25,<26", - "numpy>=2.3.3", + "numpy", ] license = "MIT" license-files = ["LICENSE"] From 4f445726b11add6e3ae46cba18323beb3e6247c3 Mon Sep 17 00:00:00 2001 From: jenny kupzigSCRIPT Date: Tue, 23 Jun 2026 12:56:30 +0000 Subject: [PATCH 4/7] write CHANGELOG --- CHANGELOG.md | 5 +++++ README.md | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 86f0493..5cf9255 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## [0.0.3] - 2026-06-23 +- Fixes in modifiy_timezone +- Disarm dependencies to ease compatibility to designer development +- Enhance documentation + ## [0.0.2] - 2026-05-21 - Include helpers for metadata - Include helper function for modify timezone diff --git a/README.md b/README.md index 513e3be..83de197 100644 --- a/README.md +++ b/README.md @@ -110,7 +110,7 @@ uv run --with 'hdhelpers==' 4) use `uv publish dist/*` to upload the package on [hdhelpers PyPI project](https://pypi.org/project/hdhelpers/). -3) After publishing please communicate to the hetida designer team so upgrade there dependencies. +5) After publishing please communicate to the hetida designer team so upgrade there dependencies. The hetida designer docker compose setup installs hdhelpers from [PyPI](https://pypi.org) as it does with any dependency listed in `runtime/requirements.in`. ### Notes From 7596dadb0ccbd5ce1d6132a7165ae0e644a589fd Mon Sep 17 00:00:00 2001 From: jenny kupzigSCRIPT Date: Tue, 23 Jun 2026 13:00:36 +0000 Subject: [PATCH 5/7] update uv lock accordingly --- uv.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/uv.lock b/uv.lock index 2dea45c..78341af 100644 --- a/uv.lock +++ b/uv.lock @@ -288,10 +288,10 @@ dev = [ [package.metadata] requires-dist = [ { name = "glom", specifier = ">25,<26" }, - { name = "numpy", specifier = ">=2.3.3" }, - { name = "pandas", specifier = ">=2,<3" }, - { name = "plotly", specifier = ">=6,<7" }, - { name = "pydantic", specifier = ">=2,<3" }, + { name = "numpy" }, + { name = "pandas" }, + { name = "plotly" }, + { name = "pydantic" }, ] [package.metadata.requires-dev] From 213bf97a593ae92509488ae041dde9655c400e83 Mon Sep 17 00:00:00 2001 From: jenny kupzigSCRIPT Date: Tue, 23 Jun 2026 13:01:20 +0000 Subject: [PATCH 6/7] format files --- src/hdhelpers/helpers/timezone_handling.py | 8 +++++--- tests/helpers/test_timezone_handling.py | 8 +++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/hdhelpers/helpers/timezone_handling.py b/src/hdhelpers/helpers/timezone_handling.py index 0ee2d71..003213b 100644 --- a/src/hdhelpers/helpers/timezone_handling.py +++ b/src/hdhelpers/helpers/timezone_handling.py @@ -1,7 +1,7 @@ +import datetime import logging from functools import singledispatch -import datetime import pandas as pd import pytz @@ -20,7 +20,7 @@ def _convert_to_optional_timezone(object_to_convert, to_timezone: str | None): ) -@_convert_to_optional_timezone.register(pd.Timestamp | pd.DatetimeIndex| datetime.datetime ) +@_convert_to_optional_timezone.register(pd.Timestamp | pd.DatetimeIndex | datetime.datetime) def _[T: (pd.Timestamp, pd.DatetimeIndex)](object_to_convert: T, to_timezone: str | None) -> T: object_to_convert = pd.to_datetime(object_to_convert) if to_timezone is None: @@ -75,7 +75,9 @@ def modify_timezone[T: (pd.Timestamp, datetime.datetime, pd.Series, pd.DataFrame 3600 """ - if not isinstance(object_to_convert, pd.Timestamp | pd.Series | pd.DataFrame | datetime.datetime): + if not isinstance( + object_to_convert, pd.Timestamp | pd.Series | pd.DataFrame | datetime.datetime + ): raise TypeError( f"object_to_convert is {type(object_to_convert)} not pd.Timestamp | pd.Series | pd.DataFrame | datetime.datetime" ) diff --git a/tests/helpers/test_timezone_handling.py b/tests/helpers/test_timezone_handling.py index 543f058..808a034 100644 --- a/tests/helpers/test_timezone_handling.py +++ b/tests/helpers/test_timezone_handling.py @@ -96,16 +96,19 @@ def test_modify_timezone_wrong_tzname(series_summer): with pytest.raises(ValueError, match="Timezone not known*"): _ = modify_timezone(series_summer, to_timezone="Europe/Berlin2") + def test_empty_series(): data = pd.Series() modified_data = modify_timezone(data, to_timezone="Europe/Berlin") assert modified_data.empty + def test_empty_dataframe(): data = pd.DataFrame() modified_data = modify_timezone(data, to_timezone="Europe/Berlin", column_names=["timestamp"]) assert modified_data.empty + def test_named_series(series_summer): data = pd.Series(series_summer.index) data.name = "timestamp" @@ -192,9 +195,8 @@ def test_modify_timestamp(): ) assert modified_timestamp.utcoffset() == datetime.timedelta(seconds=3600) + def test_modify_timestamp_datetime(): example_date = pd.to_datetime("2023-03-25 23:00", utc=True) - modified_timestamp = modify_timezone( - example_date.to_pydatetime(), to_timezone="Europe/Berlin" - ) + modified_timestamp = modify_timezone(example_date.to_pydatetime(), to_timezone="Europe/Berlin") assert modified_timestamp.utcoffset() == datetime.timedelta(seconds=3600) From 5c88cef8899d777790f638313500874857becd57 Mon Sep 17 00:00:00 2001 From: jenny kupzigSCRIPT Date: Tue, 23 Jun 2026 13:04:19 +0000 Subject: [PATCH 7/7] update documentation --- docs/searchindex.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/searchindex.js b/docs/searchindex.js index 989f61f..7ee22af 100644 --- a/docs/searchindex.js +++ b/docs/searchindex.js @@ -1 +1 @@ -Search.setIndex({"alltitles":{"Explanation":[[0,"explanation"]],"First steps":[[0,null]],"Functions":[[1,"functions"]],"Further Information":[[1,"further-information"]],"How to get metadata with hdhelpers?":[[0,"how-to-get-metadata-with-hdhelpers"]],"How to use hdhelpers for plotting? (tbd)":[[0,"how-to-use-hdhelpers-for-plotting-tbd"]],"Introduction":[[1,"introduction"]],"exceptions":[[1,"module-hdhelpers.exceptions"]],"hdhelpers":[[1,null]],"helpers":[[1,"module-hdhelpers.helpers"]],"metadata":[[1,"module-hdhelpers.metadata"]]},"docnames":["first_steps","index"],"envversion":{"sphinx":66,"sphinx.domains.c":3,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":9,"sphinx.domains.index":1,"sphinx.domains.javascript":3,"sphinx.domains.math":2,"sphinx.domains.python":4,"sphinx.domains.rst":2,"sphinx.domains.std":2},"filenames":["first_steps.rst","index.rst"],"indexentries":{"get_display_names() (in module hdhelpers.metadata)":[[1,"hdhelpers.metadata.get_display_names",false]],"get_measurements() (in module hdhelpers.metadata)":[[1,"hdhelpers.metadata.get_measurements",false]],"get_metric_info() (in module hdhelpers.metadata)":[[1,"hdhelpers.metadata.get_metric_info",false]],"get_names() (in module hdhelpers.metadata)":[[1,"hdhelpers.metadata.get_names",false]],"get_queried_interval() (in module hdhelpers.metadata)":[[1,"hdhelpers.metadata.get_queried_interval",false]],"get_series_display_name() (in module hdhelpers.metadata)":[[1,"hdhelpers.metadata.get_series_display_name",false]],"get_series_info() (in module hdhelpers.metadata)":[[1,"hdhelpers.metadata.get_series_info",false]],"get_series_measurement() (in module hdhelpers.metadata)":[[1,"hdhelpers.metadata.get_series_measurement",false]],"get_series_name() (in module hdhelpers.metadata)":[[1,"hdhelpers.metadata.get_series_name",false]],"get_series_short_display_name() (in module hdhelpers.metadata)":[[1,"hdhelpers.metadata.get_series_short_display_name",false]],"get_series_unit() (in module hdhelpers.metadata)":[[1,"hdhelpers.metadata.get_series_unit",false]],"get_short_display_names() (in module hdhelpers.metadata)":[[1,"hdhelpers.metadata.get_short_display_names",false]],"get_units() (in module hdhelpers.metadata)":[[1,"hdhelpers.metadata.get_units",false]],"hdhelpers.exceptions":[[1,"module-hdhelpers.exceptions",false]],"hdhelpers.helpers":[[1,"module-hdhelpers.helpers",false]],"hdhelpers.metadata":[[1,"module-hdhelpers.metadata",false]],"helperexception":[[1,"hdhelpers.exceptions.HelperException",false]],"insufficientplottingdata":[[1,"hdhelpers.exceptions.InsufficientPlottingData",false]],"modify_timezone() (in module hdhelpers.helpers)":[[1,"hdhelpers.helpers.modify_timezone",false]],"module":[[1,"module-hdhelpers.exceptions",false],[1,"module-hdhelpers.helpers",false],[1,"module-hdhelpers.metadata",false]]},"objects":{"hdhelpers":[[1,0,0,"-","exceptions"],[1,0,0,"-","helpers"],[1,0,0,"-","metadata"]],"hdhelpers.exceptions":[[1,1,1,"","HelperException"],[1,1,1,"","InsufficientPlottingData"]],"hdhelpers.helpers":[[1,2,1,"","modify_timezone"]],"hdhelpers.metadata":[[1,2,1,"","get_display_names"],[1,2,1,"","get_measurements"],[1,2,1,"","get_metric_info"],[1,2,1,"","get_names"],[1,2,1,"","get_queried_interval"],[1,2,1,"","get_series_display_name"],[1,2,1,"","get_series_info"],[1,2,1,"","get_series_measurement"],[1,2,1,"","get_series_name"],[1,2,1,"","get_series_short_display_name"],[1,2,1,"","get_series_unit"],[1,2,1,"","get_short_display_names"],[1,2,1,"","get_units"]]},"objnames":{"0":["py","module","Python module"],"1":["py","exception","Python exception"],"2":["py","function","Python function"]},"objtypes":{"0":"py:module","1":"py:exception","2":"py:function"},"terms":{"000z":0,"00z":1,"01t01":1,"01t08":0,"05t13":1,"06t13":1,"5s":0,"A":1,"All":0,"As":[],"DO":0,"For":[0,1],"How":1,"If":1,"In":[0,1],"It":[0,1],"NOT":0,"Our":0,"That":0,"The":0,"Then":[],"This":[0,1],"To":0,"We":0,"With":0,"__data__":0,"__hd_wrapped_data_object__":0,"__metadata__":0,"abov":0,"abstract":1,"access":1,"accord":0,"activ":0,"add_config_set":[],"adequ":1,"adit":1,"adjust":1,"all_timezon":1,"allow":1,"also":0,"ani":[0,1],"anoth":1,"appli":0,"applic":1,"arbitrari":1,"arg":1,"associ":1,"attr":1,"autoexpand":[],"avail":1,"awar":0,"axes_label_color":[],"axi":0,"b":[],"background":[],"background_color":0,"bar":[],"base":1,"becaus":0,"behaviour":[0,1],"berlin":1,"bool":1,"boolean":1,"by_metr":1,"c":1,"call":[],"can":[0,1],"case":[0,1],"certain":1,"chosen":0,"circl":[],"class":1,"cm":0,"code":[0,1],"collect":1,"color":0,"colorway":[],"column":1,"column_nam":1,"communic":0,"compli":1,"compon":[0,1],"concret":1,"configur":0,"contain":[0,1],"context":[0,1],"contrast":1,"control":[0,1],"convent":1,"convert":[0,1],"convert_index":1,"convey":0,"correct":[],"correspond":[0,1],"current":0,"custom":1,"cut":0,"danger":0,"data":[0,1],"datafram":1,"dataset_metadata":1,"date":1,"datetim":1,"datetime_tick_format":[],"def":0,"default":[0,1],"default_titl":0,"default_unit":0,"defaultdict":1,"defin":[0,1],"deprec":[],"design":[0,1],"detail":0,"determin":0,"dict":[0,1],"dictionari":1,"dimens":1,"direct":0,"display":1,"display_nam":1,"display_name_of_metric1":1,"display_name_of_seri":1,"displaylogo":[],"displaymodebar":[],"doe":0,"e":1,"eas":1,"edg":0,"edit":0,"empti":1,"end":[0,1],"entri":1,"entrypoint":0,"equival":1,"error":1,"error_cod":1,"error_color":0,"especi":1,"europ":1,"ever":[],"exampl":[0,1],"expect":1,"explan":[],"explicit":0,"external_first":1,"external_id":1,"external_second":1,"extra_inform":1,"extract":1,"fals":[],"fig":0,"figur":0,"find":[],"first":1,"fit":[],"flag":0,"follow":[0,1],"format":1,"four":0,"frontend":1,"full_titl":0,"function":0,"g":1,"generat":1,"german":1,"get":1,"get_and_pad_start_and_end_timestamp":0,"get_colors_from_plot_target_set":0,"get_display_nam":1,"get_measur":1,"get_metric_info":1,"get_nam":1,"get_queried_interv":1,"get_series_display_nam":1,"get_series_info":1,"get_series_measur":1,"get_series_nam":[0,1],"get_series_short_display_nam":1,"get_series_unit":[0,1],"get_short_display_nam":1,"get_unit":1,"get_value_dimension_info":1,"get_y_axis_label":0,"given":1,"global":[0,1],"glom":1,"go":0,"goal":0,"graph_object":0,"grid":[],"grid_color":[],"half":0,"handl":1,"happen":1,"hardwir":0,"helper":0,"helperexcept":1,"hetida":[0,1],"hide":0,"hide_legend":[],"hide_x_titl":[],"higher":[],"id":1,"import":[0,1],"includ":[0,1],"index":[0,1],"info":1,"info_color":0,"inform":0,"input":0,"instal":1,"instead":1,"insuffici":1,"insufficientplottingdata":1,"int":1,"integr":1,"intend":0,"interpret":1,"interv":[0,1],"iso":1,"isoformat":1,"json":[0,1],"just":0,"keep":0,"key":1,"kwarg":1,"l":[],"label":0,"last":[],"layout":[],"leav":[],"legend":[],"let":[0,1],"level":0,"like":[0,1],"limit":0,"line":0,"line_color":[],"list":1,"local":[],"logo":[],"look":0,"m":1,"magnitud":0,"main":0,"make":0,"margin":[],"marker":0,"marker_symbol":[],"match":[],"meaning":1,"measur":1,"mention":0,"messag":[0,1],"method":1,"metric":[0,1],"metric1":1,"metric2":1,"metric3":1,"metric_info":1,"metric_key":1,"might":0,"minim":[],"miss":0,"mode":[],"modifi":1,"modified_timezon":1,"modify_timezon":[0,1],"modifyng":[],"mtsf":1,"multitsfram":1,"naiv":0,"name":[0,1],"name_of_metric1":1,"name_of_metric2":1,"name_of_series_1":1,"name_of_series_2":1,"necessari":[],"next":[],"none":1,"normal":[],"note":[0,1],"now":[],"object":[0,1],"object_to_convert":1,"one":1,"onli":1,"oper":1,"option":[0,1],"order":0,"otherwis":0,"output":1,"packag":1,"pad":[],"panda":1,"paper":[],"paper_bgcolor":[],"paramet":[0,1],"pars":0,"pass":0,"pd":1,"place":[],"platform":1,"plot":1,"plot_bgcolor":[],"plot_target_local":[],"plot_target_set":[0,1],"plot_target_styl":0,"plot_target_timezon":0,"plotly_fig_to_json_dict":0,"point":0,"possibl":[0,1],"potenti":0,"precis":0,"present":1,"prioriti":[],"properti":0,"provid":[0,1],"provis":0,"purpos":0,"pytz":1,"queri":1,"r":[],"rais":1,"rang":0,"rare":[],"re":1,"reason":0,"ref_interval_end_timestamp":[0,1],"ref_interval_start_timestamp":[0,1],"reflect":0,"remov":[],"remove_plotly_bar":[],"remove_plotly_icon":[],"repres":0,"request":[0,1],"result":1,"retriev":[0,1],"return":[0,1],"rgba":[],"ruhr":1,"run":[],"s":[0,1],"said":[],"say":0,"scatter":0,"scheme":1,"second":1,"see":[0,1],"sensibl":1,"seri":[0,1],"serial":[0,1],"set":[0,1],"short":1,"short_display_nam":[0,1],"short_display_name_of_metric1":1,"short_display_name_of_seri":1,"show":1,"showlegend":[],"simple_whit":[],"sinc":[0,1],"singl":1,"single_metric_dataset_metadata":0,"single_metric_metadata":[0,1],"size":[],"soon":[],"spec":1,"specif":0,"specifi":1,"standard":[0,1],"start":[0,1],"start_pad":0,"status":0,"status_color":0,"step":1,"str":1,"streamlin":1,"string":1,"structured_metadata":[0,1],"style":[0,1],"success_color":0,"sure":0,"surpress":1,"t":[],"tbd":1,"temp":1,"temperatur":1,"templat":[],"test":1,"tickformat":[],"time":[0,1],"timeseri":[0,1],"timestamp":[0,1],"timezon":[0,1],"titl":0,"title_standoff":[],"title_text":[],"to_datetim":1,"to_timezon":1,"toggleabl":1,"total_second":1,"trace":[],"transform":1,"tri":1,"true":1,"tupl":1,"turn":0,"type":1,"typeerror":1,"tz_convert":1,"underlying":1,"unit":[0,1],"unless":[],"updat":[],"update_layout":0,"update_x_axes_tickformat":[],"update_xax":0,"use":1,"use_default_standoff":[],"use_minimum_margin":[],"use_muplot_axes_color":[],"use_muplot_grid":[],"use_muplot_line_and_mark":[],"use_platform_background":[],"use_platform_colorway":[],"use_platform_default":[],"use_simple_white_templ":[],"utc":0,"utcoffset":1,"valu":[0,1],"value_dim_1":1,"value_dim_info":1,"value_dimens":1,"value_name_of_seri":1,"valueerror":1,"vari":1,"variabl":[0,1],"via":1,"visibl":[],"want":0,"warn_color":0,"water":0,"way":[0,1],"well":1,"whether":1,"width":[],"will":0,"without":[],"write":1,"wwe":[],"x":0,"xax":[],"y":0,"yax":[],"yaxis_titl":0,"\u00b5plot":[]},"titles":["First steps","hdhelpers"],"titleterms":{"Further":1,"How":0,"except":1,"explan":0,"first":0,"function":1,"get":0,"hdhelper":[0,1],"helper":1,"inform":1,"introduct":1,"metadata":[0,1],"plot":0,"step":0,"tbd":0,"use":0}}) \ No newline at end of file +Search.setIndex({"alltitles":{"Explanation":[[0,"explanation"]],"First steps":[[0,null]],"Functions":[[1,"functions"]],"Further Information":[[1,"further-information"]],"How to get metadata with hdhelpers?":[[0,"how-to-get-metadata-with-hdhelpers"]],"How to use hdhelpers for plotting? (tbd)":[[0,"how-to-use-hdhelpers-for-plotting-tbd"]],"Introduction":[[1,"introduction"]],"exceptions":[[1,"module-hdhelpers.exceptions"]],"hdhelpers":[[1,null]],"helpers":[[1,"module-hdhelpers.helpers"]],"metadata":[[1,"module-hdhelpers.metadata"]]},"docnames":["first_steps","index"],"envversion":{"sphinx":66,"sphinx.domains.c":3,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":9,"sphinx.domains.index":1,"sphinx.domains.javascript":3,"sphinx.domains.math":2,"sphinx.domains.python":4,"sphinx.domains.rst":2,"sphinx.domains.std":2},"filenames":["first_steps.rst","index.rst"],"indexentries":{},"objects":{"hdhelpers":[[1,0,0,"-","exceptions"],[1,0,0,"-","helpers"],[1,0,0,"-","metadata"]],"hdhelpers.exceptions":[[1,1,1,"","HelperException"],[1,1,1,"","InsufficientPlottingData"]],"hdhelpers.helpers":[[1,2,1,"","modify_timezone"]],"hdhelpers.metadata":[[1,2,1,"","get_display_names"],[1,2,1,"","get_measurements"],[1,2,1,"","get_metric_info"],[1,2,1,"","get_names"],[1,2,1,"","get_queried_interval"],[1,2,1,"","get_series_display_name"],[1,2,1,"","get_series_info"],[1,2,1,"","get_series_measurement"],[1,2,1,"","get_series_name"],[1,2,1,"","get_series_short_display_name"],[1,2,1,"","get_series_unit"],[1,2,1,"","get_short_display_names"],[1,2,1,"","get_units"]]},"objnames":{"0":["py","module","Python module"],"1":["py","exception","Python exception"],"2":["py","function","Python function"]},"objtypes":{"0":"py:module","1":"py:exception","2":"py:function"},"terms":{"000z":0,"00z":1,"01t01":1,"01t08":0,"05t13":1,"06t13":1,"5s":0,"A":1,"All":0,"As":[],"DO":0,"For":[0,1],"How":1,"If":1,"In":[0,1],"It":[0,1],"NOT":0,"Our":0,"That":0,"The":0,"Then":[],"This":[0,1],"To":0,"We":0,"With":0,"__data__":0,"__hd_wrapped_data_object__":0,"__metadata__":0,"abov":0,"abstract":1,"access":1,"accord":0,"activ":0,"add_config_set":[],"adequ":1,"adit":1,"adjust":1,"all_timezon":1,"allow":1,"also":0,"ani":[0,1],"anoth":1,"appli":0,"applic":1,"arbitrari":1,"arg":1,"associ":1,"attr":1,"autoexpand":[],"avail":1,"awar":0,"axes_label_color":[],"axi":0,"b":[],"background":[],"background_color":0,"bar":[],"base":1,"becaus":0,"behaviour":[0,1],"berlin":1,"bool":1,"boolean":1,"by_metr":1,"c":1,"call":[],"can":[0,1],"case":[0,1],"certain":1,"chosen":0,"circl":[],"class":1,"cm":0,"code":[0,1],"collect":1,"color":0,"colorway":[],"column":1,"column_nam":1,"communic":0,"compli":1,"compon":[0,1],"concret":1,"configur":0,"contain":[0,1],"context":[0,1],"contrast":1,"control":[0,1],"convent":1,"convert":[0,1],"convert_index":1,"convey":0,"correct":[],"correspond":[0,1],"current":0,"custom":1,"cut":0,"danger":0,"data":[0,1],"datafram":1,"dataset_metadata":1,"date":1,"datetim":1,"datetime_tick_format":[],"def":0,"default":[0,1],"default_titl":0,"default_unit":0,"defaultdict":1,"defin":[0,1],"deprec":[],"design":[0,1],"detail":0,"determin":0,"dict":[0,1],"dictionari":1,"dimens":1,"direct":0,"display":1,"display_nam":1,"display_name_of_metric1":1,"display_name_of_seri":1,"displaylogo":[],"displaymodebar":[],"doe":0,"e":1,"eas":1,"edg":0,"edit":0,"empti":1,"end":[0,1],"entri":1,"entrypoint":0,"equival":1,"error":1,"error_cod":1,"error_color":0,"especi":1,"europ":1,"ever":[],"exampl":[0,1],"expect":1,"explan":[],"explicit":0,"external_first":1,"external_id":1,"external_second":1,"extra_inform":1,"extract":1,"fals":[],"fig":0,"figur":0,"find":[],"first":1,"fit":[],"flag":0,"follow":[0,1],"format":1,"four":0,"frontend":1,"full_titl":0,"function":0,"g":1,"generat":1,"german":1,"get":1,"get_and_pad_start_and_end_timestamp":0,"get_colors_from_plot_target_set":0,"get_display_nam":1,"get_measur":1,"get_metric_info":1,"get_nam":1,"get_queried_interv":1,"get_series_display_nam":1,"get_series_info":1,"get_series_measur":1,"get_series_nam":[0,1],"get_series_short_display_nam":1,"get_series_unit":[0,1],"get_short_display_nam":1,"get_unit":1,"get_value_dimension_info":1,"get_y_axis_label":0,"given":1,"global":[0,1],"glom":1,"go":0,"goal":0,"graph_object":0,"grid":[],"grid_color":[],"half":0,"handl":1,"happen":1,"hardwir":0,"helper":0,"helperexcept":1,"hetida":[0,1],"hide":0,"hide_legend":[],"hide_x_titl":[],"higher":[],"id":1,"import":[0,1],"includ":[0,1],"index":[0,1],"info":1,"info_color":0,"inform":0,"input":0,"instal":1,"instead":1,"insuffici":1,"insufficientplottingdata":1,"int":1,"integr":1,"intend":0,"interpret":1,"interv":[0,1],"iso":1,"isoformat":1,"json":[0,1],"just":0,"keep":0,"key":1,"kwarg":1,"l":[],"label":0,"last":[],"layout":[],"leav":[],"legend":[],"let":[0,1],"level":0,"like":[0,1],"limit":0,"line":0,"line_color":[],"list":1,"local":[],"logo":[],"look":0,"m":1,"magnitud":0,"main":0,"make":0,"margin":[],"marker":0,"marker_symbol":[],"match":[],"meaning":1,"measur":1,"mention":0,"messag":[0,1],"method":1,"metric":[0,1],"metric1":1,"metric2":1,"metric3":1,"metric_info":1,"metric_key":1,"might":0,"minim":[],"miss":0,"mode":[],"modifi":1,"modified_timezon":1,"modify_timezon":[0,1],"modifyng":[],"mtsf":1,"multitsfram":1,"naiv":0,"name":[0,1],"name_of_metric1":1,"name_of_metric2":1,"name_of_series_1":1,"name_of_series_2":1,"necessari":[],"next":[],"none":1,"normal":[],"note":[0,1],"now":[],"object":[0,1],"object_to_convert":1,"one":1,"onli":1,"oper":1,"option":[0,1],"order":0,"otherwis":0,"output":1,"packag":1,"pad":[],"panda":1,"paper":[],"paper_bgcolor":[],"paramet":[0,1],"pars":0,"pass":0,"pd":1,"place":[],"platform":1,"plot":1,"plot_bgcolor":[],"plot_target_local":[],"plot_target_set":[0,1],"plot_target_styl":0,"plot_target_timezon":0,"plotly_fig_to_json_dict":0,"point":0,"possibl":[0,1],"potenti":0,"precis":0,"present":1,"prioriti":[],"properti":0,"provid":[0,1],"provis":0,"purpos":0,"pytz":1,"queri":1,"r":[],"rais":1,"rang":0,"rare":[],"re":1,"reason":0,"ref_interval_end_timestamp":[0,1],"ref_interval_start_timestamp":[0,1],"reflect":0,"remov":[],"remove_plotly_bar":[],"remove_plotly_icon":[],"repres":0,"request":[0,1],"result":1,"retriev":[0,1],"return":[0,1],"rgba":[],"ruhr":1,"run":[],"s":[0,1],"said":[],"say":0,"scatter":0,"scheme":1,"second":1,"see":[0,1],"sensibl":1,"seri":[0,1],"serial":[0,1],"set":[0,1],"short":1,"short_display_nam":[0,1],"short_display_name_of_metric1":1,"short_display_name_of_seri":1,"show":1,"showlegend":[],"simple_whit":[],"sinc":[0,1],"singl":1,"single_metric_dataset_metadata":0,"single_metric_metadata":[0,1],"size":[],"soon":[],"spec":1,"specif":0,"specifi":1,"standard":[0,1],"start":[0,1],"start_pad":0,"status":0,"status_color":0,"step":1,"str":1,"streamlin":1,"string":1,"structured_metadata":[0,1],"style":[0,1],"success_color":0,"sure":0,"surpress":1,"t":[],"tbd":1,"temp":1,"temperatur":1,"templat":[],"test":1,"tickformat":[],"time":[0,1],"timeseri":[0,1],"timestamp":[0,1],"timezon":[0,1],"titl":0,"title_standoff":[],"title_text":[],"to_datetim":1,"to_timezon":1,"toggleabl":1,"total_second":1,"trace":[],"transform":1,"tri":1,"true":1,"tupl":1,"turn":0,"type":1,"typeerror":1,"tz_convert":1,"underlying":1,"unit":[0,1],"unless":[],"updat":[],"update_layout":0,"update_x_axes_tickformat":[],"update_xax":0,"use":1,"use_default_standoff":[],"use_minimum_margin":[],"use_muplot_axes_color":[],"use_muplot_grid":[],"use_muplot_line_and_mark":[],"use_platform_background":[],"use_platform_colorway":[],"use_platform_default":[],"use_simple_white_templ":[],"utc":0,"utcoffset":1,"valu":[0,1],"value_dim_1":1,"value_dim_info":1,"value_dimens":1,"value_name_of_seri":1,"valueerror":1,"vari":1,"variabl":[0,1],"via":1,"visibl":[],"want":0,"warn_color":0,"water":0,"way":[0,1],"well":1,"whether":1,"width":[],"will":0,"without":[],"write":1,"wwe":[],"x":0,"xax":[],"y":0,"yax":[],"yaxis_titl":0,"\u00b5plot":[]},"titles":["First steps","hdhelpers"],"titleterms":{"Further":1,"How":0,"except":1,"explan":0,"first":0,"function":1,"get":0,"hdhelper":[0,1],"helper":1,"inform":1,"introduct":1,"metadata":[0,1],"plot":0,"step":0,"tbd":0,"use":0}}) \ No newline at end of file