Module pybeepop.beepop.mitetreatments

BeePop+ Mite Treatment Management Module.

This module contains classes for managing Varroa mite treatment schedules and efficacy parameters. Mite treatments are critical interventions that reduce mite populations to prevent colony collapse from mite-induced mortality.

Classes -----= MiteTreatmentItem: Individual treatment schedule with efficacy parameters MiteTreatments: Collection manager for treatment schedules and active treatment lookup

Classes

class MiteTreatmentItem (start_time: datetime.datetime, duration: int, pct_mortality: float)
Expand source code
@dataclass
class MiteTreatmentItem:
    """Individual mite treatment schedule with timing and efficacy.

    Represents a single miticide application with specified timing, duration, and
    efficacy. The treatment kills susceptible (non-resistant) mites at pct_mortality;
    resistant mites survive it. What share of the population is resistant is a property
    of the mite population, set by InitMitePctResistant and PctImmMitesResistant, not of
    the treatment.

    Attributes:
        start_time (datetime): Treatment application start date
        duration (int): Treatment duration in weeks
        pct_mortality (float): Mortality rate for susceptible mites (0-100%)
    """

    start_time: datetime
    duration: int  # in weeks
    pct_mortality: float  # percent mortality (0-100)
    # TODO: Need to change logic in rest of program to treat pct_mortality like a float (percentage)

    def is_valid(self) -> bool:
        return isinstance(self.start_time, datetime)

Individual mite treatment schedule with timing and efficacy.

Represents a single miticide application with specified timing, duration, and efficacy. The treatment kills susceptible (non-resistant) mites at pct_mortality; resistant mites survive it. What share of the population is resistant is a property of the mite population, set by InitMitePctResistant and PctImmMitesResistant, not of the treatment.

Attributes
-----=
start_time : datetime
Treatment application start date
duration : int
Treatment duration in weeks
pct_mortality : float
Mortality rate for susceptible mites (0-100%)

Instance variables

var duration : int

The type of the None singleton.

var pct_mortality : float

The type of the None singleton.

var start_time : datetime.datetime

The type of the None singleton.

Methods

def is_valid(self) ‑> bool
Expand source code
def is_valid(self) -> bool:
    return isinstance(self.start_time, datetime)
class MiteTreatments
Expand source code
class MiteTreatments:
    """Collection manager for mite treatment schedules and active treatment lookup.

    Manages multiple mite treatment schedules and provides functionality to
    determine active treatments for any given date.

    Attributes:
        items (List[MiteTreatmentItem]): Collection of scheduled mite treatments
    """

    def __init__(self):
        self.items: List[MiteTreatmentItem] = []

    def add_item(self, item: MiteTreatmentItem):
        self.items.append(item)

    def add_item_by_values(
        self,
        start_time: datetime,
        duration: int,
        pct_mortality: float,
    ):
        item = MiteTreatmentItem(start_time, duration, pct_mortality)
        self.add_item(item)

    def get_item(self, index: int) -> Optional[MiteTreatmentItem]:
        if 0 <= index < len(self.items):
            return self.items[index]
        return None

    def get_item_by_date(self, date: datetime) -> Optional[MiteTreatmentItem]:
        for item in self.items:
            if item.start_time.date() == date.date():
                return item
        return None

    def get_active_item(self, date: datetime) -> Optional[MiteTreatmentItem]:
        for item in self.items:
            if (
                item.start_time
                <= date
                < item.start_time + timedelta(days=item.duration * 7)
            ):
                return item
        return None

    def is_new_treatment_starting(self, date: datetime) -> bool:
        return any(item.start_time.date() == date.date() for item in self.items)

    def delete_item(self, index: int):
        if 0 <= index < len(self.items):
            del self.items[index]

    def get_count(self) -> int:
        return len(self.items)

    def clear_all(self):
        self.items.clear()

Collection manager for mite treatment schedules and active treatment lookup.

Manages multiple mite treatment schedules and provides functionality to determine active treatments for any given date.

Attributes
-----=
items : List[MiteTreatmentItem]
Collection of scheduled mite treatments

Methods

def add_item(self,
item: MiteTreatmentItem)
Expand source code
def add_item(self, item: MiteTreatmentItem):
    self.items.append(item)
def add_item_by_values(self, start_time: datetime.datetime, duration: int, pct_mortality: float)
Expand source code
def add_item_by_values(
    self,
    start_time: datetime,
    duration: int,
    pct_mortality: float,
):
    item = MiteTreatmentItem(start_time, duration, pct_mortality)
    self.add_item(item)
def clear_all(self)
Expand source code
def clear_all(self):
    self.items.clear()
def delete_item(self, index: int)
Expand source code
def delete_item(self, index: int):
    if 0 <= index < len(self.items):
        del self.items[index]
def get_active_item(self, date: datetime.datetime) ‑> MiteTreatmentItem | None
Expand source code
def get_active_item(self, date: datetime) -> Optional[MiteTreatmentItem]:
    for item in self.items:
        if (
            item.start_time
            <= date
            < item.start_time + timedelta(days=item.duration * 7)
        ):
            return item
    return None
def get_count(self) ‑> int
Expand source code
def get_count(self) -> int:
    return len(self.items)
def get_item(self, index: int) ‑> MiteTreatmentItem | None
Expand source code
def get_item(self, index: int) -> Optional[MiteTreatmentItem]:
    if 0 <= index < len(self.items):
        return self.items[index]
    return None
def get_item_by_date(self, date: datetime.datetime) ‑> MiteTreatmentItem | None
Expand source code
def get_item_by_date(self, date: datetime) -> Optional[MiteTreatmentItem]:
    for item in self.items:
        if item.start_time.date() == date.date():
            return item
    return None
def is_new_treatment_starting(self, date: datetime.datetime) ‑> bool
Expand source code
def is_new_treatment_starting(self, date: datetime) -> bool:
    return any(item.start_time.date() == date.date() for item in self.items)