diff --git a/.vscode/.ropeproject/config.py b/.vscode/.ropeproject/config.py new file mode 100644 index 0000000..0bf7750 --- /dev/null +++ b/.vscode/.ropeproject/config.py @@ -0,0 +1,112 @@ +# The default ``config.py`` +# flake8: noqa + + +def set_prefs(prefs): + """This function is called before opening the project""" + + # Specify which files and folders to ignore in the project. + # Changes to ignored resources are not added to the history and + # VCSs. Also they are not returned in `Project.get_files()`. + # Note that ``?`` and ``*`` match all characters but slashes. + # '*.pyc': matches 'test.pyc' and 'pkg/test.pyc' + # 'mod*.pyc': matches 'test/mod1.pyc' but not 'mod/1.pyc' + # '.svn': matches 'pkg/.svn' and all of its children + # 'build/*.o': matches 'build/lib.o' but not 'build/sub/lib.o' + # 'build//*.o': matches 'build/lib.o' and 'build/sub/lib.o' + prefs['ignored_resources'] = ['*.pyc', '*~', '.ropeproject', + '.hg', '.svn', '_svn', '.git', '.tox'] + + # Specifies which files should be considered python files. It is + # useful when you have scripts inside your project. Only files + # ending with ``.py`` are considered to be python files by + # default. + #prefs['python_files'] = ['*.py'] + + # Custom source folders: By default rope searches the project + # for finding source folders (folders that should be searched + # for finding modules). You can add paths to that list. Note + # that rope guesses project source folders correctly most of the + # time; use this if you have any problems. + # The folders should be relative to project root and use '/' for + # separating folders regardless of the platform rope is running on. + # 'src/my_source_folder' for instance. + #prefs.add('source_folders', 'src') + + # You can extend python path for looking up modules + #prefs.add('python_path', '~/python/') + + # Should rope save object information or not. + prefs['save_objectdb'] = True + prefs['compress_objectdb'] = False + + # If `True`, rope analyzes each module when it is being saved. + prefs['automatic_soa'] = True + # The depth of calls to follow in static object analysis + prefs['soa_followed_calls'] = 0 + + # If `False` when running modules or unit tests "dynamic object + # analysis" is turned off. This makes them much faster. + prefs['perform_doa'] = True + + # Rope can check the validity of its object DB when running. + prefs['validate_objectdb'] = True + + # How many undos to hold? + prefs['max_history_items'] = 32 + + # Shows whether to save history across sessions. + prefs['save_history'] = True + prefs['compress_history'] = False + + # Set the number spaces used for indenting. According to + # :PEP:`8`, it is best to use 4 spaces. Since most of rope's + # unit-tests use 4 spaces it is more reliable, too. + prefs['indent_size'] = 4 + + # Builtin and c-extension modules that are allowed to be imported + # and inspected by rope. + prefs['extension_modules'] = [] + + # Add all standard c-extensions to extension_modules list. + prefs['import_dynload_stdmods'] = True + + # If `True` modules with syntax errors are considered to be empty. + # The default value is `False`; When `False` syntax errors raise + # `rope.base.exceptions.ModuleSyntaxError` exception. + prefs['ignore_syntax_errors'] = False + + # If `True`, rope ignores unresolvable imports. Otherwise, they + # appear in the importing namespace. + prefs['ignore_bad_imports'] = False + + # If `True`, rope will insert new module imports as + # `from import ` by default. + prefs['prefer_module_from_imports'] = False + + # If `True`, rope will transform a comma list of imports into + # multiple separate import statements when organizing + # imports. + prefs['split_imports'] = False + + # If `True`, rope will remove all top-level import statements and + # reinsert them at the top of the module when making changes. + prefs['pull_imports_to_top'] = True + + # If `True`, rope will sort imports alphabetically by module name instead of + # alphabetically by import statement, with from imports after normal + # imports. + prefs['sort_imports_alphabetically'] = False + + # Location of implementation of rope.base.oi.type_hinting.interfaces.ITypeHintingFactory + # In general case, you don't have to change this value, unless you're an rope expert. + # Change this value to inject you own implementations of interfaces + # listed in module rope.base.oi.type_hinting.providers.interfaces + # For example, you can add you own providers for Django Models, or disable the search + # type-hinting in a class hierarchy, etc. + prefs['type_hinting_factory'] = 'rope.base.oi.type_hinting.factory.default_type_hinting_factory' + + +def project_opened(project): + """This function is called after opening the project""" + # Do whatever you like here! diff --git a/malaria.py b/malaria.py index e69de29..a72e686 100644 --- a/malaria.py +++ b/malaria.py @@ -0,0 +1,103 @@ +import matplotlib.pyplot as plt +import numpy as np +import random +from enum import IntEnum + + +class Model: + def __init__(self, width=32, height=32, humandens=0.15, mosquitodens=0.10, + immumepct=0.1, mosqinfpct=0.1, hm_infpct=0.5, mh_infpct=0.5, + hinfdiepct=0.01, mhungrypct=0.1, humandiepct=10**-6, + mosqdiepct=10**-3, mosqnetdens=0.05, time_steps=500): + self.width = width + self.height = height + + self.humandens = humandens + self.mosquitodens = mosquitodens + self.immunepct = immunepct + self.mosqinfpct = mosqinfpct + self.hm_infpct = hm_infpct + self.mh_infpct = mh_infpct + self.hinfdiepct = hinfdiepct + self.mhungrypct = mhungrypct + self.humandiepct = humandiepct + self.mosqdiepct = mosqdiepct + self.mosqnetdens = mosqnetdens + + self.time_steps = time_steps + + self.humans = self.gen_humans() + self.mosquitos = self.gen_mosquitos() + + def recycle_human(self): + # Get all living humans + humans = np.transpose(np.where(a != Human.DEAD)) + deaths = numpy.random.rand(len(humans)) < self.humandiepct + grid[humans[deaths]] = Human.DEAD + + for x, y in humans: + if numpy.random.rand() < self.humandiepct: + grid[x, y] = + + # Pick a random, unpopulated spot + x, y = random.choice(np.transpose(np.where(a == Human.DEAD))) + + def gen_humans(self): + p_dead = 1 - self.humandens + p_immune = self.humandens * self.immunepct + p_healthy = p_dead - p_immune + + return np.random.choice((Human.DEAD, Human.HEALTHY, Human.IMMUNE), + size=(self.width, self.height), + p=(p_dead, p_immune, p_healthy)) + + def gen_mosquitos(self): + mosquitos = [] + + count = self.width * self.height * self.mosquitodens + for _ in count: + + + + def run(self): + for _ in range(self.time_steps): + self.step() + self.draw() + + + def step(self): + #dingen + pass + + def draw(self): + # this function draws the humans + plt.imshow(self.humans) + plt.pause(0.0001) + plt.clf() + + +class Mosquito: + def __init__(self, x: int, y: int, infected: bool, hungry: bool): + self.x = x + self.y = y + + self.infected = infected + self.hungry = hungry + + +class Human(IntEnum): + DEAD = 0 + HEALTHY = 1 + INFECTED = 2 + IMMUNE = 3 + + +if __name__ == "__main__": + + plt.ion() + + for i in range(500): + img = np.random.randint(0, 3, (10000, 10000)) + plt.imshow(img) + plt.pause(0.0001) + plt.clf()