def get_fact(cls, fact): cls.forget() facts = {} for d in [data_dir] + ext_dirs: fname = os.path.join(d, "facts.json") if os.path.isfile(fname): with open(fname, 'r') as f: nfacts = json.load(f) for i in nfacts: facts[i] = nfacts[i] if fact not in cls.facts: fdict = facts.get(fact, {}) firstcheck = fdict.get("firstcheck") value = parse.python(firstcheck) if firstcheck else None if "forget" in fdict: forget = time.time() + parse.python(fdict["forget"]) else: forget = None cls.facts[fact] = {"value": value, "forget": forget} return cls.facts[fact]["value"]
def forget(cls): def get_forget_time(chores_add=0, misdeeds_add=0): memory_num = len(cls.chores) + chores_add if memory_num <= CHORES_TARGET: f = FORGET_TIME_ADJUST else: f = FORGET_TIME_NEGATIVE_ADJUST memory_num += len(cls.abandoned_chores) for i in cls.misdeeds: memory_num += len(cls.misdeeds[i]) memory_num += misdeeds_add return FORGET_TIME_TARGET + f * (CHORES_TARGET - memory_num) ** 3 forgotten = [] for i in range(len(cls.chores)): if time.time() >= (cls.chores[i]["time"] + get_forget_time(chores_add=-len(forgotten))): forgotten.append(i) for i in sorted(forgotten, reverse=True): del cls.chores[i] forgotten = [] for i in range(len(cls.abandoned_chores)): if time.time() >= (cls.abandoned_chores[i]["time"] + get_forget_time(misdeeds_add=-len(forgotten))): forgotten.append(i) for i in sorted(forgotten, reverse=True): del cls.abandoned_chores[i] invalid = [] for i in cls.misdeeds: if i not in activities_dict and i not in misdeeds_dict: print("Warning: Deleting invalid misdeed \"{}\"".format(i)) invalid.append(i) continue forgotten = [] for j in range(len(cls.misdeeds[i])): if time.time() >= (cls.misdeeds[i][j]["time"] + get_forget_time(misdeeds_add=-len(forgotten))): forgotten.append(j) for j in sorted(forgotten, reverse=True): md = cls.misdeeds[i][j] punishment = md["punishment"] if punishment is not None and not md["punished"]: t = punishment.get("time") for activity in punishment.get("activities", []): try: cls.activities[parse.python(activity)].remove(t) except (KeyError, ValueError): print("Warning: Didn't find activity \"{}\" at the time of this punishment.".format(activity)) del cls.misdeeds[i][j] for i in invalid: del cls.misdeeds[i] invalid = [] for i in cls.activities: try: forget_time = eval(activities_dict[i]["forget_time"]) except KeyError: print("Warning: Deleting invalid activity \"{}\"".format(i)) invalid.append(i) continue forgotten = [] for j in range(len(cls.activities[i])): if time.time() >= cls.activities[i][j] + forget_time: forgotten.append(j) for j in sorted(forgotten, reverse=True): del cls.activities[i][j] for i in invalid: del cls.activities[i] forgotten = [] for i in cls.facts: forget = cls.facts[i]["forget"] if forget is not None and time.time() >= forget: forgotten.append(i) for i in forgotten: del cls.facts[i]
def forget(cls): def get_forget_time(chores_add=0, misdeeds_add=0): memory_num = len(cls.chores) + chores_add if memory_num <= CHORES_TARGET: f = FORGET_TIME_ADJUST else: f = FORGET_TIME_NEGATIVE_ADJUST memory_num += len(cls.abandoned_chores) for i in cls.misdeeds: memory_num += len(cls.misdeeds[i]) memory_num += misdeeds_add return FORGET_TIME_TARGET + f * (CHORES_TARGET - memory_num)**3 forgotten = [] for i in range(len(cls.chores)): if time.time() >= (cls.chores[i]["time"] + get_forget_time(chores_add=-len(forgotten))): forgotten.append(i) for i in sorted(forgotten, reverse=True): del cls.chores[i] forgotten = [] for i in range(len(cls.abandoned_chores)): if time.time() >= (cls.abandoned_chores[i]["time"] + get_forget_time(misdeeds_add=-len(forgotten))): forgotten.append(i) for i in sorted(forgotten, reverse=True): del cls.abandoned_chores[i] invalid = [] for i in cls.misdeeds: if i not in activities_dict and i not in misdeeds_dict: print("Warning: Deleting invalid misdeed \"{}\"".format(i)) invalid.append(i) continue forgotten = [] for j in range(len(cls.misdeeds[i])): if time.time() >= ( cls.misdeeds[i][j]["time"] + get_forget_time(misdeeds_add=-len(forgotten))): forgotten.append(j) for j in sorted(forgotten, reverse=True): md = cls.misdeeds[i][j] punishment = md["punishment"] if punishment is not None and not md["punished"]: t = punishment.get("time") for activity in punishment.get("activities", []): try: cls.activities[parse.python(activity)].remove(t) except (KeyError, ValueError): print( "Warning: Didn't find activity \"{}\" at the time of this punishment." .format(activity)) del cls.misdeeds[i][j] for i in invalid: del cls.misdeeds[i] invalid = [] for i in cls.activities: try: forget_time = eval(activities_dict[i]["forget_time"]) except KeyError: print("Warning: Deleting invalid activity \"{}\"".format(i)) invalid.append(i) continue forgotten = [] for j in range(len(cls.activities[i])): if time.time() >= cls.activities[i][j] + forget_time: forgotten.append(j) for j in sorted(forgotten, reverse=True): del cls.activities[i][j] for i in invalid: del cls.activities[i] forgotten = [] for i in cls.facts: forget = cls.facts[i]["forget"] if forget is not None and time.time() >= forget: forgotten.append(i) for i in forgotten: del cls.facts[i]