diff --git a/pyabc/__init__.py b/pyabc/__init__.py
index 66155b8..688e949 100644
--- a/pyabc/__init__.py
+++ b/pyabc/__init__.py
@@ -46,6 +46,8 @@ from .epsilon import (
     QuantileEpsilon,
     MedianEpsilon,
     ListEpsilon,
+    TemperatureBase,
+    ListTemperature,
     Temperature,
     TemperatureScheme,
     AcceptanceRateScheme,
@@ -117,6 +119,8 @@ __all__ = [
     "ListEpsilon",
     "QuantileEpsilon",
     "MedianEpsilon",
+    "TemperatureBase",
+    "ListTemperature",
     "Temperature",
     "TemperatureScheme",
     "AcceptanceRateScheme",
diff --git a/pyabc/epsilon/__init__.py b/pyabc/epsilon/__init__.py
index f77153b..d50d366 100644
--- a/pyabc/epsilon/__init__.py
+++ b/pyabc/epsilon/__init__.py
@@ -19,6 +19,8 @@ from .epsilon import (
     MedianEpsilon,
 )
 from .temperature import (
+    TemperatureBase,
+    ListTemperature,
     Temperature,
     TemperatureScheme,
     AcceptanceRateScheme,
@@ -41,6 +43,8 @@ __all__ = [
     'QuantileEpsilon',
     'MedianEpsilon',
     # temperature
+    'TemperatureBase',
+    'ListTemperature',
     'Temperature',
     'TemperatureScheme',
     'AcceptanceRateScheme',
diff --git a/pyabc/epsilon/temperature.py b/pyabc/epsilon/temperature.py
index b29d28d..f71b785 100644
--- a/pyabc/epsilon/temperature.py
+++ b/pyabc/epsilon/temperature.py
@@ -13,11 +13,42 @@ from ..storage import save_dict_to_json
 logger = logging.getLogger("Epsilon")
 
 
-class Temperature(Epsilon):
+class TemperatureBase(Epsilon):
     """
     A temperature scheme handles the decrease of the temperatures employed
     by a :class:`pyabc.acceptor.StochasticAcceptor` over time.
 
+    This class is not functional on its own, its derivatives must be used.
+    """
+
+
+class ListTemperature(TemperatureBase):
+    """
+    Pass a list of temperature values to use successively.
+
+    Parameters
+    ----------
+    values:
+        The array of temperatures to use successively.
+        For exact inference, finish with 1.
+    """
+
+    def __init__(self, values: List[float]):
+        self.values = values
+
+    def __call__(self,
+                 t: int) -> float:
+        return self.values[t]
+
+
+class Temperature(TemperatureBase):
+    """
+    This class implements a highly adaptive and configurable temperature
+    scheme. Via the argument `schemes`, arbitrary temperature schemes can be
+    passed to calculate the next generation's temperature, via `aggregate_fun`
+    one can define how to combine multiple guesses, via `initial_temperature`
+    the initial temperature can be set.
+
     Parameters
     ----------
     schemes: Union[Callable, List[Callable]], optional
diff --git a/pyabc/smc.py b/pyabc/smc.py
index 4a35854..e381262 100644
--- a/pyabc/smc.py
+++ b/pyabc/smc.py
@@ -18,7 +18,7 @@ from typing import Union
 from .acceptor import (Acceptor, UniformAcceptor, SimpleFunctionAcceptor,
                        StochasticAcceptor)
 from .distance import Distance, PNormDistance, to_distance, StochasticKernel
-from .epsilon import Epsilon, MedianEpsilon, Temperature
+from .epsilon import Epsilon, MedianEpsilon, TemperatureBase
 from .model import Model, SimpleModel
 from .platform_factory import DefaultSampler
 from .population import Particle, Population
@@ -229,13 +229,14 @@ class ABCSMC:
     def _sanity_check(self):
         # check stochastic setting
         stochastics = [isinstance(self.acceptor, StochasticAcceptor),
-                       isinstance(self.eps, Temperature),
+                       isinstance(self.eps, TemperatureBase),
                        isinstance(self.distance_function, StochasticKernel)]
         # check if usage is consistent
         if not all(stochastics) and any(stochastics):
             raise ValueError(
                 "Please only use acceptor.StochasticAcceptor, "
-                "epsilon.Temperature and distance.StochasticKernel together.")
+                "epsilon.TemperatureBase and distance.StochasticKernel "
+                "together.")
 
     def __getstate__(self):
         state_red_dict = self.__dict__.copy()
@@ -838,7 +839,7 @@ class ABCSMC:
         """
         # handle arguments
         if minimum_epsilon is None:
-            if isinstance(self.eps, Temperature):
+            if isinstance(self.eps, TemperatureBase):
                 minimum_epsilon = 1.0
             else:
                 minimum_epsilon = 0.0

Implement ListTemperature
To allow a list of temperatures, similar to ListEpsilon.
diff --git a/test/test_epsilon.py b/test/test_epsilon.py
index 1d47580..a48ccac 100644
--- a/test/test_epsilon.py
+++ b/test/test_epsilon.py
@@ -53,6 +53,15 @@ def test_medianepsilon():
     assert np.isclose(eps.alpha, 0.5)
 
 
+def test_listtemperature():
+    eps = pyabc.ListTemperature(values=[10, 5, 1.5])
+
+    # might be useful to test integration, but for the moment
+    # standalone tests may suffice
+    assert eps(0) == 10
+    assert eps(2) == 1.5
+
+
 def test_temperature():
     acceptor_config = {
         'pdf_norm': 5,

pip install -e .[dev]
parse_log_pytest
requirements.txt
pytest pytest-cov flask_bootstrap
apt-get update apt-get install -y gcc
3.9
requirements/base.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
asttokens==3.0.0
async-timeout==5.0.1
bkcharts==0.2
blinker==1.9.0
bokeh==3.4.3
click==8.1.8
cloudpickle==3.1.1
contourpy==1.3.0
coverage==7.8.0
cycler==0.12.1
dask==2024.8.0
decorator==5.2.1
dill==0.3.9
distributed==2024.8.0
dominate==2.9.1
exceptiongroup==1.2.2
executing==2.2.0
feather-format==0.4.1
Flask==3.1.0
Flask-Bootstrap==3.3.7.1
fonttools==4.56.0
fsspec==2025.3.1
gitdb==4.0.12
GitPython==3.1.44
greenlet==3.1.1
importlib_metadata==8.6.1
importlib_resources==6.5.2
iniconfig==2.1.0
ipython==8.18.1
itsdangerous==2.2.0
jedi==0.19.2
Jinja2==3.1.6
joblib==1.4.2
kiwisolver==1.4.7
locket==1.0.0
MarkupSafe==3.0.2
matplotlib==3.9.4
matplotlib-inline==0.1.7
msgpack==1.1.0
numpy==2.0.2
packaging==24.2
pandas==2.2.3
parso==0.8.4
partd==1.4.2
pexpect==4.9.0
pillow==11.1.0
pluggy==1.5.0
prompt_toolkit==3.0.50
psutil==7.0.0
ptyprocess==0.7.0
pure_eval==0.2.3
-e git+https://github.com/ICB-DCM/pyABC.git@ee782cffb87a91223bec9fc7fdb78c580e7be358#egg=pyabc
pyarrow==19.0.1
Pygments==2.19.1
pyparsing==3.2.3
pytest==8.3.5
pytest-cov==6.0.0
python-dateutil==2.9.0.post0
pytz==2025.2
PyYAML==6.0.2
redis==5.2.1
scikit-learn==1.6.1
scipy==1.13.1
six==1.17.0
smmap==5.0.2
sortedcontainers==2.4.0
SQLAlchemy==2.0.40
stack-data==0.6.3
tblib==3.1.0
threadpoolctl==3.6.0
tomli==2.2.1
toolz==1.0.0
tornado==6.4.2
traitlets==5.14.3
typing_extensions==4.13.0
tzdata==2025.2
urllib3==2.3.0
visitor==0.1.3
wcwidth==0.2.13
Werkzeug==3.1.3
xyzservices==2025.1.0
zict==3.0.0
zipp==3.21.0

name: pyABC
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - pip=25.0=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - asttokens==3.0.0
      - async-timeout==5.0.1
      - bkcharts==0.2
      - blinker==1.9.0
      - bokeh==3.4.3
      - click==8.1.8
      - cloudpickle==3.1.1
      - contourpy==1.3.0
      - coverage==7.8.0
      - cycler==0.12.1
      - dask==2024.8.0
      - decorator==5.2.1
      - dill==0.3.9
      - distributed==2024.8.0
      - dominate==2.9.1
      - exceptiongroup==1.2.2
      - executing==2.2.0
      - feather-format==0.4.1
      - flask==3.1.0
      - flask-bootstrap==3.3.7.1
      - fonttools==4.56.0
      - fsspec==2025.3.1
      - gitdb==4.0.12
      - gitpython==3.1.44
      - greenlet==3.1.1
      - importlib-metadata==8.6.1
      - importlib-resources==6.5.2
      - iniconfig==2.1.0
      - ipython==8.18.1
      - itsdangerous==2.2.0
      - jedi==0.19.2
      - jinja2==3.1.6
      - joblib==1.4.2
      - kiwisolver==1.4.7
      - locket==1.0.0
      - markupsafe==3.0.2
      - matplotlib==3.9.4
      - matplotlib-inline==0.1.7
      - msgpack==1.1.0
      - numpy==2.0.2
      - packaging==24.2
      - pandas==2.2.3
      - parso==0.8.4
      - partd==1.4.2
      - pexpect==4.9.0
      - pillow==11.1.0
      - pluggy==1.5.0
      - prompt-toolkit==3.0.50
      - psutil==7.0.0
      - ptyprocess==0.7.0
      - pure-eval==0.2.3
      - pyarrow==19.0.1
      - pygments==2.19.1
      - pyparsing==3.2.3
      - pytest==8.3.5
      - pytest-cov==6.0.0
      - python-dateutil==2.9.0.post0
      - pytz==2025.2
      - pyyaml==6.0.2
      - redis==5.2.1
      - scikit-learn==1.6.1
      - scipy==1.13.1
      - six==1.17.0
      - smmap==5.0.2
      - sortedcontainers==2.4.0
      - sqlalchemy==2.0.40
      - stack-data==0.6.3
      - tblib==3.1.0
      - threadpoolctl==3.6.0
      - tomli==2.2.1
      - toolz==1.0.0
      - tornado==6.4.2
      - traitlets==5.14.3
      - typing-extensions==4.13.0
      - tzdata==2025.2
      - urllib3==2.3.0
      - visitor==0.1.3
      - wcwidth==0.2.13
      - werkzeug==3.1.3
      - xyzservices==2025.1.0
      - zict==3.0.0
      - zipp==3.21.0
prefix: /opt/conda/envs/pyABC

test/test_epsilon.py::test_listtemperature
test/test_epsilon.py::test_default_eps
test/test_epsilon.py::test_noepsilon test/test_epsilon.py::test_constantepsilon test/test_epsilon.py::test_listepsilon test/test_epsilon.py::test_quantileepsilon test/test_epsilon.py::test_medianepsilon test/test_epsilon.py::test_temperature test/test_epsilon.py::test_scheme_basic test/test_epsilon.py::test_scheme_acceptancerate test/test_epsilon.py::test_scheme_exponentialdecay
pyabc/epsilon/__init__.py pyabc/epsilon/temperature.py pyabc/smc.py pyabc/__init__.py
pyabc/epsilon/__init__.py pyabc/epsilon/temperature.py pyabc/smc.py pyabc/__init__.py