def get(self, exp_id): """ Get the current theta. +--------------------------------------------------------------------+ | Example | +====================================================================+ | http://example.com/stats/EXP_ID/currenttheta | +--------------------------------------------------------------------+ :requires: A secure cookie, obtained by logging in. :param int exp_id: The experiment ID for the theta that is to be retrieved. :returns: A JSON of the current theta. :raises 401: If the experiment does not belong to this user or the exp_id is wrong. :raises 401: If user is not logged in or if there is no secure cookie available. """ if self.get_current_user(): if self.validate_user_experiment(exp_id): exp = Experiment(exp_id) response = exp.get_theta() self.write(json.dumps(response)) else: raise ExceptionHandler( reason="Experiment could not be validated.", status_code=401) else: raise ExceptionHandler(reason="Could not validate user.", status_code=401)
def log_theta(): """ For every experiment, if Theta logging flag is set. Log theta from redis to mongodb. """ redis_db = Database() mongo_db = MongoLog() experiment_ids = redis_db.get_experiment_ids() for experiment_id in experiment_ids: exp = Experiment(experiment_id) if exp.properties["hourly_theta"] == "True": theta = exp.get_theta() theta["exp_id"] = experiment_id mongo_db.log_hourly_theta(theta)
def log_theta(): """ For every experiment, if Theta logging flag is set. Log theta from redis to mongodb. """ redis_db = Database() mongo_db = MongoLog() experiment_ids = redis_db.get_experiment_ids() for experiment_id in experiment_ids: exp = Experiment(experiment_id) properties = redis_db.get_one_experiment(experiment_id) if properties['hourlyTheta'] == "True": theta = exp.get_theta() theta['exp_id'] = experiment_id mongo_db.log_hourly_theta(theta) print("We did it, we stored some stuff!")
def get(self, exp_id): """ Get the current theta for experiment id exp_id +--------------------------------------------------------------------+ | Example | +====================================================================+ | http://example.com/stats/1/getCurrentTheta.json | +--------------------------------------------------------------------+ :requires: A secure cookie, obtained by logging in. :param int exp_id: The experiment ID for the theta that is to be retrieved. :returns: A JSON of current theta. :raises: AUTH_ERROR if there is no secure cookie available. """ if self.get_secure_cookie("user"): exp = Experiment(exp_id) response = exp.get_theta() self.write(json.dumps(response)) else: self.write("AUTH_ERROR")
def get(self, exp_id): """ Simulate your experiment based on four scripts, which create a closed feedback loop. +--------------------------------------------------------------------+ | Example | +====================================================================+ |http://example.com/eval/EXP_ID/simulate?N=1000&log_stats=True | |&verbose=True&seed=10 | +--------------------------------------------------------------------+ :requires: A secure cookie, obtained by logging in. :param int exp_id: Experiment ID as specified in the url. :param int N: The number of simulation draws. :param bool log_stats: Flag for logging the results in the database (default is False) :param bool verbose: Flag for displaying the results in the returning JSON object (default is True) :param int seed (optional): Set numpy seed. :returns: A JSON indicating success when verbose flag is False, and a JSON with all the data when verbose flag is True. :raises 400: If the experiment does not belong to this user or the exp_id is wrong. :raises 401: If user is not logged in or if there is no secure cookie available. """ if self.get_current_user(): if self.validate_user_experiment(exp_id): N = int(self.get_argument("N", default=1000)) log_stats = self.get_argument("log_stats", default=False) verbose = self.get_argument("verbose", default=True) seed = self.get_argument("seed", default=None) if seed is None: seed = np.random.randint(2**32 - 1, dtype=np.uint32) if verbose == "True": verbose = True else: verbose = False if log_stats == "True": log_stats = True else: log_stats = False __EXP__ = Experiment(exp_id) data = {} with self.temp_seed(int(seed)): for i in range(N): # Generate context context = __EXP__.run_context_code() # Get action action = __EXP__.run_action_code(context) # Generate reward reward = __EXP__.run_get_reward_code(context, action) # Set reward __EXP__.run_reward_code(context, action, reward) # Get theta theta = __EXP__.get_theta() # Save stats data[str(i)] = { 'context': context.copy(), 'action': action.copy(), 'reward': reward.copy(), 'theta': theta.copy() } context.clear() action.clear() reward.clear() if log_stats == True: __EXP__.log_simulation_data(data.copy()) data_tmp = data.copy() data.clear() if verbose == True: self.write( json.dumps({ 'simulate': 'success', 'experiment': exp_id, 'data': data_tmp })) else: self.write( json.dumps({ 'simulate': 'success', 'experiment': exp_id, 'theta': theta })) else: raise ExceptionHandler( reason="Experiment could not be validated.", status_code=401) else: raise ExceptionHandler(reason="Could not validate user.", status_code=401)