Skip to content

Commit

Permalink
first bit for 40ml
Browse files Browse the repository at this point in the history
  • Loading branch information
CamDavidsonPilon committed Jan 23, 2025
1 parent e4b86c0 commit 34ae649
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 45 deletions.
20 changes: 14 additions & 6 deletions pioreactor/background_jobs/temperature_automation.py
Original file line number Diff line number Diff line change
Expand Up @@ -409,10 +409,14 @@ def infer_temperature(self) -> None:
self.logger.debug(f"{features=}")

try:
if whoami.get_pioreactor_version() == (1, 0):
inferred_temperature = self.approximate_temperature_1_0(features)
elif whoami.get_pioreactor_version() >= (1, 1):
inferred_temperature = self.approximate_temperature_2_0(features)
if whoami.get_pioreactor_model() == "pioreactor_20ml":
if whoami.get_pioreactor_version() == (1, 0):
inferred_temperature = self.approximate_temperature_20_1_0(features)
elif whoami.get_pioreactor_version() >= (1, 1):
inferred_temperature = self.approximate_temperature_20_2_0(features)
elif whoami.get_pioreactor_model() == "pioreactor_40ml":
inferred_temperature = self.approximate_temperature_40_1_0(features)
raise ValueError("Unknown Pioreactor model. See config.")

self.temperature = Temperature(
temperature=round(inferred_temperature, 2),
Expand All @@ -425,7 +429,11 @@ def infer_temperature(self) -> None:
self.logger.error(e)

@staticmethod
def approximate_temperature_1_0(features: dict[str, Any]) -> float:
def approximate_temperature_40_1_0(features: dict[str, Any]) -> float:
raise NotImplementedError("This model has not been implemented yet.")

@staticmethod
def approximate_temperature_20_1_0(features: dict[str, Any]) -> float:
"""
models
Expand Down Expand Up @@ -528,7 +536,7 @@ def approximate_temperature_1_0(features: dict[str, Any]) -> float:
# return float(room_temp + alpha * (exp(beta * n) - 1)/(beta * n))

@staticmethod
def approximate_temperature_2_0(features: dict[str, Any]) -> float:
def approximate_temperature_20_2_0(features: dict[str, Any]) -> float:
"""
This uses linear regression from historical data
"""
Expand Down
2 changes: 0 additions & 2 deletions pioreactor/cluster_management/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,6 @@ def add_worker(hostname: str, password: str, version: str, model: str) -> None:
"""
import socket

assert model == "pioreactor_20ml"

logger = create_logger(
"add_pioreactor",
unit=whoami.get_unit_name(),
Expand Down
62 changes: 31 additions & 31 deletions pioreactor/tests/test_temperature_approximation_1_0.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ def test_temperature_approximation_if_less_than_hardcoded_room_temp(self) -> Non
19.5,
],
}
assert 19.0 <= self.t.approximate_temperature_1_0(features) <= 20.0
assert 19.0 <= self.t.approximate_temperature_20_1_0(features) <= 20.0

def test_temperature_approximation_if_constant(self) -> None:
for temp in range(20, 45):
Expand All @@ -43,7 +43,7 @@ def test_temperature_approximation_if_constant(self) -> None:
"previous_heater_dc": 17,
"time_series_of_temp": 30 * [float(temp)],
}
assert abs(temp - self.t.approximate_temperature_1_0(features)) < 0.30
assert abs(temp - self.t.approximate_temperature_20_1_0(features)) < 0.30

def test_temperature_approximation_even_if_very_tiny_heat_source(self) -> None:
import numpy as np
Expand All @@ -56,7 +56,7 @@ def test_temperature_approximation_even_if_very_tiny_heat_source(self) -> None:
),
}

assert (32 * np.exp(-0.008 * 17)) < self.t.approximate_temperature_1_0(features) < 32
assert (32 * np.exp(-0.008 * 17)) < self.t.approximate_temperature_20_1_0(features) < 32

def test_temperature_approximation_even_if_very_large_heat_source(self) -> None:
import numpy as np
Expand All @@ -69,12 +69,12 @@ def test_temperature_approximation_even_if_very_large_heat_source(self) -> None:
),
}

assert (24 * np.exp(-0.008 * 17)) < self.t.approximate_temperature_1_0(features) < 25
assert (24 * np.exp(-0.008 * 17)) < self.t.approximate_temperature_20_1_0(features) < 25

def test_temperature_approximation_if_dc_is_nil(self) -> None:
features = {"previous_heater_dc": 0, "time_series_of_temp": [37.8125, 32.1875]}

assert self.t.approximate_temperature_1_0(features) == 32.1875
assert self.t.approximate_temperature_20_1_0(features) == 32.1875

# this is all real data measured insitu, the gold standard.
def test_temperature_approximation1(self) -> None:
Expand Down Expand Up @@ -114,7 +114,7 @@ def test_temperature_approximation1(self) -> None:
],
}

assert 33.389 <= self.t.approximate_temperature_1_0(features) <= 33.830
assert 33.389 <= self.t.approximate_temperature_20_1_0(features) <= 33.830

def test_temperature_approximation_heating_vial1(self) -> None:
features = {
Expand Down Expand Up @@ -153,7 +153,7 @@ def test_temperature_approximation_heating_vial1(self) -> None:
],
}

assert 33.525 <= self.t.approximate_temperature_1_0(features) <= 34.00
assert 33.525 <= self.t.approximate_temperature_20_1_0(features) <= 34.00

def test_temperature_approximation_heating_vial2(self) -> None:
features = {
Expand Down Expand Up @@ -192,7 +192,7 @@ def test_temperature_approximation_heating_vial2(self) -> None:
],
}

assert 33.695 <= self.t.approximate_temperature_1_0(features) <= 34.170
assert 33.695 <= self.t.approximate_temperature_20_1_0(features) <= 34.170

def test_temperature_approximation_heating_vial3(self) -> None:
features = {
Expand Down Expand Up @@ -231,7 +231,7 @@ def test_temperature_approximation_heating_vial3(self) -> None:
],
}

assert 33.898 <= self.t.approximate_temperature_1_0(features) <= 34.339
assert 33.898 <= self.t.approximate_temperature_20_1_0(features) <= 34.339

def test_temperature_approximation_heating_vial4(self) -> None:
features = {
Expand Down Expand Up @@ -270,7 +270,7 @@ def test_temperature_approximation_heating_vial4(self) -> None:
],
}

assert 34.068 <= self.t.approximate_temperature_1_0(features) <= 34.577
assert 34.068 <= self.t.approximate_temperature_20_1_0(features) <= 34.577

def test_temperature_approximation_heating_vial5(self) -> None:
features = {
Expand Down Expand Up @@ -309,7 +309,7 @@ def test_temperature_approximation_heating_vial5(self) -> None:
],
}

assert 34.305 <= self.t.approximate_temperature_1_0(features) <= 34.814
assert 34.305 <= self.t.approximate_temperature_20_1_0(features) <= 34.814

def test_temperature_approximation6(self) -> None:
features = {
Expand Down Expand Up @@ -348,7 +348,7 @@ def test_temperature_approximation6(self) -> None:
],
}

assert 34.475 <= self.t.approximate_temperature_1_0(features) <= 35.018
assert 34.475 <= self.t.approximate_temperature_20_1_0(features) <= 35.018

def test_temperature_approximation7(self) -> None:
features = {
Expand Down Expand Up @@ -387,7 +387,7 @@ def test_temperature_approximation7(self) -> None:
],
}

assert 34.644 <= self.t.approximate_temperature_1_0(features) <= 35.153
assert 34.644 <= self.t.approximate_temperature_20_1_0(features) <= 35.153

def test_temperature_approximation8(self) -> None:
features = {
Expand Down Expand Up @@ -426,7 +426,7 @@ def test_temperature_approximation8(self) -> None:
],
}

assert 34.746 <= self.t.approximate_temperature_1_0(features) <= 35.289
assert 34.746 <= self.t.approximate_temperature_20_1_0(features) <= 35.289

def test_temperature_approximation9(self) -> None:
features = {
Expand Down Expand Up @@ -464,7 +464,7 @@ def test_temperature_approximation9(self) -> None:
35.5,
],
}
assert 34.848 <= self.t.approximate_temperature_1_0(features) <= 35.391
assert 34.848 <= self.t.approximate_temperature_20_1_0(features) <= 35.391

def test_temperature_approximation10(self) -> None:
features = {
Expand Down Expand Up @@ -503,7 +503,7 @@ def test_temperature_approximation10(self) -> None:
],
}

assert 34.950 <= self.t.approximate_temperature_1_0(features) <= 35.493
assert 34.950 <= self.t.approximate_temperature_20_1_0(features) <= 35.493

def test_temperature_approximation20(self) -> None:
features = {
Expand Down Expand Up @@ -542,7 +542,7 @@ def test_temperature_approximation20(self) -> None:
],
}

assert 34.950 <= self.t.approximate_temperature_1_0(features) <= 35.493
assert 34.950 <= self.t.approximate_temperature_20_1_0(features) <= 35.493

@pytest.mark.xfail
def test_temperature_approximation_cooling1(self) -> None:
Expand Down Expand Up @@ -582,7 +582,7 @@ def test_temperature_approximation_cooling1(self) -> None:
],
}

assert 32.169 <= self.t.approximate_temperature_1_0(features)
assert 32.169 <= self.t.approximate_temperature_20_1_0(features)

def test_temperature_approximation_cooling2(self) -> None:
features = {
Expand Down Expand Up @@ -621,7 +621,7 @@ def test_temperature_approximation_cooling2(self) -> None:
],
}

assert 31.118 <= self.t.approximate_temperature_1_0(features)
assert 31.118 <= self.t.approximate_temperature_20_1_0(features)

def test_temperature_approximation11(self) -> None:
features = {
Expand Down Expand Up @@ -660,7 +660,7 @@ def test_temperature_approximation11(self) -> None:
],
}

assert 29.628 <= self.t.approximate_temperature_1_0(features) <= 30.136
assert 29.628 <= self.t.approximate_temperature_20_1_0(features) <= 30.136

def test_temperature_approximation12(self) -> None:
features = {
Expand Down Expand Up @@ -699,7 +699,7 @@ def test_temperature_approximation12(self) -> None:
],
}

assert 28.476 <= self.t.approximate_temperature_1_0(features) <= 28.747
assert 28.476 <= self.t.approximate_temperature_20_1_0(features) <= 28.747

def test_temperature_approximation13(self) -> None:
features = {
Expand Down Expand Up @@ -738,7 +738,7 @@ def test_temperature_approximation13(self) -> None:
],
}

assert 28.374 <= self.t.approximate_temperature_1_0(features) <= 28.645
assert 28.374 <= self.t.approximate_temperature_20_1_0(features) <= 28.645

def test_temperature_approximation14(self) -> None:
features = {
Expand Down Expand Up @@ -777,7 +777,7 @@ def test_temperature_approximation14(self) -> None:
],
}

assert 28.374 <= self.t.approximate_temperature_1_0(features) <= 28.578
assert 28.374 <= self.t.approximate_temperature_20_1_0(features) <= 28.578

def test_temperature_approximation15(self) -> None:
features = {
Expand Down Expand Up @@ -815,7 +815,7 @@ def test_temperature_approximation15(self) -> None:
29.3125,
],
}
assert 28.815 <= self.t.approximate_temperature_1_0(features) <= 29.119
assert 28.815 <= self.t.approximate_temperature_20_1_0(features) <= 29.119

@pytest.mark.xfail
def test_temperature_approximation16(self) -> None:
Expand Down Expand Up @@ -855,7 +855,7 @@ def test_temperature_approximation16(self) -> None:
],
}

assert 25.261 <= self.t.approximate_temperature_1_0(features) <= 25.430
assert 25.261 <= self.t.approximate_temperature_20_1_0(features) <= 25.430

@pytest.mark.xfail
def test_temperature_approximation17(self) -> None:
Expand Down Expand Up @@ -895,7 +895,7 @@ def test_temperature_approximation17(self) -> None:
],
}

assert 25.295 <= self.t.approximate_temperature_1_0(features) <= 25.430
assert 25.295 <= self.t.approximate_temperature_20_1_0(features) <= 25.430

def test_temperature_approximation21(self) -> None:
# this was real data from a user
Expand Down Expand Up @@ -934,7 +934,7 @@ def test_temperature_approximation21(self) -> None:

with pytest.raises(ValueError):
features = {"previous_heater_dc": 25.0, "room_temp": 22.0, "time_series_of_temp": ts_of_temps}
self.t.approximate_temperature_1_0(features)
self.t.approximate_temperature_20_1_0(features)

better_room_temp = 20
features = {
Expand All @@ -943,7 +943,7 @@ def test_temperature_approximation21(self) -> None:
"time_series_of_temp": ts_of_temps,
}

assert better_room_temp < self.t.approximate_temperature_1_0(features) <= 25
assert better_room_temp < self.t.approximate_temperature_20_1_0(features) <= 25

def test_temperature_approximation19(self) -> None:
# this was real data from a user
Expand Down Expand Up @@ -983,7 +983,7 @@ def test_temperature_approximation19(self) -> None:
],
}

assert 55.5 <= self.t.approximate_temperature_1_0(features) <= 56.5
assert 55.5 <= self.t.approximate_temperature_20_1_0(features) <= 56.5

def test_temperature_approximation50(self) -> None:
# this was real data from a bheit
Expand Down Expand Up @@ -1025,7 +1025,7 @@ def test_temperature_approximation50(self) -> None:
}

with pytest.raises(ValueError):
assert 20 <= self.t.approximate_temperature_1_0(features) <= 30
assert 20 <= self.t.approximate_temperature_20_1_0(features) <= 30

features = {
"previous_heater_dc": 1.3,
Expand Down Expand Up @@ -1063,4 +1063,4 @@ def test_temperature_approximation50(self) -> None:
],
}

assert 20 <= self.t.approximate_temperature_1_0(features) <= 30
assert 20 <= self.t.approximate_temperature_20_1_0(features) <= 30
12 changes: 6 additions & 6 deletions pioreactor/tests/test_temperature_approximation_2_0.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ def test_temperature_approximation_if_constant(self) -> None:
"previous_heater_dc": 0.001, # should be nonzero to not short circuit the if previous_heater_dc == 0 line.
"time_series_of_temp": 21 * [float(temp)],
}
assert abs(temp - self.t.approximate_temperature_2_0(features)) < 0.30
assert abs(temp - self.t.approximate_temperature_20_2_0(features)) < 0.30

def test_temperature_approximation1(self) -> None:
features = {
Expand Down Expand Up @@ -47,7 +47,7 @@ def test_temperature_approximation1(self) -> None:
38.1875,
],
}
assert abs(38.9 - self.t.approximate_temperature_2_0(features)) < 0.5
assert abs(38.9 - self.t.approximate_temperature_20_2_0(features)) < 0.5

def test_temperature_approximation2(self) -> None:
features = {
Expand Down Expand Up @@ -77,7 +77,7 @@ def test_temperature_approximation2(self) -> None:
31.822916666666668,
],
}
assert abs(31.85 - self.t.approximate_temperature_2_0(features)) < 0.5
assert abs(31.85 - self.t.approximate_temperature_20_2_0(features)) < 0.5

def test_temperature_approximation3(self) -> None:
features = {
Expand Down Expand Up @@ -107,7 +107,7 @@ def test_temperature_approximation3(self) -> None:
38.1875,
],
}
assert abs(38.94220102733567 - self.t.approximate_temperature_2_0(features)) < 0.5
assert abs(38.94220102733567 - self.t.approximate_temperature_20_2_0(features)) < 0.5

def test_temperature_approximation4(self) -> None:
features = {
Expand Down Expand Up @@ -137,7 +137,7 @@ def test_temperature_approximation4(self) -> None:
34.625,
],
}
assert abs(34.1204 - self.t.approximate_temperature_2_0(features)) < 0.5
assert abs(34.1204 - self.t.approximate_temperature_20_2_0(features)) < 0.5

def test_temperature_approximation5(self) -> None:
features = {
Expand Down Expand Up @@ -167,4 +167,4 @@ def test_temperature_approximation5(self) -> None:
31.395833333333332,
],
}
assert abs(30.94587 - self.t.approximate_temperature_2_0(features)) < 0.5
assert abs(30.94587 - self.t.approximate_temperature_20_2_0(features)) < 0.5

0 comments on commit 34ae649

Please sign in to comment.