Exemple #1
0
 def test_func(self):
     """
     临时用的测试方法
     :return:
     """
     left_arr = [
         "/Users/qinbaomac-mini/Desktop/output/test-rename/1111/1234234321423/1.mov",
         "/Users/qinbaomac-mini/Desktop/output/test-rename/1111/1234234321423/2.mov",
         "/Users/qinbaomac-mini/Desktop/output/test-rename/1111/1234234321423/3.mov",
         "/Users/qinbaomac-mini/Desktop/output/test-rename/1111/1234234321423/4.mov",
         "/Users/qinbaomac-mini/Desktop/output/test-rename/1111/1234234321423/5.mov",
         "/Users/qinbaomac-mini/Desktop/output/test-rename/1111/1234234321423/6.mov"
     ]
     # left_arr = ["/Users/qinbaomac-mini/Desktop/output/111/1111/1234234321423/yw_d21_d6.mp3",
     #             "/Users/qinbaomac-mini/Desktop/output/111/1111/1234234321423/yw_d21_d4.mp3",
     #             "/Users/qinbaomac-mini/Desktop/output/111/1111/1234234321423/yw_d21_d5.mp3",
     #             "/Users/qinbaomac-mini/Desktop/output/111/1111/1234234321423/yw_d21_d1.mp3",
     #             "/Users/qinbaomac-mini/Desktop/output/111/1111/1234234321423/yw_d21_d2.mp3",
     #             "/Users/qinbaomac-mini/Desktop/output/111/1111/1234234321423/yw_d21_d3.mp3"
     #             ]
     right_arr = [
         "d21_d1", "d21_d2.mp3", "d21_d3.mp3", "d21_d4.mp3", "d21_d5.mp3",
         "d21_d6.mp3"
     ]
     self.svL.set(left_arr)
     self.svR.set(right_arr)
     utils.set_state(self.start_btn, True)
Exemple #2
0
def callback_query_constructor_callback(bot: Bot, update: Update, user_data: dict):
    prepare_user_data(update, user_data)

    delete_keyboard = True
    new_state = None
    if user_data["node"] == -10:
        if update.callback_query.data == "add_buttons":
            new_state = adding_inline_keyboard_hint(bot, user_data)
        elif update.callback_query.data == "del_buttons":
            save_post_draft(user_data, update.callback_query.message.to_json())
            new_state = post_preview(bot, user_data)
    elif user_data["node"] == -11:
        if update.callback_query.data == "cancel":
            new_state = post_preview(bot, user_data)
    elif user_data["node"] == -12:
        if update.callback_query.data == "publish":
            save_post(user_data, 0)
            broadcast_post(bot, copy.deepcopy(user_data), *parse_post_to_send(user_data["post_id"]))
            del user_data["post_id"]
            destruct_constructor_handlers(user_data)
            new_state = broadcast_post_hint(bot, user_data)
        elif update.callback_query.data == "delay":
            new_state = delay_post_broadcasting(bot, user_data)
        elif update.callback_query.data == "go_back":
            new_state = post_preview(bot, user_data)

    if new_state is not None:
        set_state(user_data["id"], user_data, new_state)
        if delete_keyboard:
            bot.edit_message_reply_markup(message_id=update.callback_query.message.message_id,
                                          chat_id=user_data["chat_id"])

    bot.answer_callback_query(update.callback_query.id)
    raise DispatcherHandlerStop
Exemple #3
0
    def set_to_object(self, obj):
        """Sets the workflow to the passed object.

        If the object has already the given workflow nothing happens. Otherwise
        the workflow is set to the objectthe state is set to the workflow's
        initial state.

        **Parameters:**

        obj
            The object which gets the workflow.
        """
        import utils

        ctype = ContentType.objects.get_for_model(obj)
        try:
            wor = WorkflowObjectRelation.objects.get(content_type=ctype, content_id=obj.id)
        except WorkflowObjectRelation.DoesNotExist:
            WorkflowObjectRelation.objects.create(content = obj, workflow=self)
            utils.set_state(obj, self.initial_state)
        else:
            if wor.workflow != self:
                wor.workflow = self
                wor.save()
                utils.set_state(self.initial_state)
Exemple #4
0
def test_process_message():
    # start command
    message, finished = utils.process_message('test', '/start')
    assert message == constants.questions['start']['message']
    assert not finished

    # message without start
    utils.set_state('test', '')
    message, finished = utils.process_message('test', 'some message')
    assert message == constants.WELCOME
    assert not finished
Exemple #5
0
def user_entering_name(message):
    if not message.text.isdigit():
        bot.send_message(message.chat.id, "Что-то не так, попробуй ещё раз!")
        return
    else:
        bot.send_message(message.chat.id, "Ваш запрос обробатывается....")
        utils.set_vk_id(message.from_user.id, message.text)
        utils.set_state(message.from_user.id, utils.States.S_DOWNLOADING.value)
        music_data = vkaudio.get(int(message.text))
        d = Downloader(music_data)
        d.download_music(bot, message.chat.id)
Exemple #6
0
def main():
    #time_step = 0.0002 # TODO: context.get_continuous_state_vector() fails
    time_step = 2e-3

    parser = argparse.ArgumentParser()
    parser.add_argument('-c', '--cfree', action='store_true',
                        help='Disables collisions when planning')
    parser.add_argument('-d', '--deterministic', action='store_true',
                        help='Manually sets the random seeds used by the stream generators')
    parser.add_argument('-s', '--simulate', action='store_true',
                        help='Simulates the system')
    args = parser.parse_args()

    if args.deterministic:
        # TODO: still not fully deterministic
        random.seed(0)
        np.random.seed(0)

    import meshcat
    meshcat_vis = meshcat.Visualizer()
    task, diagram, state_machine = load_station(time_step=time_step)
    print(task)

    plant = task.mbp
    #dump_plant(plant)
    #dump_models(plant)
    RenderSystemWithGraphviz(diagram) # Useful for getting port names
    context = diagram.GetMutableSubsystemContext(plant, task.diagram_context)

    task.publish()
    initial_state = get_state(plant, context)
    trajectories = plan_trajectories(task, context, collisions=not args.cfree)
    if trajectories is None:
        return

    ##################################################

    set_state(plant, context, initial_state)
    if args.simulate:
        from manipulation_station.robot_plans import JointSpacePlan
        splines, gripper_setpoints = convert_splines(plant, task.robot, task.gripper, context, trajectories)
        sim_duration = compute_duration(splines)
        plan_list = [JointSpacePlan(spline) for spline in splines]
        print('Splines: {}\nDuration: {:.3f} seconds'.format(len(splines), sim_duration))

        task, diagram, state_machine = load_station(time_step=time_step, plan=(plan_list, gripper_setpoints))
        task.set_initial()
        #set_state(plant, context, initial_state)
        #state_machine.Load(plan_list, gripper_setpoints)
        simulate_splines(task.diagram, task.diagram_context, sim_duration)
    else:
        step_trajectories(diagram, task.diagram_context, context, trajectories, time_step=0.001)
Exemple #7
0
def constructor_callback(bot: Bot, update: Update, job_queue, user_data: dict):
    prepare_user_data(update, user_data)

    new_state = None
    if user_data["node"] in (-9, -10, -12):
        if update.message.text is not None:
            if update.message.text == "Отменить":
                delete_post(user_data)
                destruct_constructor_handlers(user_data)
                new_state = admin_welcome(bot, user_data)
            elif update.message.text == "Очистить":
                delete_post(user_data)
                new_state = post_constructor_first_step(bot, user_data)
            elif update.message.text == "Предпросмотр":
                new_state = post_preview(bot, user_data, False)
            elif update.message.text == "Далее":
                if user_data.get("post_id") is not None:
                    new_state = sending_post_settings(bot, user_data)
                else:
                    new_state = empty_msg(bot, user_data, -9, "Невозможно разослать пустое сообщение")
            else:
                save_post_draft(user_data, update.message.to_json())
                new_state = post_preview(bot, user_data)
        else:
            save_post_draft(user_data, update.message.to_json())
            new_state = post_preview(bot, user_data)
    elif user_data["node"] == -11:
        reply_markup = make_reply_markup(update.message.text)
        if reply_markup is not None:
            save_post_draft(user_data, None, reply_markup.to_json())
            new_state = post_preview(bot, user_data)
        else:
            new_state = error_during_buttons_adding(bot, user_data)
    elif user_data["node"] == -13:
        delay = parse_delay(update.message.text)
        if delay is not None:
            job_queue.run_once(
                callback=delayed_broadcasting_job_callback,
                when=delay*60,  # from minutes to seconds
                context=(copy.deepcopy(user_data), *parse_post_to_send(user_data["post_id"]))
            )
            save_post(user_data, delay)
            del user_data["post_id"]
            destruct_constructor_handlers(user_data)
            new_state = broadcast_post_hint(bot, user_data)
        else:
            new_state = error_during_delay_parsing(bot, user_data)

    if new_state is not None:
        set_state(user_data["id"], user_data, new_state)
    raise DispatcherHandlerStop
Exemple #8
0
def test(model, test_set, env, xm, xs, am, ast, render=False):
    successes, failures = 0, 0
    for i in range(len(test_set)):
        succeded = 0
        env.reset()
        env = utils.set_state(env, test_set[i][0], test_set[i][1])
        state, *_ = env.step([0., 0., 0., 0.])
        picked = [False]
        for i in range(100):
            action = model((np.concatenate(
                (state["observation"], state["achieved_goal"],
                 state["desired_goal"])).reshape((1, -1)) - xm) / xs)

            action = action * ast + am
            new_state, *_ = env.step(action[0])
            #   print(action)
            if render: env.render()
            state = new_state

            if not np.linalg.norm(
                (state["achieved_goal"] - state["desired_goal"])) > 0.07:
                #        print("SUCCESS!")
                succeded = 1
                successes += 1

                break
        if not succeded:
            #     print("FAILURE")
            failures += 1
    return successes, failures
Exemple #9
0
def test(model, ae, test_set, env, xm, xs, am, ast, fulltraj = False, render = False):
    successes, failures = 0,0
    error_succ, error_fail = 0.,0.
    succ_errors_list, fail_errors_list = [], []
    for i in range(len(test_set)):
        succeded = 0
        env.reset()
        env = utils.set_state(env, test_set[i][0], test_set[i][1])
        state, *_ = env.step([0.,0.,0.,0.])
        picked = [False]

        error = ae.error((np.concatenate((state["observation"],
                                    state["achieved_goal"],
                                    state["desired_goal"])).reshape((1,-1)) - xm)/xs)
        tot_error = error
        #print("Uncertainty ", error.numpy())
        for i in range(100):
            action = model((np.concatenate((state["observation"],
                                        state["achieved_goal"],
                                        state["desired_goal"])).reshape((1,-1)) - xm)/xs)

            action = action*ast + am
            new_state, *_ = env.step(action[0])
         #   print(action)
            if render: env.render()

            state = new_state
            if fulltraj:
            #If I choose to sum up the errors of the entire trajectory I integrate errors
            # on tot_error
                error = ae.error((np.concatenate((state["observation"],
                                    state["achieved_goal"],
                                    state["desired_goal"])).reshape((1,-1)) - xm)/xs)
                tot_error+=error

            if not np.linalg.norm((state["achieved_goal"]- state["desired_goal"])) > 0.07:
          #      print("SUCCESS!")
                succeded = 1
                successes +=1

                #divide by number of steps to get an average
                if fulltraj:
                    error_succ += tot_error/(i + 1)
                    succ_errors_list.append(tot_error/(i + 1))
                else:
                    error_succ += tot_error
                    succ_errors_list.append(tot_error)
                break
        if not succeded:
         #   print("FAILURE")
            failures+=1
            #divide by number of steps to get an average
            if fulltraj:
                error_fail += tot_error/(i + 1)
                fail_errors_list.append(tot_error/(i+1))
            else:
                error_fail += tot_error
                fail_errors_list.append(tot_error)

    return successes, failures, error_succ/successes, error_fail/failures, succ_errors_list, fail_errors_list
Exemple #10
0
    def leave_right(self, event):
        """移出右侧粘贴框
        """
        if self.hasQuery:
            return
        ss = self.paste_r.get(1.0, tk.END)
        arr = utils.split_str(ss, False)
        if len(arr) and arr[0] == self.msg_right:
            # print("默认")
            return

        # 如果是文件路径,则取出文件名和扩展名 / 文件夹名
        narr = []
        for i in range(len(arr)):
            arr[i] = utils.pathlib_path(arr[i])
            item = arr[i]
            item = item.strip("\t").strip(" ")
            item = item.strip("\t").strip(" ")
            item = item.strip('"').strip("'")
            p = Path(item)
            if p.name:
                narr.append(p.name)

        if not len(narr):
            self.paste_r.delete(1.0, tk.END)
            self.paste_r.insert(tk.INSERT, self.msg_right)
            return

        # self.varR.set(tuple(narr))
        # self.varC.set(tuple([]))
        self.svR.set(narr)
        self.svC.set([])
        self.sortRS['text'] = self.sortDesc[0]
        self.RightIsReverse = False

        # vlstr = self.varL.get()
        # vrstr = self.varR.get()
        # varIsN = util.stringVarisN
        # if varIsN(vlstr) or varIsN(vrstr):
        validL = self.svL.is_null()
        validR = self.svR.is_null()
        if not validL or not validR:
            utils.set_state(self.start_btn, True)

        self.paste_r.delete(1.0, tk.END)
        self.paste_r.insert(tk.INSERT, self.msg_right)
Exemple #11
0
def get_active_exp(env, threshold, ae, xm, xs, render, take_max = False, max_act_steps = 20):

    err_avg = 0
    for i in range(20):
        state = env.reset()
        state = robot_reset(env)
        error = ae.error((np.concatenate((state["observation"],
                                    state["achieved_goal"],
                                    state["desired_goal"])).reshape((1,-1)) - xm)/xs)
        err_avg+=error
    err_avg/=20

    state = env.reset()
    error = ae.error((np.concatenate((state["observation"],
                                    state["achieved_goal"],
                                    state["desired_goal"])).reshape((1,-1)) - xm)/xs)
    #print("predicted error", error)

    if not take_max:
        tried = 0
        while not error > threshold*err_avg:
            tried+=1
            state = env.reset()
            state = robot_reset(env)
            error = ae.error((np.concatenate((state["observation"],
                                            state["achieved_goal"],
                                            state["desired_goal"])).reshape((1,-1)) - xm)/xs)
      #      print("predicted error", error.numpy(), err_avg.numpy())
     #   print("Tried ", tried, " initial states")
        new_states, new_acts = man_controller.get_demo(env, state, CTRL_NORM, render)

        return new_states, new_acts

    else:
        errs_states = []
        for k in range(max_act_steps):
            state = env.reset()
            state = robot_reset(env)
            error = ae.error((np.concatenate((state["observation"],
                                            state["achieved_goal"],
                                            state["desired_goal"])).reshape((1,-1)) - xm)/xs)
            s, g = utils.save_state(env)
            errs_states.append([s, g, error])

        max_error = -1000
        max_key = ()
        for el in range(len(errs_states)):
            if errs_states[el][2] > max_error:
                max_error = errs_states[el][2]
                max_key = el

        new_env = utils.set_state(env, errs_states[max_key][0], errs_states[max_key][1])
        state, *_ = new_env.step(np.zeros(4))

        new_states, new_acts = man_controller.get_demo(new_env, state, CTRL_NORM, render)

        return new_states, new_acts
Exemple #12
0
def delay_off(minutes):
    time.sleep(60*minutes)
    set_state({"mode": "off"})
Exemple #13
0
def test_states():
    utils.set_state('test', 'test_state')
    assert utils.get_current_state('test') == 'test_state', '1st state saving failed'

    utils.set_state('test', 'test_state2')
    assert utils.get_current_state('test') == 'test_state2', '2nd state saving failed'
Exemple #14
0
def state_view():
    if request.method == "POST":
        state = request.json.get("state")
        set_state(state)
        print(state)
    return jsonify(get_state())
Exemple #15
0
def button_callback():
    date_time = datetime.datetime.now().strftime("%m/%d/%Y, %H:%M:%S")
    post_message_to_lack(f"@here button pressed! `{date_time}`")
    set_state({"mode": "nyan_cat"})
    time.sleep(10)
    set_state({"mode": "per_step"})
Exemple #16
0
    def paste_leave_left(self, event):
        """移出左侧粘贴框
        """
        if self.hasQuery:
            return
        ss = self.paste_l.get(1.0, tk.END)
        arr = utils.split_str(ss, False)
        if len(arr) and arr[0] == self.msgLeft:
            # print("默认")
            return

        # 检查文件/文件夹是否存在
        narr = []
        no_exists_arr = []
        for i in range(len(arr)):
            arr[i] = utils.pathlib_path(arr[i])
            item = arr[i]
            if len(item) < 3:
                continue
            if os.path.exists(item):
                narr.append(item)
            else:
                no_exists_arr.append(item)

        if not len(narr):
            self.paste_l.delete(1.0, tk.END)
            self.paste_l.insert(tk.INSERT, self.msgLeft, "right")
            return

        # 去重
        tarr = []
        for item in narr:
            if not tarr.count(item):
                tarr.append(item)
        narr = tarr

        # self.varL.set(tuple(narr))
        # self.varC.set(tuple([]))
        self.svL.set(narr)
        self.svC.set([])
        self.sortLS['text'] = self.sortDesc[0]
        self.LeftIsReverse = False
        self.list_l.xview_moveto(1.0)

        # vlstr = self.varL.get()
        # vrstr = self.varR.get()
        # validL = False if util.stringVarisN(vlstr) else True
        # validR = False if util.stringVarisN(vrstr) else True
        validL = False if self.svL.is_null() else True
        validR = False if self.svR.is_null() else True
        if validL and validR:
            utils.set_state(self.start_btn, True)

        self.paste_l.delete(1.0, tk.END)
        self.paste_l.insert(tk.INSERT, self.msgLeft, "right")

        num1 = len(no_exists_arr)
        if num1:
            file_name_str = "\n".join(str(item) for item in no_exists_arr)
            utils.showinfo('{0}个文件不存在,将不参与重命名:{1}\n'.format(
                num1, file_name_str))
Exemple #17
0
    def manual_int(self):
        if self.is_manual_int:
            return
        self.is_manual_int = True
        win = self.win
        self.hasQuery = False
        self.LeftIsReverse = False
        self.RightIsReverse = False
        self.sortDesc = ('排序↕', "升序a-z", '降序z-a')
        """组装 ui
        """
        # 颜色
        GRAP = "#515556"
        # GRAP2 = "#B9BFC1"
        # TXT_BG = "#ECECEC"
        LIST_BG = "#EFEFEF"
        LIST_WIDTH = 91 + 10
        # TXT_WIDTH = 80+7
        # FILE_GAP = 65+10
        # WRAP_LENGTH = 780

        frame = tk.Frame(win, padx=8, pady=2)
        frame.grid(column=1, row=0, sticky=tk.N + tk.S + tk.W)

        self.svL = StringVar()
        self.svC = StringVar()
        self.svR = StringVar()
        varL = self.svL.get_object()
        varC = self.svC.get_object()
        varR = self.svR.get_object()
        self.list_l = tk.Listbox(frame,
                                 selectmode=tk.EXTENDED,
                                 fg=GRAP,
                                 background=LIST_BG,
                                 height=20,
                                 setgrid=1,
                                 activestyle='none')
        self.list_c = utils.clone(self.list_l)
        self.list_r = utils.clone(self.list_l)
        self.list_l.config(yscrollcommand=self.yscroll1, listvariable=varL)
        self.list_c.config(yscrollcommand=self.yscroll2, listvariable=varC)
        self.list_r.config(yscrollcommand=self.yscroll3, listvariable=varR)
        self.list_l.config(bd=1, justify=tk.RIGHT, width=LIST_WIDTH - 35)
        self.list_c.config(bd=0, justify=tk.CENTER, width=7)
        self.list_r.config(bd=1, justify=tk.LEFT, width=25)
        self.list_l.grid(column=1, row=10, sticky=tk.E)
        self.list_c.grid(column=2, row=10, sticky=tk.W)
        self.list_r.grid(column=3, row=10, sticky=tk.W)

        self.scrollbar = tk.Scrollbar(frame,
                                      orient='vertical',
                                      command=self.yview)
        self.scrollbar.grid(column=4, row=10, sticky=tk.N + tk.S + tk.W)

        # test
        # for x in range(30):
        #     self.list_l.insert('end', x)
        #     self.list_r.insert('end', x)

        self.msgLeft = " ;-) 点我 粘贴 需命名的文件"
        self.paste_l = tk.Text(frame,
                               height=1,
                               width=LIST_WIDTH - 30,
                               fg=GRAP,
                               wrap=tk.WORD,
                               font=setting_fftool.font_default)
        self.paste_l.bind("<Leave>", self.paste_leave_left)
        self.paste_l.bind("<Button-1>", self.pasteClick)
        self.paste_l.tag_config("right", justify=tk.RIGHT)
        self.paste_l.insert(tk.INSERT, self.msgLeft, "right")

        self.msg_right = " ;-) 粘贴 文件名 或 文件"
        self.paste_r = tk.Text(frame,
                               height=1,
                               width=25,
                               fg=GRAP,
                               wrap=tk.WORD,
                               font=setting_fftool.font_default)
        self.paste_r.bind("<Leave>", self.leave_right)
        self.paste_r.bind("<Button-1>", self.pasteClick)
        self.paste_r.insert(tk.INSERT, self.msg_right)

        self.paste_l.grid(column=1, row=0, sticky=tk.NE)
        self.paste_r.grid(column=3, row=0, sticky=tk.NW)

        # 左右排序按钮
        fleft = tk.Frame(frame, padx=8, pady=2)
        fRight = tk.Frame(frame, padx=8, pady=2)

        desc = self.sortDesc
        self.sortLS = tk.Button(fleft, text=desc[0], width=7)
        self.sortLU = tk.Button(fleft, text='↑', width=2)
        self.sortLD = tk.Button(fleft, text='↓', width=2)

        self.sortRS = tk.Button(fRight, text=desc[0], width=7)
        self.sortRU = tk.Button(fRight, text='↑', width=2)
        self.sortRD = tk.Button(fRight, text='↓', width=2)

        widgets = (self.sortLS, self.sortLU, self.sortLD, self.sortRS,
                   self.sortRU, self.sortRD)
        for w in widgets:
            utils.bind(w, self.sortCall)

        fleft.grid(column=1, row=5, sticky=tk.NE)
        self.sortLS.grid(column=4, row=1)
        self.sortLU.grid(column=2, row=1)
        self.sortLD.grid(column=3, row=1)

        fRight.grid(column=3, row=5, sticky=tk.NE)
        self.sortRS.grid(column=1, row=1)
        self.sortRU.grid(column=2, row=1)
        self.sortRD.grid(column=3, row=1)
        start_btn = tk.Button(frame,
                              text='开始\n命名',
                              width=6,
                              height=3,
                              command=self.start_check,
                              relief=tk.GROOVE)
        undo_btn = tk.Button(frame,
                             text='↺撤销',
                             width=6,
                             height=1,
                             command=self.start_check,
                             relief=tk.GROOVE)
        start_btn.grid(column=2, row=20)
        undo_btn.grid(column=2, row=21)
        utils.set_state(start_btn, False)
        utils.set_state(undo_btn, False)

        # 统一设置样式
        tub1 = (self.list_l, self.list_r, start_btn, undo_btn)
        tub = widgets + tub1
        utils.set_groove(tub)

        self.undo_btn = undo_btn
        self.start_btn = start_btn
Exemple #18
0
 def set_state(self, state):
     """Sets the workflow state of the object.
     """
     return utils.set_state(self, state)
Exemple #19
0
 def set_state(self, boo):
     utils.set_state(self.start_btn, boo)
Exemple #20
0
def predict(model, ae, test_set, env, xm, xs, am, ast, tot_error_trainset):
    succ_tp, succ_fp, succ_tn, succ_fn = 0,0,0,0
    successes, failures = 0, 0
    steps_to_stop = []
    for i in range(len(test_set)):
        steps = 0
        env.reset()
        env = utils.set_state(env, test_set[i][0], test_set[i][1])
        state, *_ = env.step([0.,0.,0.,0.])
        picked = [False]
        succeded = False
        error = ae.error((np.concatenate((state["observation"],
                                    state["achieved_goal"],
                                    state["desired_goal"])).reshape((1,-1)) - xm)/xs)

        # If not FULL_TRAJ predict directly the outcome. Otherwise, predict success and eventually
        # correct to failure if the error becomes too high.
        if not FULL_TRAJ:
            if error > tot_error_trainset:
                prediction = "failure"
            else:
                prediction = "success"
        else: prediction = "success"
      #  prediction = "success" #assume you think you'll always succeed

        for i in range(100):
            if prediction == "success": steps+=1
            action = model((np.concatenate((state["observation"],
                                        state["achieved_goal"],
                                        state["desired_goal"])).reshape((1,-1)) - xm)/xs)

            action = action*ast + am
            new_state, *_ = env.step(action[0])
            if RENDER_TEST: env.render()
            if FULL_TRAJ:
                # Checks at every step if the error becomes too high.
                error = ae.error((np.concatenate((state["observation"],
                                            state["achieved_goal"],
                                            state["desired_goal"])).reshape((1,-1)) - xm)/xs)
                if error > ERROR_THR_PRED*tot_error_trainset:
                    prediction = "failure"
                    #print("PREDICTED FAILURE")
                    #print(np.random.randn())
                    #break #Should not break, because it could solve it even if it thinks it won't

            state = new_state

            if not np.linalg.norm((state["achieved_goal"]- state["desired_goal"])) > 0.07:
          #      print("SUCCESS!")
                successes += 1
                succeded = True
                if prediction == "success":
                    succ_tp +=1
                elif prediction == "failure":
                    succ_fn +=1
                break

                #divide by number of steps to get an average
    #    if FULL_TRAJ: print("End \n \n \n")
        if not succeded:
            failures += 1
            if prediction == "failure":
                succ_tn +=1
                steps_to_stop.append(steps)
            elif prediction == "success":
                succ_fp += 1

    print("successes, failures", successes, failures)
    print("steps to stop", steps_to_stop, np.array(steps_to_stop).mean())
    return succ_tp, succ_fp, succ_tn, succ_fn