aegis_sim.recording.popsizerecorder

 1from .recorder import Recorder
 2from aegis_sim.dataclasses.population import Population
 3
 4
 5class PopsizeRecorder(Recorder):
 6    def __init__(self, odir):
 7        self.odir = odir
 8        self._buffers = {}  # filename -> list of lines
 9
10    def write(self, popsize: int, filename: str):
11        if filename not in self._buffers:
12            self._buffers[filename] = []
13        self._buffers[filename].append(str(popsize))
14        # Flush every 100 entries to avoid unbounded memory growth
15        if len(self._buffers[filename]) >= 100:
16            self._flush(filename)
17
18    def _flush(self, filename):
19        if filename in self._buffers and self._buffers[filename]:
20            path = self.odir / filename
21            with open(path, "a") as file_:
22                file_.write("\n".join(self._buffers[filename]) + "\n")
23            self._buffers[filename] = []
24
25    def flush_all(self):
26        """Flush all buffered data to disk."""
27        for filename in list(self._buffers.keys()):
28            self._flush(filename)
29
30    def write_before_reproduction(self, population):
31        """
32        # OUTPUT SPECIFICATION
33        path: /popsize_before_reproduction.csv
34        filetype: csv
35        description: Number of live individuals before reproduction.
36        category: demography
37        time granularity: every step
38        frequency parameter: N/A
39        structure: A vector of integers.
40        header: None
41        """
42        self.write(len(population), "popsize_before_reproduction.csv")
43
44    def write_after_reproduction(self, population):
45        """
46        # OUTPUT SPECIFICATION
47        path: /popsize_after_reproduction.csv
48        filetype: csv
49        description: Number of live individuals after reproduction.
50        category: demography
51        time granularity: every step
52        frequency parameter: N/A
53        structure: A vector of integers.
54        header: None
55        """
56        self.write(len(population), "popsize_after_reproduction.csv")
57
58    def write_egg_num_after_reproduction(self, eggs):
59        """
60        # OUTPUT SPECIFICATION
61        path: /eggnum_after_reproduction.csv
62        filetype: csv
63        description: Number of eggs which have not yet hatched.
64        category: demography
65        time granularity: every step
66        frequency parameter: N/A
67        structure: A vector of integers.
68        header: None
69        """
70        eggnum = len(eggs) if eggs is not None else 0
71        self.write(eggnum, "eggnum_after_reproduction.csv")
class PopsizeRecorder(aegis_sim.recording.recorder.Recorder):
 6class PopsizeRecorder(Recorder):
 7    def __init__(self, odir):
 8        self.odir = odir
 9        self._buffers = {}  # filename -> list of lines
10
11    def write(self, popsize: int, filename: str):
12        if filename not in self._buffers:
13            self._buffers[filename] = []
14        self._buffers[filename].append(str(popsize))
15        # Flush every 100 entries to avoid unbounded memory growth
16        if len(self._buffers[filename]) >= 100:
17            self._flush(filename)
18
19    def _flush(self, filename):
20        if filename in self._buffers and self._buffers[filename]:
21            path = self.odir / filename
22            with open(path, "a") as file_:
23                file_.write("\n".join(self._buffers[filename]) + "\n")
24            self._buffers[filename] = []
25
26    def flush_all(self):
27        """Flush all buffered data to disk."""
28        for filename in list(self._buffers.keys()):
29            self._flush(filename)
30
31    def write_before_reproduction(self, population):
32        """
33        # OUTPUT SPECIFICATION
34        path: /popsize_before_reproduction.csv
35        filetype: csv
36        description: Number of live individuals before reproduction.
37        category: demography
38        time granularity: every step
39        frequency parameter: N/A
40        structure: A vector of integers.
41        header: None
42        """
43        self.write(len(population), "popsize_before_reproduction.csv")
44
45    def write_after_reproduction(self, population):
46        """
47        # OUTPUT SPECIFICATION
48        path: /popsize_after_reproduction.csv
49        filetype: csv
50        description: Number of live individuals after reproduction.
51        category: demography
52        time granularity: every step
53        frequency parameter: N/A
54        structure: A vector of integers.
55        header: None
56        """
57        self.write(len(population), "popsize_after_reproduction.csv")
58
59    def write_egg_num_after_reproduction(self, eggs):
60        """
61        # OUTPUT SPECIFICATION
62        path: /eggnum_after_reproduction.csv
63        filetype: csv
64        description: Number of eggs which have not yet hatched.
65        category: demography
66        time granularity: every step
67        frequency parameter: N/A
68        structure: A vector of integers.
69        header: None
70        """
71        eggnum = len(eggs) if eggs is not None else 0
72        self.write(eggnum, "eggnum_after_reproduction.csv")
PopsizeRecorder(odir)
7    def __init__(self, odir):
8        self.odir = odir
9        self._buffers = {}  # filename -> list of lines
odir
def write(self, popsize: int, filename: str):
11    def write(self, popsize: int, filename: str):
12        if filename not in self._buffers:
13            self._buffers[filename] = []
14        self._buffers[filename].append(str(popsize))
15        # Flush every 100 entries to avoid unbounded memory growth
16        if len(self._buffers[filename]) >= 100:
17            self._flush(filename)
def flush_all(self):
26    def flush_all(self):
27        """Flush all buffered data to disk."""
28        for filename in list(self._buffers.keys()):
29            self._flush(filename)

Flush all buffered data to disk.

def write_before_reproduction(self, population):
31    def write_before_reproduction(self, population):
32        """
33        # OUTPUT SPECIFICATION
34        path: /popsize_before_reproduction.csv
35        filetype: csv
36        description: Number of live individuals before reproduction.
37        category: demography
38        time granularity: every step
39        frequency parameter: N/A
40        structure: A vector of integers.
41        header: None
42        """
43        self.write(len(population), "popsize_before_reproduction.csv")

OUTPUT SPECIFICATION

path: /popsize_before_reproduction.csv filetype: csv description: Number of live individuals before reproduction. category: demography time granularity: every step frequency parameter: N/A structure: A vector of integers. header: None

def write_after_reproduction(self, population):
45    def write_after_reproduction(self, population):
46        """
47        # OUTPUT SPECIFICATION
48        path: /popsize_after_reproduction.csv
49        filetype: csv
50        description: Number of live individuals after reproduction.
51        category: demography
52        time granularity: every step
53        frequency parameter: N/A
54        structure: A vector of integers.
55        header: None
56        """
57        self.write(len(population), "popsize_after_reproduction.csv")

OUTPUT SPECIFICATION

path: /popsize_after_reproduction.csv filetype: csv description: Number of live individuals after reproduction. category: demography time granularity: every step frequency parameter: N/A structure: A vector of integers. header: None

def write_egg_num_after_reproduction(self, eggs):
59    def write_egg_num_after_reproduction(self, eggs):
60        """
61        # OUTPUT SPECIFICATION
62        path: /eggnum_after_reproduction.csv
63        filetype: csv
64        description: Number of eggs which have not yet hatched.
65        category: demography
66        time granularity: every step
67        frequency parameter: N/A
68        structure: A vector of integers.
69        header: None
70        """
71        eggnum = len(eggs) if eggs is not None else 0
72        self.write(eggnum, "eggnum_after_reproduction.csv")

OUTPUT SPECIFICATION

path: /eggnum_after_reproduction.csv filetype: csv description: Number of eggs which have not yet hatched. category: demography time granularity: every step frequency parameter: N/A structure: A vector of integers. header: None