def test_simulation_nofile_option(self):
     simulation = Simulation(
         self.env,
         CONFIG,
         self.instrument,
         planning_algorithm='heft',
         planning_model=SHADOWPlanning('heft'),
         scheduling=DynamicAlgorithmFromPlan,
         delay=None,
         timestamp=None,
     )
     simdf, taskdf = simulation.start()
     self.assertEqual(120, len(simdf))
     self.env = simpy.Environment()
     simulation = Simulation(
         self.env,
         CONFIG,
         self.instrument,
         planning_algorithm='fcfs',
         planning_model=SHADOWPlanning('fcfs'),
         scheduling=DynamicAlgorithmFromPlan,
         delay=None,
         timestamp=None,
         # delimiters=f'test/{algorithm}'
     )
     simdf, taskdf = simulation.start()
     self.assertEqual(128, len(simdf))
Example #2
0
    def setUp(self):
        """
        Repeating above test cases but with delays to determine that delay
        flags reach us.
        Returns
        -------

        """

        self.env = simpy.Environment()
        config = Config(INTEGRATION)
        self.cluster = Cluster(self.env, config)
        self.buffer = Buffer(self.env, self.cluster, config)
        dm = DelayModel(0.9, "normal",
                   DelayModel.DelayDegree.HIGH)
        self.planner = Planner(
            self.env, PLANNING_ALGORITHM,
            self.cluster, SHADOWPlanning('heft',delay_model=dm), delay_model=dm
        )

        self.scheduler = Scheduler(
            self.env, self.buffer, self.cluster, DynamicAlgorithmFromPlan()
        )
        self.telescope = Telescope(
            self.env, config, self.planner, self.scheduler
        )
        self.env.process(self.cluster.run())
        self.env.process(self.buffer.run())
        self.scheduler.start()
        self.env.process(self.scheduler.run())
        self.env.process(self.telescope.run())
    def test_multi_simulation_data_merge(self):
        # global_sim_df = pd.DataFrame()
        # global_task_df = pd.DataFrame()

        for algorithm in ['heft', 'fcfs']:
            env = simpy.Environment()
            simulation = Simulation(
                env,
                CONFIG,
                self.instrument,
                planning_algorithm=algorithm,
                planning_model=SHADOWPlanning(algorithm),
                scheduling=DynamicAlgorithmFromPlan,
                delay=None,
                timestamp='unittest',
                hdf5_path='test/simulation_data/test_hdf5.h5',
                to_file=True,
                delimiters=f'{algorithm}')
            simulation.start()
        self.assertTrue(os.path.exists('test/simulation_data/test_hdf5.h5'))
        heft_key = '/dunittest/heft/heft_single_observation_simulation/sim/'
        fcfs_key = '/dunittest/fcfs/heft_single_observation_simulation/sim/'
        heft_sim = pd.read_hdf('test/simulation_data/test_hdf5.h5',
                               key=heft_key)
        self.assertEqual(120, len(heft_sim))
        self.assertEqual(3, heft_sim.iloc[-1]['available_resources'])
Example #4
0
 def testBasicConfig(self):
     simulation = Simulation(self.env,
                             CONFIG,
                             self.instrument,
                             planning_model=SHADOWPlanning('heft'),
                             planning_algorithm='heft',
                             scheduling=DynamicAlgorithmFromPlan,
                             timestamp=self.timestamp)
     self.assertTrue(36, simulation.instrument.total_arrays)
Example #5
0
 def setUp(self) -> None:
     env = simpy.Environment()
     self.simulation = Simulation(
         env,
         LARGE_CONFIG,
         Telescope,
         planning_algorithm='heft',
         planning_model=SHADOWPlanning('heft'),
         scheduling=DynamicAlgorithmFromPlan,
         delay=None,
         timestamp=f'test/basic-workflow-data/output/{0}')
Example #6
0
 def setUp(self) -> None:
     self.env = simpy.Environment()
     config = Config(CONFIG)
     self.cluster = Cluster(self.env, config)
     self.buffer = Buffer(self.env, self.cluster, config)
     self.scheduler = Scheduler(self.env, self.buffer, self.cluster,
                                DynamicAlgorithmFromPlan)
     self.planner = Planner(self.env, PLANNING_ALGORITHM, self.cluster,
                            SHADOWPlanning('heft'))
     # planner = None
     self.telescope = Telescope(self.env, config, self.planner,
                                self.scheduler)
Example #7
0
 def setUp(self) -> None:
     self.env = simpy.Environment()
     self.simulation = Simulation(
         self.env,
         BASIC_CONFIG,
         Telescope,
         planning_algorithm='heft',
         planning_model=SHADOWPlanning('heft'),
         scheduling=DynamicAlgorithmFromPlan,
         delay=None,
         timestamp=SIM_TIMESTAMP
     )
Example #8
0
 def setUp(self):
     self.env = simpy.Environment()
     sched_algorithm = DynamicAlgorithmFromPlan()
     config = Config(LONG_CONFIG)
     self.cluster = Cluster(self.env, config)
     planning_model = SHADOWPlanning(algorithm=PLANNING_ALGORITHM)
     self.planner = Planner(self.env, PLANNING_ALGORITHM, self.cluster,
                            planning_model)
     self.buffer = Buffer(self.env, self.cluster, config)
     self.scheduler = Scheduler(self.env, self.buffer, self.cluster,
                                sched_algorithm)
     self.telescope = Telescope(self.env, config, self.planner,
                                self.scheduler)
Example #9
0
    def setUp(self) -> None:
        self.env = simpy.Environment()
        self.config = Config(CONFIG)

        self.cluster = Cluster(env=self.env, config=self.config)
        self.buffer = Buffer(env=self.env,
                             cluster=self.cluster,
                             config=self.config)
        self.scheduler = Scheduler(env=self.env,
                                   buffer=self.buffer,
                                   cluster=self.cluster,
                                   algorithm=None)
        self.planner = Planner(self.env, 'heft', self.cluster,
                               SHADOWPlanning('heft'))
Example #10
0
    def setUp(self):
        self.env = simpy.Environment()
        config = Config(INTEGRATION)
        self.cluster = Cluster(self.env, config)
        self.buffer = Buffer(self.env, self.cluster, config)
        self.planner = Planner(self.env, PLANNING_ALGORITHM, self.cluster,
                               SHADOWPlanning('heft'))

        self.scheduler = Scheduler(self.env, self.buffer, self.cluster,
                                   DynamicAlgorithmFromPlan())
        self.telescope = Telescope(self.env, config, self.planner,
                                   self.scheduler)
        self.env.process(self.cluster.run())
        self.env.process(self.buffer.run())
        self.scheduler.start()
        self.env.process(self.scheduler.run())
        self.env.process(self.telescope.run())
Example #11
0
 def setUp(self):
     self.env = simpy.Environment()
     config = Config(CONFIG)
     self.model = SHADOWPlanning('heft')
     self.cluster = Cluster(self.env, config=config)
     self.buffer = Buffer(env=self.env, cluster=self.cluster, config=config)
     self.planner = Planner(
         self.env,
         PLAN_ALGORITHM,
         self.cluster,
         self.model,
     )
     self.observation = Observation('planner_observation',
                                    OBS_START_TME,
                                    OBS_DURATION,
                                    OBS_DEMAND,
                                    OBS_WORKFLOW,
                                    data_rate=OBS_DATA_RATE)
Example #12
0
 def setUp(self):
     self.env = simpy.Environment()
     sched_algorithm = DynamicAlgorithmFromPlan()
     config = Config(HEFT_CONFIG)
     dm = DelayModel(0.1, "normal")
     self.model = SHADOWPlanning('heft', dm)
     self.cluster = Cluster(self.env, config=config)
     self.buffer = Buffer(self.env, self.cluster, config)
     self.planner = Planner(self.env,
                            PLAN_ALGORITHM,
                            self.cluster,
                            self.model,
                            delay_model=dm)
     self.observation = Observation('planner_observation',
                                    OBS_START_TME,
                                    OBS_DURATION,
                                    OBS_DEMAND,
                                    OBS_WORKFLOW,
                                    data_rate=OBS_DATA_RATE)
Example #13
0
    def test_simulation_produces_file(self):
        ts = f'{datetime.datetime(2021,1,1).strftime("%y_%m_%d_%H_%M_%S")}'
        simulation = Simulation(self.env,
                                CONFIG,
                                Telescope,
                                planning_model=SHADOWPlanning('heft'),
                                planning_algorithm='heft',
                                scheduling=DynamicAlgorithmFromPlan,
                                delay=None,
                                timestamp=ts,
                                to_file=True,
                                hdf5_path=self.output)

        simulation.start(runtime=60)
        self.assertTrue(os.path.exists(self.output))

        store = pd.HDFStore(self.output)

        store[f'd{ts}/standard_simulation/sim']
 def setUp(self) -> None:
     """
     Basic simulation using a single observation + heft workflow +
     homogenous system configuration.
     Returns
     -------
     """
     env = simpy.Environment()
     self.instrument = Telescope
     self.simulation = Simulation(
         env=env,
         config=CONFIG,
         instrument=self.instrument,
         planning_algorithm='heft',
         planning_model=SHADOWPlanning('heft'),
         scheduling=DynamicAlgorithmFromPlan,
         delay=None,
         timestamp='unittest',
         to_file=True,
         hdf5_path='test/simulation_data/test_hdf5.h5',
         delimiters=f'test/')
Example #15
0
 def setUp(self):
     self.env = simpy.Environment()
     config = Config(CONFIG)
     self.model = SHADOWPlanning('heft')
     self.cluster = Cluster(env=self.env, config=config)
     self.buffer = Buffer(env=self.env, cluster=self.cluster, config=config)