From 2b593d12212f1a2a4f5541bc9500cdaf92effc7c Mon Sep 17 00:00:00 2001 From: vjterpstra Date: Thu, 21 Apr 2022 22:30:44 -0400 Subject: [PATCH 1/6] Starting v0.5.4.4b0 --- CHANGELOG.md | 3 +++ dse_do_utils/version.py | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 78b3659..b1d1394 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,9 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [Unreleased]## [0.5.4.4b0] +### Changed + ## [0.5.4.3] - 2022-04-21 ### Changed - Fixed indentation bug in domodeldeployer diff --git a/dse_do_utils/version.py b/dse_do_utils/version.py index 5825383..8f06430 100644 --- a/dse_do_utils/version.py +++ b/dse_do_utils/version.py @@ -9,4 +9,4 @@ See https://stackoverflow.com/questions/458550/standard-way-to-embed-version-into-python-package """ -__version__ = "0.5.4.3" +__version__ = "0.5.4.4b0" From 02c403c7404fd97211e2450aad64a66b40c1aa7c Mon Sep 17 00:00:00 2001 From: vjterpstra Date: Tue, 26 Apr 2022 16:41:53 -0400 Subject: [PATCH 2/6] - ScenarioManager.load_data_from_zip_csv_s: loading input data from a zipped archive of csv files - ScenarioManager.write_data_to_zip_csv_s: writing input/output data as a zipped archive of csv files ### Removed - ScenarioManager.write_data_to_csv_s no longer adds files as data assets --- CHANGELOG.md | 7 +++- dse_do_utils/scenariomanager.py | 71 ++++++++++++++++++++++++++++----- dse_do_utils/utilities.py | 16 ++++++++ 3 files changed, 83 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b1d1394..71c4ba1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased]## [0.5.4.4b0] ### Changed - +### Added +- ScenarioManager.load_data_from_zip_csv_s: loading input data from a zipped archive of csv files +- ScenarioManager.write_data_to_zip_csv_s: writing input/output data as a zipped archive of csv files +### Removed +- ScenarioManager.write_data_to_csv_s no longer adds files as data assets +- ## [0.5.4.3] - 2022-04-21 ### Changed - Fixed indentation bug in domodeldeployer diff --git a/dse_do_utils/scenariomanager.py b/dse_do_utils/scenariomanager.py index d7db2ab..326f7b9 100644 --- a/dse_do_utils/scenariomanager.py +++ b/dse_do_utils/scenariomanager.py @@ -10,12 +10,15 @@ import glob import pathlib import zipfile +import tempfile import docplex import pandas as pd from typing import Sequence, List, Dict, Tuple, Optional # Typing aliases +from dse_do_utils.utilities import convert_size + Inputs = Dict[str, pd.DataFrame] Outputs = Dict[str, pd.DataFrame] InputsOutputs = Tuple[Inputs, Outputs] @@ -920,21 +923,13 @@ def write_data_to_csv_s(csv_directory: str, file_path = os.path.join(csv_directory, table_name + ".csv") print("Writing {}".format(file_path)) df.to_csv(file_path, index=False) - ScenarioManager.add_file_as_data_asset_s(file_path, table_name + ".csv", platform=platform) - # if platform == Platform.CPD40: - # ScenarioManager.add_data_file_using_ws_lib_s(file_path) - # elif platform in [Platform.CPD25, Platform.CPDaaS]: - # ScenarioManager.add_data_file_to_project_s(file_path, table_name + ".csv") + # ScenarioManager.add_file_as_data_asset_s(file_path, table_name + ".csv", platform=platform) if outputs is not None: for table_name, df in outputs.items(): file_path = os.path.join(csv_directory, table_name + ".csv") print("Writing {}".format(file_path)) df.to_csv(file_path, index=False) - ScenarioManager.add_file_as_data_asset_s(file_path, table_name + ".csv", platform=platform) - # if platform == Platform.CPD40: - # ScenarioManager.add_data_file_using_ws_lib_s(file_path) - # elif platform in [Platform.CPD25, Platform.CPDaaS]: - # ScenarioManager.add_data_file_to_project_s(file_path, table_name + ".csv") + # ScenarioManager.add_file_as_data_asset_s(file_path, table_name + ".csv", platform=platform) # ----------------------------------------------------------------- # Load data from parquet @@ -1019,6 +1014,62 @@ def write_data_to_parquet_s(directory: str, print("Writing output {}".format(file_path)) df.to_parquet(file_path, index=False) + # ----------------------------------------------------------------- + # Read from / write to zipped set of csv files + # ----------------------------------------------------------------- + @staticmethod + def load_data_from_zip_csv_s(zip_file_path: str, file_size_limit: int = None, **kwargs) -> Dict[str, pd.DataFrame]: + """Read data from a zip file with .csv files. + + Args: + zip_file_path (str): the full path of a zip file containing one or more .csv files. + file_size_limit (int): maximum file size in bytes. None implies no limit. + **kwargs: Set of optional arguments for the pd.read_csv() function + + Returns: + data: dict of DataFrames. Keys are the .csv file names. + """ + inputs = {} + + with zipfile.ZipFile(zip_file_path, "r") as f: + for csv_file in f.infolist(): + if pathlib.Path(csv_file.filename).suffix.lower() == '.csv': + table_name = pathlib.Path(csv_file.filename).stem + # print(f"Reading table = {table_name}. File-size = {convert_size(csv_file.file_size)}") + if file_size_limit is None or csv_file.file_size <= file_size_limit: + df = pd.read_csv(f.open(csv_file.filename), **kwargs) + inputs[table_name] = df + #print(f"Read {table_name}: {df.shape[0]} rows and {df.shape[1]} columns") + else: + pass + #print(f"Read {table_name}: skipped") + + return inputs + + @staticmethod + def write_data_to_zip_csv_s(zip_file_path: str, inputs: Inputs = {}, outputs: Outputs = {}, **kwargs): + """Write data as a zip file with .csv files. + inputs and outputs dictionaries are merged and written in same zip. + + Args: + zip_file_path (str): the full path of a zip file. + inputs: dict of input DataFrames + outputs: dict of input DataFrames + **kwargs: Set of optional arguments for the df.to_csv() function + + Returns: + None + """ + dfs = {**inputs, **outputs} + with zipfile.ZipFile(zip_file_path, 'w') as zipMe: + with tempfile.TemporaryDirectory() as tmpdir: + for table_name, df in dfs.items(): + filename = table_name + ".csv" + file_path = os.path.join(tmpdir, filename) + print(f"Write table {table_name}, rows = {df.shape[0]} as {file_path}") + df.to_csv(file_path, index=False, **kwargs) + zipMe.write(file_path, arcname=filename, compress_type=zipfile.ZIP_DEFLATED) + # ----------------------------------------------------------------- # Utils # ----------------------------------------------------------------- diff --git a/dse_do_utils/utilities.py b/dse_do_utils/utilities.py index ef88405..f9ff147 100644 --- a/dse_do_utils/utilities.py +++ b/dse_do_utils/utilities.py @@ -68,4 +68,20 @@ def list_file_hierarchy(startpath: str) -> None: print('{}{}'.format(subindent, f)) +def convert_size(size_bytes: int): + """Returns string describing file size. + + Args: + size_bytes (int): size if file in bytes + + From https://stackoverflow.com/questions/5194057/better-way-to-convert-file-sizes-in-python + """ + import math + if size_bytes == 0: + return "0B" + size_name = ("B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB") + i = int(math.floor(math.log(size_bytes, 1024))) + p = math.pow(1024, i) + s = round(size_bytes / p, 2) + return "%s %s" % (s, size_name[i]) From 37c759e8f441a7a2a4c59ac921964303808f2f65 Mon Sep 17 00:00:00 2001 From: vjterpstra Date: Tue, 26 Apr 2022 16:42:23 -0400 Subject: [PATCH 3/6] cleanup --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 71c4ba1..95b7887 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - ScenarioManager.write_data_to_zip_csv_s: writing input/output data as a zipped archive of csv files ### Removed - ScenarioManager.write_data_to_csv_s no longer adds files as data assets -- + ## [0.5.4.3] - 2022-04-21 ### Changed - Fixed indentation bug in domodeldeployer From ba5d20fe70e074fea6b749f2633b487db114d613 Mon Sep 17 00:00:00 2001 From: vjterpstra Date: Tue, 26 Apr 2022 16:59:51 -0400 Subject: [PATCH 4/6] write_data_to_zip_csv_s handling None values --- dse_do_utils/scenariomanager.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/dse_do_utils/scenariomanager.py b/dse_do_utils/scenariomanager.py index 326f7b9..6ff0e1f 100644 --- a/dse_do_utils/scenariomanager.py +++ b/dse_do_utils/scenariomanager.py @@ -1047,7 +1047,7 @@ def load_data_from_zip_csv_s(zip_file_path: str, file_size_limit: int = None, ** return inputs @staticmethod - def write_data_to_zip_csv_s(zip_file_path: str, inputs: Inputs = {}, outputs: Outputs = {}, **kwargs): + def write_data_to_zip_csv_s(zip_file_path: str, inputs: Inputs = None, outputs: Outputs = None, **kwargs): """Write data as a zip file with .csv files. inputs and outputs dictionaries are merged and written in same zip. @@ -1060,13 +1060,17 @@ def write_data_to_zip_csv_s(zip_file_path: str, inputs: Inputs = {}, outputs: Ou Returns: None """ - dfs = {**inputs, **outputs} + dfs = {} + if inputs is not None: + dfs = {**dfs, **inputs} + if outputs is not None: + dfs = {**dfs, **outputs} with zipfile.ZipFile(zip_file_path, 'w') as zipMe: with tempfile.TemporaryDirectory() as tmpdir: for table_name, df in dfs.items(): filename = table_name + ".csv" file_path = os.path.join(tmpdir, filename) - print(f"Write table {table_name}, rows = {df.shape[0]} as {file_path}") + # print(f"Write table {table_name}, rows = {df.shape[0]} as {file_path}") df.to_csv(file_path, index=False, **kwargs) zipMe.write(file_path, arcname=filename, compress_type=zipfile.ZIP_DEFLATED) From 25b5fded0a83109a1257b369c91c4492168cc548 Mon Sep 17 00:00:00 2001 From: vjterpstra Date: Tue, 26 Apr 2022 17:26:08 -0400 Subject: [PATCH 5/6] Added default value to parameter read warning --- dse_do_utils/datamanager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dse_do_utils/datamanager.py b/dse_do_utils/datamanager.py index 3dd9f0a..1bc9472 100644 --- a/dse_do_utils/datamanager.py +++ b/dse_do_utils/datamanager.py @@ -181,7 +181,7 @@ def get_parameter_value(params, param_name: str, param_type: Optional[str] = Non else: param = raw_param else: - print('Warning: {} not in Parameters'.format(param_name)) + print(f'Warning: {param_name} not in Parameters. Using default value = {default_value}') # If datetime, the default value can be a string import six # For Python 2 and 3 compatibility of testing string instance if param_type == 'datetime' and isinstance(default_value, six.string_types): From e57e9d55b09f91d1e5f3de1983a3df964b48519e Mon Sep 17 00:00:00 2001 From: vjterpstra Date: Thu, 28 Apr 2022 18:43:06 -0400 Subject: [PATCH 6/6] Release 0.5.4.4 --- CHANGELOG.md | 4 +- docs/doc_build/doctrees/dse_do_utils.doctree | Bin 1095940 -> 1117836 bytes docs/doc_build/doctrees/environment.pickle | Bin 424179 -> 427874 bytes docs/doc_build/html/.buildinfo | 2 +- .../doc_build/html/_modules/dse_do_utils.html | 6 +- .../_modules/dse_do_utils/cpd25utilities.html | 6 +- .../_modules/dse_do_utils/datamanager.html | 8 +- .../dse_do_utils/deployeddomodel.html | 6 +- .../dse_do_utils/deployeddomodelcpd21.html | 6 +- .../dse_do_utils/domodeldeployer.html | 6 +- .../dse_do_utils/domodelexporter.html | 6 +- .../_modules/dse_do_utils/mapmanager.html | 6 +- .../dse_do_utils/multiscenariomanager.html | 6 +- .../dse_do_utils/optimizationengine.html | 6 +- .../_modules/dse_do_utils/plotlymanager.html | 6 +- .../dse_do_utils/scenariodbmanager.html | 6 +- .../dse_do_utils/scenariomanager.html | 83 +++++++++++++++--- .../_modules/dse_do_utils/scenariopicker.html | 6 +- .../html/_modules/dse_do_utils/utilities.html | 22 ++++- docs/doc_build/html/_modules/index.html | 6 +- docs/doc_build/html/_static/bizstyle.js | 2 +- .../html/_static/documentation_options.js | 2 +- docs/doc_build/html/dse_do_utils.html | 59 ++++++++++++- docs/doc_build/html/genindex.html | 20 +++-- docs/doc_build/html/index.html | 6 +- docs/doc_build/html/modules.html | 6 +- docs/doc_build/html/objects.inv | Bin 2522 -> 2541 bytes docs/doc_build/html/py-modindex.html | 6 +- docs/doc_build/html/readme_link.html | 6 +- docs/doc_build/html/search.html | 6 +- docs/doc_build/html/searchindex.js | 2 +- dse_do_utils/version.py | 2 +- 32 files changed, 223 insertions(+), 91 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 95b7887..9457a4a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,8 +4,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [Unreleased]## [0.5.4.4b0] +## [Unreleased]## [0.5.4.5b0] ### Changed + +## [0.5.4.4] - 2022-04-28 ### Added - ScenarioManager.load_data_from_zip_csv_s: loading input data from a zipped archive of csv files - ScenarioManager.write_data_to_zip_csv_s: writing input/output data as a zipped archive of csv files diff --git a/docs/doc_build/doctrees/dse_do_utils.doctree b/docs/doc_build/doctrees/dse_do_utils.doctree index 978251dd8373a97d1ef6d49260fe0b5dfa7aba3e..29b44f8a6379d8666e0509f3af467f0c338d9bbb 100644 GIT binary patch delta 23440 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 delta 30147 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 diff --git a/docs/doc_build/html/.buildinfo b/docs/doc_build/html/.buildinfo index 8bab9a6..f454eb1 100644 --- a/docs/doc_build/html/.buildinfo +++ b/docs/doc_build/html/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: a2fef2d4d97989a7a252359bf54f6f01 +config: f8f9929cad760595d068a901248ae903 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/doc_build/html/_modules/dse_do_utils.html b/docs/doc_build/html/_modules/dse_do_utils.html index 5ec0f7a..5e77e88 100644 --- a/docs/doc_build/html/_modules/dse_do_utils.html +++ b/docs/doc_build/html/_modules/dse_do_utils.html @@ -6,7 +6,7 @@ - dse_do_utils — DSE DO Utils 0.5.4.2 documentation + dse_do_utils — DSE DO Utils 0.5.4.4 documentation @@ -31,7 +31,7 @@

Navigation

  • modules |
  • - + @@ -169,7 +169,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/doc_build/html/_modules/dse_do_utils/cpd25utilities.html b/docs/doc_build/html/_modules/dse_do_utils/cpd25utilities.html index 0291296..2926153 100644 --- a/docs/doc_build/html/_modules/dse_do_utils/cpd25utilities.html +++ b/docs/doc_build/html/_modules/dse_do_utils/cpd25utilities.html @@ -6,7 +6,7 @@ - dse_do_utils.cpd25utilities — DSE DO Utils 0.5.4.2 documentation + dse_do_utils.cpd25utilities — DSE DO Utils 0.5.4.4 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + @@ -211,7 +211,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/doc_build/html/_modules/dse_do_utils/datamanager.html b/docs/doc_build/html/_modules/dse_do_utils/datamanager.html index fc5a882..7255597 100644 --- a/docs/doc_build/html/_modules/dse_do_utils/datamanager.html +++ b/docs/doc_build/html/_modules/dse_do_utils/datamanager.html @@ -6,7 +6,7 @@ - dse_do_utils.datamanager — DSE DO Utils 0.5.4.2 documentation + dse_do_utils.datamanager — DSE DO Utils 0.5.4.4 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + @@ -227,7 +227,7 @@

    Source code for dse_do_utils.datamanager

                 else:
                     param = raw_param
             else:
    -            print('Warning: {} not in Parameters'.format(param_name))
    +            print(f'Warning: {param_name} not in Parameters. Using default value = {default_value}')
                 # If datetime, the default value can be a string
                 import six  # For Python 2 and 3 compatibility of testing string instance
                 if param_type == 'datetime' and isinstance(default_value, six.string_types):
    @@ -456,7 +456,7 @@ 

    Navigation

  • modules |
  • - + diff --git a/docs/doc_build/html/_modules/dse_do_utils/deployeddomodel.html b/docs/doc_build/html/_modules/dse_do_utils/deployeddomodel.html index 339b87a..2fd123c 100644 --- a/docs/doc_build/html/_modules/dse_do_utils/deployeddomodel.html +++ b/docs/doc_build/html/_modules/dse_do_utils/deployeddomodel.html @@ -6,7 +6,7 @@ - dse_do_utils.deployeddomodel — DSE DO Utils 0.5.4.2 documentation + dse_do_utils.deployeddomodel — DSE DO Utils 0.5.4.4 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + @@ -325,7 +325,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/doc_build/html/_modules/dse_do_utils/deployeddomodelcpd21.html b/docs/doc_build/html/_modules/dse_do_utils/deployeddomodelcpd21.html index 7d2b21d..79c19b4 100644 --- a/docs/doc_build/html/_modules/dse_do_utils/deployeddomodelcpd21.html +++ b/docs/doc_build/html/_modules/dse_do_utils/deployeddomodelcpd21.html @@ -6,7 +6,7 @@ - dse_do_utils.deployeddomodelcpd21 — DSE DO Utils 0.5.4.2 documentation + dse_do_utils.deployeddomodelcpd21 — DSE DO Utils 0.5.4.4 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + @@ -737,7 +737,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/doc_build/html/_modules/dse_do_utils/domodeldeployer.html b/docs/doc_build/html/_modules/dse_do_utils/domodeldeployer.html index b5084a3..cb09f97 100644 --- a/docs/doc_build/html/_modules/dse_do_utils/domodeldeployer.html +++ b/docs/doc_build/html/_modules/dse_do_utils/domodeldeployer.html @@ -6,7 +6,7 @@ - dse_do_utils.domodeldeployer — DSE DO Utils 0.5.4.3 documentation + dse_do_utils.domodeldeployer — DSE DO Utils 0.5.4.4 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + @@ -452,7 +452,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/doc_build/html/_modules/dse_do_utils/domodelexporter.html b/docs/doc_build/html/_modules/dse_do_utils/domodelexporter.html index 2c9ae17..273af97 100644 --- a/docs/doc_build/html/_modules/dse_do_utils/domodelexporter.html +++ b/docs/doc_build/html/_modules/dse_do_utils/domodelexporter.html @@ -6,7 +6,7 @@ - dse_do_utils.domodelexporter — DSE DO Utils 0.5.4.2 documentation + dse_do_utils.domodelexporter — DSE DO Utils 0.5.4.4 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + @@ -342,7 +342,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/doc_build/html/_modules/dse_do_utils/mapmanager.html b/docs/doc_build/html/_modules/dse_do_utils/mapmanager.html index 499e0a3..742604e 100644 --- a/docs/doc_build/html/_modules/dse_do_utils/mapmanager.html +++ b/docs/doc_build/html/_modules/dse_do_utils/mapmanager.html @@ -6,7 +6,7 @@ - dse_do_utils.mapmanager — DSE DO Utils 0.5.4.3 documentation + dse_do_utils.mapmanager — DSE DO Utils 0.5.4.4 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + @@ -353,7 +353,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/doc_build/html/_modules/dse_do_utils/multiscenariomanager.html b/docs/doc_build/html/_modules/dse_do_utils/multiscenariomanager.html index b7316c1..7c3070e 100644 --- a/docs/doc_build/html/_modules/dse_do_utils/multiscenariomanager.html +++ b/docs/doc_build/html/_modules/dse_do_utils/multiscenariomanager.html @@ -6,7 +6,7 @@ - dse_do_utils.multiscenariomanager — DSE DO Utils 0.5.4.2 documentation + dse_do_utils.multiscenariomanager — DSE DO Utils 0.5.4.4 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + @@ -331,7 +331,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/doc_build/html/_modules/dse_do_utils/optimizationengine.html b/docs/doc_build/html/_modules/dse_do_utils/optimizationengine.html index 8270c7b..c4163b1 100644 --- a/docs/doc_build/html/_modules/dse_do_utils/optimizationengine.html +++ b/docs/doc_build/html/_modules/dse_do_utils/optimizationengine.html @@ -6,7 +6,7 @@ - dse_do_utils.optimizationengine — DSE DO Utils 0.5.4.3 documentation + dse_do_utils.optimizationengine — DSE DO Utils 0.5.4.4 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + @@ -350,7 +350,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/doc_build/html/_modules/dse_do_utils/plotlymanager.html b/docs/doc_build/html/_modules/dse_do_utils/plotlymanager.html index c89771e..1076f6a 100644 --- a/docs/doc_build/html/_modules/dse_do_utils/plotlymanager.html +++ b/docs/doc_build/html/_modules/dse_do_utils/plotlymanager.html @@ -6,7 +6,7 @@ - dse_do_utils.plotlymanager — DSE DO Utils 0.5.4.2 documentation + dse_do_utils.plotlymanager — DSE DO Utils 0.5.4.4 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + @@ -118,7 +118,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/doc_build/html/_modules/dse_do_utils/scenariodbmanager.html b/docs/doc_build/html/_modules/dse_do_utils/scenariodbmanager.html index b29800d..da33eae 100644 --- a/docs/doc_build/html/_modules/dse_do_utils/scenariodbmanager.html +++ b/docs/doc_build/html/_modules/dse_do_utils/scenariodbmanager.html @@ -6,7 +6,7 @@ - dse_do_utils.scenariodbmanager — DSE DO Utils 0.5.4.3 documentation + dse_do_utils.scenariodbmanager — DSE DO Utils 0.5.4.4 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + @@ -1722,7 +1722,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/doc_build/html/_modules/dse_do_utils/scenariomanager.html b/docs/doc_build/html/_modules/dse_do_utils/scenariomanager.html index ec4e11b..da2857b 100644 --- a/docs/doc_build/html/_modules/dse_do_utils/scenariomanager.html +++ b/docs/doc_build/html/_modules/dse_do_utils/scenariomanager.html @@ -6,7 +6,7 @@ - dse_do_utils.scenariomanager — DSE DO Utils 0.5.4.3 documentation + dse_do_utils.scenariomanager — DSE DO Utils 0.5.4.4 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + @@ -56,12 +56,15 @@

    Source code for dse_do_utils.scenariomanager

    import glob
     import pathlib
     import zipfile
    +import tempfile
     
     import docplex
     import pandas as pd
     from typing import Sequence, List, Dict, Tuple, Optional
     
     #  Typing aliases
    +from dse_do_utils.utilities import convert_size
    +
     Inputs = Dict[str, pd.DataFrame]
     Outputs = Dict[str, pd.DataFrame]
     InputsOutputs = Tuple[Inputs, Outputs]
    @@ -966,21 +969,13 @@ 

    Source code for dse_do_utils.scenariomanager

    file_path = os.path.join(csv_directory, table_name + ".csv")
                     print("Writing {}".format(file_path))
                     df.to_csv(file_path, index=False)
    -                ScenarioManager.add_file_as_data_asset_s(file_path, table_name + ".csv", platform=platform)
    -                # if platform == Platform.CPD40:
    -                #     ScenarioManager.add_data_file_using_ws_lib_s(file_path)
    -                # elif platform in [Platform.CPD25, Platform.CPDaaS]:
    -                #     ScenarioManager.add_data_file_to_project_s(file_path, table_name + ".csv")
    +                # ScenarioManager.add_file_as_data_asset_s(file_path, table_name + ".csv", platform=platform)
             if outputs is not None:
                 for table_name, df in outputs.items():
                     file_path = os.path.join(csv_directory, table_name + ".csv")
                     print("Writing {}".format(file_path))
    -                df.to_csv(file_path, index=False)
    -                ScenarioManager.add_file_as_data_asset_s(file_path, table_name + ".csv", platform=platform)
    - # if platform == Platform.CPD40: - # ScenarioManager.add_data_file_using_ws_lib_s(file_path) - # elif platform in [Platform.CPD25, Platform.CPDaaS]: - # ScenarioManager.add_data_file_to_project_s(file_path, table_name + ".csv") + df.to_csv(file_path, index=False)
    + # ScenarioManager.add_file_as_data_asset_s(file_path, table_name + ".csv", platform=platform) # ----------------------------------------------------------------- # Load data from parquet @@ -1065,6 +1060,66 @@

    Source code for dse_do_utils.scenariomanager

    print("Writing output {}".format(file_path))
                     df.to_parquet(file_path, index=False)
    + # ----------------------------------------------------------------- + # Read from / write to zipped set of csv files + # ----------------------------------------------------------------- +
    [docs] @staticmethod + def load_data_from_zip_csv_s(zip_file_path: str, file_size_limit: int = None, **kwargs) -> Dict[str, pd.DataFrame]: + """Read data from a zip file with .csv files. + + Args: + zip_file_path (str): the full path of a zip file containing one or more .csv files. + file_size_limit (int): maximum file size in bytes. None implies no limit. + **kwargs: Set of optional arguments for the pd.read_csv() function + + Returns: + data: dict of DataFrames. Keys are the .csv file names. + """ + inputs = {} + + with zipfile.ZipFile(zip_file_path, "r") as f: + for csv_file in f.infolist(): + if pathlib.Path(csv_file.filename).suffix.lower() == '.csv': + table_name = pathlib.Path(csv_file.filename).stem + # print(f"Reading table = {table_name}. File-size = {convert_size(csv_file.file_size)}") + if file_size_limit is None or csv_file.file_size <= file_size_limit: + df = pd.read_csv(f.open(csv_file.filename), **kwargs) + inputs[table_name] = df + #print(f"Read {table_name}: {df.shape[0]} rows and {df.shape[1]} columns") + else: + pass + #print(f"Read {table_name}: skipped") + + return inputs
    + +
    [docs] @staticmethod + def write_data_to_zip_csv_s(zip_file_path: str, inputs: Inputs = None, outputs: Outputs = None, **kwargs): + """Write data as a zip file with .csv files. + inputs and outputs dictionaries are merged and written in same zip. + + Args: + zip_file_path (str): the full path of a zip file. + inputs: dict of input DataFrames + outputs: dict of input DataFrames + **kwargs: Set of optional arguments for the df.to_csv() function + + Returns: + None + """ + dfs = {} + if inputs is not None: + dfs = {**dfs, **inputs} + if outputs is not None: + dfs = {**dfs, **outputs} + with zipfile.ZipFile(zip_file_path, 'w') as zipMe: + with tempfile.TemporaryDirectory() as tmpdir: + for table_name, df in dfs.items(): + filename = table_name + ".csv" + file_path = os.path.join(tmpdir, filename) + # print(f"Write table {table_name}, rows = {df.shape[0]} as {file_path}") + df.to_csv(file_path, index=False, **kwargs) + zipMe.write(file_path, arcname=filename, compress_type=zipfile.ZIP_DEFLATED)
    + # ----------------------------------------------------------------- # Utils # ----------------------------------------------------------------- @@ -1220,7 +1275,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/doc_build/html/_modules/dse_do_utils/scenariopicker.html b/docs/doc_build/html/_modules/dse_do_utils/scenariopicker.html index dc432ee..92db4d7 100644 --- a/docs/doc_build/html/_modules/dse_do_utils/scenariopicker.html +++ b/docs/doc_build/html/_modules/dse_do_utils/scenariopicker.html @@ -6,7 +6,7 @@ - dse_do_utils.scenariopicker — DSE DO Utils 0.5.4.2 documentation + dse_do_utils.scenariopicker — DSE DO Utils 0.5.4.4 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + @@ -257,7 +257,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/doc_build/html/_modules/dse_do_utils/utilities.html b/docs/doc_build/html/_modules/dse_do_utils/utilities.html index ffcb227..5cda33b 100644 --- a/docs/doc_build/html/_modules/dse_do_utils/utilities.html +++ b/docs/doc_build/html/_modules/dse_do_utils/utilities.html @@ -6,7 +6,7 @@ - dse_do_utils.utilities — DSE DO Utils 0.5.4.2 documentation + dse_do_utils.utilities — DSE DO Utils 0.5.4.4 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + @@ -114,6 +114,22 @@

    Source code for dse_do_utils.utilities

                 print('{}{}'.format(subindent, f))
    +
    [docs]def convert_size(size_bytes: int): + """Returns string describing file size. + + Args: + size_bytes (int): size if file in bytes + + From https://stackoverflow.com/questions/5194057/better-way-to-convert-file-sizes-in-python + """ + import math + if size_bytes == 0: + return "0B" + size_name = ("B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB") + i = int(math.floor(math.log(size_bytes, 1024))) + p = math.pow(1024, i) + s = round(size_bytes / p, 2) + return "%s %s" % (s, size_name[i])
    @@ -146,7 +162,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/doc_build/html/_modules/index.html b/docs/doc_build/html/_modules/index.html index 13cd274..875e6a9 100644 --- a/docs/doc_build/html/_modules/index.html +++ b/docs/doc_build/html/_modules/index.html @@ -6,7 +6,7 @@ - Overview: module code — DSE DO Utils 0.5.4.3 documentation + Overview: module code — DSE DO Utils 0.5.4.4 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + @@ -88,7 +88,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/doc_build/html/_static/bizstyle.js b/docs/doc_build/html/_static/bizstyle.js index d6de99e..acf1a61 100644 --- a/docs/doc_build/html/_static/bizstyle.js +++ b/docs/doc_build/html/_static/bizstyle.js @@ -36,6 +36,6 @@ $(window).resize(function(){ $("li.nav-item-0 a").text("Top"); } else { - $("li.nav-item-0 a").text("DSE DO Utils 0.5.4.3 documentation"); + $("li.nav-item-0 a").text("DSE DO Utils 0.5.4.4 documentation"); } }); \ No newline at end of file diff --git a/docs/doc_build/html/_static/documentation_options.js b/docs/doc_build/html/_static/documentation_options.js index 05bee0b..405b9f4 100644 --- a/docs/doc_build/html/_static/documentation_options.js +++ b/docs/doc_build/html/_static/documentation_options.js @@ -1,6 +1,6 @@ var DOCUMENTATION_OPTIONS = { URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '0.5.4.3', + VERSION: '0.5.4.4', LANGUAGE: 'None', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/docs/doc_build/html/dse_do_utils.html b/docs/doc_build/html/dse_do_utils.html index c60dc9f..9e44a70 100644 --- a/docs/doc_build/html/dse_do_utils.html +++ b/docs/doc_build/html/dse_do_utils.html @@ -6,7 +6,7 @@ - dse_do_utils package — DSE DO Utils 0.5.4.3 documentation + dse_do_utils package — DSE DO Utils 0.5.4.4 documentation @@ -35,7 +35,7 @@

    Navigation

  • previous |
  • - + @@ -2689,6 +2689,27 @@

    Submodules +
    +static load_data_from_zip_csv_s(zip_file_path: str, file_size_limit: Optional[int] = None, **kwargs) Dict[str, pandas.core.frame.DataFrame][source]¶
    +

    Read data from a zip file with .csv files.

    +
    +
    Parameters
    +
      +
    • zip_file_path (str) – the full path of a zip file containing one or more .csv files.

    • +
    • file_size_limit (int) – maximum file size in bytes. None implies no limit.

    • +
    • **kwargs – Set of optional arguments for the pd.read_csv() function

    • +
    +
    +
    Returns
    +

    dict of DataFrames. Keys are the .csv file names.

    +
    +
    Return type
    +

    data

    +
    +
    +
    +
    print_table_names() None[source]¶
    @@ -2845,6 +2866,26 @@

    Submodules +
    +static write_data_to_zip_csv_s(zip_file_path: str, inputs: Optional[Dict[str, pandas.core.frame.DataFrame]] = None, outputs: Optional[Dict[str, pandas.core.frame.DataFrame]] = None, **kwargs)[source]¶
    +

    Write data as a zip file with .csv files. +inputs and outputs dictionaries are merged and written in same zip.

    +
    +
    Parameters
    +
      +
    • zip_file_path (str) – the full path of a zip file.

    • +
    • inputs – dict of input DataFrames

    • +
    • outputs – dict of input DataFrames

    • +
    • **kwargs – Set of optional arguments for the df.to_csv() function

    • +
    +
    +
    Returns
    +

    None

    +
    +
    +

    + @@ -2953,6 +2994,18 @@

    Submodules +
    +dse_do_utils.utilities.convert_size(size_bytes: int)[source]¶
    +

    Returns string describing file size.

    +
    +
    Parameters
    +

    size_bytes (int) – size if file in bytes

    +
    +
    +

    From https://stackoverflow.com/questions/5194057/better-way-to-convert-file-sizes-in-python

    +
    +
    dse_do_utils.utilities.list_file_hierarchy(startpath: str) None[source]¶
    @@ -3106,7 +3159,7 @@

    Navigation

  • previous |
  • - + diff --git a/docs/doc_build/html/genindex.html b/docs/doc_build/html/genindex.html index be0a381..6942b5e 100644 --- a/docs/doc_build/html/genindex.html +++ b/docs/doc_build/html/genindex.html @@ -6,7 +6,7 @@ - Index — DSE DO Utils 0.5.4.3 documentation + Index — DSE DO Utils 0.5.4.4 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + @@ -141,6 +141,8 @@

    C

  • continuous_var_series() (dse_do_utils.optimizationengine.OptimizationEngine method)
  • continuous_var_series_s() (dse_do_utils.optimizationengine.OptimizationEngine static method) +
  • +
  • convert_size() (in module dse_do_utils.utilities)
  • CPD25 (dse_do_utils.scenariomanager.Platform attribute)
  • @@ -595,10 +597,10 @@

    L

  • load_data_from_excel_s() (dse_do_utils.scenariomanager.ScenarioManager static method)
  • - - +
  • load_data_from_scenario_s() (dse_do_utils.scenariomanager.ScenarioManager method) +
  • +
  • load_data_from_zip_csv_s() (dse_do_utils.scenariomanager.ScenarioManager static method)
  • load_selected_scenario_data() (dse_do_utils.scenariopicker.ScenarioPicker method)
  • @@ -870,10 +874,10 @@

    W

  • write_data_to_csv() (dse_do_utils.scenariomanager.ScenarioManager method)
  • - - + @@ -128,7 +128,7 @@

    Navigation

  • next |
  • - + diff --git a/docs/doc_build/html/modules.html b/docs/doc_build/html/modules.html index 11406f5..155302d 100644 --- a/docs/doc_build/html/modules.html +++ b/docs/doc_build/html/modules.html @@ -6,7 +6,7 @@ - dse_do_utils — DSE DO Utils 0.5.4.3 documentation + dse_do_utils — DSE DO Utils 0.5.4.4 documentation @@ -39,7 +39,7 @@

    Navigation

  • previous |
  • - + @@ -127,7 +127,7 @@

    Navigation

  • previous |
  • - + diff --git a/docs/doc_build/html/objects.inv b/docs/doc_build/html/objects.inv index 864557c572a8a29e7504000203609f7a263d363b..e65c11f6374502ef2ee847a529189fd0f405db1c 100644 GIT binary patch delta 389 zcmV;00eb%06YUd_MgcUjM=%I~;P!+kr9sAXdS&W4Yf>E0rE}Y$7VOHr;eZCuU6M1t ze4@>8g6;}>7pD_hZ)GZS8ra~v<{TXK49&*;usSVw=RiYz|eU|k$p zwC@Re+Ax_4Z^KswuKb#K>%ZI`O<(*i{Q7i0ttIr%_#YEQ)okI^V)ga&V)bS5XQcQu zoAC0M`25D-o_w=!!1VD`_d!y7PKGCJGWEi=_RzIePd%vzjF+RI3i1*aN(X9&1ed!$ ju6HiYW`X(gb7R||SaxN^1oSOP_(#*)d+|)Y# z`3GAYX1BjI&ZRd`6eCc!#*MgqfkS3G>NcQAXntS%i%nd$jQ%c8q^S_N*hg zP46Z}Th2^)6U=eE+@6`!>uE+CwXlx*IQd(|7;y2NpGZvMgNWOHewN Q&ik4^e+m8ke@If4&iGEW!T - Python Module Index — DSE DO Utils 0.5.4.3 documentation + Python Module Index — DSE DO Utils 0.5.4.4 documentation @@ -34,7 +34,7 @@

    Navigation

  • modules |
  • - + @@ -173,7 +173,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/doc_build/html/readme_link.html b/docs/doc_build/html/readme_link.html index f3d5614..a536d28 100644 --- a/docs/doc_build/html/readme_link.html +++ b/docs/doc_build/html/readme_link.html @@ -6,7 +6,7 @@ - Read me — DSE DO Utils 0.5.4.3 documentation + Read me — DSE DO Utils 0.5.4.4 documentation @@ -39,7 +39,7 @@

    Navigation

  • previous |
  • - + @@ -269,7 +269,7 @@

    Navigation

  • previous |
  • - + diff --git a/docs/doc_build/html/search.html b/docs/doc_build/html/search.html index 9bee47d..4ce8613 100644 --- a/docs/doc_build/html/search.html +++ b/docs/doc_build/html/search.html @@ -6,7 +6,7 @@ - Search — DSE DO Utils 0.5.4.3 documentation + Search — DSE DO Utils 0.5.4.4 documentation @@ -37,7 +37,7 @@

    Navigation

  • modules |
  • - + @@ -96,7 +96,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/doc_build/html/searchindex.js b/docs/doc_build/html/searchindex.js index 0b5c469..43f4521 100644 --- a/docs/doc_build/html/searchindex.js +++ b/docs/doc_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["dse_do_utils","index","modules","readme_link"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":4,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.viewcode":1,sphinx:56},filenames:["dse_do_utils.rst","index.rst","modules.rst","readme_link.rst"],objects:{"":{dse_do_utils:[0,0,0,"-"]},"dse_do_utils.cpd25utilities":{add_file_as_data_asset_cpd25:[0,1,1,""],add_file_path_as_data_asset_cpd25:[0,1,1,""],add_file_path_as_data_asset_wsc:[0,1,1,""],write_data_asset_as_file_cpd25:[0,1,1,""],write_data_asset_as_file_wsc:[0,1,1,""]},"dse_do_utils.datamanager":{DataManager:[0,2,1,""]},"dse_do_utils.datamanager.DataManager":{apply_and_concat:[0,3,1,""],df_crossjoin_ai:[0,3,1,""],df_crossjoin_mi:[0,3,1,""],df_crossjoin_si:[0,3,1,""],extract_solution:[0,3,1,""],get_parameter_value:[0,3,1,""],get_raw_table_by_name:[0,3,1,""],prep_parameters:[0,3,1,""],prepare_data_frames:[0,3,1,""],prepare_input_data_frames:[0,3,1,""],prepare_output_data_frames:[0,3,1,""],print_hello:[0,3,1,""],print_inputs_outputs_summary:[0,3,1,""],set_parameters:[0,3,1,""]},"dse_do_utils.deployeddomodel":{DeployedDOModel:[0,2,1,""]},"dse_do_utils.deployeddomodel.DeployedDOModel":{execute_model:[0,3,1,""],extract_solution:[0,3,1,""],get_deployment_id:[0,3,1,""],get_job_status:[0,3,1,""],get_outputs:[0,3,1,""],get_solve_details:[0,3,1,""],get_solve_details_objective:[0,3,1,""],get_solve_payload:[0,3,1,""],get_solve_status:[0,3,1,""],get_space_id:[0,3,1,""],monitor_execution:[0,3,1,""],solve:[0,3,1,""]},"dse_do_utils.deployeddomodelcpd21":{DeployedDOModel_CPD21:[0,2,1,""]},"dse_do_utils.deployeddomodelcpd21.DeployedDOModel_CPD21":{cleanup:[0,3,1,""],execute_model:[0,3,1,""],get_debug_dump_name_and_url:[0,3,1,""],get_debug_file_url:[0,3,1,""],get_execution_service_model_url:[0,3,1,""],get_execution_status:[0,3,1,""],get_headers:[0,3,1,""],get_input_files:[0,3,1,""],get_job_url:[0,3,1,""],get_kill_job_url:[0,3,1,""],get_log_file_name_and_url:[0,3,1,""],get_log_file_url:[0,3,1,""],get_objective:[0,3,1,""],get_solution_name_and_url:[0,3,1,""],get_solve_config:[0,3,1,""],get_solve_status:[0,3,1,""],get_solve_url:[0,3,1,""],get_stop_job_url:[0,3,1,""],kill_job:[0,3,1,""],monitor_execution:[0,3,1,""],post_process_container:[0,3,1,""],post_process_container_get_dataframe:[0,3,1,""],post_process_failed:[0,3,1,""],post_process_inline_table:[0,3,1,""],post_process_inline_table_get_dataframe:[0,3,1,""],post_process_interrupted:[0,3,1,""],post_process_processed:[0,3,1,""],retrieve_debug_materials:[0,3,1,""],retrieve_file:[0,3,1,""],retrieve_solution:[0,3,1,""],retrieve_solve_configuration:[0,3,1,""],set_output_settings_in_solve_configuration:[0,3,1,""],solve:[0,3,1,""],stop_job:[0,3,1,""]},"dse_do_utils.domodeldeployer":{DOModelDeployer:[0,2,1,""]},"dse_do_utils.domodeldeployer.DOModelDeployer":{create_archive:[0,3,1,""],create_model_archive:[0,3,1,""],create_model_directory:[0,3,1,""],create_package_extension:[0,3,1,""],create_software_specification:[0,3,1,""],create_zip_package_extension:[0,3,1,""],deploy_archive:[0,3,1,""],deploy_model:[0,3,1,""],get_scenario:[0,3,1,""],get_wml_create_deployment_meta_props:[0,3,1,""],get_wml_create_store_model_meta_props:[0,3,1,""],guid_from_space_name:[0,3,1,""],wml_create_deployment:[0,3,1,""],wml_store_model:[0,3,1,""],write_main_file:[0,3,1,""],write_yaml_file:[0,3,1,""]},"dse_do_utils.domodelexporter":{DOModelExporter:[0,2,1,""]},"dse_do_utils.domodelexporter.DOModelExporter":{export_do_models:[0,3,1,""],get_access_token_curl:[0,3,1,""],get_access_token_web:[0,3,1,""],get_do_model_export_curl:[0,3,1,""],get_do_model_export_web:[0,3,1,""],get_project_id:[0,3,1,""],write_do_model_to_file:[0,3,1,""]},"dse_do_utils.mapmanager":{MapManager:[0,2,1,""]},"dse_do_utils.mapmanager.MapManager":{add_full_screen:[0,3,1,""],add_layer_control:[0,3,1,""],create_blank_map:[0,3,1,""],get_arrows:[0,3,1,""],get_bearing:[0,3,1,""],get_html_table:[0,3,1,""],get_popup_table:[0,3,1,""],get_tooltip_table:[0,3,1,""],kansas_city_coord:[0,4,1,""]},"dse_do_utils.multiscenariomanager":{MultiScenarioManager:[0,2,1,""]},"dse_do_utils.multiscenariomanager.MultiScenarioManager":{add_data_file_to_project:[0,3,1,""],env_is_wscloud:[0,3,1,""],get_all_scenario_names:[0,3,1,""],get_data_directory:[0,3,1,""],get_dd_client:[0,3,1,""],get_multi_scenario_data:[0,3,1,""],get_root_directory:[0,3,1,""],get_scenarios_df:[0,3,1,""],load_data_from_scenario:[0,3,1,""],merge_scenario_data:[0,3,1,""],write_data_to_excel:[0,3,1,""]},"dse_do_utils.optimizationengine":{MyProgressListener:[0,2,1,""],OptimizationEngine:[0,2,1,""]},"dse_do_utils.optimizationengine.MyProgressListener":{notify_progress:[0,3,1,""]},"dse_do_utils.optimizationengine.OptimizationEngine":{add_mip_progress_kpis:[0,3,1,""],binary_var_series:[0,3,1,""],binary_var_series_s:[0,3,1,""],continuous_var_series:[0,3,1,""],continuous_var_series_s:[0,3,1,""],export_as_cpo:[0,3,1,""],export_as_cpo_s:[0,3,1,""],export_as_lp:[0,3,1,""],export_as_lp_s:[0,3,1,""],get_kpi_output_table:[0,3,1,""],integer_var_series:[0,3,1,""],integer_var_series_s:[0,3,1,""],solve:[0,3,1,""]},"dse_do_utils.plotlymanager":{PlotlyManager:[0,2,1,""]},"dse_do_utils.plotlymanager.PlotlyManager":{get_dash_tab_layout_m:[0,3,1,""],get_plotly_fig_m:[0,3,1,""]},"dse_do_utils.scenariodbmanager":{AutoScenarioDbTable:[0,2,1,""],BusinessKpiTable:[0,2,1,""],DbCellUpdate:[0,2,1,""],KpiTable:[0,2,1,""],ParameterTable:[0,2,1,""],ScenarioDbManager:[0,2,1,""],ScenarioDbTable:[0,2,1,""],ScenarioTable:[0,2,1,""]},"dse_do_utils.scenariodbmanager.AutoScenarioDbTable":{create_table_metadata:[0,3,1,""],get_sa_table:[0,3,1,""],insert_table_in_db_bulk:[0,3,1,""]},"dse_do_utils.scenariodbmanager.DbCellUpdate":{column_name:[0,4,1,""],current_value:[0,4,1,""],previous_value:[0,4,1,""],row_idx:[0,4,1,""],row_index:[0,4,1,""],scenario_name:[0,4,1,""],table_name:[0,4,1,""]},"dse_do_utils.scenariodbmanager.ScenarioDbManager":{add_scenario_name_to_dfs:[0,3,1,""],create_schema:[0,3,1,""],delete_scenario_from_db:[0,3,1,""],delete_scenario_name_column:[0,3,1,""],drop_all_tables:[0,3,1,""],duplicate_scenario_in_db:[0,3,1,""],get_scenario_db_table:[0,3,1,""],get_scenarios_df:[0,3,1,""],insert_scenarios_from_zip:[0,3,1,""],insert_scenarios_in_db:[0,3,1,""],insert_tables_in_db:[0,3,1,""],read_multi_scenario_tables_from_db:[0,3,1,""],read_scenario_from_db:[0,3,1,""],read_scenario_input_tables_from_db:[0,3,1,""],read_scenario_table_from_db:[0,3,1,""],read_scenario_table_from_db_cached:[0,3,1,""],read_scenario_tables_from_db:[0,3,1,""],read_scenario_tables_from_db_cached:[0,3,1,""],read_scenarios_from_db:[0,3,1,""],read_scenarios_table_from_db_cached:[0,3,1,""],rename_scenario_in_db:[0,3,1,""],replace_scenario_in_db:[0,3,1,""],replace_scenario_tables_in_db:[0,3,1,""],set_scenarios_table_read_callback:[0,3,1,""],set_table_read_callback:[0,3,1,""],update_cell_changes_in_db:[0,3,1,""],update_scenario_output_tables_in_db:[0,3,1,""]},"dse_do_utils.scenariodbmanager.ScenarioDbTable":{add_scenario_name_to_fk_constraint:[0,3,1,""],camel_case_to_snake_case:[0,3,1,""],create_table_metadata:[0,3,1,""],df_column_names_to_snake_case:[0,3,1,""],get_db_table_name:[0,3,1,""],get_df_column_names:[0,3,1,""],get_sa_column:[0,3,1,""],get_sa_table:[0,3,1,""],insert_table_in_db_bulk:[0,3,1,""],sqlcol:[0,3,1,""]},"dse_do_utils.scenariomanager":{Platform:[0,2,1,""],ScenarioManager:[0,2,1,""]},"dse_do_utils.scenariomanager.Platform":{CPD25:[0,4,1,""],CPD40:[0,4,1,""],CPDaaS:[0,4,1,""],Local:[0,4,1,""]},"dse_do_utils.scenariomanager.ScenarioManager":{add_data_file_to_project_s:[0,3,1,""],add_data_file_using_project_lib:[0,3,1,""],add_data_file_using_ws_lib:[0,3,1,""],add_data_file_using_ws_lib_s:[0,3,1,""],add_data_into_scenario:[0,3,1,""],add_data_into_scenario_s:[0,3,1,""],add_file_as_data_asset:[0,3,1,""],add_file_as_data_asset_s:[0,3,1,""],clear_scenario_data:[0,3,1,""],create_new_scenario:[0,3,1,""],detect_platform:[0,3,1,""],env_is_cpd25:[0,3,1,""],env_is_cpd40:[0,3,1,""],env_is_dsx:[0,3,1,""],env_is_wscloud:[0,3,1,""],export_model_as_lp:[0,3,1,""],get_data_directory:[0,3,1,""],get_dd_client:[0,3,1,""],get_do_scenario:[0,3,1,""],get_kpis_table_as_dataframe:[0,3,1,""],get_root_directory:[0,3,1,""],insert_scenarios_from_zip:[0,3,1,""],load_data:[0,3,1,""],load_data_from_csv:[0,3,1,""],load_data_from_csv_s:[0,3,1,""],load_data_from_excel:[0,3,1,""],load_data_from_excel_s:[0,3,1,""],load_data_from_parquet:[0,3,1,""],load_data_from_parquet_s:[0,3,1,""],load_data_from_scenario:[0,3,1,""],load_data_from_scenario_s:[0,3,1,""],print_table_names:[0,3,1,""],replace_data_in_scenario:[0,3,1,""],replace_data_into_scenario_s:[0,3,1,""],update_solve_output_into_scenario:[0,3,1,""],write_data_into_scenario:[0,3,1,""],write_data_into_scenario_s:[0,3,1,""],write_data_to_csv:[0,3,1,""],write_data_to_csv_s:[0,3,1,""],write_data_to_excel:[0,3,1,""],write_data_to_excel_s:[0,3,1,""],write_data_to_parquet:[0,3,1,""],write_data_to_parquet_s:[0,3,1,""]},"dse_do_utils.scenariopicker":{ScenarioPicker:[0,2,1,""]},"dse_do_utils.scenariopicker.ScenarioPicker":{ScenarioRefreshButton:[0,2,1,""],default_scenario:[0,4,1,""],get_dd_client:[0,3,1,""],get_scenario_picker_ui:[0,3,1,""],get_scenario_refresh_button:[0,3,1,""],get_scenario_select_drop_down:[0,3,1,""],get_selected_scenario:[0,3,1,""],load_selected_scenario_data:[0,3,1,""],widgets:[0,4,1,""]},"dse_do_utils.utilities":{add_sys_path:[0,1,1,""],list_file_hierarchy:[0,1,1,""]},dse_do_utils:{cpd25utilities:[0,0,0,"-"],datamanager:[0,0,0,"-"],deployeddomodel:[0,0,0,"-"],deployeddomodelcpd21:[0,0,0,"-"],domodeldeployer:[0,0,0,"-"],domodelexporter:[0,0,0,"-"],mapmanager:[0,0,0,"-"],module_reload:[0,1,1,""],multiscenariomanager:[0,0,0,"-"],optimizationengine:[0,0,0,"-"],plotly_cpd_workaround:[0,0,0,"-"],plotlymanager:[0,0,0,"-"],scenariodbmanager:[0,0,0,"-"],scenariomanager:[0,0,0,"-"],scenariopicker:[0,0,0,"-"],utilities:[0,0,0,"-"],version:[0,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","class","Python class"],"3":["py","method","Python method"],"4":["py","attribute","Python attribute"]},objtypes:{"0":"py:module","1":"py:function","2":"py:class","3":"py:method","4":"py:attribute"},terms:{"0":[0,1],"01":0,"02ea6d480895":0,"04":0,"0596001673":0,"085594":0,"1":[0,3],"100":0,"1132":0,"16":0,"1993":0,"2":[0,3],"2005586":0,"2016":0,"2022":0,"21":0,"21c8ac71":0,"23690284":0,"25a0fe88e4":0,"26c1":0,"277618282":0,"2fcustom_librari":0,"2fdeploy":0,"2fnotebook":0,"2fpython_sdk":0,"2fuse":0,"2fwatson":0,"3":[0,3],"31":0,"37188b1a8b48be2bef34b35b55f01cba0d29ed19":0,"3810":0,"39":0,"4":[0,3],"41":0,"447a":0,"458550":0,"469":0,"49a5":0,"4bd2":0,"5":[0,1],"50":0,"5401":0,"585241":0,"5de6560a1cfa":0,"6":0,"600":0,"68747470733a2f2f7261772e67697468756275736572636f6e74656e742e636f6d2f49424d2f776174736f6e2d6d616368696e652d6c6561726e696e672d73616d706c65732f333731383862316138623438626532626566333462333562353566303163626130643239656431392f637064342e302f6e6f7465626f6f6b732f707974686f6e5f73646b2f6465706c6f796d656e74732f637573746f6d5f6c6962726172792f5573652532307363696b69742d6c6561726e253230616e64253230637573746f6d2532306c696272617279253230746f2532307072656469637425323074656d70657261747572652e6970796e62":0,"7":3,"785":0,"8021":0,"8364":0,"94":0,"95":0,"96":0,"98":0,"9f28":0,"abstract":0,"case":[0,3],"class":[0,1],"default":[0,3],"do":0,"enum":0,"export":[0,3],"float":0,"function":[0,3],"import":[0,1],"int":0,"new":0,"return":0,"static":0,"super":0,"true":0,"while":0,A:[0,3],And:0,As:0,At:0,But:[0,3],By:0,FOR:0,For:[0,3],If:0,In:[0,3],Is:0,It:[0,3],NOT:[0,3],No:0,Not:0,On:0,One:0,Or:0,That:0,The:[0,3],Then:[0,3],These:0,To:[0,3],Will:0,With:0,_:0,__index__:0,__init__:0,_base:0,_export_:0,_multi_output:0,_output:0,_table_index_:0,_xlx:0,a567:0,a933:0,aa50:0,abbrevi:0,abc:0,abl:[0,3],about:0,abov:0,abspath:0,accept:0,access:[0,3],access_project_or_spac:0,access_tok:0,access_token:0,accesstoken:0,accordingli:0,ad:[0,3],add:[0,3],add_child:0,add_data_file_to_project:0,add_data_file_to_project_:0,add_data_file_using_project_lib:0,add_data_file_using_ws_lib:0,add_data_file_using_ws_lib_:0,add_data_into_scenario:0,add_data_into_scenario_:0,add_file_as_data_asset:0,add_file_as_data_asset_:0,add_file_as_data_asset_cpd25:0,add_file_path_as_data_asset_cpd25:0,add_file_path_as_data_asset_wsc:0,add_full_screen:0,add_layer_control:0,add_mip_progress_kpi:0,add_scenario_name_to_df:0,add_scenario_name_to_fk_constraint:0,add_sys_path:0,add_to:0,addit:0,advanc:0,advantag:0,advis:0,after:0,air:3,alia:0,all:[0,3],allow:[0,3],along:0,alreadi:0,also:[0,3],altern:0,alwai:0,an:[0,3],android:0,ani:0,anoth:0,anywher:0,api:[0,3],apicli:0,app:0,appear:0,appli:[0,3],applic:0,apply_and_concat:0,ar:[0,3],archiv:0,arg:0,argument:0,around:[0,3],arrow:0,asset:[0,3],asset_nam:0,assign:0,assum:0,astyp:0,attach:0,attachment_typ:0,attempt:0,attribut:0,auto:0,auto_insert:0,autodetect:0,automat:[0,3],autoreload:0,autoscenariodbt:0,avail:[0,3],avoid:[0,3],axi:0,b7bf7fd8:0,back:0,backward:3,base:0,bash:0,basic:3,bear:0,been:[0,3],befor:0,being:0,below:0,best:0,best_bound_kpi_nam:0,better:0,between:[0,3],bewar:0,binary_var_seri:0,binary_var_series_:0,binaryvartyp:0,blank:0,blob:0,blue:0,bobhaffn:0,boilerpl:0,bool:0,both:[0,3],bound:0,box:0,br:0,browser:0,build:0,builder:[0,1],bulk:0,business_kpi:0,businesskpit:0,button:0,c:0,cach:0,call:0,callback:0,came:0,camel_case_to_snake_cas:0,camelcas:0,can:[0,3],cancel:0,cannot:[0,3],cartesian:0,categor:0,categori:0,caus:0,cell:[0,3],certain:0,certif:0,ch04s23:0,challeng:0,chang:0,channel:3,charact:0,chart:0,check:0,child:0,chrome:0,clean:0,cleanup:0,clear:0,clear_scenario_data:0,client:[0,3],cloud:[0,3],cluster4:0,cluster:0,cluster_nam:0,co:0,code:[0,3],cogno:0,collabor:0,color:0,color_mod:0,column:0,column_nam:0,columns_metadata:0,com:0,combin:[0,3],command:0,commit:0,commun:0,compass:0,compat:[0,3],complet:0,complex:0,compon:0,comput:0,conda:[0,3],condit:0,conf:0,configur:[0,3],connect:[0,3],constant:0,constraints_metadata:0,constructor:0,contain:[0,3],content:2,context:0,continuous_var_seri:0,continuous_var_series_:0,continuousvartyp:0,control:0,conveni:0,convers:0,convert:0,cookbook:0,coord:0,copi:0,copy_to_csv:0,core:0,corner:0,correctli:0,could:0,count:0,counti:0,cp4d25:0,cp4daa:0,cp4dv2:0,cp4dv4:0,cp:[0,3],cpd25:0,cpd25util:2,cpd2:0,cpd3:[0,3],cpd40:0,cpd4:[0,3],cpd:[0,3],cpd_cluster_host:0,cpdaa:0,cpdv2:[0,1],cpdv3:[0,3],cpdv4:[0,1],cplex:[0,3],cpo:0,cpolab:0,cpsaa:0,creat:[0,3],create_arch:0,create_blank_map:0,create_model_arch:0,create_model_directori:0,create_new_scenario:0,create_package_extens:0,create_schema:0,create_software_specif:0,create_table_metadata:0,create_zip_package_extens:0,creation:0,credenti:0,cross:0,crossjoin:3,csv:[0,3],csv_directori:0,csv_name_pattern:0,curl:0,current:0,current_dir:0,current_valu:0,custom:0,d4c69a0d8158:0,d:[0,3],dash:0,dashboard:0,dashenterpris:0,data:[0,3],data_asset:[0,3],data_by_scenario:0,data_directori:0,data_id:0,data_manag:0,data_url:0,datafram:0,datamanag:[2,3],datascienceelit:0,dataset:0,datatyp:0,datetim:0,db:0,db_cell_upd:0,db_column_nam:0,db_table_nam:0,dbcellupd:0,dd:[0,3],dd_scenario:0,de:0,debug:0,debug_file_data_url:0,debug_file_dir:0,decis:3,decision_optimization_cli:0,def:0,default_max_oaas_time_limit_sec:0,default_max_run_time_sec:0,default_scenario:0,default_valu:0,defin:0,definit:0,delai:0,delet:0,delete_scenario_from_db:0,delete_scenario_name_column:0,depend:[0,3],deploi:0,deploy:[0,3],deploy_arch:0,deploy_model:0,deployed_model_nam:0,deployeddomodel:2,deployeddomodel_cpd21:0,deployeddomodelcpd21:2,deployment_descript:0,deployment_id:0,deployment_nam:0,deployment_uid:0,deprec:0,design:[0,3],despit:0,detail:3,detect_platform:0,develop:[0,3],devic:0,df1:0,df2:0,df:0,df_column_names_to_snake_cas:0,df_crossjoin_ai:0,df_crossjoin_mi:0,df_crossjoin_si:0,df_dict:0,dict:0,dictionari:0,differ:[0,3],direct:0,directori:0,disadvantag:0,disk:0,dm:0,do4w:0,do_model_nam:0,do_util:0,doc:0,docplex:[0,3],document:[0,3],dodashapp:0,doe:0,doesn:0,domodeldeploy:2,domodelexport:2,done:0,down:[0,3],download:[0,3],driven:0,drop:[0,3],drop_all_t:0,drop_column_nam:0,dropdown:0,dse:[0,3],dse_do_dashboard:0,dse_do_util:1,dsx:0,dsx_project_dir:0,dsxuser:0,due:0,dump:0,dumpzipnam:0,duplic:0,duplicate_scenario_in_db:0,dure:0,dvar:[0,3],e:[0,3],each:0,easi:[0,3],easier:0,easili:0,echo:0,ef365b2c:0,effect:0,effici:0,eg:0,either:0,element:0,els:0,emb:0,empti:[0,3],en:0,enabl:0,enable_astyp:0,enable_debug_print:0,enable_sqlite_fk:0,enable_transact:0,enc_url:0,end:0,engin:[0,3],ensur:0,entiti:0,entri:0,enumer:0,env_is_cpd25:0,env_is_cpd40:0,env_is_dsx:0,env_is_wscloud:0,environ:[0,1],error:0,establish:0,evalu:0,exampl:0,excel:[0,3],excel_file_nam:0,excel_output_file_nam:0,excel_test:0,excelfil:0,excelwrit:0,except:0,exclud:0,execut:0,execute_model:0,execution_result:0,execution_statu:0,execution_status_json:0,exist:[0,3],expect:0,experi:0,explicit:0,explicitli:0,export_as_cpo:0,export_as_cpo_:0,export_as_lp:0,export_as_lp_:0,export_do_model:0,export_model:0,export_model_as_lp:0,expos:0,express:0,extend:0,extended_columns_metadata:0,extens:0,extract:0,extract_dvar_nam:0,extract_solut:0,f:0,fail:0,fake:3,fals:0,faster:0,featur:3,featuregroup:0,field:0,fig:0,file:[0,3],file_nam:0,file_name_pattern:0,file_path:0,filenam:0,filepath:0,filter:0,find:0,firefox:0,first:0,fix:0,fkc:0,flask:0,folder:0,folium:[0,3],follow:[0,3],footer:0,forc:0,foreign:0,foreignkeyconstraint:0,form:0,format:0,former:[0,3],found:0,frame:0,free:0,from:[0,3],full:0,full_project_nam:0,func:0,futur:[0,3],g:[0,3],gap:[0,3],gener:0,get:0,get_access_token_curl:0,get_access_token_web:0,get_all_scenario_nam:0,get_arrow:0,get_bear:0,get_dash_tab_layout_m:0,get_data_directori:0,get_db_table_nam:0,get_dd_client:0,get_debug_dump_name_and_url:0,get_debug_file_url:0,get_deployment_id:0,get_df_column_nam:0,get_do_model_export_curl:0,get_do_model_export_web:0,get_do_scenario:0,get_execution_service_model_url:0,get_execution_statu:0,get_head:0,get_html_tabl:0,get_input_fil:0,get_job_statu:0,get_job_url:0,get_kill_job_url:0,get_kpi_output_t:0,get_kpis_table_as_datafram:0,get_log_file_name_and_url:0,get_log_file_url:0,get_multi_scenario_data:0,get_object:0,get_output:0,get_parameter_valu:0,get_plotly_fig_m:0,get_popup_t:0,get_project_id:0,get_raw_table_by_nam:0,get_root_directori:0,get_sa_column:0,get_sa_t:0,get_scenario:0,get_scenario_db_t:0,get_scenario_picker_ui:0,get_scenario_refresh_button:0,get_scenario_select_drop_down:0,get_scenarios_df:0,get_selected_scenario:0,get_solution_name_and_url:0,get_solve_config:0,get_solve_detail:0,get_solve_details_object:0,get_solve_payload:0,get_solve_statu:0,get_solve_url:0,get_space_id:0,get_stop_job_url:0,get_tab_layout_:0,get_tooltip_t:0,get_wml_create_deployment_meta_prop:0,get_wml_create_store_model_meta_prop:0,getcwd:0,gist:0,git:0,github:[0,3],githubpag:3,githubusercont:0,give:0,given:0,glob:0,grand:0,greatli:3,gsilabs_scnfo:0,guid_from_space_nam:0,h:0,ha:[0,3],hack:3,hand:0,handl:0,happen:0,hard:0,have:[0,3],header:0,height:0,hello:0,here:0,hierarch:0,hold:0,home:0,how:[0,3],howev:0,html:0,http:0,hypothet:0,i:0,ibm:[0,3],ibm_watson_machine_learn:0,ibm_watson_studio_lib:0,icon:0,icpd:3,id:0,ignor:[0,3],imp:0,impact:3,implement:0,improv:[0,3],includ:0,inconsist:0,incorrect:0,independ:0,index:[0,1],indic:0,individu:[0,3],info:0,inform:0,init:0,initi:0,inline_t:0,inner:0,input:0,input_csv_name_pattern:0,input_db_t:0,input_name_pattern:0,input_table_nam:0,insecurerequestwarn:0,insert:0,insert_scenarios_from_zip:0,insert_scenarios_in_db:0,insert_table_in_db_bulk:0,insert_tables_in_db:0,instal:[0,1],installationreadm:3,instanc:0,instead:0,integ:0,integer_var_list:0,integer_var_seri:0,integer_var_series_:0,integervartyp:0,intend:3,interact:[0,3],interfac:3,intermedi:0,intern:[0,3],internet:3,interrupt:0,interv:0,io:0,ipynb:0,ipywidget:0,issu:0,itself:3,jerom:0,job:0,job_config_json:0,job_detail:0,job_uid:0,join:0,json:0,jupyt:[0,3],jupyterlab:[0,3],just:0,kansas_city_coord:0,karg:0,keep:0,kei:0,keyword:0,kill:0,kill_job:0,km:0,kpi:0,kpitabl:0,kwarg:0,lambda:0,last:0,lat:0,later:0,latest:0,layer_control_posit:0,lead:0,learn:0,leav:0,left:0,let:0,level:0,lib:0,librari:0,like:[0,3],limit:[0,3],line:0,list:0,list_file_hierarchi:0,load:0,load_data:0,load_data_from_csv:0,load_data_from_csv_:0,load_data_from_excel:0,load_data_from_excel_:0,load_data_from_parquet:0,load_data_from_parquet_:0,load_data_from_scenario:0,load_data_from_scenario_:0,load_from_excel:0,load_selected_scenario_data:0,local:[0,3],local_relative_data_path:0,local_root:0,locat:0,log:0,log_file_nam:0,logged_in:0,logic:0,lon:0,longer:[0,3],look:0,loop:0,lp:[0,3],m:0,machin:0,made:0,mai:0,main:[0,1],main_file_path:0,maintain:0,major:0,make:0,manag:0,mani:3,manipul:[0,3],manual:0,map:[0,3],mapmanag:[2,3],marker:0,master:0,match:0,max_oaas_time_limit_sec:0,max_run_time_sec:0,maximum:0,mb:3,md:[0,3],mdl:0,me:[0,1],mean:0,medium:0,member:0,menu:[0,3],merg:0,merge_scenario_data:0,messag:0,meta_prop:0,metadata:0,method:0,mgr:0,might:3,minu:0,mip_gap_kpi_nam:0,miss:0,mix:0,mkonrad:0,mode:0,model1:0,model2:0,model:[0,1],model_archive_file_path:0,model_build:0,model_nam:0,model_uid:0,modelbuild:0,modifi:0,modul:[1,2],module_reload:0,moment:3,monitor:0,monitor_execut:0,monitor_loop_delay_sec:0,more:[0,3],most:0,mostli:3,move:3,mp:0,msm:0,multi:0,multi_scenario:0,multi_thread:0,multiindex:0,multipl:[0,3],multiscenariomanag:2,must:0,my:0,my_default_scenario:0,my_do_model:0,my_funct:0,my_input_column_nam:0,my_input_valu:0,my_modul:0,my_output_column_name_1:0,my_output_column_name_2:0,my_output_value1:0,my_output_value_1:0,my_output_value_2:0,my_tabl:0,myclass:0,myexcelfil:0,myexcelfileoutput:0,myfil:0,mymodel:0,myoptimizationengin:0,myprogresslisten:0,mytabl:0,n:0,n_arrow:0,name:0,namedtupl:0,nbviewer:0,necessari:0,need:0,neither:3,net:0,never:0,new_path:0,new_scenario_nam:0,next:0,nodefault:3,non:0,none:0,not_start:0,note:[0,3],notebook:[0,3],notify_progress:0,now:0,number:0,nwo:0,oaa:0,object:0,off:0,ok:0,omit:0,onc:0,one:0,ones:0,onli:[0,3],open:0,oper:0,optim:[0,3],optimizationengin:[2,3],option:[0,3],order:0,ordereddict:0,ore:3,oreilli:0,org:0,organ:0,origin:0,os:0,other:[0,3],otherwis:0,out:0,output:0,output_csv_name_pattern:0,output_db_t:0,output_name_pattern:0,output_table_nam:0,outsid:3,overrid:0,overridden:0,overwrit:0,overwritten:0,p1:0,p2:0,packag:[1,2,3],package_extens:0,package_path:0,package_zip_filepath:0,page:[0,1],page_id:0,page_sourc:0,pair:0,pak:3,panda:0,panel:0,param:0,param_nam:0,param_typ:0,paramet:0,parametert:0,pardir:0,parent:0,parent_dir:0,parent_dir_2:0,parquet:0,pars:0,parse_html:0,part:0,particular:[0,3],pass:0,password:0,past:0,path:0,pattern:0,payload:0,pd:0,per:0,perform:[0,3],period:0,person:0,phase:0,pick:3,picker:0,pip:[0,3],pkg_ext_id:0,place:0,placehold:0,plain:0,platform:0,plot:0,plotli:0,plotly_cpd_workaround:2,plotlymanag:2,plugin:0,point:0,poll:0,polylin:0,popul:0,popup:0,popup_t:0,possibl:0,post:[0,3],post_process_contain:0,post_process_container_get_datafram:0,post_process_fail:0,post_process_inline_t:0,post_process_inline_table_get_datafram:0,post_process_interrupt:0,post_process_process:0,practic:0,pre:[0,3],predict:0,prefer:3,prep_paramet:0,prepar:0,prepare_data_fram:0,prepare_input_data_fram:0,prepare_output_data_fram:0,present:0,prevent:0,previou:3,previous_valu:0,primari:0,print:0,print_hello:0,print_inputs_outputs_summari:0,print_table_nam:0,problem:0,procedur:0,process:[0,3],product:0,productionplan:0,progress:0,progress_data:0,progressdata:0,project:[0,3],project_access_token:0,project_data:[0,3],project_id:0,project_lib:0,project_nam:0,properti:0,property_1:0,property_2:0,provid:[0,3],put:3,pwd:0,py:0,pydata:0,pypi:3,python:[0,3],question:0,queu:0,quot:0,rais:0,raw:0,re:0,reach:0,read:[0,1],read_csv:0,read_multi_scenario_tables_from_db:0,read_parquet:0,read_scenario_from_db:0,read_scenario_input_tables_from_db:0,read_scenario_table_from_db:0,read_scenario_table_from_db_cach:0,read_scenario_table_from_db_callback:0,read_scenario_tables_from_db:0,read_scenario_tables_from_db_cach:0,read_scenarios_from_db:0,read_scenarios_table_from_db_cach:0,read_scenarios_table_from_db_callback:0,readthedoc:0,reason:0,record:0,reduc:0,refactor:3,refer:0,refine_conflict:0,reflect:0,refresh:0,regist:0,regular:0,regularli:[0,3],rel:0,relat:0,relationship:0,releas:3,relev:0,reliabl:0,reload:0,remot:0,remov:0,renam:0,rename_scenario_in_db:0,repeatedli:0,replac:0,replace_data_in_scenario:0,replace_data_into_scenario_:0,replace_scenario_in_db:0,replace_scenario_tables_in_db:0,repositori:[0,3],repository_id:0,repository_typ:0,repres:0,represent:0,request:0,requir:[0,1],rerun:0,resourc:0,respons:0,rest:0,restor:0,restrict:0,result:0,retreiv:0,retriev:0,retrieve_debug_materi:0,retrieve_fil:0,retrieve_solut:0,retrieve_solve_configur:0,right:0,root:0,root_dir:0,rotat:0,round:0,rout:0,routin:0,row:0,row_idx:0,row_index:0,run:[0,3],runtime_env_apsx_url:0,s:0,same:[0,3],sampl:0,save:0,scenario:[0,3],scenario_1:0,scenario_nam:0,scenario_table_nam:0,scenariodbmanag:2,scenariodbt:0,scenariomanag:[2,3],scenariopick:[2,3],scenariorefreshbutton:0,scenarios_table_read_callback:0,scenariot:0,schema:0,scikit:0,scnfo:0,scnfo_dash_pycharm_github:0,scope:1,screen:0,script:3,search:[0,1],second:0,see:[0,3],seem:0,select:0,self:0,separ:[0,3],sequenc:0,seri:0,server:0,servic:0,service_configuration_json:0,service_nam:0,set:0,set_index:0,set_output_settings_in_solve_configur:0,set_paramet:0,set_scenarios_table_read_callback:0,set_table_read_callback:0,setup:0,share:3,sheet:0,should:[0,3],show:0,side:0,signific:3,similar:0,simpl:0,simplenamespac:0,simplest:0,simpli:0,sinc:0,singl:0,site:0,size:0,skip:0,sm:0,small:0,snake_cas:0,so:0,solut:0,solution_count_kpi_nam:0,solutionlisten:0,solv:0,solve_config:0,solve_config_json:0,solve_payload:0,solve_phase_kpi_nam:0,solve_statu:0,solve_time_kpi_nam:0,solvesolut:0,some:[0,3],someth:0,somewhat:0,sourc:[0,3],source_scenario_nam:0,sp:0,space:0,space_id:0,space_nam:0,spd:0,specifi:0,speed:0,spreadhseet:3,spreadsheet:0,sql:0,sqlachemi:0,sqlalchemi:0,sqlcol:0,ssl:0,stackoverflow:0,stamp:0,standard:0,start:0,startpath:0,state:0,statement:0,statu:0,step:0,stop:0,stop_job:0,storag:0,store:[0,3],str:0,strftime:0,string:0,strongli:0,structur:0,studio:[0,3],sub:0,subclass:[0,3],submiss:0,submodul:2,succesfulli:0,suffici:0,suggest:0,summari:0,support:0,suppress:0,suppress_warn:0,sure:0,surround:0,sw_spec_id:0,sy:0,system:[0,3],t:0,tabl:[0,3],table_index_sheet:0,table_metadata:0,table_nam:0,table_read_callback:0,target:[0,1],target_scenario_nam:0,task:0,temperatur:0,templat:0,template_scenario_nam:0,temporari:0,termin:0,test:0,text:0,than:0,thei:0,them:0,therebi:0,therefor:[0,3],thi:[0,3],thing:0,those:0,thu:0,time:0,time_limit:0,tmp_dir:0,todo:0,token:0,tooltip:0,tooltip_t:0,top:0,topleft:0,touch:0,track:0,transact:0,translat:0,tree:0,truth:0,tupl:0,turn:0,two:0,txt:0,type:0,typic:[0,3],ugli:0,ui:0,uid:0,un:0,under:0,unfortun:0,uniqu:0,unknown:0,unnam:0,untest:0,unverifi:0,up:[0,3],updat:0,update_cell_changes_in_db:0,update_scenario_output_tables_in_db:0,update_solve_output_into_scenario:0,upload:[0,3],url:0,urllib3:0,us:[0,3],usag:[0,3],user:0,user_access_token:0,user_nam:0,util:[2,3],v0:3,v2:3,v4:3,valid:0,valu:0,value_1:0,value_2:0,value_format:0,valueerror:0,variabl:0,venv:0,veri:3,verif:0,verifi:0,verify_integr:0,version:[2,3],via:0,view:0,visibl:0,visual:[0,3],vt:0,w:0,wa:0,wai:0,want:0,warn:0,watson:[0,3],watsonmachinelearningapicli:0,we:0,web:0,well:0,what:0,whatev:0,wheel:3,when:[0,3],where:0,which:0,whole:0,widget:0,widget_button:0,widget_select:0,width:0,wil:0,window:0,within:[0,3],without:0,wml:[0,1],wml_create_deploy:0,wml_credenti:0,wml_store_model:0,work:[0,3],world:0,would:0,write:[0,3],write_data_asset_as_file_cpd25:0,write_data_asset_as_file_wsc:0,write_data_into_scenario:0,write_data_into_scenario_:0,write_data_to_csv:0,write_data_to_csv_:0,write_data_to_excel:0,write_data_to_excel_:0,write_data_to_parquet:0,write_data_to_parquet_:0,write_do_model_to_fil:0,write_main_fil:0,write_yaml_fil:0,writer:0,written:0,ws:[0,3],wsl1:0,wsl:[0,3],wslib:0,wslv1:3,wsuser:0,www:0,xdvar:0,xl:0,xlsx:0,xlx:0,xxx:0,xxxxxx:0,y:0,yaml_file_path:0,yet:0,yml:0,you:0,your:0,yyyymmdd_hhmm:0,zip:[0,3],zoom_start:0},titles:["dse_do_utils package","Welcome to DSE DO Utils documentation!","dse_do_utils","Read me"],titleterms:{"0":3,"5":3,"class":3,"do":[1,3],"import":3,builder:3,content:[0,1],cpd25util:0,cpdv2:3,cpdv4:3,custom:3,datamanag:0,deployeddomodel:0,deployeddomodelcpd21:0,document:1,domodeldeploy:0,domodelexport:0,dse:1,dse_do_util:[0,2,3],environ:3,indic:1,instal:3,main:3,mapmanag:0,me:3,model:3,modul:[0,3],multiscenariomanag:0,optimizationengin:0,packag:0,plotly_cpd_workaround:0,plotlymanag:0,read:3,requir:3,scenariodbmanag:0,scenariomanag:0,scenariopick:0,scope:3,submodul:0,tabl:1,target:3,util:[0,1],version:0,welcom:1,wml:3}}) \ No newline at end of file +Search.setIndex({docnames:["dse_do_utils","index","modules","readme_link"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":4,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.viewcode":1,sphinx:56},filenames:["dse_do_utils.rst","index.rst","modules.rst","readme_link.rst"],objects:{"":{dse_do_utils:[0,0,0,"-"]},"dse_do_utils.cpd25utilities":{add_file_as_data_asset_cpd25:[0,1,1,""],add_file_path_as_data_asset_cpd25:[0,1,1,""],add_file_path_as_data_asset_wsc:[0,1,1,""],write_data_asset_as_file_cpd25:[0,1,1,""],write_data_asset_as_file_wsc:[0,1,1,""]},"dse_do_utils.datamanager":{DataManager:[0,2,1,""]},"dse_do_utils.datamanager.DataManager":{apply_and_concat:[0,3,1,""],df_crossjoin_ai:[0,3,1,""],df_crossjoin_mi:[0,3,1,""],df_crossjoin_si:[0,3,1,""],extract_solution:[0,3,1,""],get_parameter_value:[0,3,1,""],get_raw_table_by_name:[0,3,1,""],prep_parameters:[0,3,1,""],prepare_data_frames:[0,3,1,""],prepare_input_data_frames:[0,3,1,""],prepare_output_data_frames:[0,3,1,""],print_hello:[0,3,1,""],print_inputs_outputs_summary:[0,3,1,""],set_parameters:[0,3,1,""]},"dse_do_utils.deployeddomodel":{DeployedDOModel:[0,2,1,""]},"dse_do_utils.deployeddomodel.DeployedDOModel":{execute_model:[0,3,1,""],extract_solution:[0,3,1,""],get_deployment_id:[0,3,1,""],get_job_status:[0,3,1,""],get_outputs:[0,3,1,""],get_solve_details:[0,3,1,""],get_solve_details_objective:[0,3,1,""],get_solve_payload:[0,3,1,""],get_solve_status:[0,3,1,""],get_space_id:[0,3,1,""],monitor_execution:[0,3,1,""],solve:[0,3,1,""]},"dse_do_utils.deployeddomodelcpd21":{DeployedDOModel_CPD21:[0,2,1,""]},"dse_do_utils.deployeddomodelcpd21.DeployedDOModel_CPD21":{cleanup:[0,3,1,""],execute_model:[0,3,1,""],get_debug_dump_name_and_url:[0,3,1,""],get_debug_file_url:[0,3,1,""],get_execution_service_model_url:[0,3,1,""],get_execution_status:[0,3,1,""],get_headers:[0,3,1,""],get_input_files:[0,3,1,""],get_job_url:[0,3,1,""],get_kill_job_url:[0,3,1,""],get_log_file_name_and_url:[0,3,1,""],get_log_file_url:[0,3,1,""],get_objective:[0,3,1,""],get_solution_name_and_url:[0,3,1,""],get_solve_config:[0,3,1,""],get_solve_status:[0,3,1,""],get_solve_url:[0,3,1,""],get_stop_job_url:[0,3,1,""],kill_job:[0,3,1,""],monitor_execution:[0,3,1,""],post_process_container:[0,3,1,""],post_process_container_get_dataframe:[0,3,1,""],post_process_failed:[0,3,1,""],post_process_inline_table:[0,3,1,""],post_process_inline_table_get_dataframe:[0,3,1,""],post_process_interrupted:[0,3,1,""],post_process_processed:[0,3,1,""],retrieve_debug_materials:[0,3,1,""],retrieve_file:[0,3,1,""],retrieve_solution:[0,3,1,""],retrieve_solve_configuration:[0,3,1,""],set_output_settings_in_solve_configuration:[0,3,1,""],solve:[0,3,1,""],stop_job:[0,3,1,""]},"dse_do_utils.domodeldeployer":{DOModelDeployer:[0,2,1,""]},"dse_do_utils.domodeldeployer.DOModelDeployer":{create_archive:[0,3,1,""],create_model_archive:[0,3,1,""],create_model_directory:[0,3,1,""],create_package_extension:[0,3,1,""],create_software_specification:[0,3,1,""],create_zip_package_extension:[0,3,1,""],deploy_archive:[0,3,1,""],deploy_model:[0,3,1,""],get_scenario:[0,3,1,""],get_wml_create_deployment_meta_props:[0,3,1,""],get_wml_create_store_model_meta_props:[0,3,1,""],guid_from_space_name:[0,3,1,""],wml_create_deployment:[0,3,1,""],wml_store_model:[0,3,1,""],write_main_file:[0,3,1,""],write_yaml_file:[0,3,1,""]},"dse_do_utils.domodelexporter":{DOModelExporter:[0,2,1,""]},"dse_do_utils.domodelexporter.DOModelExporter":{export_do_models:[0,3,1,""],get_access_token_curl:[0,3,1,""],get_access_token_web:[0,3,1,""],get_do_model_export_curl:[0,3,1,""],get_do_model_export_web:[0,3,1,""],get_project_id:[0,3,1,""],write_do_model_to_file:[0,3,1,""]},"dse_do_utils.mapmanager":{MapManager:[0,2,1,""]},"dse_do_utils.mapmanager.MapManager":{add_full_screen:[0,3,1,""],add_layer_control:[0,3,1,""],create_blank_map:[0,3,1,""],get_arrows:[0,3,1,""],get_bearing:[0,3,1,""],get_html_table:[0,3,1,""],get_popup_table:[0,3,1,""],get_tooltip_table:[0,3,1,""],kansas_city_coord:[0,4,1,""]},"dse_do_utils.multiscenariomanager":{MultiScenarioManager:[0,2,1,""]},"dse_do_utils.multiscenariomanager.MultiScenarioManager":{add_data_file_to_project:[0,3,1,""],env_is_wscloud:[0,3,1,""],get_all_scenario_names:[0,3,1,""],get_data_directory:[0,3,1,""],get_dd_client:[0,3,1,""],get_multi_scenario_data:[0,3,1,""],get_root_directory:[0,3,1,""],get_scenarios_df:[0,3,1,""],load_data_from_scenario:[0,3,1,""],merge_scenario_data:[0,3,1,""],write_data_to_excel:[0,3,1,""]},"dse_do_utils.optimizationengine":{MyProgressListener:[0,2,1,""],OptimizationEngine:[0,2,1,""]},"dse_do_utils.optimizationengine.MyProgressListener":{notify_progress:[0,3,1,""]},"dse_do_utils.optimizationengine.OptimizationEngine":{add_mip_progress_kpis:[0,3,1,""],binary_var_series:[0,3,1,""],binary_var_series_s:[0,3,1,""],continuous_var_series:[0,3,1,""],continuous_var_series_s:[0,3,1,""],export_as_cpo:[0,3,1,""],export_as_cpo_s:[0,3,1,""],export_as_lp:[0,3,1,""],export_as_lp_s:[0,3,1,""],get_kpi_output_table:[0,3,1,""],integer_var_series:[0,3,1,""],integer_var_series_s:[0,3,1,""],solve:[0,3,1,""]},"dse_do_utils.plotlymanager":{PlotlyManager:[0,2,1,""]},"dse_do_utils.plotlymanager.PlotlyManager":{get_dash_tab_layout_m:[0,3,1,""],get_plotly_fig_m:[0,3,1,""]},"dse_do_utils.scenariodbmanager":{AutoScenarioDbTable:[0,2,1,""],BusinessKpiTable:[0,2,1,""],DbCellUpdate:[0,2,1,""],KpiTable:[0,2,1,""],ParameterTable:[0,2,1,""],ScenarioDbManager:[0,2,1,""],ScenarioDbTable:[0,2,1,""],ScenarioTable:[0,2,1,""]},"dse_do_utils.scenariodbmanager.AutoScenarioDbTable":{create_table_metadata:[0,3,1,""],get_sa_table:[0,3,1,""],insert_table_in_db_bulk:[0,3,1,""]},"dse_do_utils.scenariodbmanager.DbCellUpdate":{column_name:[0,4,1,""],current_value:[0,4,1,""],previous_value:[0,4,1,""],row_idx:[0,4,1,""],row_index:[0,4,1,""],scenario_name:[0,4,1,""],table_name:[0,4,1,""]},"dse_do_utils.scenariodbmanager.ScenarioDbManager":{add_scenario_name_to_dfs:[0,3,1,""],create_schema:[0,3,1,""],delete_scenario_from_db:[0,3,1,""],delete_scenario_name_column:[0,3,1,""],drop_all_tables:[0,3,1,""],duplicate_scenario_in_db:[0,3,1,""],get_scenario_db_table:[0,3,1,""],get_scenarios_df:[0,3,1,""],insert_scenarios_from_zip:[0,3,1,""],insert_scenarios_in_db:[0,3,1,""],insert_tables_in_db:[0,3,1,""],read_multi_scenario_tables_from_db:[0,3,1,""],read_scenario_from_db:[0,3,1,""],read_scenario_input_tables_from_db:[0,3,1,""],read_scenario_table_from_db:[0,3,1,""],read_scenario_table_from_db_cached:[0,3,1,""],read_scenario_tables_from_db:[0,3,1,""],read_scenario_tables_from_db_cached:[0,3,1,""],read_scenarios_from_db:[0,3,1,""],read_scenarios_table_from_db_cached:[0,3,1,""],rename_scenario_in_db:[0,3,1,""],replace_scenario_in_db:[0,3,1,""],replace_scenario_tables_in_db:[0,3,1,""],set_scenarios_table_read_callback:[0,3,1,""],set_table_read_callback:[0,3,1,""],update_cell_changes_in_db:[0,3,1,""],update_scenario_output_tables_in_db:[0,3,1,""]},"dse_do_utils.scenariodbmanager.ScenarioDbTable":{add_scenario_name_to_fk_constraint:[0,3,1,""],camel_case_to_snake_case:[0,3,1,""],create_table_metadata:[0,3,1,""],df_column_names_to_snake_case:[0,3,1,""],get_db_table_name:[0,3,1,""],get_df_column_names:[0,3,1,""],get_sa_column:[0,3,1,""],get_sa_table:[0,3,1,""],insert_table_in_db_bulk:[0,3,1,""],sqlcol:[0,3,1,""]},"dse_do_utils.scenariomanager":{Platform:[0,2,1,""],ScenarioManager:[0,2,1,""]},"dse_do_utils.scenariomanager.Platform":{CPD25:[0,4,1,""],CPD40:[0,4,1,""],CPDaaS:[0,4,1,""],Local:[0,4,1,""]},"dse_do_utils.scenariomanager.ScenarioManager":{add_data_file_to_project_s:[0,3,1,""],add_data_file_using_project_lib:[0,3,1,""],add_data_file_using_ws_lib:[0,3,1,""],add_data_file_using_ws_lib_s:[0,3,1,""],add_data_into_scenario:[0,3,1,""],add_data_into_scenario_s:[0,3,1,""],add_file_as_data_asset:[0,3,1,""],add_file_as_data_asset_s:[0,3,1,""],clear_scenario_data:[0,3,1,""],create_new_scenario:[0,3,1,""],detect_platform:[0,3,1,""],env_is_cpd25:[0,3,1,""],env_is_cpd40:[0,3,1,""],env_is_dsx:[0,3,1,""],env_is_wscloud:[0,3,1,""],export_model_as_lp:[0,3,1,""],get_data_directory:[0,3,1,""],get_dd_client:[0,3,1,""],get_do_scenario:[0,3,1,""],get_kpis_table_as_dataframe:[0,3,1,""],get_root_directory:[0,3,1,""],insert_scenarios_from_zip:[0,3,1,""],load_data:[0,3,1,""],load_data_from_csv:[0,3,1,""],load_data_from_csv_s:[0,3,1,""],load_data_from_excel:[0,3,1,""],load_data_from_excel_s:[0,3,1,""],load_data_from_parquet:[0,3,1,""],load_data_from_parquet_s:[0,3,1,""],load_data_from_scenario:[0,3,1,""],load_data_from_scenario_s:[0,3,1,""],load_data_from_zip_csv_s:[0,3,1,""],print_table_names:[0,3,1,""],replace_data_in_scenario:[0,3,1,""],replace_data_into_scenario_s:[0,3,1,""],update_solve_output_into_scenario:[0,3,1,""],write_data_into_scenario:[0,3,1,""],write_data_into_scenario_s:[0,3,1,""],write_data_to_csv:[0,3,1,""],write_data_to_csv_s:[0,3,1,""],write_data_to_excel:[0,3,1,""],write_data_to_excel_s:[0,3,1,""],write_data_to_parquet:[0,3,1,""],write_data_to_parquet_s:[0,3,1,""],write_data_to_zip_csv_s:[0,3,1,""]},"dse_do_utils.scenariopicker":{ScenarioPicker:[0,2,1,""]},"dse_do_utils.scenariopicker.ScenarioPicker":{ScenarioRefreshButton:[0,2,1,""],default_scenario:[0,4,1,""],get_dd_client:[0,3,1,""],get_scenario_picker_ui:[0,3,1,""],get_scenario_refresh_button:[0,3,1,""],get_scenario_select_drop_down:[0,3,1,""],get_selected_scenario:[0,3,1,""],load_selected_scenario_data:[0,3,1,""],widgets:[0,4,1,""]},"dse_do_utils.utilities":{add_sys_path:[0,1,1,""],convert_size:[0,1,1,""],list_file_hierarchy:[0,1,1,""]},dse_do_utils:{cpd25utilities:[0,0,0,"-"],datamanager:[0,0,0,"-"],deployeddomodel:[0,0,0,"-"],deployeddomodelcpd21:[0,0,0,"-"],domodeldeployer:[0,0,0,"-"],domodelexporter:[0,0,0,"-"],mapmanager:[0,0,0,"-"],module_reload:[0,1,1,""],multiscenariomanager:[0,0,0,"-"],optimizationengine:[0,0,0,"-"],plotly_cpd_workaround:[0,0,0,"-"],plotlymanager:[0,0,0,"-"],scenariodbmanager:[0,0,0,"-"],scenariomanager:[0,0,0,"-"],scenariopicker:[0,0,0,"-"],utilities:[0,0,0,"-"],version:[0,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","class","Python class"],"3":["py","method","Python method"],"4":["py","attribute","Python attribute"]},objtypes:{"0":"py:module","1":"py:function","2":"py:class","3":"py:method","4":"py:attribute"},terms:{"0":[0,1],"01":0,"02ea6d480895":0,"04":0,"0596001673":0,"085594":0,"1":[0,3],"100":0,"1132":0,"16":0,"1993":0,"2":[0,3],"2005586":0,"2016":0,"2022":0,"21":0,"21c8ac71":0,"23690284":0,"25a0fe88e4":0,"26c1":0,"277618282":0,"2fcustom_librari":0,"2fdeploy":0,"2fnotebook":0,"2fpython_sdk":0,"2fuse":0,"2fwatson":0,"3":[0,3],"31":0,"37188b1a8b48be2bef34b35b55f01cba0d29ed19":0,"3810":0,"39":0,"4":[0,3],"41":0,"447a":0,"458550":0,"469":0,"49a5":0,"4bd2":0,"5":[0,1],"50":0,"5194057":0,"5401":0,"585241":0,"5de6560a1cfa":0,"6":0,"600":0,"68747470733a2f2f7261772e67697468756275736572636f6e74656e742e636f6d2f49424d2f776174736f6e2d6d616368696e652d6c6561726e696e672d73616d706c65732f333731383862316138623438626532626566333462333562353566303163626130643239656431392f637064342e302f6e6f7465626f6f6b732f707974686f6e5f73646b2f6465706c6f796d656e74732f637573746f6d5f6c6962726172792f5573652532307363696b69742d6c6561726e253230616e64253230637573746f6d2532306c696272617279253230746f2532307072656469637425323074656d70657261747572652e6970796e62":0,"7":3,"785":0,"8021":0,"8364":0,"94":0,"95":0,"96":0,"98":0,"9f28":0,"abstract":0,"byte":0,"case":[0,3],"class":[0,1],"default":[0,3],"do":0,"enum":0,"export":[0,3],"float":0,"function":[0,3],"import":[0,1],"int":0,"new":0,"return":0,"static":0,"super":0,"true":0,"while":0,A:[0,3],And:0,As:0,At:0,But:[0,3],By:0,FOR:0,For:[0,3],If:0,In:[0,3],Is:0,It:[0,3],NOT:[0,3],No:0,Not:0,On:0,One:0,Or:0,That:0,The:[0,3],Then:[0,3],These:0,To:[0,3],Will:0,With:0,_:0,__index__:0,__init__:0,_base:0,_export_:0,_multi_output:0,_output:0,_table_index_:0,_xlx:0,a567:0,a933:0,aa50:0,abbrevi:0,abc:0,abl:[0,3],about:0,abov:0,abspath:0,accept:0,access:[0,3],access_project_or_spac:0,access_tok:0,access_token:0,accesstoken:0,accordingli:0,ad:[0,3],add:[0,3],add_child:0,add_data_file_to_project:0,add_data_file_to_project_:0,add_data_file_using_project_lib:0,add_data_file_using_ws_lib:0,add_data_file_using_ws_lib_:0,add_data_into_scenario:0,add_data_into_scenario_:0,add_file_as_data_asset:0,add_file_as_data_asset_:0,add_file_as_data_asset_cpd25:0,add_file_path_as_data_asset_cpd25:0,add_file_path_as_data_asset_wsc:0,add_full_screen:0,add_layer_control:0,add_mip_progress_kpi:0,add_scenario_name_to_df:0,add_scenario_name_to_fk_constraint:0,add_sys_path:0,add_to:0,addit:0,advanc:0,advantag:0,advis:0,after:0,air:3,alia:0,all:[0,3],allow:[0,3],along:0,alreadi:0,also:[0,3],altern:0,alwai:0,an:[0,3],android:0,ani:0,anoth:0,anywher:0,api:[0,3],apicli:0,app:0,appear:0,appli:[0,3],applic:0,apply_and_concat:0,ar:[0,3],archiv:0,arg:0,argument:0,around:[0,3],arrow:0,asset:[0,3],asset_nam:0,assign:0,assum:0,astyp:0,attach:0,attachment_typ:0,attempt:0,attribut:0,auto:0,auto_insert:0,autodetect:0,automat:[0,3],autoreload:0,autoscenariodbt:0,avail:[0,3],avoid:[0,3],axi:0,b7bf7fd8:0,back:0,backward:3,base:0,bash:0,basic:3,bear:0,been:[0,3],befor:0,being:0,below:0,best:0,best_bound_kpi_nam:0,better:0,between:[0,3],bewar:0,binary_var_seri:0,binary_var_series_:0,binaryvartyp:0,blank:0,blob:0,blue:0,bobhaffn:0,boilerpl:0,bool:0,both:[0,3],bound:0,box:0,br:0,browser:0,build:0,builder:[0,1],bulk:0,business_kpi:0,businesskpit:0,button:0,c:0,cach:0,call:0,callback:0,came:0,camel_case_to_snake_cas:0,camelcas:0,can:[0,3],cancel:0,cannot:[0,3],cartesian:0,categor:0,categori:0,caus:0,cell:[0,3],certain:0,certif:0,ch04s23:0,challeng:0,chang:0,channel:3,charact:0,chart:0,check:0,child:0,chrome:0,clean:0,cleanup:0,clear:0,clear_scenario_data:0,client:[0,3],cloud:[0,3],cluster4:0,cluster:0,cluster_nam:0,co:0,code:[0,3],cogno:0,collabor:0,color:0,color_mod:0,column:0,column_nam:0,columns_metadata:0,com:0,combin:[0,3],command:0,commit:0,commun:0,compass:0,compat:[0,3],complet:0,complex:0,compon:0,comput:0,conda:[0,3],condit:0,conf:0,configur:[0,3],connect:[0,3],constant:0,constraints_metadata:0,constructor:0,contain:[0,3],content:2,context:0,continuous_var_seri:0,continuous_var_series_:0,continuousvartyp:0,control:0,conveni:0,convers:0,convert:0,convert_s:0,cookbook:0,coord:0,copi:0,copy_to_csv:0,core:0,corner:0,correctli:0,could:0,count:0,counti:0,cp4d25:0,cp4daa:0,cp4dv2:0,cp4dv4:0,cp:[0,3],cpd25:0,cpd25util:2,cpd2:0,cpd3:[0,3],cpd40:0,cpd4:[0,3],cpd:[0,3],cpd_cluster_host:0,cpdaa:0,cpdv2:[0,1],cpdv3:[0,3],cpdv4:[0,1],cplex:[0,3],cpo:0,cpolab:0,cpsaa:0,creat:[0,3],create_arch:0,create_blank_map:0,create_model_arch:0,create_model_directori:0,create_new_scenario:0,create_package_extens:0,create_schema:0,create_software_specif:0,create_table_metadata:0,create_zip_package_extens:0,creation:0,credenti:0,cross:0,crossjoin:3,csv:[0,3],csv_directori:0,csv_name_pattern:0,curl:0,current:0,current_dir:0,current_valu:0,custom:0,d4c69a0d8158:0,d:[0,3],dash:0,dashboard:0,dashenterpris:0,data:[0,3],data_asset:[0,3],data_by_scenario:0,data_directori:0,data_id:0,data_manag:0,data_url:0,datafram:0,datamanag:[2,3],datascienceelit:0,dataset:0,datatyp:0,datetim:0,db:0,db_cell_upd:0,db_column_nam:0,db_table_nam:0,dbcellupd:0,dd:[0,3],dd_scenario:0,de:0,debug:0,debug_file_data_url:0,debug_file_dir:0,decis:3,decision_optimization_cli:0,def:0,default_max_oaas_time_limit_sec:0,default_max_run_time_sec:0,default_scenario:0,default_valu:0,defin:0,definit:0,delai:0,delet:0,delete_scenario_from_db:0,delete_scenario_name_column:0,depend:[0,3],deploi:0,deploy:[0,3],deploy_arch:0,deploy_model:0,deployed_model_nam:0,deployeddomodel:2,deployeddomodel_cpd21:0,deployeddomodelcpd21:2,deployment_descript:0,deployment_id:0,deployment_nam:0,deployment_uid:0,deprec:0,describ:0,design:[0,3],despit:0,detail:3,detect_platform:0,develop:[0,3],devic:0,df1:0,df2:0,df:0,df_column_names_to_snake_cas:0,df_crossjoin_ai:0,df_crossjoin_mi:0,df_crossjoin_si:0,df_dict:0,dict:0,dictionari:0,differ:[0,3],direct:0,directori:0,disadvantag:0,disk:0,dm:0,do4w:0,do_model_nam:0,do_util:0,doc:0,docplex:[0,3],document:[0,3],dodashapp:0,doe:0,doesn:0,domodeldeploy:2,domodelexport:2,done:0,down:[0,3],download:[0,3],driven:0,drop:[0,3],drop_all_t:0,drop_column_nam:0,dropdown:0,dse:[0,3],dse_do_dashboard:0,dse_do_util:1,dsx:0,dsx_project_dir:0,dsxuser:0,due:0,dump:0,dumpzipnam:0,duplic:0,duplicate_scenario_in_db:0,dure:0,dvar:[0,3],e:[0,3],each:0,easi:[0,3],easier:0,easili:0,echo:0,ef365b2c:0,effect:0,effici:0,eg:0,either:0,element:0,els:0,emb:0,empti:[0,3],en:0,enabl:0,enable_astyp:0,enable_debug_print:0,enable_sqlite_fk:0,enable_transact:0,enc_url:0,end:0,engin:[0,3],ensur:0,entiti:0,entri:0,enumer:0,env_is_cpd25:0,env_is_cpd40:0,env_is_dsx:0,env_is_wscloud:0,environ:[0,1],error:0,establish:0,evalu:0,exampl:0,excel:[0,3],excel_file_nam:0,excel_output_file_nam:0,excel_test:0,excelfil:0,excelwrit:0,except:0,exclud:0,execut:0,execute_model:0,execution_result:0,execution_statu:0,execution_status_json:0,exist:[0,3],expect:0,experi:0,explicit:0,explicitli:0,export_as_cpo:0,export_as_cpo_:0,export_as_lp:0,export_as_lp_:0,export_do_model:0,export_model:0,export_model_as_lp:0,expos:0,express:0,extend:0,extended_columns_metadata:0,extens:0,extract:0,extract_dvar_nam:0,extract_solut:0,f:0,fail:0,fake:3,fals:0,faster:0,featur:3,featuregroup:0,field:0,fig:0,file:[0,3],file_nam:0,file_name_pattern:0,file_path:0,file_size_limit:0,filenam:0,filepath:0,filter:0,find:0,firefox:0,first:0,fix:0,fkc:0,flask:0,folder:0,folium:[0,3],follow:[0,3],footer:0,forc:0,foreign:0,foreignkeyconstraint:0,form:0,format:0,former:[0,3],found:0,frame:0,free:0,from:[0,3],full:0,full_project_nam:0,func:0,futur:[0,3],g:[0,3],gap:[0,3],gener:0,get:0,get_access_token_curl:0,get_access_token_web:0,get_all_scenario_nam:0,get_arrow:0,get_bear:0,get_dash_tab_layout_m:0,get_data_directori:0,get_db_table_nam:0,get_dd_client:0,get_debug_dump_name_and_url:0,get_debug_file_url:0,get_deployment_id:0,get_df_column_nam:0,get_do_model_export_curl:0,get_do_model_export_web:0,get_do_scenario:0,get_execution_service_model_url:0,get_execution_statu:0,get_head:0,get_html_tabl:0,get_input_fil:0,get_job_statu:0,get_job_url:0,get_kill_job_url:0,get_kpi_output_t:0,get_kpis_table_as_datafram:0,get_log_file_name_and_url:0,get_log_file_url:0,get_multi_scenario_data:0,get_object:0,get_output:0,get_parameter_valu:0,get_plotly_fig_m:0,get_popup_t:0,get_project_id:0,get_raw_table_by_nam:0,get_root_directori:0,get_sa_column:0,get_sa_t:0,get_scenario:0,get_scenario_db_t:0,get_scenario_picker_ui:0,get_scenario_refresh_button:0,get_scenario_select_drop_down:0,get_scenarios_df:0,get_selected_scenario:0,get_solution_name_and_url:0,get_solve_config:0,get_solve_detail:0,get_solve_details_object:0,get_solve_payload:0,get_solve_statu:0,get_solve_url:0,get_space_id:0,get_stop_job_url:0,get_tab_layout_:0,get_tooltip_t:0,get_wml_create_deployment_meta_prop:0,get_wml_create_store_model_meta_prop:0,getcwd:0,gist:0,git:0,github:[0,3],githubpag:3,githubusercont:0,give:0,given:0,glob:0,grand:0,greatli:3,gsilabs_scnfo:0,guid_from_space_nam:0,h:0,ha:[0,3],hack:3,hand:0,handl:0,happen:0,hard:0,have:[0,3],header:0,height:0,hello:0,here:0,hierarch:0,hold:0,home:0,how:[0,3],howev:0,html:0,http:0,hypothet:0,i:0,ibm:[0,3],ibm_watson_machine_learn:0,ibm_watson_studio_lib:0,icon:0,icpd:3,id:0,ignor:[0,3],imp:0,impact:3,implement:0,impli:0,improv:[0,3],includ:0,inconsist:0,incorrect:0,independ:0,index:[0,1],indic:0,individu:[0,3],info:0,inform:0,init:0,initi:0,inline_t:0,inner:0,input:0,input_csv_name_pattern:0,input_db_t:0,input_name_pattern:0,input_table_nam:0,insecurerequestwarn:0,insert:0,insert_scenarios_from_zip:0,insert_scenarios_in_db:0,insert_table_in_db_bulk:0,insert_tables_in_db:0,instal:[0,1],installationreadm:3,instanc:0,instead:0,integ:0,integer_var_list:0,integer_var_seri:0,integer_var_series_:0,integervartyp:0,intend:3,interact:[0,3],interfac:3,intermedi:0,intern:[0,3],internet:3,interrupt:0,interv:0,io:0,ipynb:0,ipywidget:0,issu:0,itself:3,jerom:0,job:0,job_config_json:0,job_detail:0,job_uid:0,join:0,json:0,jupyt:[0,3],jupyterlab:[0,3],just:0,kansas_city_coord:0,karg:0,keep:0,kei:0,keyword:0,kill:0,kill_job:0,km:0,kpi:0,kpitabl:0,kwarg:0,lambda:0,last:0,lat:0,later:0,latest:0,layer_control_posit:0,lead:0,learn:0,leav:0,left:0,let:0,level:0,lib:0,librari:0,like:[0,3],limit:[0,3],line:0,list:0,list_file_hierarchi:0,load:0,load_data:0,load_data_from_csv:0,load_data_from_csv_:0,load_data_from_excel:0,load_data_from_excel_:0,load_data_from_parquet:0,load_data_from_parquet_:0,load_data_from_scenario:0,load_data_from_scenario_:0,load_data_from_zip_csv_:0,load_from_excel:0,load_selected_scenario_data:0,local:[0,3],local_relative_data_path:0,local_root:0,locat:0,log:0,log_file_nam:0,logged_in:0,logic:0,lon:0,longer:[0,3],look:0,loop:0,lp:[0,3],m:0,machin:0,made:0,mai:0,main:[0,1],main_file_path:0,maintain:0,major:0,make:0,manag:0,mani:3,manipul:[0,3],manual:0,map:[0,3],mapmanag:[2,3],marker:0,master:0,match:0,max_oaas_time_limit_sec:0,max_run_time_sec:0,maximum:0,mb:3,md:[0,3],mdl:0,me:[0,1],mean:0,medium:0,member:0,menu:[0,3],merg:0,merge_scenario_data:0,messag:0,meta_prop:0,metadata:0,method:0,mgr:0,might:3,minu:0,mip_gap_kpi_nam:0,miss:0,mix:0,mkonrad:0,mode:0,model1:0,model2:0,model:[0,1],model_archive_file_path:0,model_build:0,model_nam:0,model_uid:0,modelbuild:0,modifi:0,modul:[1,2],module_reload:0,moment:3,monitor:0,monitor_execut:0,monitor_loop_delay_sec:0,more:[0,3],most:0,mostli:3,move:3,mp:0,msm:0,multi:0,multi_scenario:0,multi_thread:0,multiindex:0,multipl:[0,3],multiscenariomanag:2,must:0,my:0,my_default_scenario:0,my_do_model:0,my_funct:0,my_input_column_nam:0,my_input_valu:0,my_modul:0,my_output_column_name_1:0,my_output_column_name_2:0,my_output_value1:0,my_output_value_1:0,my_output_value_2:0,my_tabl:0,myclass:0,myexcelfil:0,myexcelfileoutput:0,myfil:0,mymodel:0,myoptimizationengin:0,myprogresslisten:0,mytabl:0,n:0,n_arrow:0,name:0,namedtupl:0,nbviewer:0,necessari:0,need:0,neither:3,net:0,never:0,new_path:0,new_scenario_nam:0,next:0,nodefault:3,non:0,none:0,not_start:0,note:[0,3],notebook:[0,3],notify_progress:0,now:0,number:0,nwo:0,oaa:0,object:0,off:0,ok:0,omit:0,onc:0,one:0,ones:0,onli:[0,3],open:0,oper:0,optim:[0,3],optimizationengin:[2,3],option:[0,3],order:0,ordereddict:0,ore:3,oreilli:0,org:0,organ:0,origin:0,os:0,other:[0,3],otherwis:0,out:0,output:0,output_csv_name_pattern:0,output_db_t:0,output_name_pattern:0,output_table_nam:0,outsid:3,overrid:0,overridden:0,overwrit:0,overwritten:0,p1:0,p2:0,packag:[1,2,3],package_extens:0,package_path:0,package_zip_filepath:0,page:[0,1],page_id:0,page_sourc:0,pair:0,pak:3,panda:0,panel:0,param:0,param_nam:0,param_typ:0,paramet:0,parametert:0,pardir:0,parent:0,parent_dir:0,parent_dir_2:0,parquet:0,pars:0,parse_html:0,part:0,particular:[0,3],pass:0,password:0,past:0,path:0,pattern:0,payload:0,pd:0,per:0,perform:[0,3],period:0,person:0,phase:0,pick:3,picker:0,pip:[0,3],pkg_ext_id:0,place:0,placehold:0,plain:0,platform:0,plot:0,plotli:0,plotly_cpd_workaround:2,plotlymanag:2,plugin:0,point:0,poll:0,polylin:0,popul:0,popup:0,popup_t:0,possibl:0,post:[0,3],post_process_contain:0,post_process_container_get_datafram:0,post_process_fail:0,post_process_inline_t:0,post_process_inline_table_get_datafram:0,post_process_interrupt:0,post_process_process:0,practic:0,pre:[0,3],predict:0,prefer:3,prep_paramet:0,prepar:0,prepare_data_fram:0,prepare_input_data_fram:0,prepare_output_data_fram:0,present:0,prevent:0,previou:3,previous_valu:0,primari:0,print:0,print_hello:0,print_inputs_outputs_summari:0,print_table_nam:0,problem:0,procedur:0,process:[0,3],product:0,productionplan:0,progress:0,progress_data:0,progressdata:0,project:[0,3],project_access_token:0,project_data:[0,3],project_id:0,project_lib:0,project_nam:0,properti:0,property_1:0,property_2:0,provid:[0,3],put:3,pwd:0,py:0,pydata:0,pypi:3,python:[0,3],question:0,queu:0,quot:0,rais:0,raw:0,re:0,reach:0,read:[0,1],read_csv:0,read_multi_scenario_tables_from_db:0,read_parquet:0,read_scenario_from_db:0,read_scenario_input_tables_from_db:0,read_scenario_table_from_db:0,read_scenario_table_from_db_cach:0,read_scenario_table_from_db_callback:0,read_scenario_tables_from_db:0,read_scenario_tables_from_db_cach:0,read_scenarios_from_db:0,read_scenarios_table_from_db_cach:0,read_scenarios_table_from_db_callback:0,readthedoc:0,reason:0,record:0,reduc:0,refactor:3,refer:0,refine_conflict:0,reflect:0,refresh:0,regist:0,regular:0,regularli:[0,3],rel:0,relat:0,relationship:0,releas:3,relev:0,reliabl:0,reload:0,remot:0,remov:0,renam:0,rename_scenario_in_db:0,repeatedli:0,replac:0,replace_data_in_scenario:0,replace_data_into_scenario_:0,replace_scenario_in_db:0,replace_scenario_tables_in_db:0,repositori:[0,3],repository_id:0,repository_typ:0,repres:0,represent:0,request:0,requir:[0,1],rerun:0,resourc:0,respons:0,rest:0,restor:0,restrict:0,result:0,retreiv:0,retriev:0,retrieve_debug_materi:0,retrieve_fil:0,retrieve_solut:0,retrieve_solve_configur:0,right:0,root:0,root_dir:0,rotat:0,round:0,rout:0,routin:0,row:0,row_idx:0,row_index:0,run:[0,3],runtime_env_apsx_url:0,s:0,same:[0,3],sampl:0,save:0,scenario:[0,3],scenario_1:0,scenario_nam:0,scenario_table_nam:0,scenariodbmanag:2,scenariodbt:0,scenariomanag:[2,3],scenariopick:[2,3],scenariorefreshbutton:0,scenarios_table_read_callback:0,scenariot:0,schema:0,scikit:0,scnfo:0,scnfo_dash_pycharm_github:0,scope:1,screen:0,script:3,search:[0,1],second:0,see:[0,3],seem:0,select:0,self:0,separ:[0,3],sequenc:0,seri:0,server:0,servic:0,service_configuration_json:0,service_nam:0,set:0,set_index:0,set_output_settings_in_solve_configur:0,set_paramet:0,set_scenarios_table_read_callback:0,set_table_read_callback:0,setup:0,share:3,sheet:0,should:[0,3],show:0,side:0,signific:3,similar:0,simpl:0,simplenamespac:0,simplest:0,simpli:0,sinc:0,singl:0,site:0,size:0,size_byt:0,skip:0,sm:0,small:0,snake_cas:0,so:0,solut:0,solution_count_kpi_nam:0,solutionlisten:0,solv:0,solve_config:0,solve_config_json:0,solve_payload:0,solve_phase_kpi_nam:0,solve_statu:0,solve_time_kpi_nam:0,solvesolut:0,some:[0,3],someth:0,somewhat:0,sourc:[0,3],source_scenario_nam:0,sp:0,space:0,space_id:0,space_nam:0,spd:0,specifi:0,speed:0,spreadhseet:3,spreadsheet:0,sql:0,sqlachemi:0,sqlalchemi:0,sqlcol:0,ssl:0,stackoverflow:0,stamp:0,standard:0,start:0,startpath:0,state:0,statement:0,statu:0,step:0,stop:0,stop_job:0,storag:0,store:[0,3],str:0,strftime:0,string:0,strongli:0,structur:0,studio:[0,3],sub:0,subclass:[0,3],submiss:0,submodul:2,succesfulli:0,suffici:0,suggest:0,summari:0,support:0,suppress:0,suppress_warn:0,sure:0,surround:0,sw_spec_id:0,sy:0,system:[0,3],t:0,tabl:[0,3],table_index_sheet:0,table_metadata:0,table_nam:0,table_read_callback:0,target:[0,1],target_scenario_nam:0,task:0,temperatur:0,templat:0,template_scenario_nam:0,temporari:0,termin:0,test:0,text:0,than:0,thei:0,them:0,therebi:0,therefor:[0,3],thi:[0,3],thing:0,those:0,thu:0,time:0,time_limit:0,tmp_dir:0,to_csv:0,todo:0,token:0,tooltip:0,tooltip_t:0,top:0,topleft:0,touch:0,track:0,transact:0,translat:0,tree:0,truth:0,tupl:0,turn:0,two:0,txt:0,type:0,typic:[0,3],ugli:0,ui:0,uid:0,un:0,under:0,unfortun:0,uniqu:0,unknown:0,unnam:0,untest:0,unverifi:0,up:[0,3],updat:0,update_cell_changes_in_db:0,update_scenario_output_tables_in_db:0,update_solve_output_into_scenario:0,upload:[0,3],url:0,urllib3:0,us:[0,3],usag:[0,3],user:0,user_access_token:0,user_nam:0,util:[2,3],v0:3,v2:3,v4:3,valid:0,valu:0,value_1:0,value_2:0,value_format:0,valueerror:0,variabl:0,venv:0,veri:3,verif:0,verifi:0,verify_integr:0,version:[2,3],via:0,view:0,visibl:0,visual:[0,3],vt:0,w:0,wa:0,wai:0,want:0,warn:0,watson:[0,3],watsonmachinelearningapicli:0,we:0,web:0,well:0,what:0,whatev:0,wheel:3,when:[0,3],where:0,which:0,whole:0,widget:0,widget_button:0,widget_select:0,width:0,wil:0,window:0,within:[0,3],without:0,wml:[0,1],wml_create_deploy:0,wml_credenti:0,wml_store_model:0,work:[0,3],world:0,would:0,write:[0,3],write_data_asset_as_file_cpd25:0,write_data_asset_as_file_wsc:0,write_data_into_scenario:0,write_data_into_scenario_:0,write_data_to_csv:0,write_data_to_csv_:0,write_data_to_excel:0,write_data_to_excel_:0,write_data_to_parquet:0,write_data_to_parquet_:0,write_data_to_zip_csv_:0,write_do_model_to_fil:0,write_main_fil:0,write_yaml_fil:0,writer:0,written:0,ws:[0,3],wsl1:0,wsl:[0,3],wslib:0,wslv1:3,wsuser:0,www:0,xdvar:0,xl:0,xlsx:0,xlx:0,xxx:0,xxxxxx:0,y:0,yaml_file_path:0,yet:0,yml:0,you:0,your:0,yyyymmdd_hhmm:0,zip:[0,3],zip_file_path:0,zoom_start:0},titles:["dse_do_utils package","Welcome to DSE DO Utils documentation!","dse_do_utils","Read me"],titleterms:{"0":3,"5":3,"class":3,"do":[1,3],"import":3,builder:3,content:[0,1],cpd25util:0,cpdv2:3,cpdv4:3,custom:3,datamanag:0,deployeddomodel:0,deployeddomodelcpd21:0,document:1,domodeldeploy:0,domodelexport:0,dse:1,dse_do_util:[0,2,3],environ:3,indic:1,instal:3,main:3,mapmanag:0,me:3,model:3,modul:[0,3],multiscenariomanag:0,optimizationengin:0,packag:0,plotly_cpd_workaround:0,plotlymanag:0,read:3,requir:3,scenariodbmanag:0,scenariomanag:0,scenariopick:0,scope:3,submodul:0,tabl:1,target:3,util:[0,1],version:0,welcom:1,wml:3}}) \ No newline at end of file diff --git a/dse_do_utils/version.py b/dse_do_utils/version.py index 8f06430..7a9311b 100644 --- a/dse_do_utils/version.py +++ b/dse_do_utils/version.py @@ -9,4 +9,4 @@ See https://stackoverflow.com/questions/458550/standard-way-to-embed-version-into-python-package """ -__version__ = "0.5.4.4b0" +__version__ = "0.5.4.4"