From ce5519fc107f0d7d8f6b923915eeafb675b85cea Mon Sep 17 00:00:00 2001
From: Yangge Li <li213@illinois.edu>
Date: Thu, 19 May 2022 18:59:13 -0500
Subject: [PATCH] setting up pip installation for project

---
 .gitignore                                    |  1 +
 demo.py                                       | 30 +++++++-------
 demo2.py                                      | 30 +++++++-------
 {src => dryvr_plus_plus}/__init__.py          |  0
 {src => dryvr_plus_plus}/example/__init__.py  |  0
 .../example/example_agent/__init__.py         |  0
 .../example/example_agent/car_agent.py        |  4 +-
 .../example/example_agent/sign_agent.py       |  2 +-
 .../example/example_map/__init__.py           |  0
 .../example/example_map/simple_map.py         |  4 +-
 .../example/example_map/simple_map2.py        |  6 +--
 .../example/example_sensor/__init__.py        |  0
 .../example/example_sensor/fake_sensor.py     |  0
 {src => dryvr_plus_plus}/plotter/__init__.py  |  0
 {src => dryvr_plus_plus}/plotter/parser.py    |  0
 {src => dryvr_plus_plus}/plotter/plotter2D.py | 40 +++++++++++++++----
 {src => dryvr_plus_plus}/plotter/plotter3D.py |  0
 .../scene_verifier/__init__.py                |  0
 .../scene_verifier/agents/__init__.py         |  0
 .../scene_verifier/agents/base_agent.py       |  2 +-
 .../scene_verifier/analysis/__init__.py       |  0
 .../analysis/analysis_tree_node.py            |  0
 .../scene_verifier/analysis/simulator.py      |  8 ++--
 .../scene_verifier/analysis/verifier.py       |  8 ++--
 .../scene_verifier/automaton/__init__.py      |  0
 .../scene_verifier/automaton/guard.py         |  6 +--
 .../automaton/hybrid_automaton.py             |  0
 .../automaton/hybrid_io_automaton.py          |  2 +-
 .../scene_verifier/automaton/reset.py         |  0
 .../scene_verifier/code_parser/__init__.py    |  0
 .../code_parser/pythonparser.py               |  0
 .../scene_verifier/dryvr/__init__.py          |  0
 .../scene_verifier/dryvr/common/__init__.py   |  0
 .../scene_verifier/dryvr/common/config.py     |  0
 .../scene_verifier/dryvr/common/constant.py   |  0
 .../scene_verifier/dryvr/common/io.py         |  2 +-
 .../scene_verifier/dryvr/common/utils.py      |  0
 .../scene_verifier/dryvr/core/__init__.py     |  0
 .../scene_verifier/dryvr/core/distance.py     |  0
 .../scene_verifier/dryvr/core/dryvrcore.py    | 14 +++----
 .../scene_verifier/dryvr/core/dryvrmain.py    | 30 +++++++-------
 .../scene_verifier/dryvr/core/goalchecker.py  |  2 +-
 .../scene_verifier/dryvr/core/graph.py        |  0
 .../scene_verifier/dryvr/core/guard.py        |  2 +-
 .../scene_verifier/dryvr/core/initialset.py   |  0
 .../dryvr/core/initialsetstack.py             |  0
 .../scene_verifier/dryvr/core/reachtube.py    |  0
 .../scene_verifier/dryvr/core/reset.py        |  2 +-
 .../dryvr/core/uniformchecker.py              |  4 +-
 .../dryvr/discrepancy/Global_Disc.py          |  0
 .../dryvr/discrepancy/PW_Discrepancy.py       |  0
 .../dryvr/discrepancy/__init__.py             |  0
 .../scene_verifier/map/__init__.py            |  0
 .../scene_verifier/map/lane.py                |  2 +-
 .../scene_verifier/map/lane_map.py            |  4 +-
 .../scene_verifier/map/lane_segment.py        |  2 +-
 .../scene_verifier/scenario/__init__.py       |  0
 .../scene_verifier/scenario/scenario.py       | 16 ++++----
 .../scene_verifier/utils/__init__.py          |  0
 .../scene_verifier/utils/utils.py             |  0
 example_controller1.py                        |  2 +-
 example_controller2.py                        |  2 +-
 example_controller3.py                        |  2 +-
 example_two_car_sign_lane_switch.py           | 14 +++----
 setup.py                                      | 35 ++++++++++++++++
 tests/testdpp.py                              |  8 ++--
 66 files changed, 172 insertions(+), 114 deletions(-)
 rename {src => dryvr_plus_plus}/__init__.py (100%)
 rename {src => dryvr_plus_plus}/example/__init__.py (100%)
 rename {src => dryvr_plus_plus}/example/example_agent/__init__.py (100%)
 rename {src => dryvr_plus_plus}/example/example_agent/car_agent.py (97%)
 rename {src => dryvr_plus_plus}/example/example_agent/sign_agent.py (88%)
 rename {src => dryvr_plus_plus}/example/example_map/__init__.py (100%)
 rename {src => dryvr_plus_plus}/example/example_map/simple_map.py (89%)
 rename {src => dryvr_plus_plus}/example/example_map/simple_map2.py (95%)
 rename {src => dryvr_plus_plus}/example/example_sensor/__init__.py (100%)
 rename {src => dryvr_plus_plus}/example/example_sensor/fake_sensor.py (100%)
 rename {src => dryvr_plus_plus}/plotter/__init__.py (100%)
 rename {src => dryvr_plus_plus}/plotter/parser.py (100%)
 rename {src => dryvr_plus_plus}/plotter/plotter2D.py (87%)
 rename {src => dryvr_plus_plus}/plotter/plotter3D.py (100%)
 rename {src => dryvr_plus_plus}/scene_verifier/__init__.py (100%)
 rename {src => dryvr_plus_plus}/scene_verifier/agents/__init__.py (100%)
 rename {src => dryvr_plus_plus}/scene_verifier/agents/base_agent.py (77%)
 rename {src => dryvr_plus_plus}/scene_verifier/analysis/__init__.py (100%)
 rename {src => dryvr_plus_plus}/scene_verifier/analysis/analysis_tree_node.py (100%)
 rename {src => dryvr_plus_plus}/scene_verifier/analysis/simulator.py (94%)
 rename {src => dryvr_plus_plus}/scene_verifier/analysis/verifier.py (94%)
 rename {src => dryvr_plus_plus}/scene_verifier/automaton/__init__.py (100%)
 rename {src => dryvr_plus_plus}/scene_verifier/automaton/guard.py (99%)
 rename {src => dryvr_plus_plus}/scene_verifier/automaton/hybrid_automaton.py (100%)
 rename {src => dryvr_plus_plus}/scene_verifier/automaton/hybrid_io_automaton.py (90%)
 rename {src => dryvr_plus_plus}/scene_verifier/automaton/reset.py (100%)
 rename {src => dryvr_plus_plus}/scene_verifier/code_parser/__init__.py (100%)
 rename {src => dryvr_plus_plus}/scene_verifier/code_parser/pythonparser.py (100%)
 rename {src => dryvr_plus_plus}/scene_verifier/dryvr/__init__.py (100%)
 rename {src => dryvr_plus_plus}/scene_verifier/dryvr/common/__init__.py (100%)
 rename {src => dryvr_plus_plus}/scene_verifier/dryvr/common/config.py (100%)
 rename {src => dryvr_plus_plus}/scene_verifier/dryvr/common/constant.py (100%)
 rename {src => dryvr_plus_plus}/scene_verifier/dryvr/common/io.py (97%)
 rename {src => dryvr_plus_plus}/scene_verifier/dryvr/common/utils.py (100%)
 rename {src => dryvr_plus_plus}/scene_verifier/dryvr/core/__init__.py (100%)
 rename {src => dryvr_plus_plus}/scene_verifier/dryvr/core/distance.py (100%)
 rename {src => dryvr_plus_plus}/scene_verifier/dryvr/core/dryvrcore.py (94%)
 rename {src => dryvr_plus_plus}/scene_verifier/dryvr/core/dryvrmain.py (96%)
 rename {src => dryvr_plus_plus}/scene_verifier/dryvr/core/goalchecker.py (98%)
 rename {src => dryvr_plus_plus}/scene_verifier/dryvr/core/graph.py (100%)
 rename {src => dryvr_plus_plus}/scene_verifier/dryvr/core/guard.py (99%)
 rename {src => dryvr_plus_plus}/scene_verifier/dryvr/core/initialset.py (100%)
 rename {src => dryvr_plus_plus}/scene_verifier/dryvr/core/initialsetstack.py (100%)
 rename {src => dryvr_plus_plus}/scene_verifier/dryvr/core/reachtube.py (100%)
 rename {src => dryvr_plus_plus}/scene_verifier/dryvr/core/reset.py (99%)
 rename {src => dryvr_plus_plus}/scene_verifier/dryvr/core/uniformchecker.py (98%)
 rename {src => dryvr_plus_plus}/scene_verifier/dryvr/discrepancy/Global_Disc.py (100%)
 rename {src => dryvr_plus_plus}/scene_verifier/dryvr/discrepancy/PW_Discrepancy.py (100%)
 rename {src => dryvr_plus_plus}/scene_verifier/dryvr/discrepancy/__init__.py (100%)
 rename {src => dryvr_plus_plus}/scene_verifier/map/__init__.py (100%)
 rename {src => dryvr_plus_plus}/scene_verifier/map/lane.py (96%)
 rename {src => dryvr_plus_plus}/scene_verifier/map/lane_map.py (96%)
 rename {src => dryvr_plus_plus}/scene_verifier/map/lane_segment.py (98%)
 rename {src => dryvr_plus_plus}/scene_verifier/scenario/__init__.py (100%)
 rename {src => dryvr_plus_plus}/scene_verifier/scenario/scenario.py (96%)
 rename {src => dryvr_plus_plus}/scene_verifier/utils/__init__.py (100%)
 rename {src => dryvr_plus_plus}/scene_verifier/utils/utils.py (100%)
 create mode 100644 setup.py

diff --git a/.gitignore b/.gitignore
index 67933087..5bba7af9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@ __pycache__/
 .idea/
 venv/
 .DS_Store
+**.egg-info/
\ No newline at end of file
diff --git a/demo.py b/demo.py
index c0a62d94..c27601c9 100644
--- a/demo.py
+++ b/demo.py
@@ -1,8 +1,8 @@
-from src.example.example_agent.car_agent import CarAgent
-from src.scene_verifier.scenario.scenario import Scenario
-from src.example.example_map.simple_map2 import SimpleMap2, SimpleMap3, SimpleMap5, SimpleMap6
-from src.plotter.plotter2D import *
-from src.example.example_sensor.fake_sensor import FakeSensor2
+from dryvrpy.example.example_agent.car_agent import CarAgent
+from dryvrpy.scene_verifier.scenario.scenario import Scenario
+from dryvrpy.example.example_map.simple_map2 import SimpleMap2, SimpleMap3, SimpleMap5, SimpleMap6
+from dryvrpy.plotter.plotter2D import *
+from dryvrpy.example.example_sensor.fake_sensor import FakeSensor2
 
 import matplotlib.pyplot as plt
 import numpy as np
@@ -51,16 +51,16 @@ if __name__ == "__main__":
             (VehicleMode.Normal, LaneMode.Lane1),
         ]
     )
-    res_list = scenario.simulate_multi(40,1)
-    # traces = scenario.verify(40)
+    # res_list = scenario.simulate_multi(40,1)
+    traces = scenario.verify(40)
 
-    # fig = plt.figure(2)
-    # fig,x_lim,y_lim = plot_map(tmp_map, 'g', fig)
-    # fig = plot_reachtube_tree(traces, 'car1', 1, [2], 'b', fig)
-    # fig = plot_reachtube_tree(traces, 'car2', 1, [2], 'r', fig)
-    for traces in res_list:
-        generate_simulation_anime(traces, tmp_map)
-        # fig,x_lim,y_lim = plot_simulation_tree(traces, 'car1', 1, [2], 'b', fig,x_lim,y_lim)
-        # fig,x_lim,y_lim = plot_simulation_tree(traces, 'car2', 1, [2], 'r', fig,x_lim,y_lim)
+    fig = plt.figure(2)
+    fig = plot_map(tmp_map, 'g', fig)
+    fig = plot_reachtube_tree(traces, 'car1', 1, [2], 'b', fig)
+    fig = plot_reachtube_tree(traces, 'car2', 1, [2], 'r', fig)
+    # for traces in res_list:
+    #     generate_simulation_anime(traces, tmp_map)
+    #     # fig,x_lim,y_lim = plot_simulation_tree(traces, 'car1', 1, [2], 'b', fig,x_lim,y_lim)
+    #     # fig,x_lim,y_lim = plot_simulation_tree(traces, 'car2', 1, [2], 'r', fig,x_lim,y_lim)
 
     plt.show()
diff --git a/demo2.py b/demo2.py
index 4ec0bec8..795e1508 100644
--- a/demo2.py
+++ b/demo2.py
@@ -1,8 +1,8 @@
-from src.example.example_agent.car_agent import CarAgent, NPCAgent
-from src.scene_verifier.scenario.scenario import Scenario
-from src.example.example_map.simple_map2 import SimpleMap2, SimpleMap3, SimpleMap5, SimpleMap6
-from src.plotter.plotter2D import *
-from src.example.example_sensor.fake_sensor import FakeSensor2
+from dryvrpy.example.example_agent.car_agent import CarAgent, NPCAgent
+from dryvrpy.scene_verifier.scenario.scenario import Scenario
+from dryvrpy.example.example_map.simple_map2 import SimpleMap2, SimpleMap3, SimpleMap5, SimpleMap6
+from dryvrpy.plotter.plotter2D import *
+from dryvrpy.example.example_sensor.fake_sensor import FakeSensor2
 
 import matplotlib.pyplot as plt
 import numpy as np
@@ -51,17 +51,17 @@ if __name__ == "__main__":
             (VehicleMode.Normal, LaneMode.Lane1),
         ]
     )
-    res_list = scenario.simulate_multi(10,1)
-    # traces = scenario.verify(10)
+    # res_list = scenario.simulate_multi(10,10)
+    traces = scenario.verify(10)
 
-    # fig = plt.figure(2)
-    # fig,x_lim,y_lim = plot_map(tmp_map, 'g', fig)
-    # fig,x_lim,y_lim = plot_reachtube_tree(traces, 'car1', 0, [1], 'b', fig)
-    # fig,x_lim,y_lim = plot_reachtube_tree(traces, 'car2', 0, [1], 'r', fig,x_lim,y_lim)
-    for traces in res_list:
-        # fig,x_lim,y_lim = plot_simulation_tree(traces, 'car1', 0, [1], 'b', fig)
-        # fig,x_lim,y_lim = plot_simulation_tree(traces, 'car2', 0, [1], 'r', fig, x_lim, y_lim)
-        generate_simulation_anime(traces, tmp_map)
+    fig = plt.figure(2)
+    # fig = plot_map(tmp_map, 'g', fig)
+    fig = plot_reachtube_tree(traces, 'car1', 0, [1], 'b', fig, (1000,-1000), (1000,-1000))
+    fig = plot_reachtube_tree(traces, 'car2', 0, [1], 'r', fig)
+    # for traces in res_list:
+    #     fig = plot_simulation_tree(traces, 'car1', 0, [1], 'b', fig, (1000,-1000), (1000,-1000))
+    #     fig = plot_simulation_tree(traces, 'car2', 0, [1], 'r', fig)
+    #     # generate_simulation_anime(traces, tmp_map)
 
 
 
diff --git a/src/__init__.py b/dryvr_plus_plus/__init__.py
similarity index 100%
rename from src/__init__.py
rename to dryvr_plus_plus/__init__.py
diff --git a/src/example/__init__.py b/dryvr_plus_plus/example/__init__.py
similarity index 100%
rename from src/example/__init__.py
rename to dryvr_plus_plus/example/__init__.py
diff --git a/src/example/example_agent/__init__.py b/dryvr_plus_plus/example/example_agent/__init__.py
similarity index 100%
rename from src/example/example_agent/__init__.py
rename to dryvr_plus_plus/example/example_agent/__init__.py
diff --git a/src/example/example_agent/car_agent.py b/dryvr_plus_plus/example/example_agent/car_agent.py
similarity index 97%
rename from src/example/example_agent/car_agent.py
rename to dryvr_plus_plus/example/example_agent/car_agent.py
index cd7e94c2..8079e4b6 100644
--- a/src/example/example_agent/car_agent.py
+++ b/dryvr_plus_plus/example/example_agent/car_agent.py
@@ -3,8 +3,8 @@ from typing import Tuple, List
 import numpy as np 
 from scipy.integrate import ode
 
-from src.scene_verifier.agents.base_agent import BaseAgent
-from src.scene_verifier.map.lane_map import LaneMap
+from dryvrpy.scene_verifier.agents.base_agent import BaseAgent
+from dryvrpy.scene_verifier.map.lane_map import LaneMap
 
 class NPCAgent(BaseAgent):
     def __init__(self, id, code = None, file_name = None):
diff --git a/src/example/example_agent/sign_agent.py b/dryvr_plus_plus/example/example_agent/sign_agent.py
similarity index 88%
rename from src/example/example_agent/sign_agent.py
rename to dryvr_plus_plus/example/example_agent/sign_agent.py
index fe7af499..c9fa9c1b 100644
--- a/src/example/example_agent/sign_agent.py
+++ b/dryvr_plus_plus/example/example_agent/sign_agent.py
@@ -1,4 +1,4 @@
-from src.scene_verifier.agents.base_agent import BaseAgent
+from dryvrpy.scene_verifier.agents.base_agent import BaseAgent
 import numpy as np
 
 class SignAgent(BaseAgent):
diff --git a/src/example/example_map/__init__.py b/dryvr_plus_plus/example/example_map/__init__.py
similarity index 100%
rename from src/example/example_map/__init__.py
rename to dryvr_plus_plus/example/example_map/__init__.py
diff --git a/src/example/example_map/simple_map.py b/dryvr_plus_plus/example/example_map/simple_map.py
similarity index 89%
rename from src/example/example_map/simple_map.py
rename to dryvr_plus_plus/example/example_map/simple_map.py
index 1ebe33d0..dca31777 100644
--- a/src/example/example_map/simple_map.py
+++ b/dryvr_plus_plus/example/example_map/simple_map.py
@@ -1,5 +1,5 @@
-from src.scene_verifier.map.lane_map import LaneMap
-from src.scene_verifier.map.lane_segment import LaneSegment
+from dryvrpy.scene_verifier.map.lane_map import LaneMap
+from dryvrpy.scene_verifier.map.lane_segment import LaneSegment
 
 class SimpleMap(LaneMap):
     def __init__(self):
diff --git a/src/example/example_map/simple_map2.py b/dryvr_plus_plus/example/example_map/simple_map2.py
similarity index 95%
rename from src/example/example_map/simple_map2.py
rename to dryvr_plus_plus/example/example_map/simple_map2.py
index b23d73ed..ce5ffc21 100644
--- a/src/example/example_map/simple_map2.py
+++ b/dryvr_plus_plus/example/example_map/simple_map2.py
@@ -1,6 +1,6 @@
-from src.scene_verifier.map.lane_map import LaneMap
-from src.scene_verifier.map.lane_segment import LaneSegment, StraightLane, CircularLane
-from src.scene_verifier.map.lane import Lane
+from dryvrpy.scene_verifier.map.lane_map import LaneMap
+from dryvrpy.scene_verifier.map.lane_segment import LaneSegment, StraightLane, CircularLane
+from dryvrpy.scene_verifier.map.lane import Lane
 
 import numpy as np
 
diff --git a/src/example/example_sensor/__init__.py b/dryvr_plus_plus/example/example_sensor/__init__.py
similarity index 100%
rename from src/example/example_sensor/__init__.py
rename to dryvr_plus_plus/example/example_sensor/__init__.py
diff --git a/src/example/example_sensor/fake_sensor.py b/dryvr_plus_plus/example/example_sensor/fake_sensor.py
similarity index 100%
rename from src/example/example_sensor/fake_sensor.py
rename to dryvr_plus_plus/example/example_sensor/fake_sensor.py
diff --git a/src/plotter/__init__.py b/dryvr_plus_plus/plotter/__init__.py
similarity index 100%
rename from src/plotter/__init__.py
rename to dryvr_plus_plus/plotter/__init__.py
diff --git a/src/plotter/parser.py b/dryvr_plus_plus/plotter/parser.py
similarity index 100%
rename from src/plotter/parser.py
rename to dryvr_plus_plus/plotter/parser.py
diff --git a/src/plotter/plotter2D.py b/dryvr_plus_plus/plotter/plotter2D.py
similarity index 87%
rename from src/plotter/plotter2D.py
rename to dryvr_plus_plus/plotter/plotter2D.py
index a89c77c1..68364c7d 100644
--- a/src/plotter/plotter2D.py
+++ b/dryvr_plus_plus/plotter/plotter2D.py
@@ -17,12 +17,18 @@ def plot(
     y_dim_list: List[int] = [1], 
     color = 'b', 
     fig = None, 
-    x_lim = (float('inf'), -float('inf')), 
-    y_lim = (float('inf'), -float('inf'))
+    x_lim = None, 
+    y_lim = None
 ):
     if fig is None:
         fig = plt.figure()
+    
     ax = fig.gca()
+    if x_lim is None:
+        x_lim = ax.get_xlim()
+    if y_lim is None:
+        y_lim = ax.get_ylim()
+    
     x_min, x_max = x_lim
     y_min, y_max = y_lim
     for rect in data:
@@ -40,10 +46,16 @@ def plot(
     ax.set_ylim([y_min-1, y_max+1])
     return fig, (x_min, x_max), (y_min, y_max)
 
-def plot_reachtube_tree(root, agent_id, x_dim: int=0, y_dim_list: List[int]=[1], color='b', fig = None, x_lim = (float('inf'),-float('inf')),y_lim = (float('inf'),-float('inf'))):
+def plot_reachtube_tree(root, agent_id, x_dim: int=0, y_dim_list: List[int]=[1], color='b', fig = None, x_lim = None, y_lim = None):
     if fig is None:
         fig = plt.figure()
+    
     ax = fig.gca()
+    if x_lim is None:
+        x_lim = ax.get_xlim()
+    if y_lim is None:
+        y_lim = ax.get_ylim()
+
     queue = [root]
     while queue != []:
         node = queue.pop(0)
@@ -56,12 +68,18 @@ def plot_reachtube_tree(root, agent_id, x_dim: int=0, y_dim_list: List[int]=[1],
 
         queue += node.child
 
-    return fig,x_lim,y_lim
+    return fig
 
-def plot_map(map, color = 'b', fig = None, x_lim = (float('inf'),-float('inf')),y_lim = (float('inf'),-float('inf'))):
+def plot_map(map, color = 'b', fig = None, x_lim = None,y_lim = None):
     if fig is None:
         fig = plt.figure()
+    
     ax = fig.gca()
+    if x_lim is None:
+        x_lim = ax.get_xlim()
+    if y_lim is None:
+        y_lim = ax.get_ylim()
+
     for lane_idx in map.lane_dict:
         lane = map.lane_dict[lane_idx]
         for lane_seg in lane.segment_list:
@@ -74,12 +92,18 @@ def plot_map(map, color = 'b', fig = None, x_lim = (float('inf'),-float('inf')),
                 ax.plot(x,y,color)
             else:
                 raise ValueError(f'Unknown lane segment type {lane_seg.type}')
-    return fig, ax.get_xlim(), ax.get_ylim()
+    return fig
 
-def plot_simulation_tree(root, agent_id, x_dim: int=0, y_dim_list: List[int]=[1], color='b', fig = None, x_lim = (float('inf'),-float('inf')),y_lim = (float('inf'),-float('inf'))):
+def plot_simulation_tree(root, agent_id, x_dim: int=0, y_dim_list: List[int]=[1], color='b', fig = None, x_lim = None, y_lim = None):
     if fig is None:
         fig = plt.figure()
+    
     ax = fig.gca()
+    if x_lim is None:
+        x_lim = ax.get_xlim()
+    if y_lim is None:
+        y_lim = ax.get_ylim()
+    
     x_min, x_max = x_lim
     y_min, y_max = y_lim
     
@@ -100,7 +124,7 @@ def plot_simulation_tree(root, agent_id, x_dim: int=0, y_dim_list: List[int]=[1]
     ax.set_xlim([x_min-1, x_max+1])
     ax.set_ylim([y_min-1, y_max+1])
     
-    return fig, ax.get_xlim(), ax.get_ylim()
+    return fig
 
 def generate_simulation_anime(root, map):
     timed_point_dict = {}
diff --git a/src/plotter/plotter3D.py b/dryvr_plus_plus/plotter/plotter3D.py
similarity index 100%
rename from src/plotter/plotter3D.py
rename to dryvr_plus_plus/plotter/plotter3D.py
diff --git a/src/scene_verifier/__init__.py b/dryvr_plus_plus/scene_verifier/__init__.py
similarity index 100%
rename from src/scene_verifier/__init__.py
rename to dryvr_plus_plus/scene_verifier/__init__.py
diff --git a/src/scene_verifier/agents/__init__.py b/dryvr_plus_plus/scene_verifier/agents/__init__.py
similarity index 100%
rename from src/scene_verifier/agents/__init__.py
rename to dryvr_plus_plus/scene_verifier/agents/__init__.py
diff --git a/src/scene_verifier/agents/base_agent.py b/dryvr_plus_plus/scene_verifier/agents/base_agent.py
similarity index 77%
rename from src/scene_verifier/agents/base_agent.py
rename to dryvr_plus_plus/scene_verifier/agents/base_agent.py
index e0044528..ef0ec627 100644
--- a/src/scene_verifier/agents/base_agent.py
+++ b/dryvr_plus_plus/scene_verifier/agents/base_agent.py
@@ -1,4 +1,4 @@
-from src.scene_verifier.code_parser.pythonparser import ControllerAst
+from dryvrpy.scene_verifier.code_parser.pythonparser import ControllerAst
 
 class BaseAgent:
     def __init__(self, id, code = None, file_name = None):  
diff --git a/src/scene_verifier/analysis/__init__.py b/dryvr_plus_plus/scene_verifier/analysis/__init__.py
similarity index 100%
rename from src/scene_verifier/analysis/__init__.py
rename to dryvr_plus_plus/scene_verifier/analysis/__init__.py
diff --git a/src/scene_verifier/analysis/analysis_tree_node.py b/dryvr_plus_plus/scene_verifier/analysis/analysis_tree_node.py
similarity index 100%
rename from src/scene_verifier/analysis/analysis_tree_node.py
rename to dryvr_plus_plus/scene_verifier/analysis/analysis_tree_node.py
diff --git a/src/scene_verifier/analysis/simulator.py b/dryvr_plus_plus/scene_verifier/analysis/simulator.py
similarity index 94%
rename from src/scene_verifier/analysis/simulator.py
rename to dryvr_plus_plus/scene_verifier/analysis/simulator.py
index 95532b12..a112ab32 100644
--- a/src/scene_verifier/analysis/simulator.py
+++ b/dryvr_plus_plus/scene_verifier/analysis/simulator.py
@@ -3,8 +3,8 @@ import copy
 
 import numpy as np
 
-from src.scene_verifier.agents.base_agent import BaseAgent
-from src.scene_verifier.analysis.analysis_tree_node import AnalysisTreeNode
+from dryvrpy.scene_verifier.agents.base_agent import BaseAgent
+from dryvrpy.scene_verifier.analysis.analysis_tree_node import AnalysisTreeNode
 
 class Simulator:
     def __init__(self):
@@ -22,9 +22,7 @@ class Simulator:
         )
         for i, agent in enumerate(agent_list):
             root.init[agent.id] = init_list[i]
-            init_mode = init_mode_list[i][0].name
-            for j in range(1, len(init_mode_list[i])):
-                init_mode += (','+init_mode_list[i][j].name)
+            init_mode = [elem.name for elem in init_mode_list[i]]
             root.mode[agent.id] = init_mode
             root.agent[agent.id] = agent
             root.type = 'simtrace'
diff --git a/src/scene_verifier/analysis/verifier.py b/dryvr_plus_plus/scene_verifier/analysis/verifier.py
similarity index 94%
rename from src/scene_verifier/analysis/verifier.py
rename to dryvr_plus_plus/scene_verifier/analysis/verifier.py
index 6854579b..0135cf6e 100644
--- a/src/scene_verifier/analysis/verifier.py
+++ b/dryvr_plus_plus/scene_verifier/analysis/verifier.py
@@ -3,10 +3,10 @@ import copy
 
 import numpy as np
 
-from src.scene_verifier.agents.base_agent import BaseAgent
-from src.scene_verifier.analysis.analysis_tree_node import AnalysisTreeNode
-from src.scene_verifier.dryvr.core.dryvrcore import calc_bloated_tube
-import src.scene_verifier.dryvr.common.config as userConfig
+from dryvrpy.scene_verifier.agents.base_agent import BaseAgent
+from dryvrpy.scene_verifier.analysis.analysis_tree_node import AnalysisTreeNode
+from dryvrpy.scene_verifier.dryvr.core.dryvrcore import calc_bloated_tube
+import dryvrpy.scene_verifier.dryvr.common.config as userConfig
 
 class Verifier:
     def __init__(self):
diff --git a/src/scene_verifier/automaton/__init__.py b/dryvr_plus_plus/scene_verifier/automaton/__init__.py
similarity index 100%
rename from src/scene_verifier/automaton/__init__.py
rename to dryvr_plus_plus/scene_verifier/automaton/__init__.py
diff --git a/src/scene_verifier/automaton/guard.py b/dryvr_plus_plus/scene_verifier/automaton/guard.py
similarity index 99%
rename from src/scene_verifier/automaton/guard.py
rename to dryvr_plus_plus/scene_verifier/automaton/guard.py
index b3a2ebe7..4e7202c3 100644
--- a/src/scene_verifier/automaton/guard.py
+++ b/dryvr_plus_plus/scene_verifier/automaton/guard.py
@@ -12,9 +12,9 @@ import sympy
 import astunparse
 import numpy as np
 
-from src.scene_verifier.map.lane_map import LaneMap
-from src.scene_verifier.map.lane_segment import AbstractLane
-from src.scene_verifier.utils.utils import *
+from dryvrpy.scene_verifier.map.lane_map import LaneMap
+from dryvrpy.scene_verifier.map.lane_segment import AbstractLane
+from dryvrpy.scene_verifier.utils.utils import *
 class LogicTreeNode:
     def __init__(self, data, child = [], val = None, mode_guard = None):
         self.data = data 
diff --git a/src/scene_verifier/automaton/hybrid_automaton.py b/dryvr_plus_plus/scene_verifier/automaton/hybrid_automaton.py
similarity index 100%
rename from src/scene_verifier/automaton/hybrid_automaton.py
rename to dryvr_plus_plus/scene_verifier/automaton/hybrid_automaton.py
diff --git a/src/scene_verifier/automaton/hybrid_io_automaton.py b/dryvr_plus_plus/scene_verifier/automaton/hybrid_io_automaton.py
similarity index 90%
rename from src/scene_verifier/automaton/hybrid_io_automaton.py
rename to dryvr_plus_plus/scene_verifier/automaton/hybrid_io_automaton.py
index 74f2c963..44d07477 100644
--- a/src/scene_verifier/automaton/hybrid_io_automaton.py
+++ b/dryvr_plus_plus/scene_verifier/automaton/hybrid_io_automaton.py
@@ -1,4 +1,4 @@
-from src.scene_verifier.automaton.hybrid_automaton import HybridAutomaton
+from dryvrpy.scene_verifier.automaton.hybrid_automaton import HybridAutomaton
 
 class HybridIoAutomaton(HybridAutomaton):
     def __init__(
diff --git a/src/scene_verifier/automaton/reset.py b/dryvr_plus_plus/scene_verifier/automaton/reset.py
similarity index 100%
rename from src/scene_verifier/automaton/reset.py
rename to dryvr_plus_plus/scene_verifier/automaton/reset.py
diff --git a/src/scene_verifier/code_parser/__init__.py b/dryvr_plus_plus/scene_verifier/code_parser/__init__.py
similarity index 100%
rename from src/scene_verifier/code_parser/__init__.py
rename to dryvr_plus_plus/scene_verifier/code_parser/__init__.py
diff --git a/src/scene_verifier/code_parser/pythonparser.py b/dryvr_plus_plus/scene_verifier/code_parser/pythonparser.py
similarity index 100%
rename from src/scene_verifier/code_parser/pythonparser.py
rename to dryvr_plus_plus/scene_verifier/code_parser/pythonparser.py
diff --git a/src/scene_verifier/dryvr/__init__.py b/dryvr_plus_plus/scene_verifier/dryvr/__init__.py
similarity index 100%
rename from src/scene_verifier/dryvr/__init__.py
rename to dryvr_plus_plus/scene_verifier/dryvr/__init__.py
diff --git a/src/scene_verifier/dryvr/common/__init__.py b/dryvr_plus_plus/scene_verifier/dryvr/common/__init__.py
similarity index 100%
rename from src/scene_verifier/dryvr/common/__init__.py
rename to dryvr_plus_plus/scene_verifier/dryvr/common/__init__.py
diff --git a/src/scene_verifier/dryvr/common/config.py b/dryvr_plus_plus/scene_verifier/dryvr/common/config.py
similarity index 100%
rename from src/scene_verifier/dryvr/common/config.py
rename to dryvr_plus_plus/scene_verifier/dryvr/common/config.py
diff --git a/src/scene_verifier/dryvr/common/constant.py b/dryvr_plus_plus/scene_verifier/dryvr/common/constant.py
similarity index 100%
rename from src/scene_verifier/dryvr/common/constant.py
rename to dryvr_plus_plus/scene_verifier/dryvr/common/constant.py
diff --git a/src/scene_verifier/dryvr/common/io.py b/dryvr_plus_plus/scene_verifier/dryvr/common/io.py
similarity index 97%
rename from src/scene_verifier/dryvr/common/io.py
rename to dryvr_plus_plus/scene_verifier/dryvr/common/io.py
index bf864448..c0662420 100644
--- a/src/scene_verifier/dryvr/common/io.py
+++ b/dryvr_plus_plus/scene_verifier/dryvr/common/io.py
@@ -4,7 +4,7 @@ This file contains IO functions for DryVR
 
 import six
 
-from src.scene_verifier.dryvr.common.utils import DryVRInput, RrtInput, checkVerificationInput, checkSynthesisInput
+from dryvrpy.scene_verifier.dryvr.common.utils import DryVRInput, RrtInput, checkVerificationInput, checkSynthesisInput
 
 
 def writeReachTubeFile(result, path):
diff --git a/src/scene_verifier/dryvr/common/utils.py b/dryvr_plus_plus/scene_verifier/dryvr/common/utils.py
similarity index 100%
rename from src/scene_verifier/dryvr/common/utils.py
rename to dryvr_plus_plus/scene_verifier/dryvr/common/utils.py
diff --git a/src/scene_verifier/dryvr/core/__init__.py b/dryvr_plus_plus/scene_verifier/dryvr/core/__init__.py
similarity index 100%
rename from src/scene_verifier/dryvr/core/__init__.py
rename to dryvr_plus_plus/scene_verifier/dryvr/core/__init__.py
diff --git a/src/scene_verifier/dryvr/core/distance.py b/dryvr_plus_plus/scene_verifier/dryvr/core/distance.py
similarity index 100%
rename from src/scene_verifier/dryvr/core/distance.py
rename to dryvr_plus_plus/scene_verifier/dryvr/core/distance.py
diff --git a/src/scene_verifier/dryvr/core/dryvrcore.py b/dryvr_plus_plus/scene_verifier/dryvr/core/dryvrcore.py
similarity index 94%
rename from src/scene_verifier/dryvr/core/dryvrcore.py
rename to dryvr_plus_plus/scene_verifier/dryvr/core/dryvrcore.py
index dfdefb73..188e1e6b 100644
--- a/src/scene_verifier/dryvr/core/dryvrcore.py
+++ b/dryvr_plus_plus/scene_verifier/dryvr/core/dryvrcore.py
@@ -9,10 +9,10 @@ import numpy as np
 import igraph
 
 
-from src.scene_verifier.dryvr.common.constant import *
-from src.scene_verifier.dryvr.common.io import writeReachTubeFile
-from src.scene_verifier.dryvr.common.utils import randomPoint, calcDelta, calcCenterPoint, trimTraces
-from src.scene_verifier.dryvr.discrepancy.Global_Disc import get_reachtube_segment
+from dryvrpy.scene_verifier.dryvr.common.constant import *
+from dryvrpy.scene_verifier.dryvr.common.io import writeReachTubeFile
+from dryvrpy.scene_verifier.dryvr.common.utils import randomPoint, calcDelta, calcCenterPoint, trimTraces
+from dryvrpy.scene_verifier.dryvr.discrepancy.Global_Disc import get_reachtube_segment
 # from scene_verifier.dryvr.tube_computer.backend.reachabilityengine import ReachabilityEngine
 # from scene_verifier.dryvr.tube_computer.backend.initialset import InitialSet
 
@@ -134,9 +134,9 @@ def simulate(g, init_condition, time_horizon, guard, sim_func, reset, init_verte
         g (obj): graph object
         init_condition (list): initial point
         time_horizon (float): time horizon to simulate
-        guard (src.core.guard.Guard): list of guard string corresponding to each transition
+        guard (dryvr_plus_plus.core.guard.Guard): list of guard string corresponding to each transition
         sim_func (function): simulation function
-        reset (src.core.reset.Reset): list of reset corresponding to each transition
+        reset (dryvr_plus_plus.core.reset.Reset): list of reset corresponding to each transition
         init_vertex (int): initial vertex that simulation starts
         deterministic (bool) : enable or disable must transition
 
@@ -264,7 +264,7 @@ def calc_bloated_tube(
         bloating_method (str): determine the bloating method for reach tube, either GLOBAL or PW
         sim_trace_num (int): number of simulations used to calculate the discrepancy
         kvalue (list): list of float used when bloating method set to PW
-        guard_checker (src.core.guard.Guard or None): guard check object
+        guard_checker (dryvr_plus_plus.core.guard.Guard or None): guard check object
         guard_str (str): guard string
        
     Returns:
diff --git a/src/scene_verifier/dryvr/core/dryvrmain.py b/dryvr_plus_plus/scene_verifier/dryvr/core/dryvrmain.py
similarity index 96%
rename from src/scene_verifier/dryvr/core/dryvrmain.py
rename to dryvr_plus_plus/scene_verifier/dryvr/core/dryvrmain.py
index 7b085aab..7b0fc072 100644
--- a/src/scene_verifier/dryvr/core/dryvrmain.py
+++ b/dryvr_plus_plus/scene_verifier/dryvr/core/dryvrmain.py
@@ -4,21 +4,21 @@ This file contains a single function that verifies model
 from __future__ import print_function
 import time
 
-import src.common.config as userConfig
-from src.common.io import parseVerificationInputFile, parseRrtInputFile, writeRrtResultFile
-from src.common.utils import buildModeStr, isIpynb, overloadConfig
-from src.core.distance import DistChecker
-from src.core.dryvrcore import *
-from src.core.goalchecker import GoalChecker
-from src.core.graph import Graph
-from src.core.guard import Guard
-from src.core.initialset import InitialSet
-from src.core.initialsetstack import InitialSetStack, GraphSearchNode
-from src.core.reachtube import ReachTube
-from src.core.reset import Reset
-from src.core.uniformchecker import UniformChecker
-# from src.tube_computer.backend.reachabilityengine import ReachabilityEngine
-# from src.tube_computer.backend.initialset import InitialSet
+import dryvrpy.common.config as userConfig
+from dryvrpy.common.io import parseVerificationInputFile, parseRrtInputFile, writeRrtResultFile
+from dryvrpy.common.utils import buildModeStr, isIpynb, overloadConfig
+from dryvrpy.core.distance import DistChecker
+from dryvrpy.core.dryvrcore import *
+from dryvrpy.core.goalchecker import GoalChecker
+from dryvrpy.core.graph import Graph
+from dryvrpy.core.guard import Guard
+from dryvrpy.core.initialset import InitialSet
+from dryvrpy.core.initialsetstack import InitialSetStack, GraphSearchNode
+from dryvrpy.core.reachtube import ReachTube
+from dryvrpy.core.reset import Reset
+from dryvrpy.core.uniformchecker import UniformChecker
+# from dryvr_plus_plus.tube_computer.backend.reachabilityengine import ReachabilityEngine
+# from dryvr_plus_plus.tube_computer.backend.initialset import InitialSet
 
 def verify(data, sim_function, param_config=None):
     """
diff --git a/src/scene_verifier/dryvr/core/goalchecker.py b/dryvr_plus_plus/scene_verifier/dryvr/core/goalchecker.py
similarity index 98%
rename from src/scene_verifier/dryvr/core/goalchecker.py
rename to dryvr_plus_plus/scene_verifier/dryvr/core/goalchecker.py
index ba84296c..93c354eb 100644
--- a/src/scene_verifier/dryvr/core/goalchecker.py
+++ b/dryvr_plus_plus/scene_verifier/dryvr/core/goalchecker.py
@@ -2,7 +2,7 @@
 This file contains uniform checker class for DryVR
 """
 
-from src.common.utils import handleReplace, neg
+from dryvrpy.common.utils import handleReplace, neg
 from z3 import *
 
 
diff --git a/src/scene_verifier/dryvr/core/graph.py b/dryvr_plus_plus/scene_verifier/dryvr/core/graph.py
similarity index 100%
rename from src/scene_verifier/dryvr/core/graph.py
rename to dryvr_plus_plus/scene_verifier/dryvr/core/graph.py
diff --git a/src/scene_verifier/dryvr/core/guard.py b/dryvr_plus_plus/scene_verifier/dryvr/core/guard.py
similarity index 99%
rename from src/scene_verifier/dryvr/core/guard.py
rename to dryvr_plus_plus/scene_verifier/dryvr/core/guard.py
index 76e7e823..03e810d2 100644
--- a/src/scene_verifier/dryvr/core/guard.py
+++ b/dryvr_plus_plus/scene_verifier/dryvr/core/guard.py
@@ -7,7 +7,7 @@ import random
 import sympy
 from z3 import *
 
-from src.common.utils import handleReplace
+from dryvrpy.common.utils import handleReplace
 
 
 class Guard:
diff --git a/src/scene_verifier/dryvr/core/initialset.py b/dryvr_plus_plus/scene_verifier/dryvr/core/initialset.py
similarity index 100%
rename from src/scene_verifier/dryvr/core/initialset.py
rename to dryvr_plus_plus/scene_verifier/dryvr/core/initialset.py
diff --git a/src/scene_verifier/dryvr/core/initialsetstack.py b/dryvr_plus_plus/scene_verifier/dryvr/core/initialsetstack.py
similarity index 100%
rename from src/scene_verifier/dryvr/core/initialsetstack.py
rename to dryvr_plus_plus/scene_verifier/dryvr/core/initialsetstack.py
diff --git a/src/scene_verifier/dryvr/core/reachtube.py b/dryvr_plus_plus/scene_verifier/dryvr/core/reachtube.py
similarity index 100%
rename from src/scene_verifier/dryvr/core/reachtube.py
rename to dryvr_plus_plus/scene_verifier/dryvr/core/reachtube.py
diff --git a/src/scene_verifier/dryvr/core/reset.py b/dryvr_plus_plus/scene_verifier/dryvr/core/reset.py
similarity index 99%
rename from src/scene_verifier/dryvr/core/reset.py
rename to dryvr_plus_plus/scene_verifier/dryvr/core/reset.py
index 684b9c5e..f6ed8f6b 100644
--- a/src/scene_verifier/dryvr/core/reset.py
+++ b/dryvr_plus_plus/scene_verifier/dryvr/core/reset.py
@@ -4,7 +4,7 @@ This file contains reset class for DryVR
 
 import sympy
 
-from src.common.utils import randomPoint
+from dryvrpy.common.utils import randomPoint
 
 
 class Reset:
diff --git a/src/scene_verifier/dryvr/core/uniformchecker.py b/dryvr_plus_plus/scene_verifier/dryvr/core/uniformchecker.py
similarity index 98%
rename from src/scene_verifier/dryvr/core/uniformchecker.py
rename to dryvr_plus_plus/scene_verifier/dryvr/core/uniformchecker.py
index 57641ad6..f85fe792 100644
--- a/src/scene_verifier/dryvr/core/uniformchecker.py
+++ b/dryvr_plus_plus/scene_verifier/dryvr/core/uniformchecker.py
@@ -4,8 +4,8 @@ This file contains uniform checker class for DryVR
 import sympy
 from z3 import *
 
-from src.common.constant import *
-from src.common.utils import handleReplace, neg
+from dryvrpy.common.constant import *
+from dryvrpy.common.utils import handleReplace, neg
 
 
 class UniformChecker:
diff --git a/src/scene_verifier/dryvr/discrepancy/Global_Disc.py b/dryvr_plus_plus/scene_verifier/dryvr/discrepancy/Global_Disc.py
similarity index 100%
rename from src/scene_verifier/dryvr/discrepancy/Global_Disc.py
rename to dryvr_plus_plus/scene_verifier/dryvr/discrepancy/Global_Disc.py
diff --git a/src/scene_verifier/dryvr/discrepancy/PW_Discrepancy.py b/dryvr_plus_plus/scene_verifier/dryvr/discrepancy/PW_Discrepancy.py
similarity index 100%
rename from src/scene_verifier/dryvr/discrepancy/PW_Discrepancy.py
rename to dryvr_plus_plus/scene_verifier/dryvr/discrepancy/PW_Discrepancy.py
diff --git a/src/scene_verifier/dryvr/discrepancy/__init__.py b/dryvr_plus_plus/scene_verifier/dryvr/discrepancy/__init__.py
similarity index 100%
rename from src/scene_verifier/dryvr/discrepancy/__init__.py
rename to dryvr_plus_plus/scene_verifier/dryvr/discrepancy/__init__.py
diff --git a/src/scene_verifier/map/__init__.py b/dryvr_plus_plus/scene_verifier/map/__init__.py
similarity index 100%
rename from src/scene_verifier/map/__init__.py
rename to dryvr_plus_plus/scene_verifier/map/__init__.py
diff --git a/src/scene_verifier/map/lane.py b/dryvr_plus_plus/scene_verifier/map/lane.py
similarity index 96%
rename from src/scene_verifier/map/lane.py
rename to dryvr_plus_plus/scene_verifier/map/lane.py
index cdc2551f..b482debd 100644
--- a/src/scene_verifier/map/lane.py
+++ b/dryvr_plus_plus/scene_verifier/map/lane.py
@@ -2,7 +2,7 @@ from typing import List
 
 import numpy as np
 
-from src.scene_verifier.map.lane_segment import AbstractLane
+from dryvrpy.scene_verifier.map.lane_segment import AbstractLane
 
 class Lane():
     COMPENSATE = 3
diff --git a/src/scene_verifier/map/lane_map.py b/dryvr_plus_plus/scene_verifier/map/lane_map.py
similarity index 96%
rename from src/scene_verifier/map/lane_map.py
rename to dryvr_plus_plus/scene_verifier/map/lane_map.py
index e63fe31b..658c49dc 100644
--- a/src/scene_verifier/map/lane_map.py
+++ b/dryvr_plus_plus/scene_verifier/map/lane_map.py
@@ -4,8 +4,8 @@ from enum import Enum
 
 import numpy as np
 
-from src.scene_verifier.map.lane_segment import AbstractLane
-from src.scene_verifier.map.lane import Lane
+from dryvrpy.scene_verifier.map.lane_segment import AbstractLane
+from dryvrpy.scene_verifier.map.lane import Lane
 
 class LaneMap:
     def __init__(self, lane_seg_list:List[Lane] = []):
diff --git a/src/scene_verifier/map/lane_segment.py b/dryvr_plus_plus/scene_verifier/map/lane_segment.py
similarity index 98%
rename from src/scene_verifier/map/lane_segment.py
rename to dryvr_plus_plus/scene_verifier/map/lane_segment.py
index 3b841ae8..0c20dc9a 100644
--- a/src/scene_verifier/map/lane_segment.py
+++ b/dryvr_plus_plus/scene_verifier/map/lane_segment.py
@@ -3,7 +3,7 @@ import numpy as np
 from abc import ABCMeta, abstractmethod
 from typing import Tuple, List, Optional, Union
 
-from src.scene_verifier.utils.utils import wrap_to_pi, Vector, get_class_path, class_from_path,to_serializable
+from dryvrpy.scene_verifier.utils.utils import wrap_to_pi, Vector, get_class_path, class_from_path,to_serializable
 
 class LineType:
 
diff --git a/src/scene_verifier/scenario/__init__.py b/dryvr_plus_plus/scene_verifier/scenario/__init__.py
similarity index 100%
rename from src/scene_verifier/scenario/__init__.py
rename to dryvr_plus_plus/scene_verifier/scenario/__init__.py
diff --git a/src/scene_verifier/scenario/scenario.py b/dryvr_plus_plus/scene_verifier/scenario/scenario.py
similarity index 96%
rename from src/scene_verifier/scenario/scenario.py
rename to dryvr_plus_plus/scene_verifier/scenario/scenario.py
index 49453404..09554295 100644
--- a/src/scene_verifier/scenario/scenario.py
+++ b/dryvr_plus_plus/scene_verifier/scenario/scenario.py
@@ -5,14 +5,14 @@ import warnings
 
 import numpy as np
 
-from src.scene_verifier.agents.base_agent import BaseAgent
-from src.scene_verifier.automaton.guard import GuardExpressionAst
-from src.scene_verifier.automaton.reset import ResetExpression
-from src.scene_verifier.code_parser.pythonparser import Guard, Reset
-from src.scene_verifier.analysis.simulator import Simulator
-from src.scene_verifier.analysis.verifier import Verifier
-from src.scene_verifier.map.lane_map import LaneMap
-from src.scene_verifier.utils.utils import *
+from dryvrpy.scene_verifier.agents.base_agent import BaseAgent
+from dryvrpy.scene_verifier.automaton.guard import GuardExpressionAst
+from dryvrpy.scene_verifier.automaton.reset import ResetExpression
+from dryvrpy.scene_verifier.code_parser.pythonparser import Guard, Reset
+from dryvrpy.scene_verifier.analysis.simulator import Simulator
+from dryvrpy.scene_verifier.analysis.verifier import Verifier
+from dryvrpy.scene_verifier.map.lane_map import LaneMap
+from dryvrpy.scene_verifier.utils.utils import *
 
 class Scenario:
     def __init__(self):
diff --git a/src/scene_verifier/utils/__init__.py b/dryvr_plus_plus/scene_verifier/utils/__init__.py
similarity index 100%
rename from src/scene_verifier/utils/__init__.py
rename to dryvr_plus_plus/scene_verifier/utils/__init__.py
diff --git a/src/scene_verifier/utils/utils.py b/dryvr_plus_plus/scene_verifier/utils/utils.py
similarity index 100%
rename from src/scene_verifier/utils/utils.py
rename to dryvr_plus_plus/scene_verifier/utils/utils.py
diff --git a/example_controller1.py b/example_controller1.py
index 5a870473..d2064d0f 100644
--- a/example_controller1.py
+++ b/example_controller1.py
@@ -1,6 +1,6 @@
 from enum import Enum, auto
 import copy
-from src.scene_verifier.map.lane_map import LaneMap
+from dryvrpy.scene_verifier.map.lane_map import LaneMap
 
 class LaneObjectMode(Enum):
     Vehicle = auto()
diff --git a/example_controller2.py b/example_controller2.py
index 0c09ce25..4738b101 100644
--- a/example_controller2.py
+++ b/example_controller2.py
@@ -1,6 +1,6 @@
 from enum import Enum, auto
 import copy
-from src.scene_verifier.map.lane_map import LaneMap
+from dryvrpy.scene_verifier.map.lane_map import LaneMap
 
 class VehicleMode(Enum):
     Normal = auto()
diff --git a/example_controller3.py b/example_controller3.py
index 504995e3..d162f143 100644
--- a/example_controller3.py
+++ b/example_controller3.py
@@ -1,6 +1,6 @@
 from enum import Enum, auto
 import copy
-from src.scene_verifier.map.lane_map import LaneMap
+from dryvrpy.scene_verifier.map.lane_map import LaneMap
 
 class VehicleMode(Enum):
     Normal = auto()
diff --git a/example_two_car_sign_lane_switch.py b/example_two_car_sign_lane_switch.py
index a18b874c..cc895f1d 100644
--- a/example_two_car_sign_lane_switch.py
+++ b/example_two_car_sign_lane_switch.py
@@ -68,12 +68,12 @@ def controller(ego: State, other: State, sign: State, lane_map):
     return output
 
 
-from src.example.example_agent.car_agent import CarAgent
-from src.example.example_agent.sign_agent import SignAgent
-from src.scene_verifier.scenario.scenario import Scenario
-from src.example.example_map.simple_map2 import SimpleMap3
-from src.plotter.plotter2D import plot_reachtube_tree, plot_simulation_tree
-from src.example.example_sensor.fake_sensor import FakeSensor2
+from dryvrpy.example.example_agent.car_agent import CarAgent
+from dryvrpy.example.example_agent.sign_agent import SignAgent
+from dryvrpy.scene_verifier.scenario.scenario import Scenario
+from dryvrpy.example.example_map.simple_map2 import SimpleMap3
+from dryvrpy.plotter.plotter2D import plot_reachtube_tree, plot_simulation_tree
+from dryvrpy.example.example_sensor.fake_sensor import FakeSensor2
 
 import matplotlib.pyplot as plt
 
@@ -92,7 +92,7 @@ if __name__ == "__main__":
     scenario.set_init(
         [
             [[10, 0, 0, 0.5],[10, 0, 0, 0.5]], 
-            [[0, -0.2, 0, 1.0],[0.2, -0.2, 0, 1.0]],
+            [[0, -0.2, 0, 1.0],[0.2, 0.2, 0, 1.0]],
             [[20, 0, 0, 0],[20, 0, 0, 0]],
         ],
         [
diff --git a/setup.py b/setup.py
new file mode 100644
index 00000000..25e99f51
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,35 @@
+#!/usr/bin/env python3
+from setuptools import setup
+
+setup(
+    name='dryvr_plus_plus',
+    version='0.1',
+    description='DryVR++',
+    author='MaybeShewill-CV',
+    maintainer='Chiao Hsieh',
+    maintainer_email='chsieh16@illinois.edu',
+    license='Apache-2.0',
+    packages=["dryvr_plus_plus"],
+    python_requires='>=3.6',
+    install_requires=[
+        "numpy~=1.22.1",
+        "scipy~=1.8.0",
+        "matplotlib~=3.4.2",
+        "polytope~=0.2.3",
+        "pyvista~=0.32.1",
+        "networkx~=2.2",
+        "sympy~=1.6.2",
+        "six~=1.14.0",
+        "astunparse~=1.6.3",
+        "treelib~=1.6.1",
+        "z3-solver~=4.8.17.0",
+        "igraph~=0.9.10",
+    ],
+    classifiers=[
+        'Development Status :: 2 - Pre-Alpha',
+        'Intended Audience :: Science/Research',
+        'Topic :: Scientific/Engineering',
+        'License :: OSI Approved :: Apache License 2.0',
+        'Programming Language :: Python :: 3.8',
+    ]
+)
\ No newline at end of file
diff --git a/tests/testdpp.py b/tests/testdpp.py
index e544e049..c425ca1d 100644
--- a/tests/testdpp.py
+++ b/tests/testdpp.py
@@ -47,10 +47,10 @@ def controller(ego:State):
 
     return output_vehicle_mode, output_lane_mode
 
-from src.example.example_agent.car_agent import CarAgent
-from src.scene_verifier.scenario.scenario import Scenario
-from src.example.example_map.simple_map import SimpleMap2
-from src.example.example_sensor.fake_sensor import FakeSensor1
+from dryvrpy.example.example_agent.car_agent import CarAgent
+from dryvrpy.scene_verifier.scenario.scenario import Scenario
+from dryvrpy.example.example_map.simple_map import SimpleMap2
+from dryvrpy.example.example_sensor.fake_sensor import FakeSensor1
 import matplotlib.pyplot as plt
 import numpy as np
 
-- 
GitLab