예제 #1
0
    def get_rehabilitation_chance(self):
        dbmgr = sql_connect.DatabaseManager("testdb.db")
        rehabilitation_data = dbmgr.demo_data(self.city_data, "rehabilitation")
        dbmgr.__del__()
        options = {
            True: rehabilitation_data[0]['rehabilitation_true'],
            False: rehabilitation_data[0]['rehabilitation_false']
        }

        return self.randomizer.get_random_dict_key(options)
예제 #2
0
    def get_breakup_chance(self):
        dbmgr = sql_connect.DatabaseManager("testdb.db")
        breakup_data = dbmgr.demo_data("default", "breakup")
        dbmgr.__del__()
        options = {
            True: breakup_data[0]['breakup_true'],
            False: breakup_data[0]['breakup_false']
        }

        return self.randomizer.get_random_dict_key(options)
예제 #3
0
    def get_alcohol_addiction_chance(self):
        dbmgr = sql_connect.DatabaseManager("testdb.db")
        alcohol_addiction_data = dbmgr.demo_data("default", "alcohol_addiction")
        dbmgr.__del__()
        options = {
            True: alcohol_addiction_data[0]['addict_true'],
            False: alcohol_addiction_data[0]['addict_false']
        }

        return self.randomizer.get_random_dict_key(options)
예제 #4
0
    def get_relapse_chance(self):
        dbmgr = sql_connect.DatabaseManager("testdb.db")
        relapse_data = dbmgr.demo_data("default", "relapse")
        dbmgr.__del__()
        options = {
            True: relapse_data[0]['relapse_true'],
            False: relapse_data[0]['relapse_false']
        }

        return self.randomizer.get_random_dict_key(options)
예제 #5
0
    def get_overdose_chance(self):
        dbmgr = sql_connect.DatabaseManager("testdb.db")
        overdose_data = dbmgr.demo_data(self.city_data, "overdose")
        dbmgr.__del__()
        options = {
            True: overdose_data[0]['overdose_true'],
            False: overdose_data[0]['overdose_false']
        }

        return self.randomizer.get_random_dict_key(options)
예제 #6
0
    def get_relapse_chance(self):
        """Statistical chance of relapsing"""
        dbmgr = sql_connect.DatabaseManager("testdb.db")
        relapse_data = dbmgr.demo_data(self.city_data, "relapse")
        dbmgr.__del__()

        options = {
            True: relapse_data[0]['relapse_true'],
            False: relapse_data[0]['relapse_false']
        }
        return self.randomizer.get_random_dict_key(options)
예제 #7
0
    def get_drug_addiction_chance(self):
        """Statistical chance for drug addiction."""
        dbmgr = sql_connect.DatabaseManager("testdb.db")
        drug_addiction_data = dbmgr.demo_data(self.city_data, "drug_addiction")
        dbmgr.__del__()

        options = {
            True: drug_addiction_data[0]['addict_true'],
            False: drug_addiction_data[0]['addict_false']
        }
        return self.randomizer.get_random_dict_key(options)
예제 #8
0
    def get_desired_num_of_children(self):
        dbmgr = sql_connect.DatabaseManager("testdb.db")
        children_data = dbmgr.demo_data("default", "desired_num_of_children")
        dbmgr.__del__()
        options = {
            Traits.ONE_CHILD: children_data[0]['one_child'],
            Traits.TWO_CHILDREN: children_data[0]['two_children'],
            Traits.THREE_CHILDREN: children_data[0]['three_children'],
            Traits.FOUR_CHILDREN: children_data[0]['four_children']
        }

        return self.randomizer.get_random_dict_key(options)
예제 #9
0
    def get_pregnancy_num_of_children(self):
        """Random number of children for pregnancy: singleton/twins/triplets"""
        dbmgr = sql_connect.DatabaseManager("testdb.db")
        pregnancy_data = dbmgr.demo_data("default", "pregnancy")
        dbmgr.__del__()
        options = {
            Traits.SINGLETON: pregnancy_data[0]['singlton'],
            Traits.TWINS: pregnancy_data[0]['twins'],
            Traits.TRIPLETS: pregnancy_data[0]['triplets']
        }

        return self.randomizer.get_random_dict_key(options)
예제 #10
0
    def get_social_class(self):
        """Statistical chance for social class."""
        dbmgr = sql_connect.DatabaseManager("testdb.db")
        social_class_data = dbmgr.demo_data(self.city_data, "social_class")
        dbmgr.__del__()

        options = {
            Traits.UPPER_CLASS: social_class_data[0]['lower_class'],
            Traits.MIDDLE_CLASS: social_class_data[0]['middle_class'],
            Traits.LOWER_CLASS: social_class_data[0]['upper_class']
        }
        selected = self.randomizer.get_random_dict_key(options)
        self.validate_selected(selected, Traits.SOCIAL_CLASSES)
        return selected
예제 #11
0
    def get_employment_chance(self):
        """Statistical chance of employment."""
        # Link: https://tradingeconomics.com/united-states/unemployment-rate
        # To insert into DB: Employed: 95.9. Unemployed: 4.1.
        dbmgr = sql_connect.DatabaseManager("testdb.db")
        employment_data = dbmgr.demo_data(self.city_data, "employment")
        dbmgr.__del__()

        options = {
            Traits.EMPLOYED: employment_data[0]['employed'],
            Traits.UNEMPLOYED: employment_data[0]['unemployed']
        }
        selected = self.randomizer.get_random_dict_key(options)
        self.validate_selected(selected, Traits.EMPLOYMENT)
        return selected
예제 #12
0
    def get_employment_chance(self):
        dbmgr = sql_connect.DatabaseManager("testdb.db")
        employment_data = dbmgr.demo_data("default", "employment")
        dbmgr.__del__()
        options = {
            Traits.EMPLOYED: employment_data[0]['employed'],
            Traits.UNEMPLOYED: employment_data[0]['unemployed']
        }

        selected = self.randomizer.get_random_dict_key(options)

        if selected not in Traits.EMPLOYMENT:
            raise Exception("Wrong employment attribute.")

        return selected
예제 #13
0
    def get_death_cause(self, person):
        dbmgr = sql_connect.DatabaseManager("testdb.db")
        death_cause_data = dbmgr.demo_data("default", "death_cause")
        dbmgr.__del__()
        if person.death_date is False:
            return Traits.OLD_AGE

        if person.death_date < self.stages.TEEN.start:
            return Traits.ILLNESS

        options_teen = {
            Traits.ILLNESS: death_cause_data[0]['teen_illness'],
            Traits.SUICIDE: death_cause_data[0]['teen_suicide']
        }

        options_young_adult = {
            Traits.ILLNESS: death_cause_data[0]['young_adult_illness'],
            Traits.SUICIDE: death_cause_data[0]['young_adult_suicide'],
            Traits.ACCIDENT: death_cause_data[0]['young_adult_accident']
        }

        options_adult = {
            Traits.ILLNESS: death_cause_data[0]['adult_illness'],
            Traits.SUICIDE: death_cause_data[0]['adult_suicide'],
            Traits.ACCIDENT: death_cause_data[0]['adult_accident']
        }

        options_senior = {
            Traits.ILLNESS: death_cause_data[0]['senior_illness'],
            Traits.SUICIDE: death_cause_data[0]['senior_suicide'],
            Traits.ACCIDENT: death_cause_data[0]['senior_accident']
        }

        if person.death_date in self.stages.TEEN.span:
            selected = self.randomizer.get_random_dict_key(options_teen)
        elif person.death_date in self.stages.YOUNGADULT.span:
            selected = self.randomizer.get_random_dict_key(options_young_adult)
        elif person.death_date in self.stages.ADULT.span:
            selected = self.randomizer.get_random_dict_key(options_adult)
        elif person.death_date in self.stages.SENIOR.span:
            selected = self.randomizer.get_random_dict_key(options_senior)
        else:
            raise Exception("Wrong death date.")

        if selected not in Traits.DEATH_CAUSES:
            raise Exception("Wrong death cause.")

        return selected
예제 #14
0
    def get_pregnancy_num_of_children(self):
        """Statistical chance of having singleton/twins/triplets."""
        # Link: https://en.wikipedia.org/wiki/Multiple_birth
        dbmgr = sql_connect.DatabaseManager("testdb.db")
        pregnancy_data = dbmgr.demo_data(self.city_data, "pregnancy")
        dbmgr.__del__()

        options = {
            Traits.SINGLETON: pregnancy_data[0]['singlton'],
            Traits.TWINS: pregnancy_data[0]['twins'],
            Traits.TRIPLETS: pregnancy_data[0]['triplets']
        }
        selected = self.randomizer.get_random_dict_key(options)
        self.validate_selected(selected,
                               Traits.ALLOWED_NUM_OF_CHILDREN_PER_PREGNANCY)
        return selected
예제 #15
0
    def get_race(self):
        """Statistical chance for race."""
        # Link: https://www.census.gov/quickfacts/fact/table/US/PST045216
        dbmgr = sql_connect.DatabaseManager("testdb.db")
        race_data = dbmgr.demo_data(self.city_data, "race")
        dbmgr.__del__()

        options = {
            Traits.WHITE: race_data[0]['white'],
            Traits.BLACK: race_data[0]['black'],
            Traits.LATINO: race_data[0]['latino'],
            Traits.ASIAN: race_data[0]['asian']
        }
        selected = self.randomizer.get_random_dict_key(options)
        self.validate_selected(selected, Traits.RACES)
        return selected
예제 #16
0
    def get_death_cause(self, person):
        """Statistical chance for death cause."""
        dbmgr = sql_connect.DatabaseManager("testdb.db")
        death_cause_data = dbmgr.demo_data(self.city_data, "death_cause")
        dbmgr.__del__()

        # If death date is False = Old Age
        if person.death_date is False:
            return Traits.OLD_AGE
        # If baby or child = Illness
        if person.death_date < Traits.TEEN.start:
            return Traits.ILLNESS

        options_teen = {
            Traits.ILLNESS: death_cause_data[0]['teen_illness'],
            Traits.SUICIDE: death_cause_data[0]['teen_suicide']
        }
        options_young_adult = {
            Traits.ILLNESS: death_cause_data[0]['young_adult_illness'],
            Traits.SUICIDE: death_cause_data[0]['young_adult_suicide'],
            Traits.ACCIDENT: death_cause_data[0]['young_adult_accident']
        }
        options_adult = {
            Traits.ILLNESS: death_cause_data[0]['adult_illness'],
            Traits.SUICIDE: death_cause_data[0]['adult_suicide'],
            Traits.ACCIDENT: death_cause_data[0]['adult_accident']
        }
        options_senior = {
            Traits.ILLNESS: death_cause_data[0]['senior_illness'],
            Traits.SUICIDE: death_cause_data[0]['senior_suicide'],
            Traits.ACCIDENT: death_cause_data[0]['senior_accident']
        }

        if person.death_date in Traits.TEEN.span:
            selected = self.randomizer.get_random_dict_key(options_teen)
        elif person.death_date in Traits.YOUNGADULT.span:
            selected = self.randomizer.get_random_dict_key(options_young_adult)
        elif person.death_date in Traits.ADULT.span:
            selected = self.randomizer.get_random_dict_key(options_adult)
        elif person.death_date in Traits.SENIOR.span:
            selected = self.randomizer.get_random_dict_key(options_senior)
        else:
            raise Exception("Wrong death date.")

        self.validate_selected(selected, Traits.DEATH_CAUSES)
        return selected
예제 #17
0
    def get_desired_num_of_children(self):
        """Statistical chance for desired number of children per couple."""
        dbmgr = sql_connect.DatabaseManager("testdb.db")
        children_data = dbmgr.demo_data(self.city_data,
                                        "desired_num_of_children")
        dbmgr.__del__()

        options = {
            Traits.ONE_CHILD: children_data[0]['one_child'],
            Traits.TWO_CHILDREN: children_data[0]['two_children'],
            Traits.THREE_CHILDREN: children_data[0]['three_children'],
            Traits.FOUR_CHILDREN: children_data[0]['four_children']
        }
        selected = self.randomizer.get_random_dict_key(options)
        self.validate_selected(selected,
                               Traits.ALLOWED_NUM_OF_CHILDREN_PER_COUPLE)
        return selected
예제 #18
0
    def get_race(self):
        dbmgr = sql_connect.DatabaseManager("testdb.db")
        race_data = dbmgr.demo_data("default", "race")
        dbmgr.__del__()
        options = {
            Traits.WHITE: race_data[0]['white'],
            Traits.BLACK: race_data[0]['black'],
            Traits.LATINO: race_data[0]['latino'],
            Traits.ASIAN: race_data[0]['asian']
        }

        selected = self.randomizer.get_random_dict_key(options)

        if selected not in Traits.RACES:
            raise Exception("Wrong race.")

        return selected
예제 #19
0
    def get_breakup_chance(self, couple):
        """Statistical chance of breaking up."""
        # Link: http://stories.avvo.com/relationships/divorce/numbers-breakdown-divorce-generation.html
        # Link: https://psychcentral.com/blog/is-my-marriage-doomed-if-my-parents-got-divorced-when-i-was-a-kid/
        # Insert to DB: True: 52.7. False: 48.3. If divorced parents: True: 79. False: 21.
        dbmgr = sql_connect.DatabaseManager("testdb.db")
        breakup_data = dbmgr.demo_data(self.city_data, "breakup")
        dbmgr.__del__()

        options_for_married_parents = {
            True: breakup_data[0]['breakup_true'],
            False: breakup_data[0]['breakup_false']
        }
        options_for_divorced_parents = {True: 79, False: 21}
        if all(p.has_divorced_parents for p in couple.persons):
            return self.randomizer.get_random_dict_key(
                options_for_divorced_parents)
        return self.randomizer.get_random_dict_key(options_for_married_parents)
예제 #20
0
    def get_social_class(self):
        # The database connection, and the city variable probably need doing somewhere once rather than for
        # every function, every time
        # Start the db connection
        dbmgr = sql_connect.DatabaseManager("testdb.db")

        # Get the data, passing the city
        social_class_data = dbmgr.demo_data("default", "social_class")

        # Close the connection
        dbmgr.__del__()

        options = {
            Traits.LOWERCLASS: social_class_data[0]['lower_class'],
            Traits.MIDDLECLASS: social_class_data[0]['middle_class'],
            Traits.UPPERCLASS: social_class_data[0]['upper_class']
        }

        selected = self.randomizer.get_random_dict_key(options)

        if selected not in Traits.SOCIAL_CLASSES:
            raise Exception("Wrong social class.")

        return selected