diff --git a/cara/apps/templates/base/calculator.report.html.j2 b/caimira/apps/templates/base/calculator.report.html.j2
similarity index 100%
rename from cara/apps/templates/base/calculator.report.html.j2
rename to caimira/apps/templates/base/calculator.report.html.j2
diff --git a/cara/apps/templates/base/index.html.j2 b/caimira/apps/templates/base/index.html.j2
similarity index 98%
rename from cara/apps/templates/base/index.html.j2
rename to caimira/apps/templates/base/index.html.j2
index a7d5d020..86c1f46b 100644
--- a/cara/apps/templates/base/index.html.j2
+++ b/caimira/apps/templates/base/index.html.j2
@@ -46,8 +46,8 @@
- {% block cara_at_cern %}
- {% endblock cara_at_cern %}
+ {% block caimira_at_cern %}
+ {% endblock caimira_at_cern %}
diff --git a/cara/apps/templates/base/layout.html.j2 b/caimira/apps/templates/base/layout.html.j2
similarity index 100%
rename from cara/apps/templates/base/layout.html.j2
rename to caimira/apps/templates/base/layout.html.j2
diff --git a/cara/apps/templates/base/userguide.html.j2 b/caimira/apps/templates/base/userguide.html.j2
similarity index 100%
rename from cara/apps/templates/base/userguide.html.j2
rename to caimira/apps/templates/base/userguide.html.j2
diff --git a/cara/apps/templates/calculator.form.html.j2 b/caimira/apps/templates/calculator.form.html.j2
similarity index 100%
rename from cara/apps/templates/calculator.form.html.j2
rename to caimira/apps/templates/calculator.form.html.j2
diff --git a/cara/apps/templates/calculator.report.html.j2 b/caimira/apps/templates/calculator.report.html.j2
similarity index 100%
rename from cara/apps/templates/calculator.report.html.j2
rename to caimira/apps/templates/calculator.report.html.j2
diff --git a/cara/apps/templates/cern/calculator.form.html.j2 b/caimira/apps/templates/cern/calculator.form.html.j2
similarity index 100%
rename from cara/apps/templates/cern/calculator.form.html.j2
rename to caimira/apps/templates/cern/calculator.form.html.j2
diff --git a/cara/apps/templates/cern/calculator.report.html.j2 b/caimira/apps/templates/cern/calculator.report.html.j2
similarity index 100%
rename from cara/apps/templates/cern/calculator.report.html.j2
rename to caimira/apps/templates/cern/calculator.report.html.j2
diff --git a/cara/apps/templates/cern/index.html.j2 b/caimira/apps/templates/cern/index.html.j2
similarity index 89%
rename from cara/apps/templates/cern/index.html.j2
rename to caimira/apps/templates/cern/index.html.j2
index 692aeb67..1d861d99 100644
--- a/cara/apps/templates/cern/index.html.j2
+++ b/caimira/apps/templates/cern/index.html.j2
@@ -1,6 +1,6 @@
{% extends "base/index.html.j2" %}
-{% block cara_at_cern %}
+{% block caimira_at_cern %}
CAiMIRA @ CERN
-{% endblock cara_at_cern %}
\ No newline at end of file
+{% endblock caimira_at_cern %}
\ No newline at end of file
diff --git a/cara/apps/templates/cern/layout.html.j2 b/caimira/apps/templates/cern/layout.html.j2
similarity index 100%
rename from cara/apps/templates/cern/layout.html.j2
rename to caimira/apps/templates/cern/layout.html.j2
diff --git a/cara/apps/templates/cern/userguide.html.j2 b/caimira/apps/templates/cern/userguide.html.j2
similarity index 100%
rename from cara/apps/templates/cern/userguide.html.j2
rename to caimira/apps/templates/cern/userguide.html.j2
diff --git a/cara/apps/templates/common_text.md.j2 b/caimira/apps/templates/common_text.md.j2
similarity index 100%
rename from cara/apps/templates/common_text.md.j2
rename to caimira/apps/templates/common_text.md.j2
diff --git a/cara/apps/templates/index.html.j2 b/caimira/apps/templates/index.html.j2
similarity index 100%
rename from cara/apps/templates/index.html.j2
rename to caimira/apps/templates/index.html.j2
diff --git a/cara/apps/templates/layout.html.j2 b/caimira/apps/templates/layout.html.j2
similarity index 100%
rename from cara/apps/templates/layout.html.j2
rename to caimira/apps/templates/layout.html.j2
diff --git a/cara/apps/templates/page.html.j2 b/caimira/apps/templates/page.html.j2
similarity index 100%
rename from cara/apps/templates/page.html.j2
rename to caimira/apps/templates/page.html.j2
diff --git a/cara/apps/templates/userguide.html.j2 b/caimira/apps/templates/userguide.html.j2
similarity index 100%
rename from cara/apps/templates/userguide.html.j2
rename to caimira/apps/templates/userguide.html.j2
diff --git a/cara/data/__init__.py b/caimira/data/__init__.py
similarity index 94%
rename from cara/data/__init__.py
rename to caimira/data/__init__.py
index 9e6a523f..23dab962 100644
--- a/cara/data/__init__.py
+++ b/caimira/data/__init__.py
@@ -1,6 +1,6 @@
import numpy as np
-from cara import models
-from cara.data.weather import wx_data, nearest_wx_station
+from caimira import models
+from caimira.data.weather import wx_data, nearest_wx_station
MONTH_NAMES = [
'January', 'February', 'March', 'April', 'May', 'June', 'July',
diff --git a/cara/data/global_weather_set.json b/caimira/data/global_weather_set.json
similarity index 100%
rename from cara/data/global_weather_set.json
rename to caimira/data/global_weather_set.json
diff --git a/cara/data/hadisd_station_fullinfo_v311_202001p.txt b/caimira/data/hadisd_station_fullinfo_v311_202001p.txt
similarity index 100%
rename from cara/data/hadisd_station_fullinfo_v311_202001p.txt
rename to caimira/data/hadisd_station_fullinfo_v311_202001p.txt
diff --git a/cara/data/weather.py b/caimira/data/weather.py
similarity index 100%
rename from cara/data/weather.py
rename to caimira/data/weather.py
diff --git a/cara/dataclass_utils.py b/caimira/dataclass_utils.py
similarity index 100%
rename from cara/dataclass_utils.py
rename to caimira/dataclass_utils.py
diff --git a/cara/docs/Makefile b/caimira/docs/Makefile
similarity index 100%
rename from cara/docs/Makefile
rename to caimira/docs/Makefile
diff --git a/cara/docs/UML-CARA.png b/caimira/docs/UML-CARA.png
similarity index 100%
rename from cara/docs/UML-CARA.png
rename to caimira/docs/UML-CARA.png
diff --git a/cara/docs/cara.apps.calculator.rst b/caimira/docs/cara.apps.calculator.rst
similarity index 100%
rename from cara/docs/cara.apps.calculator.rst
rename to caimira/docs/cara.apps.calculator.rst
diff --git a/cara/docs/cara.apps.rst b/caimira/docs/cara.apps.rst
similarity index 100%
rename from cara/docs/cara.apps.rst
rename to caimira/docs/cara.apps.rst
diff --git a/cara/docs/cara.data.rst b/caimira/docs/cara.data.rst
similarity index 100%
rename from cara/docs/cara.data.rst
rename to caimira/docs/cara.data.rst
diff --git a/cara/docs/cara.monte_carlo.rst b/caimira/docs/cara.monte_carlo.rst
similarity index 100%
rename from cara/docs/cara.monte_carlo.rst
rename to caimira/docs/cara.monte_carlo.rst
diff --git a/cara/docs/cara.rst b/caimira/docs/cara.rst
similarity index 100%
rename from cara/docs/cara.rst
rename to caimira/docs/cara.rst
diff --git a/cara/docs/cara.tests.apps.calculator.rst b/caimira/docs/cara.tests.apps.calculator.rst
similarity index 100%
rename from cara/docs/cara.tests.apps.calculator.rst
rename to caimira/docs/cara.tests.apps.calculator.rst
diff --git a/cara/docs/cara.tests.apps.rst b/caimira/docs/cara.tests.apps.rst
similarity index 100%
rename from cara/docs/cara.tests.apps.rst
rename to caimira/docs/cara.tests.apps.rst
diff --git a/cara/docs/cara.tests.data.rst b/caimira/docs/cara.tests.data.rst
similarity index 100%
rename from cara/docs/cara.tests.data.rst
rename to caimira/docs/cara.tests.data.rst
diff --git a/cara/docs/cara.tests.models.rst b/caimira/docs/cara.tests.models.rst
similarity index 100%
rename from cara/docs/cara.tests.models.rst
rename to caimira/docs/cara.tests.models.rst
diff --git a/cara/docs/cara.tests.rst b/caimira/docs/cara.tests.rst
similarity index 100%
rename from cara/docs/cara.tests.rst
rename to caimira/docs/cara.tests.rst
diff --git a/cara/docs/conf.py b/caimira/docs/conf.py
similarity index 99%
rename from cara/docs/conf.py
rename to caimira/docs/conf.py
index 472456ed..2b9f7aaf 100644
--- a/cara/docs/conf.py
+++ b/caimira/docs/conf.py
@@ -17,7 +17,7 @@ sys.path.insert(0, os.path.abspath('..'))
# -- Project information -----------------------------------------------------
-project = 'CARA'
+project = 'CAiMIRA'
copyright = '2022, Andre Henriques et al.'
author = 'Andre Henriques et al.'
diff --git a/cara/docs/full_diameter_dependence.rst b/caimira/docs/full_diameter_dependence.rst
similarity index 100%
rename from cara/docs/full_diameter_dependence.rst
rename to caimira/docs/full_diameter_dependence.rst
diff --git a/cara/docs/index.rst b/caimira/docs/index.rst
similarity index 79%
rename from cara/docs/index.rst
rename to caimira/docs/index.rst
index 3b5a57cc..b4450229 100644
--- a/cara/docs/index.rst
+++ b/caimira/docs/index.rst
@@ -1,9 +1,9 @@
-.. CARA documentation master file, created by
+.. CAiMIRA documentation master file, created by
sphinx-quickstart on Fri Apr 8 10:26:24 2022.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
-Welcome to CARA's documentation!
+Welcome to CAiMIRA's documentation!
================================
.. toctree::
@@ -11,7 +11,7 @@ Welcome to CARA's documentation!
:caption: Contents:
full_diameter_dependence
- cara
+ caimira
Indices and tables
diff --git a/cara/docs/make.bat b/caimira/docs/make.bat
similarity index 100%
rename from cara/docs/make.bat
rename to caimira/docs/make.bat
diff --git a/cara/models.py b/caimira/models.py
similarity index 99%
rename from cara/models.py
rename to caimira/models.py
index 9506b126..d517116b 100644
--- a/cara/models.py
+++ b/caimira/models.py
@@ -1,9 +1,9 @@
-# This module is part of CARA. Please see the repository at
+# This module is part of CAiMIRA. Please see the repository at
# https://gitlab.cern.ch/cara/cara for details of the license and terms of use.
"""
-This module implements the core CARA models.
+This module implements the core CAiMIRA models.
-The CARA model is a flexible, object-oriented numerical model. It is designed
+The CAiMIRA model is a flexible, object-oriented numerical model. It is designed
to allow the user to swap-out and extend its various components. One of the
major abstractions of the model is the distinction between virus concentration
(:class:`ConcentrationModel`) and virus exposure (:class:`ExposureModel`).
@@ -15,10 +15,10 @@ deterministic (i.e. running the same model twice will result in the same answer)
In order to apply stochastic / non-deterministic analyses therefore you must
introduce the randomness before constructing the models themselves; the
-:mod:`cara.monte_carlo` module is a good example of doing this - that module uses
+:mod:`caimira.monte_carlo` module is a good example of doing this - that module uses
the models defined here to allow you to construct a ConcentrationModel containing
parameters which are expressed as probability distributions. Under the hood the
-``cara.monte_carlo.ConcentrationModel`` implementation simply samples all of those
+``caimira.monte_carlo.ConcentrationModel`` implementation simply samples all of those
probability distributions to produce many instances of the deterministic model.
The models in this module have been designed for flexibility above performance,
diff --git a/cara/monte_carlo/__init__.py b/caimira/monte_carlo/__init__.py
similarity index 100%
rename from cara/monte_carlo/__init__.py
rename to caimira/monte_carlo/__init__.py
diff --git a/cara/monte_carlo/__init__.pyi b/caimira/monte_carlo/__init__.pyi
similarity index 100%
rename from cara/monte_carlo/__init__.pyi
rename to caimira/monte_carlo/__init__.pyi
diff --git a/cara/monte_carlo/data.py b/caimira/monte_carlo/data.py
similarity index 98%
rename from cara/monte_carlo/data.py
rename to caimira/monte_carlo/data.py
index b4f047c4..8ad2fcfc 100644
--- a/cara/monte_carlo/data.py
+++ b/caimira/monte_carlo/data.py
@@ -5,8 +5,8 @@ import numpy as np
from scipy import special as sp
from scipy.stats import weibull_min
-import cara.monte_carlo as mc
-from cara.monte_carlo.sampleable import LogCustom, LogNormal,LogCustomKernel,CustomKernel,Uniform, Custom
+import caimira.monte_carlo as mc
+from caimira.monte_carlo.sampleable import LogCustom, LogNormal,LogCustomKernel,CustomKernel,Uniform, Custom
sqrt2pi = np.sqrt(2.*np.pi)
sqrt2 = np.sqrt(2.)
diff --git a/cara/monte_carlo/models.py b/caimira/monte_carlo/models.py
similarity index 78%
rename from cara/monte_carlo/models.py
rename to caimira/monte_carlo/models.py
index 4ab55363..dfa446bd 100644
--- a/cara/monte_carlo/models.py
+++ b/caimira/monte_carlo/models.py
@@ -3,7 +3,7 @@ import dataclasses
import sys
import typing
-import cara.models
+import caimira.models
from .sampleable import SampleableDistribution, _VectorisedFloatOrSampleable
@@ -14,9 +14,9 @@ class MCModelBase(typing.Generic[_ModelType]):
"""
A model base class for monte carlo types.
- This base class is essentially a declarative description of a cara.models
+ This base class is essentially a declarative description of a caimira.models
model with a :meth:`.build_model` method to generate an appropriate
- ``cara.models` model instance on demand.
+ ``caimira.models` model instance on demand.
"""
_base_cls: typing.Type[_ModelType]
@@ -36,7 +36,7 @@ class MCModelBase(typing.Generic[_ModelType]):
def build_model(self, size: int) -> _ModelType:
"""
- Turn this MCModelBase subclass into a cara.model Model instance
+ Turn this MCModelBase subclass into a caimira.model Model instance
from which you can then run the model.
"""
@@ -49,7 +49,7 @@ class MCModelBase(typing.Generic[_ModelType]):
def _build_mc_model(model: _ModelType) -> typing.Type[MCModelBase[_ModelType]]:
"""
- Generate a new MCModelBase subclass for the given cara.models model.
+ Generate a new MCModelBase subclass for the given caimira.models model.
"""
fields = []
@@ -57,7 +57,7 @@ def _build_mc_model(model: _ModelType) -> typing.Type[MCModelBase[_ModelType]]:
# Note: deepcopy not needed here as we aren't mutating entities beyond
# the top level.
new_field = copy.copy(field)
- if field.type is cara.models._VectorisedFloat: # noqa
+ if field.type is caimira.models._VectorisedFloat: # noqa
new_field.type = _VectorisedFloatOrSampleable # type: ignore
field_type: typing.Any = new_field.type
@@ -65,29 +65,29 @@ def _build_mc_model(model: _ModelType) -> typing.Type[MCModelBase[_ModelType]]:
if getattr(field_type, '__origin__', None) in [typing.Union, typing.Tuple]:
# It is challenging to generalise this code, so we provide specific transformations,
# and raise for unforseen cases.
- if new_field.type == typing.Tuple[cara.models._VentilationBase, ...]:
+ if new_field.type == typing.Tuple[caimira.models._VentilationBase, ...]:
VB = getattr(sys.modules[__name__], "_VentilationBase")
- field_type = typing.Tuple[typing.Union[cara.models._VentilationBase, VB], ...]
- elif new_field.type == typing.Tuple[cara.models._ExpirationBase, ...]:
+ field_type = typing.Tuple[typing.Union[caimira.models._VentilationBase, VB], ...]
+ elif new_field.type == typing.Tuple[caimira.models._ExpirationBase, ...]:
EB = getattr(sys.modules[__name__], "_ExpirationBase")
- field_type = typing.Tuple[typing.Union[cara.models._ExpirationBase, EB], ...]
- elif new_field.type == typing.Tuple[cara.models.SpecificInterval, ...]:
+ field_type = typing.Tuple[typing.Union[caimira.models._ExpirationBase, EB], ...]
+ elif new_field.type == typing.Tuple[caimira.models.SpecificInterval, ...]:
SI = getattr(sys.modules[__name__], "SpecificInterval")
- field_type = typing.Tuple[typing.Union[cara.models.SpecificInterval, SI], ...]
+ field_type = typing.Tuple[typing.Union[caimira.models.SpecificInterval, SI], ...]
else:
# Check that we don't need to do anything with this type.
for item in new_field.type.__args__:
- if getattr(item, '__module__', None) == 'cara.models':
+ if getattr(item, '__module__', None) == 'caimira.models':
raise ValueError(
f"unsupported type annotation transformation required for {new_field.type}")
- elif field_type.__module__ == 'cara.models':
+ elif field_type.__module__ == 'caimira.models':
mc_model = getattr(sys.modules[__name__], new_field.type.__name__)
field_type = typing.Union[new_field.type, mc_model]
fields.append((new_field.name, field_type, new_field))
bases = []
- # Update the inheritance/based to use the new MC classes, rather than the cara.models ones.
+ # Update the inheritance/based to use the new MC classes, rather than the caimira.models ones.
for model_base in model.__bases__: # type: ignore
if model_base is object:
bases.append(MCModelBase)
@@ -111,7 +111,7 @@ def _build_mc_model(model: _ModelType) -> typing.Type[MCModelBase[_ModelType]]:
_MODEL_CLASSES = [
- cls for cls in vars(cara.models).values()
+ cls for cls in vars(caimira.models).values()
if dataclasses.is_dataclass(cls)
]
diff --git a/cara/monte_carlo/sampleable.py b/caimira/monte_carlo/sampleable.py
similarity index 98%
rename from cara/monte_carlo/sampleable.py
rename to caimira/monte_carlo/sampleable.py
index 1d887f12..479b91cf 100644
--- a/cara/monte_carlo/sampleable.py
+++ b/caimira/monte_carlo/sampleable.py
@@ -3,7 +3,7 @@ import typing
import numpy as np
from sklearn.neighbors import KernelDensity # type: ignore
-import cara.models
+import caimira.models
# Declare a float array type of a given size.
# There is no better way to declare this currently, unfortunately.
@@ -158,5 +158,5 @@ class LogCustomKernel(SampleableDistribution):
_VectorisedFloatOrSampleable = typing.Union[
- SampleableDistribution, cara.models._VectorisedFloat,
+ SampleableDistribution, caimira.models._VectorisedFloat,
]
diff --git a/cara/scripts/themes/base/cara_script.command b/caimira/scripts/themes/base/cara_script.command
similarity index 78%
rename from cara/scripts/themes/base/cara_script.command
rename to caimira/scripts/themes/base/cara_script.command
index 77b0b4d5..49b418e4 100755
--- a/cara/scripts/themes/base/cara_script.command
+++ b/caimira/scripts/themes/base/cara_script.command
@@ -1,6 +1,6 @@
cd Downloads
git clone https://gitlab.cern.ch/cara/cara.git
-cd cara
+cd caimira
if [[ `uname -m` == 'arm64' ]]; then
pip3 install scipy --index-url=https://pypi.anaconda.org/scipy-wheels-nightly/simple
pip3 install Cython
@@ -8,7 +8,7 @@ if [[ `uname -m` == 'arm64' ]]; then
fi
pip3 install -e .
echo "############################################"
-echo "CARA is now running at http://localhost:8080"
+echo "CAiMIRA is now running at http://localhost:8080"
echo "############################################"
-python3 -m cara.apps.calculator
+python3 -m caimira.apps.calculator
diff --git a/cara/scripts/themes/base/cara_script.sh b/caimira/scripts/themes/base/cara_script.sh
similarity index 62%
rename from cara/scripts/themes/base/cara_script.sh
rename to caimira/scripts/themes/base/cara_script.sh
index 60f4aa52..8d0d15de 100755
--- a/cara/scripts/themes/base/cara_script.sh
+++ b/caimira/scripts/themes/base/cara_script.sh
@@ -1,8 +1,8 @@
git clone https://gitlab.cern.ch/cara/cara.git
-cd cara
+cd caimira
pip install -e .
echo "############################################"
-echo "CARA is now running at http://localhost:8080"
+echo "CAiMIRA is now running at http://localhost:8080"
echo "############################################"
-python -m cara.apps.calculator
+python -m caimira.apps.calculator
diff --git a/cara/scripts/themes/cern/cara_script.command b/caimira/scripts/themes/cern/cara_script.command
similarity index 73%
rename from cara/scripts/themes/cern/cara_script.command
rename to caimira/scripts/themes/cern/cara_script.command
index 0c244541..277fc3d1 100755
--- a/cara/scripts/themes/cern/cara_script.command
+++ b/caimira/scripts/themes/cern/cara_script.command
@@ -1,6 +1,6 @@
cd Downloads
git clone https://gitlab.cern.ch/cara/cara.git
-cd cara
+cd caimira
if [[ `uname -m` == 'arm64' ]]; then
pip3 install scipy --index-url=https://pypi.anaconda.org/scipy-wheels-nightly/simple
pip3 install Cython
@@ -8,7 +8,7 @@ if [[ `uname -m` == 'arm64' ]]; then
fi
pip3 install -e .
echo "############################################"
-echo "CARA is now running at http://localhost:8080"
+echo "CAiMIRA is now running at http://localhost:8080"
echo "############################################"
-python3 -m cara.apps.calculator --theme=cara/apps/templates/cern
+python3 -m caimira.apps.calculator --theme=caimira/apps/templates/cern
diff --git a/cara/scripts/themes/cern/cara_script.sh b/caimira/scripts/themes/cern/cara_script.sh
similarity index 55%
rename from cara/scripts/themes/cern/cara_script.sh
rename to caimira/scripts/themes/cern/cara_script.sh
index 9861ef74..306b94c9 100755
--- a/cara/scripts/themes/cern/cara_script.sh
+++ b/caimira/scripts/themes/cern/cara_script.sh
@@ -1,8 +1,8 @@
git clone https://gitlab.cern.ch/cara/cara.git
-cd cara
+cd caimira
pip install -e .
echo "############################################"
-echo "CARA is now running at http://localhost:8080"
+echo "CAiMIRA is now running at http://localhost:8080"
echo "############################################"
-python -m cara.apps.calculator --theme=cara/apps/templates/cern
+python -m caimira.apps.calculator --theme=caimira/apps/templates/cern
diff --git a/cara/state.py b/caimira/state.py
similarity index 99%
rename from cara/state.py
rename to caimira/state.py
index ddbd73a3..d65fe2c5 100644
--- a/cara/state.py
+++ b/caimira/state.py
@@ -5,7 +5,7 @@ for this purpose, but the need to define class-level attributes proved to be a
limitation that meant we could not mutate the state from one subclass to another
after the state was instantiated.
-This module MUST not import other parts of cara as this would point at a
+This module MUST not import other parts of caimira as this would point at a
leaky abstraction.
"""
diff --git a/cara/tests/__init__.py b/caimira/tests/__init__.py
similarity index 100%
rename from cara/tests/__init__.py
rename to caimira/tests/__init__.py
diff --git a/cara/tests/apps/__init__.py b/caimira/tests/apps/__init__.py
similarity index 100%
rename from cara/tests/apps/__init__.py
rename to caimira/tests/apps/__init__.py
diff --git a/cara/tests/apps/calculator/__init__.py b/caimira/tests/apps/calculator/__init__.py
similarity index 100%
rename from cara/tests/apps/calculator/__init__.py
rename to caimira/tests/apps/calculator/__init__.py
diff --git a/cara/tests/apps/calculator/conftest.py b/caimira/tests/apps/calculator/conftest.py
similarity index 81%
rename from cara/tests/apps/calculator/conftest.py
rename to caimira/tests/apps/calculator/conftest.py
index 6e9c4074..7e46d0cf 100644
--- a/cara/tests/apps/calculator/conftest.py
+++ b/caimira/tests/apps/calculator/conftest.py
@@ -1,6 +1,6 @@
import pytest
-from cara.apps.calculator import model_generator
+from caimira.apps.calculator import model_generator
@pytest.fixture
diff --git a/cara/tests/apps/calculator/test_markdown_tools.py b/caimira/tests/apps/calculator/test_markdown_tools.py
similarity index 91%
rename from cara/tests/apps/calculator/test_markdown_tools.py
rename to caimira/tests/apps/calculator/test_markdown_tools.py
index 8b913067..9dfe0781 100644
--- a/cara/tests/apps/calculator/test_markdown_tools.py
+++ b/caimira/tests/apps/calculator/test_markdown_tools.py
@@ -3,7 +3,7 @@ import textwrap
import jinja2
import pytest
-import cara.apps.calculator.markdown_tools as md_tools
+import caimira.apps.calculator.markdown_tools as md_tools
@pytest.fixture
diff --git a/cara/tests/apps/calculator/test_model_generator.py b/caimira/tests/apps/calculator/test_model_generator.py
similarity index 98%
rename from cara/tests/apps/calculator/test_model_generator.py
rename to caimira/tests/apps/calculator/test_model_generator.py
index 2ebd9ced..43c1a657 100644
--- a/cara/tests/apps/calculator/test_model_generator.py
+++ b/caimira/tests/apps/calculator/test_model_generator.py
@@ -6,11 +6,11 @@ import numpy.testing as npt
import pytest
from retry import retry
-from cara.apps.calculator import model_generator
-from cara.apps.calculator.model_generator import _hours2timestring
-from cara.apps.calculator.model_generator import minutes_since_midnight
-from cara import models
-from cara.monte_carlo.data import expiration_distributions
+from caimira.apps.calculator import model_generator
+from caimira.apps.calculator.model_generator import _hours2timestring
+from caimira.apps.calculator.model_generator import minutes_since_midnight
+from caimira import models
+from caimira.monte_carlo.data import expiration_distributions
def test_model_from_dict(baseline_form_data):
diff --git a/cara/tests/apps/calculator/test_report_generator.py b/caimira/tests/apps/calculator/test_report_generator.py
similarity index 93%
rename from cara/tests/apps/calculator/test_report_generator.py
rename to caimira/tests/apps/calculator/test_report_generator.py
index c18fdd45..4dcba65c 100644
--- a/cara/tests/apps/calculator/test_report_generator.py
+++ b/caimira/tests/apps/calculator/test_report_generator.py
@@ -6,14 +6,14 @@ import numpy.testing
import numpy as np
import pytest
-from cara.apps.calculator import make_app
-from cara.apps.calculator.report_generator import ReportGenerator, readable_minutes
-import cara.apps.calculator.report_generator as rep_gen
+from caimira.apps.calculator import make_app
+from caimira.apps.calculator.report_generator import ReportGenerator, readable_minutes
+import caimira.apps.calculator.report_generator as rep_gen
def test_generate_report(baseline_form):
# This is a simple test that confirms that given a model, we can actually
- # generate a report for it. Because this is what happens in the cara
+ # generate a report for it. Because this is what happens in the caimira
# calculator, we confirm that the generation happens within a reasonable
# time threshold.
time_limit: float = 20.0 # seconds
diff --git a/cara/tests/apps/calculator/test_webapp.py b/caimira/tests/apps/calculator/test_webapp.py
similarity index 89%
rename from cara/tests/apps/calculator/test_webapp.py
rename to caimira/tests/apps/calculator/test_webapp.py
index 65ae284d..be604f0a 100644
--- a/cara/tests/apps/calculator/test_webapp.py
+++ b/caimira/tests/apps/calculator/test_webapp.py
@@ -4,15 +4,15 @@ import pytest
import tornado.testing
from retry import retry
-import cara.apps.calculator
-from cara.apps.calculator.report_generator import generate_permalink
+import caimira.apps.calculator
+from caimira.apps.calculator.report_generator import generate_permalink
_TIMEOUT = 20.
@pytest.fixture
def app():
- return cara.apps.calculator.make_app()
+ return caimira.apps.calculator.make_app()
async def test_homepage(http_server_client):
@@ -47,7 +47,7 @@ async def test_404(http_server_client):
@retry(tries=10)
class TestBasicApp(tornado.testing.AsyncHTTPTestCase):
def get_app(self):
- return cara.apps.calculator.make_app()
+ return caimira.apps.calculator.make_app()
@tornado.testing.gen_test(timeout=_TIMEOUT)
def test_report(self):
@@ -76,8 +76,8 @@ class TestBasicApp(tornado.testing.AsyncHTTPTestCase):
@retry(tries=10)
class TestCernApp(tornado.testing.AsyncHTTPTestCase):
def get_app(self):
- cern_theme = Path(cara.apps.calculator.__file__).parent.parent / 'themes' / 'cern'
- return cara.apps.calculator.make_app(theme_dir=cern_theme)
+ cern_theme = Path(caimira.apps.calculator.__file__).parent.parent / 'themes' / 'cern'
+ return caimira.apps.calculator.make_app(theme_dir=cern_theme)
@tornado.testing.gen_test(timeout=_TIMEOUT)
def test_report(self):
@@ -89,7 +89,7 @@ class TestCernApp(tornado.testing.AsyncHTTPTestCase):
retry(tries=10)
class TestOpenApp(tornado.testing.AsyncHTTPTestCase):
def get_app(self):
- return cara.apps.calculator.make_app(calculator_prefix="/mycalc")
+ return caimira.apps.calculator.make_app(calculator_prefix="/mycalc")
@tornado.testing.gen_test(timeout=_TIMEOUT)
def test_report(self):
@@ -134,10 +134,10 @@ async def test_invalid_compressed_url(http_server_client, baseline_form):
class TestError500(tornado.testing.AsyncHTTPTestCase):
def get_app(self):
- class ProcessingErrorPage(cara.apps.calculator.BaseRequestHandler):
+ class ProcessingErrorPage(caimira.apps.calculator.BaseRequestHandler):
def get(self):
raise ValueError('some unexpected error')
- app = cara.apps.calculator.make_app()
+ app = caimira.apps.calculator.make_app()
page = [
(r'/', ProcessingErrorPage),
]
diff --git a/cara/tests/apps/test_expert_app.py b/caimira/tests/apps/test_expert_app.py
similarity index 90%
rename from cara/tests/apps/test_expert_app.py
rename to caimira/tests/apps/test_expert_app.py
index 3e4d2362..c94f8206 100644
--- a/cara/tests/apps/test_expert_app.py
+++ b/caimira/tests/apps/test_expert_app.py
@@ -1,11 +1,11 @@
import pytest
-import cara.apps
+import caimira.apps
@pytest.fixture
def expert_app():
- return cara.apps.ExpertApplication()
+ return caimira.apps.ExpertApplication()
def test_app(expert_app):
diff --git a/cara/tests/conftest.py b/caimira/tests/conftest.py
similarity index 90%
rename from cara/tests/conftest.py
rename to caimira/tests/conftest.py
index 2f9a3dc9..b64c0b20 100644
--- a/cara/tests/conftest.py
+++ b/caimira/tests/conftest.py
@@ -1,6 +1,6 @@
-from cara import models
-import cara.data
-import cara.dataclass_utils
+from caimira import models
+import caimira.data
+import caimira.dataclass_utils
import pytest
@@ -51,11 +51,11 @@ def baseline_exposure_model(baseline_concentration_model, baseline_sr_model):
@pytest.fixture
def exposure_model_w_outside_temp_changes(baseline_exposure_model: models.ExposureModel):
- exp_model = cara.dataclass_utils.nested_replace(
+ exp_model = caimira.dataclass_utils.nested_replace(
baseline_exposure_model, {
'concentration_model.ventilation': models.SlidingWindow(
active=models.PeriodicInterval(2.2 * 60, 1.8 * 60),
- outside_temp=cara.data.GenevaTemperatures['Jan'],
+ outside_temp=caimira.data.GenevaTemperatures['Jan'],
window_height=1.6,
opening_length=0.6,
)
diff --git a/cara/tests/data/__init__.py b/caimira/tests/data/__init__.py
similarity index 100%
rename from cara/tests/data/__init__.py
rename to caimira/tests/data/__init__.py
diff --git a/cara/tests/data/test_weather.py b/caimira/tests/data/test_weather.py
similarity index 98%
rename from cara/tests/data/test_weather.py
rename to caimira/tests/data/test_weather.py
index 2a667df8..03eb29c3 100644
--- a/cara/tests/data/test_weather.py
+++ b/caimira/tests/data/test_weather.py
@@ -5,7 +5,7 @@ import numpy as np
import numpy.testing
import pytest
-import cara.data.weather as wx
+import caimira.data.weather as wx
def test_nearest_wx_station():
diff --git a/cara/tests/models/__init__.py b/caimira/tests/models/__init__.py
similarity index 100%
rename from cara/tests/models/__init__.py
rename to caimira/tests/models/__init__.py
diff --git a/cara/tests/models/test_concentration_model.py b/caimira/tests/models/test_concentration_model.py
similarity index 99%
rename from cara/tests/models/test_concentration_model.py
rename to caimira/tests/models/test_concentration_model.py
index ea11a005..0f6acb37 100644
--- a/cara/tests/models/test_concentration_model.py
+++ b/caimira/tests/models/test_concentration_model.py
@@ -4,7 +4,7 @@ import numpy as np
import numpy.testing as npt
import pytest
-from cara import models
+from caimira import models
@pytest.mark.parametrize(
diff --git a/cara/tests/models/test_exposure_model.py b/caimira/tests/models/test_exposure_model.py
similarity index 98%
rename from cara/tests/models/test_exposure_model.py
rename to caimira/tests/models/test_exposure_model.py
index 667ebf0b..49662bf0 100644
--- a/cara/tests/models/test_exposure_model.py
+++ b/caimira/tests/models/test_exposure_model.py
@@ -5,9 +5,9 @@ import numpy.testing
import pytest
from dataclasses import dataclass
-from cara import models
-from cara.models import ExposureModel
-from cara.dataclass_utils import replace
+from caimira import models
+from caimira.models import ExposureModel
+from caimira.dataclass_utils import replace
@dataclass(frozen=True)
diff --git a/cara/tests/models/test_mask.py b/caimira/tests/models/test_mask.py
similarity index 97%
rename from cara/tests/models/test_mask.py
rename to caimira/tests/models/test_mask.py
index 08004fa1..5d87ac61 100644
--- a/cara/tests/models/test_mask.py
+++ b/caimira/tests/models/test_mask.py
@@ -2,7 +2,7 @@ import numpy as np
import numpy.testing as npt
import pytest
-from cara import models
+from caimira import models
@pytest.mark.parametrize(
diff --git a/cara/tests/models/test_piecewiseconstant.py b/caimira/tests/models/test_piecewiseconstant.py
similarity index 98%
rename from cara/tests/models/test_piecewiseconstant.py
rename to caimira/tests/models/test_piecewiseconstant.py
index 9ef3befb..74c8a056 100644
--- a/cara/tests/models/test_piecewiseconstant.py
+++ b/caimira/tests/models/test_piecewiseconstant.py
@@ -1,8 +1,8 @@
import numpy as np
import pytest
-from cara import models
-from cara import data
+from caimira import models
+from caimira import data
def test_piecewiseconstantfunction_wrongarguments():
diff --git a/cara/tests/models/test_short_range_model.py b/caimira/tests/models/test_short_range_model.py
similarity index 96%
rename from cara/tests/models/test_short_range_model.py
rename to caimira/tests/models/test_short_range_model.py
index a62b23d8..28bb8934 100644
--- a/cara/tests/models/test_short_range_model.py
+++ b/caimira/tests/models/test_short_range_model.py
@@ -3,10 +3,10 @@ import typing
import numpy as np
import pytest
-from cara import models
-import cara.monte_carlo as mc_models
-from cara.apps.calculator.model_generator import build_expiration
-from cara.monte_carlo.data import short_range_expiration_distributions,\
+from caimira import models
+import caimira.monte_carlo as mc_models
+from caimira.apps.calculator.model_generator import build_expiration
+from caimira.monte_carlo.data import short_range_expiration_distributions,\
expiration_distributions, short_range_distances, activity_distributions
SAMPLE_SIZE = 250_000
diff --git a/cara/tests/test_cara.py b/caimira/tests/test_cara.py
similarity index 53%
rename from cara/tests/test_cara.py
rename to caimira/tests/test_cara.py
index 0e8dfdb0..c99882be 100644
--- a/cara/tests/test_cara.py
+++ b/caimira/tests/test_cara.py
@@ -3,8 +3,8 @@ High-level tests for the package.
"""
-import cara
+import caimira
def test_version():
- assert cara.__version__ is not None
+ assert caimira.__version__ is not None
diff --git a/cara/tests/test_dataclass_utils.py b/caimira/tests/test_dataclass_utils.py
similarity index 91%
rename from cara/tests/test_dataclass_utils.py
rename to caimira/tests/test_dataclass_utils.py
index 270066ee..ac575052 100644
--- a/cara/tests/test_dataclass_utils.py
+++ b/caimira/tests/test_dataclass_utils.py
@@ -1,6 +1,6 @@
import dataclasses
-from cara.dataclass_utils import nested_replace, walk_dataclass
+from caimira.dataclass_utils import nested_replace, walk_dataclass
@dataclasses.dataclass(frozen=True)
diff --git a/cara/tests/test_expiration.py b/caimira/tests/test_expiration.py
similarity index 95%
rename from cara/tests/test_expiration.py
rename to caimira/tests/test_expiration.py
index b9a04cf9..4d498775 100644
--- a/cara/tests/test_expiration.py
+++ b/caimira/tests/test_expiration.py
@@ -5,8 +5,8 @@ import numpy.testing as npt
import pytest
from retry import retry
-from cara import models
-from cara.monte_carlo.data import expiration_distribution
+from caimira import models
+from caimira.monte_carlo.data import expiration_distribution
def test_multiple_wrong_weight_size():
diff --git a/cara/tests/test_full_algorithm.py b/caimira/tests/test_full_algorithm.py
similarity index 98%
rename from cara/tests/test_full_algorithm.py
rename to caimira/tests/test_full_algorithm.py
index ff16335c..89af5545 100644
--- a/cara/tests/test_full_algorithm.py
+++ b/caimira/tests/test_full_algorithm.py
@@ -8,12 +8,12 @@ import numpy.testing as npt
import pytest
from retry import retry
-import cara.monte_carlo as mc
-from cara import models,data
-from cara.utils import method_cache
-from cara.models import _VectorisedFloat,Interval,SpecificInterval
-from cara.monte_carlo.sampleable import LogNormal
-from cara.monte_carlo.data import (expiration_distributions,
+import caimira.monte_carlo as mc
+from caimira import models,data
+from caimira.utils import method_cache
+from caimira.models import _VectorisedFloat,Interval,SpecificInterval
+from caimira.monte_carlo.sampleable import LogNormal
+from caimira.monte_carlo.data import (expiration_distributions,
expiration_BLO_factors,short_range_expiration_distributions,
short_range_distances,virus_distributions,activity_distributions)
@@ -29,7 +29,7 @@ ln2 = np.log(2)
class SimpleConcentrationModel:
"""
Simple model for the background (long-range) concentration, without
- all the flexibility of cara.models.ConcentrationModel.
+ all the flexibility of caimira.models.ConcentrationModel.
For independent, end-to-end testing purposes.
This assumes no mask wearing, and the same ventilation rate at all
times.
@@ -183,7 +183,7 @@ class SimpleConcentrationModel:
class SimpleShortRangeModel:
"""
Simple model for the short-range concentration, without
- all the flexibility of cara.models.ShortRangeModel.
+ all the flexibility of caimira.models.ShortRangeModel.
For independent, end-to-end testing purposes.
This assumes no mask wearing.
"""
@@ -286,7 +286,7 @@ class SimpleShortRangeModel:
class SimpleExposureModel(SimpleConcentrationModel):
"""
Simple model for the background (long-range) exposure, without
- all the flexibility of cara.models.ExposureModel.
+ all the flexibility of caimira.models.ExposureModel.
For independent, end-to-end testing purposes.
This assumes no mask wearing, identical inhalation and exhalation
breathing rate, indentical presence for the infected and the exposed
diff --git a/cara/tests/test_infected_population.py b/caimira/tests/test_infected_population.py
similarity index 74%
rename from cara/tests/test_infected_population.py
rename to caimira/tests/test_infected_population.py
index 8856d312..8937d1af 100644
--- a/cara/tests/test_infected_population.py
+++ b/caimira/tests/test_infected_population.py
@@ -1,7 +1,7 @@
import numpy as np
import pytest
-import cara.models
+import caimira.models
@pytest.mark.parametrize(
@@ -17,25 +17,25 @@ def test_infected_population_vectorisation(override_params):
}
defaults.update(override_params)
- office_hours = cara.models.SpecificInterval(present_times=[(8,17)])
- infected = cara.models.InfectedPopulation(
+ office_hours = caimira.models.SpecificInterval(present_times=[(8,17)])
+ infected = caimira.models.InfectedPopulation(
number=1,
presence=office_hours,
- mask=cara.models.Mask(
+ mask=caimira.models.Mask(
factor_exhale=0.95,
η_inhale=0.3,
),
- activity=cara.models.Activity(
+ activity=caimira.models.Activity(
0.51,
defaults['exhalation_rate'],
),
- virus=cara.models.Virus(
+ virus=caimira.models.Virus(
viral_load_in_sputum=defaults['viral_load_in_sputum'],
infectious_dose=50.,
viable_to_RNA_ratio = 0.5,
transmissibility_factor=1.0,
),
- expiration=cara.models._ExpirationBase.types['Breathing'],
+ expiration=caimira.models._ExpirationBase.types['Breathing'],
host_immunity=0.,
)
emission_rate = infected.emission_rate(10)
diff --git a/cara/tests/test_known_quantities.py b/caimira/tests/test_known_quantities.py
similarity index 99%
rename from cara/tests/test_known_quantities.py
rename to caimira/tests/test_known_quantities.py
index 19314824..8f061486 100644
--- a/cara/tests/test_known_quantities.py
+++ b/caimira/tests/test_known_quantities.py
@@ -2,8 +2,8 @@ import numpy as np
import numpy.testing as npt
import pytest
-import cara.models as models
-import cara.data as data
+import caimira.models as models
+import caimira.data as data
def test_no_mask_superspeading_emission_rate(baseline_concentration_model):
diff --git a/cara/tests/test_model.py b/caimira/tests/test_model.py
similarity index 87%
rename from cara/tests/test_model.py
rename to caimira/tests/test_model.py
index add6a899..eec01921 100644
--- a/cara/tests/test_model.py
+++ b/caimira/tests/test_model.py
@@ -1,5 +1,5 @@
-import cara.models
-from cara.dataclass_utils import nested_replace
+import caimira.models
+from caimira.dataclass_utils import nested_replace
def test_exposure_r0(baseline_exposure_model):
diff --git a/caimira/tests/test_monte_carlo.py b/caimira/tests/test_monte_carlo.py
new file mode 100644
index 00000000..c549e501
--- /dev/null
+++ b/caimira/tests/test_monte_carlo.py
@@ -0,0 +1,97 @@
+import dataclasses
+
+import numpy as np
+import pytest
+
+import caimira.models
+import caimira.monte_carlo.models as mc_models
+import caimira.monte_carlo.sampleable
+
+MODEL_CLASSES = [
+ cls for cls in vars(caimira.models).values()
+ if dataclasses.is_dataclass(cls)
+]
+
+
+def test_type_annotations():
+ # Check that there are appropriate type annotations for all of the model
+ # classes in caimira.models. Note that these must be statically defined in
+ # caimira.monte_carlo, rather than being dynamically generated, in order to
+ # allow the type system to be able to see their definition without needing
+ # runtime execution.
+ missing = []
+ for cls in MODEL_CLASSES:
+ if not hasattr(caimira.monte_carlo, cls.__name__):
+ missing.append(cls.__name__)
+ continue
+ mc_cls = getattr(caimira.monte_carlo, cls.__name__)
+ assert issubclass(mc_cls, caimira.monte_carlo.MCModelBase)
+
+ if missing:
+ msg = (
+ 'There are missing model implementations in caimira.monte_carlo. '
+ 'The following definitions are needed:\n ' +
+ '\n '.join([f'{model} = build_mc_model(caimira.models.{model})' for model in missing])
+ )
+ pytest.fail(msg)
+
+
+@pytest.fixture
+def baseline_mc_concentration_model() -> caimira.monte_carlo.ConcentrationModel:
+ mc_model = caimira.monte_carlo.ConcentrationModel(
+ room=caimira.monte_carlo.Room(volume=caimira.monte_carlo.sampleable.Normal(75, 20),
+ inside_temp=caimira.models.PiecewiseConstant((0., 24.), (293,))),
+ ventilation=caimira.monte_carlo.SlidingWindow(
+ active=caimira.models.PeriodicInterval(period=120, duration=120),
+ outside_temp=caimira.models.PiecewiseConstant((0., 24.), (283,)),
+ window_height=1.6, opening_length=0.6,
+ ),
+ infected=caimira.models.InfectedPopulation(
+ number=1,
+ virus=caimira.models.Virus.types['SARS_CoV_2'],
+ presence=caimira.models.SpecificInterval(((0., 4.), (5., 8.))),
+ mask=caimira.models.Mask.types['No mask'],
+ activity=caimira.models.Activity.types['Light activity'],
+ expiration=caimira.models.Expiration.types['Breathing'],
+ host_immunity=0.,
+ ),
+ evaporation_factor=0.3,
+ )
+ return mc_model
+
+
+@pytest.fixture
+def baseline_mc_sr_model() -> caimira.monte_carlo.ShortRangeModel:
+ return ()
+
+
+@pytest.fixture
+def baseline_mc_exposure_model(baseline_mc_concentration_model, baseline_mc_sr_model) -> caimira.monte_carlo.ExposureModel:
+ return caimira.monte_carlo.ExposureModel(
+ baseline_mc_concentration_model,
+ baseline_mc_sr_model,
+ exposed=caimira.models.Population(
+ number=10,
+ presence=baseline_mc_concentration_model.infected.presence,
+ activity=baseline_mc_concentration_model.infected.activity,
+ mask=baseline_mc_concentration_model.infected.mask,
+ host_immunity=0.,
+ )
+ )
+
+
+def test_build_concentration_model(baseline_mc_concentration_model: caimira.monte_carlo.ConcentrationModel):
+ model = baseline_mc_concentration_model.build_model(7)
+ assert isinstance(model, caimira.models.ConcentrationModel)
+ assert isinstance(model.concentration(time=0.), float)
+ conc = model.concentration(time=1.)
+ assert isinstance(conc, np.ndarray)
+ assert conc.shape == (7, )
+
+
+def test_build_exposure_model(baseline_mc_exposure_model: caimira.monte_carlo.ExposureModel):
+ model = baseline_mc_exposure_model.build_model(7)
+ assert isinstance(model, caimira.models.ExposureModel)
+ prob = model.deposited_exposure()
+ assert isinstance(prob, np.ndarray)
+ assert prob.shape == (7, )
diff --git a/cara/tests/test_monte_carlo_full_models.py b/caimira/tests/test_monte_carlo_full_models.py
similarity index 97%
rename from cara/tests/test_monte_carlo_full_models.py
rename to caimira/tests/test_monte_carlo_full_models.py
index ffbaef42..dfcff434 100644
--- a/cara/tests/test_monte_carlo_full_models.py
+++ b/caimira/tests/test_monte_carlo_full_models.py
@@ -3,10 +3,10 @@ import numpy.testing as npt
import pytest
from retry import retry
-import cara.monte_carlo as mc
-from cara import models,data
-from cara.monte_carlo.data import activity_distributions, virus_distributions, expiration_distributions, infectious_dose_distribution, viable_to_RNA_ratio_distribution
-from cara.apps.calculator.model_generator import build_expiration
+import caimira.monte_carlo as mc
+from caimira import models,data
+from caimira.monte_carlo.data import activity_distributions, virus_distributions, expiration_distributions, infectious_dose_distribution, viable_to_RNA_ratio_distribution
+from caimira.apps.calculator.model_generator import build_expiration
SAMPLE_SIZE = 500_000
TOLERANCE = 0.05
diff --git a/cara/tests/test_predefined_distributions.py b/caimira/tests/test_predefined_distributions.py
similarity index 94%
rename from cara/tests/test_predefined_distributions.py
rename to caimira/tests/test_predefined_distributions.py
index 959565f7..e2c029da 100644
--- a/cara/tests/test_predefined_distributions.py
+++ b/caimira/tests/test_predefined_distributions.py
@@ -2,7 +2,7 @@ import numpy as np
import numpy.testing as npt
import pytest
-from cara.monte_carlo.data import activity_distributions, virus_distributions
+from caimira.monte_carlo.data import activity_distributions, virus_distributions
# Mean & std deviations from https://doi.org/10.1101/2021.10.14.21264988 (Table 3)
diff --git a/cara/tests/test_sampleable_distribution.py b/caimira/tests/test_sampleable_distribution.py
similarity index 99%
rename from cara/tests/test_sampleable_distribution.py
rename to caimira/tests/test_sampleable_distribution.py
index 76544b35..98f0a9ca 100644
--- a/cara/tests/test_sampleable_distribution.py
+++ b/caimira/tests/test_sampleable_distribution.py
@@ -3,7 +3,7 @@ import numpy.testing as npt
import pytest
from retry import retry
-from cara.monte_carlo import sampleable
+from caimira.monte_carlo import sampleable
@retry(tries=10)
diff --git a/cara/tests/test_state.py b/caimira/tests/test_state.py
similarity index 99%
rename from cara/tests/test_state.py
rename to caimira/tests/test_state.py
index 814d2ae4..f984136d 100644
--- a/cara/tests/test_state.py
+++ b/caimira/tests/test_state.py
@@ -4,7 +4,7 @@ from unittest.mock import Mock
import pytest
-from cara import state
+from caimira import state
@dataclass
diff --git a/cara/tests/test_ventilation.py b/caimira/tests/test_ventilation.py
similarity index 99%
rename from cara/tests/test_ventilation.py
rename to caimira/tests/test_ventilation.py
index 201da2c7..4a09782f 100644
--- a/cara/tests/test_ventilation.py
+++ b/caimira/tests/test_ventilation.py
@@ -4,7 +4,7 @@ import numpy as np
import numpy.testing as npt
import pytest
-from cara import models
+from caimira import models
@pytest.fixture
diff --git a/cara/utils.py b/caimira/utils.py
similarity index 100%
rename from cara/utils.py
rename to caimira/utils.py
diff --git a/cara/tests/apps/calculator/test_report_json.py b/cara/tests/apps/calculator/test_report_json.py
deleted file mode 100644
index a15983df..00000000
--- a/cara/tests/apps/calculator/test_report_json.py
+++ /dev/null
@@ -1,31 +0,0 @@
-import json
-
-import tornado.testing
-
-import cara.apps.calculator
-from cara.apps.calculator import model_generator
-
-_TIMEOUT = 40.
-
-
-class TestCalculatorJsonResponse(tornado.testing.AsyncHTTPTestCase):
- def setUp(self):
- super().setUp()
- self.http_client.defaults['request_timeout'] = _TIMEOUT
-
- def get_app(self):
- return cara.apps.calculator.make_app()
-
- @tornado.testing.gen_test(timeout=_TIMEOUT)
- def test_json_response(self):
- response = yield self.http_client.fetch(
- request=self.get_url("/calculator/report-json"),
- method="POST",
- headers={'content-type': 'application/json'},
- body=json.dumps(model_generator.baseline_raw_form_data())
- )
- self.assertEqual(response.code, 200)
-
- data = json.loads(response.body)
- self.assertIsInstance(data['prob_inf'], float)
- self.assertIsInstance(data['expected_new_cases'], float)
diff --git a/cara/tests/models/test_virus.py b/cara/tests/models/test_virus.py
deleted file mode 100644
index 650da211..00000000
--- a/cara/tests/models/test_virus.py
+++ /dev/null
@@ -1,25 +0,0 @@
-import numpy as np
-import numpy.testing as npt
-import pytest
-
-from cara import models
-
-
-@pytest.mark.parametrize(
- "inside_temp, humidity, expected_halflife, expected_decay_constant",
- [
- [293.15, 0.5, 0.5947447349860315, 1.1654532436949188],
- [272.15, 0.7, 1.6070844193207476, 0.4313072619127947],
- [300.15, 1., 0.17367078830147223, 3.9911558376571805],
- [300.15, 0., 6.43, 0.10779893943389507],
- [np.array([272.15, 300.15]), np.array([0.7, 0.]),
- np.array([1.60708442, 6.43]), np.array([0.43130726, 0.10779894])],
- [np.array([293.15, 300.15]), np.array([0.5, 1.]),
- np.array([0.59474473, 0.17367079]), np.array([1.16545324, 3.99115584])]
- ],
-)
-def test_decay_constant(inside_temp, humidity, expected_halflife, expected_decay_constant):
- npt.assert_almost_equal(models.Virus.types['SARS_CoV_2'].halflife(humidity, inside_temp),
- expected_halflife)
- npt.assert_almost_equal(models.Virus.types['SARS_CoV_2'].decay_constant(humidity, inside_temp),
- expected_decay_constant)
\ No newline at end of file
diff --git a/cara/tests/test_monte_carlo.py b/cara/tests/test_monte_carlo.py
deleted file mode 100644
index d709e6c1..00000000
--- a/cara/tests/test_monte_carlo.py
+++ /dev/null
@@ -1,97 +0,0 @@
-import dataclasses
-
-import numpy as np
-import pytest
-
-import cara.models
-import cara.monte_carlo.models as mc_models
-import cara.monte_carlo.sampleable
-
-MODEL_CLASSES = [
- cls for cls in vars(cara.models).values()
- if dataclasses.is_dataclass(cls)
-]
-
-
-def test_type_annotations():
- # Check that there are appropriate type annotations for all of the model
- # classes in cara.models. Note that these must be statically defined in
- # cara.monte_carlo, rather than being dynamically generated, in order to
- # allow the type system to be able to see their definition without needing
- # runtime execution.
- missing = []
- for cls in MODEL_CLASSES:
- if not hasattr(cara.monte_carlo, cls.__name__):
- missing.append(cls.__name__)
- continue
- mc_cls = getattr(cara.monte_carlo, cls.__name__)
- assert issubclass(mc_cls, cara.monte_carlo.MCModelBase)
-
- if missing:
- msg = (
- 'There are missing model implementations in cara.monte_carlo. '
- 'The following definitions are needed:\n ' +
- '\n '.join([f'{model} = build_mc_model(cara.models.{model})' for model in missing])
- )
- pytest.fail(msg)
-
-
-@pytest.fixture
-def baseline_mc_concentration_model() -> cara.monte_carlo.ConcentrationModel:
- mc_model = cara.monte_carlo.ConcentrationModel(
- room=cara.monte_carlo.Room(volume=cara.monte_carlo.sampleable.Normal(75, 20),
- inside_temp=cara.models.PiecewiseConstant((0., 24.), (293,))),
- ventilation=cara.monte_carlo.SlidingWindow(
- active=cara.models.PeriodicInterval(period=120, duration=120),
- outside_temp=cara.models.PiecewiseConstant((0., 24.), (283,)),
- window_height=1.6, opening_length=0.6,
- ),
- infected=cara.models.InfectedPopulation(
- number=1,
- virus=cara.models.Virus.types['SARS_CoV_2'],
- presence=cara.models.SpecificInterval(((0., 4.), (5., 8.))),
- mask=cara.models.Mask.types['No mask'],
- activity=cara.models.Activity.types['Light activity'],
- expiration=cara.models.Expiration.types['Breathing'],
- host_immunity=0.,
- ),
- evaporation_factor=0.3,
- )
- return mc_model
-
-
-@pytest.fixture
-def baseline_mc_sr_model() -> cara.monte_carlo.ShortRangeModel:
- return ()
-
-
-@pytest.fixture
-def baseline_mc_exposure_model(baseline_mc_concentration_model, baseline_mc_sr_model) -> cara.monte_carlo.ExposureModel:
- return cara.monte_carlo.ExposureModel(
- baseline_mc_concentration_model,
- baseline_mc_sr_model,
- exposed=cara.models.Population(
- number=10,
- presence=baseline_mc_concentration_model.infected.presence,
- activity=baseline_mc_concentration_model.infected.activity,
- mask=baseline_mc_concentration_model.infected.mask,
- host_immunity=0.,
- )
- )
-
-
-def test_build_concentration_model(baseline_mc_concentration_model: cara.monte_carlo.ConcentrationModel):
- model = baseline_mc_concentration_model.build_model(7)
- assert isinstance(model, cara.models.ConcentrationModel)
- assert isinstance(model.concentration(time=0.), float)
- conc = model.concentration(time=1.)
- assert isinstance(conc, np.ndarray)
- assert conc.shape == (7, )
-
-
-def test_build_exposure_model(baseline_mc_exposure_model: cara.monte_carlo.ExposureModel):
- model = baseline_mc_exposure_model.build_model(7)
- assert isinstance(model, cara.models.ExposureModel)
- prob = model.deposited_exposure()
- assert isinstance(prob, np.ndarray)
- assert prob.shape == (7, )
diff --git a/requirements.txt b/requirements.txt
index a7a970cb..ceb2da70 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,6 +1,6 @@
-# Created by installing the cara[app] extra and running:
+# Created by installing the caimira[app] extra and running:
# echo '.[app]' > requirements.txt
-# pip list --format freeze | grep -vi cara | grep -v pip | grep -v setuptools >> requirements.txt
+# pip list --format freeze | grep -vi caimira | grep -v pip | grep -v setuptools >> requirements.txt
.[app]
anyio==3.3.0
diff --git a/server-performance-tests/README.md b/server-performance-tests/README.md
index 7bf5e43b..61fcaf7d 100644
--- a/server-performance-tests/README.md
+++ b/server-performance-tests/README.md
@@ -11,7 +11,7 @@ In order to set it up for the first time, we followed the documentation at https
To use, uncomment the desired method on ``lucust.py``` file, open the terminal on this folder and run the following command:
-``locust -f locust.py --host https://cara.web.cern.ch``
+``locust -f locust.py --host https://caimira.web.cern.ch``
Then, open up a browser and point it to http://localhost:8089.
By default we pointed out the test to our own web server.
diff --git a/setup.py b/setup.py
index 1e12f4fa..108a3811 100644
--- a/setup.py
+++ b/setup.py
@@ -1,7 +1,7 @@
-# This module is part of CARA. Please see the repository at
+# This module is part of CAiMIRA. Please see the repository at
# https://gitlab.cern.ch/cara/cara for details of the license and terms of use.
"""
-setup.py for CARA.
+setup.py for CAiMIRA.
For reference see
https://packaging.python.org/guides/distributing-packages-using-setuptools/
@@ -58,7 +58,7 @@ REQUIREMENTS: dict = {
setup(
- name='CARA',
+ name='CAiMIRA',
version="1.0.0",
maintainer='Andre Henriques',
@@ -66,7 +66,7 @@ setup(
description='COVID Airborne Risk Assessment',
long_description=LONG_DESCRIPTION,
long_description_content_type='text/markdown',
- url='cern.ch/cara',
+ url='cern.ch/caimira',
packages=find_packages(),
python_requires='~=3.9',
@@ -87,7 +87,7 @@ setup(
# The 'all' extra is the union of all requirements.
'all': [req for reqs in REQUIREMENTS.values() for req in reqs],
},
- package_data={'cara': [
+ package_data={'caimira': [
'apps/*/*',
'apps/*/*/*',
'apps/*/*/*/*',