コード例 #1
0
ファイル: __init__.py プロジェクト: philophreak/PyMaster
    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"]
コード例 #2
0
    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"]
コード例 #3
0
ファイル: __init__.py プロジェクト: philophreak/PyMaster
    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]
コード例 #4
0
    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]