def test_save_restore(self):
        config = {'n_samples': 10, 'parameter_config': [{'name': 'x'}]}
        m = rp.RandomProposer(config)
        path = tempfile.mkdtemp()
        self.assertIn(m.get_param()['x'], [0, 1])

        sav = os.path.join(path, 'test.pkl')
        m.save(sav)
        n = rp.RandomProposer(config)
        n.reload(sav)
        self.assertIn(n.get_param()['x'], [0, 1])
        os.remove(sav)
        os.rmdir(path)
    def test_random_choice(self):
        d = [str(i) for i in range(10)]
        f = rp._random_choice(d)
        for i in range(100):
            self.assertIn(f(), d)

        self.assertRaises(ValueError, rp._random_choice, [])
 def test_random_int(self):
     d = [1, 10]
     all_opt = set(range(1, 11))
     f = rp._random_int(d)
     t = set(f() for _ in range(10000))
     self.assertSetEqual(all_opt, t, "Low chance to miss numbers")
     self.assertRaises(ValueError, rp._random_int, [1, 2, 3])
 def test_random_float(self):
     d = [-10, 10]
     f = rp._random_float(d)
     for i in range(100):
         v = f()
         self.assertLessEqual(v, d[1])
         self.assertLessEqual(d[0], v)
     self.assertRaises(ValueError, rp._random_float, [1, 2, 3])
 def test_init(self):
     config = {}
     self.assertRaises(KeyError, rp.RandomProposer, config)
     config['n_samples'] = 10
     self.assertRaises(KeyError, rp.RandomProposer, config)
     config['parameter_config'] = [{}]
     self.assertRaises(KeyError, rp.RandomProposer, config)
     config['parameter_config'] = [{"name": "a"}]
     self.assertTrue(rp.RandomProposer(config))
    def test_reset(self):
        config = {'n_samples': 10, 'random_seed': 10, 'parameter_config': [{'name': 'x', 'type': 'int'}]}
        m = rp.RandomProposer(config)

        for i in range(10):
            m.get()
        v = m.get()
        self.assertIs(v, None)
        m.reset()
        self.assertIn(m.get()['x'], [0, 1])
        self.assertEqual(m.counter, 1)
 def test_failed(self):
     config = {
         'n_samples': 10,
         'random_seed': 10,
         'parameter_config': [{
             'name': 'x',
             'type': 'int'
         }]
     }
     p = rp.RandomProposer(config)
     c = p.get()
     job = Job("none", c)
     p.failed(job)
    def test_ssh_session(self):
        pkey = pkg_resources.resource_filename("mockssh", 'server-key')
        data_folder = pkg_resources.resource_filename(__name__, 'data')
        users = {
            "mockuser": pkey,
        }
        scores = {}
        mutex = Lock()

        config = {
            'workingdir':
            data_folder,
            'n_parallel':
            2,
            'resource':
            'node',
            'proposer':
            'random',
            'script':
            os.path.join(data_folder, "script", "rosenbrock_hpo.py"),
            'n_samples':
            10,
            'random_seed':
            10,
            'parameter_config': [{
                'name': 'x',
                'type': 'float',
                'range': [-5, 5]
            }, {
                'name': 'y',
                'type': 'float',
                'range': [-5, 5]
            }],
            "runtime_args": {
                "prescript": "export CUDA_VISIBLE_DEVICES=-1",
                "postscript": "echo $CUDA_VISIBLE_DEVICES",
                "overwrite": 'true'
            }
        }
        m = rp.RandomProposer(config)

        def callback_fun(score, jid):
            mutex.acquire()
            scores[jid] = score
            mutex.release()

        with mockssh.Server(users) as server1, mockssh.Server(
                users) as server2:

            mngr = SSHResourceManager(None,
                                      config['n_parallel'],
                                      auppath=data_folder,
                                      reconn_wait_time=3,
                                      max_retries=3)
            mngr.mapping[1] = "[email protected]:" + str(
                server1.port) + " " + pkey
            mngr.mapping[2] = "[email protected]:" + str(
                server2.port) + " " + pkey

            for i in range(0, config['n_samples'], 2):
                proposal = m.get()
                job1 = Job(config['script'], BasicConfig(**proposal),
                           config['workingdir'])
                job1.jid = i
                mngr.run(job1, 1, None, callback_fun, overwrite=True)

                proposal = m.get()
                job2 = Job(config['script'], BasicConfig(**proposal),
                           config['workingdir'])
                job2.jid = i + 1
                mngr.run(job2, 2, None, callback_fun, overwrite=True)

            mngr.executor.shutdown(wait=True)

        for key in scores:
            self.assertTrue(scores[key] != "ERROR")