Repository: microsoft/vasim (language: python)

Issue:
Contributing notes tweaks
# Pull Request

## Title

Contributing notes tweaks

---

## Description

- Add short notes on use of virtual environments for development.
- Add short notes on file naming conventions.
- Address some markdownlint complaints.

---

## Type of Change

- Documentation update

---


Discussion / hints:

Fix patch:
diff --git a/.coveragerc b/.coveragerc
index 0b4152d..6561e51 100644
--- a/.coveragerc
+++ b/.coveragerc
@@ -1,7 +1,7 @@
 [run]
 branch = True
 source =
-  recommender
-  simulator
+  src/vasim/recommender
+  src/vasim/simulator
 omit =
   *tests*
diff --git a/examples/streamlit/utils.py b/examples/streamlit/utils.py
index c2f46ed..26cd988 100644
--- a/examples/streamlit/utils.py
+++ b/examples/streamlit/utils.py
@@ -12,12 +12,12 @@
 import uuid
 from pathlib import Path
 import pandas as pd
-from simulator.analysis.plot_utils import calculate_metrics, process_data, read_data
+from vasim.simulator.analysis.plot_utils import calculate_metrics, process_data, read_data
 import streamlit as st
 
-from recommender.cluster_state_provider.ClusterStateConfig import ClusterStateConfig
-from simulator.InMemorySimulator import InMemoryRunnerSimulator
-from simulator.ParameterTuning import create_uuid
+from vasim.recommender.cluster_state_provider.ClusterStateConfig import ClusterStateConfig
+from vasim.simulator.InMemorySimulator import InMemoryRunnerSimulator
+from vasim.simulator.ParameterTuning import create_uuid
 
 
 def calculate_and_return_metrics(experiment_dir, perf_log_file_path=None, decision_file_path=None):
diff --git a/examples/streamlit/web_demo.py b/examples/streamlit/web_demo.py
index acfefd1..425814e 100644
--- a/examples/streamlit/web_demo.py
+++ b/examples/streamlit/web_demo.py
@@ -13,8 +13,8 @@
 import streamlit as st
 import pandas as pd
 import matplotlib.pyplot as plt
-from recommender.cluster_state_provider.ClusterStateConfig import ClusterStateConfig
-from simulator.ParameterTuning import tune_with_strategy
+from vasim.recommender.cluster_state_provider.ClusterStateConfig import ClusterStateConfig
+from vasim.simulator.ParameterTuning import tune_with_strategy
 
 st.set_page_config(layout="wide")
 st.title("VASIM Autoscaling Simulator Toolkit Presentation")
diff --git a/examples/using_vasim.ipynb b/examples/using_vasim.ipynb
index 4dcd6fc..464d331 100644
--- a/examples/using_vasim.ipynb
+++ b/examples/using_vasim.ipynb
@@ -53,7 +53,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 20,
+   "execution_count": 1,
    "metadata": {
     "vscode": {
      "languageId": "shellscript"
@@ -86,7 +86,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 21,
+   "execution_count": 2,
    "metadata": {
     "vscode": {
      "languageId": "shellscript"
@@ -199,7 +199,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 22,
+   "execution_count": 3,
    "metadata": {
     "vscode": {
      "languageId": "shellscript"
@@ -280,7 +280,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 23,
+   "execution_count": 4,
    "metadata": {
     "vscode": {
      "languageId": "shellscript"
@@ -295,7 +295,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 24,
+   "execution_count": 5,
    "metadata": {
     "vscode": {
      "languageId": "shellscript"
@@ -309,16 +309,16 @@
       "Prediction config was detected:{'waiting_before_predict': 1440, 'frequency_minutes': 1, 'minutes_to_predict': 10, 'forecasting_models': 'naive', 'total_predictive_window': 30}\n",
       "config: {}\n",
       "logger: <RootLogger root (ERROR)>\n",
-      "data_dir: /home/osdi-eval/vasim/examples/data\n",
+      "data_dir: /home/bpkroth/src/ozone/vasim/examples/data\n",
       "features: ['cpu']\n",
-      "decision_file_path: /home/osdi-eval/vasim/examples/data/_simulations/target_cfg-616e5eeb-ed74/decisions.txt\n",
+      "decision_file_path: /home/bpkroth/src/ozone/vasim/examples/data/_simulations/target_cfg-235b7b95-72c4/decisions.txt\n",
       "save_metadata: True\n",
       "frequency_minutes: 1\n",
       "minutes_to_predict: 10\n",
       "freq: 1T\n",
       "waiting_time: 1440\n",
-      "data_processor: <recommender.forecasting.utils.DataProcessor.DataProcessor object at 0x74c91b9a69e0>\n",
-      "data_forecaster: <recommender.forecasting.TimeSeriesForecaster.TimeSeriesForecaster object at 0x74c91b9a5c60>\n",
+      "data_processor: <vasim.recommender.forecasting.utils.DataProcessor.DataProcessor object at 0x7f2e64378370>\n",
+      "data_forecaster: <vasim.recommender.forecasting.TimeSeriesForecaster.TimeSeriesForecaster object at 0x7f2e64378310>\n",
       "cores: 0\n",
       "predicted_cores: 0\n",
       "_prediction_activated: False\n",
@@ -332,7 +332,7 @@
     }
    ],
    "source": [
-    "from simulator.InMemorySimulator import InMemoryRunnerSimulator\n",
+    "from vasim.simulator.InMemorySimulator import InMemoryRunnerSimulator\n",
     "\n",
     "# Specify your data directory, algorithm, initial cores count and config path if you did not name your metadata.json as metadata.json\n",
     "runner = InMemoryRunnerSimulator(data_dir=\"data/\",  algorithm=\"additive\", initial_cpu_limit=10, config_path=\"data/metadata.json\")\n",
@@ -355,7 +355,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 25,
+   "execution_count": 6,
    "metadata": {
     "vscode": {
      "languageId": "shellscript"
@@ -440,7 +440,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 26,
+   "execution_count": 7,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -465,13 +465,13 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 27,
+   "execution_count": 8,
    "metadata": {},
    "outputs": [],
    "source": [
     "%%capture\n",
     "\n",
-    "from simulator.ParameterTuning import tune_with_strategy\n",
+    "from vasim.simulator.ParameterTuning import tune_with_strategy\n",
     "\n",
     "# First create some test data to tune\n",
     "config_path = \"data/metadata.json\"  # This will be the baseline\n",
@@ -507,7 +507,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 28,
+   "execution_count": 9,
    "metadata": {
     "vscode": {
      "languageId": "powershell"
@@ -519,12 +519,12 @@
      "output_type": "stream",
      "text": [
       "total 24\n",
-      "drwxrwxr-x 2 osdi-eval osdi-eval 4096 Sep 12 18:20 target_cfg-0b59e21e-2a44\n",
-      "drwxrwxr-x 2 osdi-eval osdi-eval 4096 Sep 12 18:20 target_cfg-186d6ba2-8534\n",
-      "drwxrwxr-x 2 osdi-eval osdi-eval 4096 Sep 12 18:20 target_cfg-292a3e6b-1654\n",
-      "drwxrwxr-x 2 osdi-eval osdi-eval 4096 Sep 12 18:20 target_cfg-366cedb0-38c4\n",
-      "drwxrwxr-x 2 osdi-eval osdi-eval 4096 Sep 12 18:20 target_cfg-cee3e85f-3464\n",
-      "drwxrwxr-x 2 osdi-eval osdi-eval 4096 Sep 12 18:20 target_cfg-da6d2b30-ba54\n"
+      "drwxr-xr-x 2 bpkroth bpkroth 4096 Sep 17 13:09 target_cfg-08f1d1f7-9c94\n",
+      "drwxr-xr-x 2 bpkroth bpkroth 4096 Sep 17 13:09 target_cfg-244a0313-ff74\n",
+      "drwxr-xr-x 2 bpkroth bpkroth 4096 Sep 17 13:09 target_cfg-5d99567a-6a44\n",
+      "drwxr-xr-x 2 bpkroth bpkroth 4096 Sep 17 13:09 target_cfg-85ff26f9-59e4\n",
+      "drwxr-xr-x 2 bpkroth bpkroth 4096 Sep 17 13:09 target_cfg-d8275fe1-fb04\n",
+      "drwxr-xr-x 2 bpkroth bpkroth 4096 Sep 17 13:09 target_cfg-eb864cf6-96d4\n"
      ]
     }
    ],
@@ -546,13 +546,13 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 29,
+   "execution_count": 10,
    "metadata": {},
    "outputs": [],
    "source": [
     "%%capture\n",
     "\n",
-    "from simulator.analysis.pareto_visualization import create_pareto_curve_from_folder\n",
+    "from vasim.simulator.analysis.pareto_visualization import create_pareto_curve_from_folder\n",
     "\n",
     "# Now we'll plot them.  For parameters, put hte name of our folder, and the name of the output folder (Usually just the name of your folder with _tuning appended)\n",
     "pareto_2d = create_pareto_curve_from_folder(\"data\", \"data_tuning\")\n",
@@ -561,17 +561,17 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 30,
+   "execution_count": 11,
    "metadata": {},
    "outputs": [
     {
      "data": {
-      "image/png": "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",
+      "image/png": "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",
       "text/plain": [
        "<IPython.core.display.Image object>"
       ]
      },
-     "execution_count": 30,
+     "execution_count": 11,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -595,7 +595,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 31,
+   "execution_count": 12,
    "metadata": {},
    "outputs": [
     {
@@ -603,8 +603,8 @@
      "output_type": "stream",
      "text": [
       "Closest combination to (0, 0) is dimension_1: 19487.21896972081, dimension_2: 289.95169699353437\n",
-      "Folder: target_cfg-da6d2b30-ba54, Config: {}\n",
-      "Folder: target_cfg-da6d2b30-ba54\n",
+      "Folder: target_cfg-08f1d1f7-9c94, Config: {}\n",
+      "Folder: target_cfg-08f1d1f7-9c94\n",
       "All Configs:\n",
       "algo_specific_config: {'addend': 1}\n",
       "general_config: {'window': 60, 'lag': 10, 'max_cpu_limit': 25, 'min_cpu_limit': 2.0, 'granularity': 1}\n",
@@ -661,7 +661,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 32,
+   "execution_count": 13,
    "metadata": {
     "vscode": {
      "languageId": "shellscript"
@@ -690,7 +690,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.10.12"
+   "version": "3.10.14"
   }
  },
  "nbformat": 4,
diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 0000000..857a2db
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,62 @@
+[build-system]
+requires = ["setuptools>=68", "wheel"]
+build-backend = "setuptools.build_meta"
+
+[project]
+name = "vasim"
+description = "Vertical Autoscaler Simulator Toolkit"
+keywords = [
+    "data analysis",
+    "visualization",
+]
+classifiers = [
+    "Intended Audience :: Developers",
+    "Intended Audience :: System Administrators",
+    "Intended Audience :: Science/Research",
+    "License :: OSI Approved :: MIT License",
+    "Operating System :: OS Independent",
+    "Programming Language :: Python :: 3",
+    "Programming Language :: Python :: 3.10",
+    "Topic :: Scientific/Engineering :: Information Analysis",
+    "Topic :: Scientific/Engineering :: Visualization",
+    "Topic :: Scientific/Engineering :: Simulation",
+    "Topic :: System",
+]
+license = { "file" = "LICENSE" }
+readme = { file = "README.md", content-type = "text/markdown" }
+maintainers = [
+    { name = "VASim Maintainers", email = "vasim-maintainers@service.microsoft.com" },
+]
+
+version = "0.1.0"
+requires-python = ">=3.10"
+dependencies = [
+    # TODO: Remove version pinning or make it version dependent.
+    "cvxpy~=1.5.2",
+    "jsonargparse~=4.21.0",
+    "matplotlib~=3.7.1",
+    "numpy~=1.24.2",
+    "pandas~=1.5.3",
+    "plotnine~=0.12.2",
+    "python-dateutil~=2.8.2",
+    "requests~=2.32.0",
+    "sktime~=0.16.1",
+]
+[project.optional-dependencies]
+"dev" = [
+    "autopep8",
+    "flake8",
+    "pytest",
+    "coverage",
+    "pre-commit",
+]
+
+[project.urls]
+# TODO:
+#Documentation = "https://microsoft.github.io/vasim"
+Repository = "https://github.com/microsoft/vasim"
+Issues = "https://github.com/microsoft/vasim/issues"
+
+# Tell setuptools where to find the package.
+[tool.setuptools]
+package-dir = {"" = "src"}
\ No newline at end of file
diff --git a/requirements.txt b/requirements.txt
deleted file mode 100644
index e755d1b..0000000
--- a/requirements.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-cvxpy~=1.5.2
-jsonargparse~=4.21.0
-matplotlib~=3.7.1
-numpy~=1.24.2
-pandas~=1.5.3
-plotnine~=0.12.2
-python-dateutil~=2.8.2
-requests~=2.32.0
-setuptools>=68.0.0
-sktime~=0.16.1
diff --git a/setup.py b/setup.py
deleted file mode 100644
index 590df07..0000000
--- a/setup.py
+++ /dev/null
@@ -1,21 +0,0 @@
-#
-# --------------------------------------------------------------------------
-#  Licensed under the MIT License. See LICENSE file in the project root for
-#  license information.
-#  Copyright (c) Microsoft Corporation.
-# --------------------------------------------------------------------------
-#
-from setuptools import setup, find_packages
-
-with open('requirements.txt') as f:
-    requirements = f.read().splitlines()
-
-setup(
-    name='VASIM',
-    version='0.1',
-    packages=find_packages(),
-    install_requires=requirements,
-    extras_require={
-        'dev': ['autopep8', 'flake8', 'pytest', 'coverage']
-    }
-)
diff --git a/recommender/__init__.py b/src/vasim/__init__.py
similarity index 100%
rename from recommender/__init__.py
rename to src/vasim/__init__.py
diff --git a/recommender/DummyAdditiveRecommender.py b/src/vasim/recommender/DummyAdditiveRecommender.py
similarity index 97%
rename from recommender/DummyAdditiveRecommender.py
rename to src/vasim/recommender/DummyAdditiveRecommender.py
index 6186cf5..7b854fd 100644
--- a/recommender/DummyAdditiveRecommender.py
+++ b/src/vasim/recommender/DummyAdditiveRecommender.py
@@ -7,7 +7,7 @@
 #
 import logging
 import numpy as np
-from recommender.Recommender import Recommender
+from vasim.recommender.Recommender import Recommender
 
 
 class SimpleAdditiveRecommender(Recommender):
diff --git a/recommender/DummyMultiplierRecommender.py b/src/vasim/recommender/DummyMultiplierRecommender.py
similarity index 98%
rename from recommender/DummyMultiplierRecommender.py
rename to src/vasim/recommender/DummyMultiplierRecommender.py
index 4fdeeea..1dad04a 100644
--- a/recommender/DummyMultiplierRecommender.py
+++ b/src/vasim/recommender/DummyMultiplierRecommender.py
@@ -8,7 +8,7 @@
 import logging
 import numpy as np
 import pandas as pd
-from recommender.Recommender import Recommender
+from vasim.recommender.Recommender import Recommender
 
 
 class SimpleMultiplierRecommender(Recommender):
diff --git a/recommender/README.md b/src/vasim/recommender/README.md
similarity index 100%
rename from recommender/README.md
rename to src/vasim/recommender/README.md
diff --git a/recommender/Recommender.py b/src/vasim/recommender/Recommender.py
similarity index 100%
rename from recommender/Recommender.py
rename to src/vasim/recommender/Recommender.py
diff --git a/recommender/cluster_state_provider/__init__.py b/src/vasim/recommender/__init__.py
similarity index 100%
rename from recommender/cluster_state_provider/__init__.py
rename to src/vasim/recommender/__init__.py
diff --git a/recommender/cluster_state_provider/ClusterStateConfig.py b/src/vasim/recommender/cluster_state_provider/ClusterStateConfig.py
similarity index 100%
rename from recommender/cluster_state_provider/ClusterStateConfig.py
rename to src/vasim/recommender/cluster_state_provider/ClusterStateConfig.py
diff --git a/recommender/cluster_state_provider/ClusterStateProvider.py b/src/vasim/recommender/cluster_state_provider/ClusterStateProvider.py
similarity index 100%
rename from recommender/cluster_state_provider/ClusterStateProvider.py
rename to src/vasim/recommender/cluster_state_provider/ClusterStateProvider.py
diff --git a/recommender/cluster_state_provider/FileClusterStateProvider.py b/src/vasim/recommender/cluster_state_provider/FileClusterStateProvider.py
similarity index 98%
rename from recommender/cluster_state_provider/FileClusterStateProvider.py
rename to src/vasim/recommender/cluster_state_provider/FileClusterStateProvider.py
index e0c55b2..9b4c7ab 100644
--- a/recommender/cluster_state_provider/FileClusterStateProvider.py
+++ b/src/vasim/recommender/cluster_state_provider/FileClusterStateProvider.py
@@ -13,8 +13,8 @@
 import numpy as np
 import pandas as pd
 
-from recommender.cluster_state_provider.ClusterStateProvider import ClusterStateProvider
-from recommender.cluster_state_provider.ClusterStateConfig import ClusterStateConfig
+from vasim.recommender.cluster_state_provider.ClusterStateProvider import ClusterStateProvider
+from vasim.recommender.cluster_state_provider.ClusterStateConfig import ClusterStateConfig
 
 
 class FileClusterStateProvider(ClusterStateProvider):
diff --git a/recommender/cluster_state_provider/PredictiveFileClusterStateProvider.py b/src/vasim/recommender/cluster_state_provider/PredictiveFileClusterStateProvider.py
similarity index 95%
rename from recommender/cluster_state_provider/PredictiveFileClusterStateProvider.py
rename to src/vasim/recommender/cluster_state_provider/PredictiveFileClusterStateProvider.py
index 6753267..5227896 100644
--- a/recommender/cluster_state_provider/PredictiveFileClusterStateProvider.py
+++ b/src/vasim/recommender/cluster_state_provider/PredictiveFileClusterStateProvider.py
@@ -10,9 +10,9 @@
 import logging
 import math
 
-from recommender.cluster_state_provider.FileClusterStateProvider import FileClusterStateProvider
-from recommender.forecasting.TimeSeriesForecaster import TimeSeriesForecaster
-from recommender.forecasting.utils.DataProcessor import DataProcessor
+from vasim.recommender.cluster_state_provider.FileClusterStateProvider import FileClusterStateProvider
+from vasim.recommender.forecasting.TimeSeriesForecaster import TimeSeriesForecaster
+from vasim.recommender.forecasting.utils.DataProcessor import DataProcessor
 
 
 # This class adds predictive capabilities to FileClusterStateProvider. The algorithm is as
diff --git a/recommender/cluster_state_provider/README.md b/src/vasim/recommender/cluster_state_provider/README.md
similarity index 100%
rename from recommender/cluster_state_provider/README.md
rename to src/vasim/recommender/cluster_state_provider/README.md
diff --git a/recommender/forecasting/__init__.py b/src/vasim/recommender/cluster_state_provider/__init__.py
similarity index 100%
rename from recommender/forecasting/__init__.py
rename to src/vasim/recommender/cluster_state_provider/__init__.py
diff --git a/recommender/forecasting/README.md b/src/vasim/recommender/forecasting/README.md
similarity index 100%
rename from recommender/forecasting/README.md
rename to src/vasim/recommender/forecasting/README.md
diff --git a/recommender/forecasting/TimeSeriesForecaster.py b/src/vasim/recommender/forecasting/TimeSeriesForecaster.py
similarity index 97%
rename from recommender/forecasting/TimeSeriesForecaster.py
rename to src/vasim/recommender/forecasting/TimeSeriesForecaster.py
index 9d12304..54cb82a 100644
--- a/recommender/forecasting/TimeSeriesForecaster.py
+++ b/src/vasim/recommender/forecasting/TimeSeriesForecaster.py
@@ -12,7 +12,7 @@
 from sktime.forecasting.model_selection import SlidingWindowSplitter
 from sktime.forecasting.naive import NaiveForecaster
 
-from recommender.forecasting.models.oracle import Oracle
+from vasim.recommender.forecasting.models.oracle import Oracle
 
 
 class TimeSeriesForecaster:
diff --git a/recommender/forecasting/utils/__init__.py b/src/vasim/recommender/forecasting/__init__.py
similarity index 100%
rename from recommender/forecasting/utils/__init__.py
rename to src/vasim/recommender/forecasting/__init__.py
diff --git a/simulator/__init__.py b/src/vasim/recommender/forecasting/models/__init__.py
similarity index 100%
rename from simulator/__init__.py
rename to src/vasim/recommender/forecasting/models/__init__.py
diff --git a/recommender/forecasting/models/oracle.py b/src/vasim/recommender/forecasting/models/oracle.py
similarity index 100%
rename from recommender/forecasting/models/oracle.py
rename to src/vasim/recommender/forecasting/models/oracle.py
diff --git a/recommender/forecasting/utils/DataProcessor.py b/src/vasim/recommender/forecasting/utils/DataProcessor.py
similarity index 100%
rename from recommender/forecasting/utils/DataProcessor.py
rename to src/vasim/recommender/forecasting/utils/DataProcessor.py
diff --git a/src/vasim/recommender/forecasting/utils/__init__.py b/src/vasim/recommender/forecasting/utils/__init__.py
new file mode 100644
index 0000000..f1bcd73
--- /dev/null
+++ b/src/vasim/recommender/forecasting/utils/__init__.py
@@ -0,0 +1,7 @@
+#
+# --------------------------------------------------------------------------
+#  Licensed under the MIT License. See LICENSE file in the project root for
+#  license information.
+#  Copyright (c) Microsoft Corporation.
+# --------------------------------------------------------------------------
+#
diff --git a/simulator/InMemorySimulator.py b/src/vasim/simulator/InMemorySimulator.py
similarity index 94%
rename from simulator/InMemorySimulator.py
rename to src/vasim/simulator/InMemorySimulator.py
index 73a96f0..fb2cc2c 100644
--- a/simulator/InMemorySimulator.py
+++ b/src/vasim/simulator/InMemorySimulator.py
@@ -15,13 +15,13 @@
 import numpy as np
 import pandas as pd
 
-from recommender.DummyAdditiveRecommender import SimpleAdditiveRecommender
-from recommender.DummyMultiplierRecommender import SimpleMultiplierRecommender
-from recommender.cluster_state_provider.ClusterStateConfig import ClusterStateConfig
-from simulator.SimulatedInfraScaler import SimulatedInfraScaler
-from simulator.SimulatedClusterStateProviderFactory import SimulatedClusterStateProviderFactory
-from simulator.analysis.plot_utils import plot_cpu_usage_and_new_limit_plotnine, calculate_and_return_metrics_to_target
-from simulator.ParameterTuning import create_uuid
+from vasim.recommender.DummyAdditiveRecommender import SimpleAdditiveRecommender
+from vasim.recommender.DummyMultiplierRecommender import SimpleMultiplierRecommender
+from vasim.recommender.cluster_state_provider.ClusterStateConfig import ClusterStateConfig
+from vasim.simulator.SimulatedInfraScaler import SimulatedInfraScaler
+from vasim.simulator.SimulatedClusterStateProviderFactory import SimulatedClusterStateProviderFactory
+from vasim.simulator.analysis.plot_utils import plot_cpu_usage_and_new_limit_plotnine, calculate_and_return_metrics_to_target
+from vasim.simulator.ParameterTuning import create_uuid
 
 
 class InMemoryRunnerSimulator:
diff --git a/simulator/ParameterTuning.py b/src/vasim/simulator/ParameterTuning.py
similarity index 98%
rename from simulator/ParameterTuning.py
rename to src/vasim/simulator/ParameterTuning.py
index 4545bb9..927a42c 100644
--- a/simulator/ParameterTuning.py
+++ b/src/vasim/simulator/ParameterTuning.py
@@ -15,7 +15,7 @@
 import os
 import itertools
 
-from recommender.cluster_state_provider.ClusterStateConfig import ClusterStateConfig
+from vasim.recommender.cluster_state_provider.ClusterStateConfig import ClusterStateConfig
 
 random.seed(1234)
 
@@ -137,7 +137,7 @@ def _tune_parameters(config, data_dir=None, lag=None, algorithm=None, initial_cp
     logger.info(f'Starting tuning for configuration {config.uuid}')
     # Run the simulator
     try:
-        from simulator.InMemorySimulator import InMemoryRunnerSimulator
+        from vasim.simulator.InMemorySimulator import InMemoryRunnerSimulator
         runner = InMemoryRunnerSimulator(data_dir=data_dir, lag=lag, algorithm=algorithm, initial_cpu_limit=initial_cpu_limit, target_simulation_dir=target_dir,
                                          config=config)
         metrics = runner.run_simulation()
diff --git a/simulator/README.md b/src/vasim/simulator/README.md
similarity index 100%
rename from simulator/README.md
rename to src/vasim/simulator/README.md
diff --git a/simulator/SimulatedBaseClusterStateProvider.py b/src/vasim/simulator/SimulatedBaseClusterStateProvider.py
similarity index 97%
rename from simulator/SimulatedBaseClusterStateProvider.py
rename to src/vasim/simulator/SimulatedBaseClusterStateProvider.py
index 395f015..2bbc0d3 100644
--- a/simulator/SimulatedBaseClusterStateProvider.py
+++ b/src/vasim/simulator/SimulatedBaseClusterStateProvider.py
@@ -10,7 +10,7 @@
 
 import pandas as pd
 
-from recommender.cluster_state_provider.ClusterStateProvider import ClusterStateProvider
+from vasim.recommender.cluster_state_provider.ClusterStateProvider import ClusterStateProvider
 
 
 class SimulatedBaseClusterStateProvider(ClusterStateProvider):
diff --git a/simulator/SimulatedClusterStateProviderFactory.py b/src/vasim/simulator/SimulatedClusterStateProviderFactory.py
similarity index 82%
rename from simulator/SimulatedClusterStateProviderFactory.py
rename to src/vasim/simulator/SimulatedClusterStateProviderFactory.py
index 89ff2ea..901a8a2 100644
--- a/simulator/SimulatedClusterStateProviderFactory.py
+++ b/src/vasim/simulator/SimulatedClusterStateProviderFactory.py
@@ -5,10 +5,10 @@
 #  Copyright (c) Microsoft Corporation.
 # --------------------------------------------------------------------------
 #
-from recommender.cluster_state_provider.ClusterStateConfig import ClusterStateConfig
-from simulator.SimulatedBaseClusterStateProvider import SimulatedBaseClusterStateProvider
-from simulator.SimulatedInMemoryClusterStateProvider import SimulatedInMemoryClusterStateProvider
-from simulator.SimulatedInMemoryPredictiveClusterStateProvider import SimulatedInMemoryPredictiveClusterStateProvider
+from vasim.recommender.cluster_state_provider.ClusterStateConfig import ClusterStateConfig
+from vasim.simulator.SimulatedBaseClusterStateProvider import SimulatedBaseClusterStateProvider
+from vasim.simulator.SimulatedInMemoryClusterStateProvider import SimulatedInMemoryClusterStateProvider
+from vasim.simulator.SimulatedInMemoryPredictiveClusterStateProvider import SimulatedInMemoryPredictiveClusterStateProvider
 
 
 class SimulatedClusterStateProviderFactory:
diff --git a/simulator/SimulatedInMemoryClusterStateProvider.py b/src/vasim/simulator/SimulatedInMemoryClusterStateProvider.py
similarity index 91%
rename from simulator/SimulatedInMemoryClusterStateProvider.py
rename to src/vasim/simulator/SimulatedInMemoryClusterStateProvider.py
index d4c9494..4a437f3 100644
--- a/simulator/SimulatedInMemoryClusterStateProvider.py
+++ b/src/vasim/simulator/SimulatedInMemoryClusterStateProvider.py
@@ -9,8 +9,8 @@
 
 import numpy as np
 
-from recommender.cluster_state_provider.FileClusterStateProvider import FileClusterStateProvider
-from simulator.SimulatedBaseClusterStateProvider import SimulatedBaseClusterStateProvider
+from vasim.recommender.cluster_state_provider.FileClusterStateProvider import FileClusterStateProvider
+from vasim.simulator.SimulatedBaseClusterStateProvider import SimulatedBaseClusterStateProvider
 
 
 class SimulatedInMemoryClusterStateProvider(SimulatedBaseClusterStateProvider, FileClusterStateProvider):
diff --git a/simulator/SimulatedInMemoryPredictiveClusterStateProvider.py b/src/vasim/simulator/SimulatedInMemoryPredictiveClusterStateProvider.py
similarity index 93%
rename from simulator/SimulatedInMemoryPredictiveClusterStateProvider.py
rename to src/vasim/simulator/SimulatedInMemoryPredictiveClusterStateProvider.py
index d1dd447..2a717ce 100644
--- a/simulator/SimulatedInMemoryPredictiveClusterStateProvider.py
+++ b/src/vasim/simulator/SimulatedInMemoryPredictiveClusterStateProvider.py
@@ -10,8 +10,8 @@
 import numpy as np
 
 
-from recommender.cluster_state_provider.PredictiveFileClusterStateProvider import PredictiveFileClusterStateProvider
-from simulator.SimulatedBaseClusterStateProvider import SimulatedBaseClusterStateProvider
+from vasim.recommender.cluster_state_provider.PredictiveFileClusterStateProvider import PredictiveFileClusterStateProvider
+from vasim.simulator.SimulatedBaseClusterStateProvider import SimulatedBaseClusterStateProvider
 
 
 class SimulatedInMemoryPredictiveClusterStateProvider(SimulatedBaseClusterStateProvider, PredictiveFileClusterStateProvider):
diff --git a/simulator/SimulatedInfraScaler.py b/src/vasim/simulator/SimulatedInfraScaler.py
similarity index 100%
rename from simulator/SimulatedInfraScaler.py
rename to src/vasim/simulator/SimulatedInfraScaler.py
diff --git a/src/vasim/simulator/__init__.py b/src/vasim/simulator/__init__.py
new file mode 100644
index 0000000..f1bcd73
--- /dev/null
+++ b/src/vasim/simulator/__init__.py
@@ -0,0 +1,7 @@
+#
+# --------------------------------------------------------------------------
+#  Licensed under the MIT License. See LICENSE file in the project root for
+#  license information.
+#  Copyright (c) Microsoft Corporation.
+# --------------------------------------------------------------------------
+#
diff --git a/simulator/analysis/ParetoFront2D.py b/src/vasim/simulator/analysis/ParetoFront2D.py
similarity index 99%
rename from simulator/analysis/ParetoFront2D.py
rename to src/vasim/simulator/analysis/ParetoFront2D.py
index d586f13..3879fb1 100644
--- a/simulator/analysis/ParetoFront2D.py
+++ b/src/vasim/simulator/analysis/ParetoFront2D.py
@@ -12,7 +12,7 @@
 import pandas as pd
 from matplotlib import pyplot as plt
 
-from simulator.analysis.ParetoFrontier import ParetoFrontier
+from vasim.simulator.analysis.ParetoFrontier import ParetoFrontier
 
 
 def calculate_objective(alpha, sum_slack, sum_insufficient_cpu):
diff --git a/simulator/analysis/ParetoFrontier.py b/src/vasim/simulator/analysis/ParetoFrontier.py
similarity index 97%
rename from simulator/analysis/ParetoFrontier.py
rename to src/vasim/simulator/analysis/ParetoFrontier.py
index fc14420..acece6e 100644
--- a/simulator/analysis/ParetoFrontier.py
+++ b/src/vasim/simulator/analysis/ParetoFrontier.py
@@ -12,7 +12,7 @@
 import numpy as np
 import pandas as pd
 
-from recommender.cluster_state_provider.ClusterStateConfig import ClusterStateConfig
+from vasim.recommender.cluster_state_provider.ClusterStateConfig import ClusterStateConfig
 
 
 class ParetoFrontier(ABC):
diff --git a/simulator/analysis/TODOs.md b/src/vasim/simulator/analysis/TODOs.md
similarity index 100%
rename from simulator/analysis/TODOs.md
rename to src/vasim/simulator/analysis/TODOs.md
diff --git a/src/vasim/simulator/analysis/__init__.py b/src/vasim/simulator/analysis/__init__.py
new file mode 100644
index 0000000..f1bcd73
--- /dev/null
+++ b/src/vasim/simulator/analysis/__init__.py
@@ -0,0 +1,7 @@
+#
+# --------------------------------------------------------------------------
+#  Licensed under the MIT License. See LICENSE file in the project root for
+#  license information.
+#  Copyright (c) Microsoft Corporation.
+# --------------------------------------------------------------------------
+#
diff --git a/simulator/analysis/pareto_visualization.py b/src/vasim/simulator/analysis/pareto_visualization.py
similarity index 92%
rename from simulator/analysis/pareto_visualization.py
rename to src/vasim/simulator/analysis/pareto_visualization.py
index 6c17b68..4e6ec3c 100644
--- a/simulator/analysis/pareto_visualization.py
+++ b/src/vasim/simulator/analysis/pareto_visualization.py
@@ -10,9 +10,9 @@
 import multiprocessing
 import time
 import os
-from simulator.analysis.ParetoFront2D import ParetoFront2D
-from simulator.analysis.ParetoFrontier import ParetoFrontier
-from simulator.analysis.plot_utils import plot_cpu_usage_and_new_limit_reformat
+from vasim.simulator.analysis.ParetoFront2D import ParetoFront2D
+from vasim.simulator.analysis.ParetoFrontier import ParetoFrontier
+from vasim.simulator.analysis.plot_utils import plot_cpu_usage_and_new_limit_reformat
 
 
 def _load_results_parallel(target_folder):
diff --git a/simulator/analysis/plot_utils.py b/src/vasim/simulator/analysis/plot_utils.py
similarity index 100%
rename from simulator/analysis/plot_utils.py
rename to src/vasim/simulator/analysis/plot_utils.py


Test patch:
diff --git a/tests/test_SimulatedInfraScaler.py b/tests/test_SimulatedInfraScaler.py
index 95e9ebf..e1ac159 100644
--- a/tests/test_SimulatedInfraScaler.py
+++ b/tests/test_SimulatedInfraScaler.py
@@ -10,8 +10,8 @@
 import shutil
 import json
 from datetime import datetime, timedelta
-from simulator.SimulatedInfraScaler import SimulatedInfraScaler
-from simulator.InMemorySimulator import InMemoryRunnerSimulator
+from vasim.simulator.SimulatedInfraScaler import SimulatedInfraScaler
+from vasim.simulator.InMemorySimulator import InMemoryRunnerSimulator
 from pathlib import Path
 
 
diff --git a/tests/test_cluster_state_config.py b/tests/test_cluster_state_config.py
index 9839089..d7ea8ac 100644
--- a/tests/test_cluster_state_config.py
+++ b/tests/test_cluster_state_config.py
@@ -11,7 +11,7 @@
 import os
 from unittest.mock import mock_open, patch
 
-from recommender.cluster_state_provider.ClusterStateConfig import ClusterStateConfig
+from vasim.recommender.cluster_state_provider.ClusterStateConfig import ClusterStateConfig
 
 
 class TestClusterStateConfig(unittest.TestCase):
diff --git a/tests/test_config_params.py b/tests/test_config_params.py
index 2dd075d..d0b8806 100644
--- a/tests/test_config_params.py
+++ b/tests/test_config_params.py
@@ -9,7 +9,7 @@
 import unittest
 import shutil
 from pathlib import Path
-from simulator.InMemorySimulator import InMemoryRunnerSimulator
+from vasim.simulator.InMemorySimulator import InMemoryRunnerSimulator
 
 
 class TestRunnerSimulatorIntegrationTest(unittest.TestCase):
diff --git a/tests/test_e2e_analysis_pareto.py b/tests/test_e2e_analysis_pareto.py
index 5517e87..0732dca 100644
--- a/tests/test_e2e_analysis_pareto.py
+++ b/tests/test_e2e_analysis_pareto.py
@@ -10,8 +10,8 @@
 import shutil
 from unittest.mock import patch, MagicMock
 from pathlib import Path
-from simulator.analysis.pareto_visualization import create_pareto_curve_from_folder
-from simulator.ParameterTuning import tune_with_strategy
+from vasim.simulator.analysis.pareto_visualization import create_pareto_curve_from_folder
+from vasim.simulator.ParameterTuning import tune_with_strategy
 
 
 class TestRunnerSimulatorIntegrationTest(unittest.TestCase):
diff --git a/tests/test_e2e_multi_run_tune_with_strategy.py b/tests/test_e2e_multi_run_tune_with_strategy.py
index 286b77d..fef273b 100644
--- a/tests/test_e2e_multi_run_tune_with_strategy.py
+++ b/tests/test_e2e_multi_run_tune_with_strategy.py
@@ -9,7 +9,7 @@
 import unittest
 import shutil
 from unittest.mock import MagicMock, patch
-from simulator.ParameterTuning import tune_with_strategy
+from vasim.simulator.ParameterTuning import tune_with_strategy
 from pathlib import Path
 
 '''
diff --git a/tests/test_e2e_single_run_sim.py b/tests/test_e2e_single_run_sim.py
index 844afb6..1f429bb 100644
--- a/tests/test_e2e_single_run_sim.py
+++ b/tests/test_e2e_single_run_sim.py
@@ -9,7 +9,7 @@
 import unittest
 import shutil
 from unittest.mock import patch, MagicMock
-from simulator.InMemorySimulator import InMemoryRunnerSimulator
+from vasim.simulator.InMemorySimulator import InMemoryRunnerSimulator
 from pathlib import Path
 
 
diff --git a/tests/test_metrics_data_window.py b/tests/test_metrics_data_window.py
index ca63fde..add7001 100644
--- a/tests/test_metrics_data_window.py
+++ b/tests/test_metrics_data_window.py
@@ -11,10 +11,10 @@
 from datetime import datetime
 from pathlib import Path
 import pandas as pd
-from simulator.SimulatedInMemoryPredictiveClusterStateProvider import SimulatedInMemoryPredictiveClusterStateProvider
-from recommender.cluster_state_provider.ClusterStateConfig import ClusterStateConfig
-from recommender.cluster_state_provider.FileClusterStateProvider import FileClusterStateProvider
-from simulator.InMemorySimulator import InMemoryRunnerSimulator
+from vasim.simulator.SimulatedInMemoryPredictiveClusterStateProvider import SimulatedInMemoryPredictiveClusterStateProvider
+from vasim.recommender.cluster_state_provider.ClusterStateConfig import ClusterStateConfig
+from vasim.recommender.cluster_state_provider.FileClusterStateProvider import FileClusterStateProvider
+from vasim.simulator.InMemorySimulator import InMemoryRunnerSimulator
 from unittest.mock import patch