Source code for ewoksfluo.tests.tests_resources
import logging
from contextlib import contextmanager
import numpy
from .. import resource_utils
[docs]
def test_job_parameters(system_4cpus_8gb):
# 8 GB array
shape = (1024, 1024, 1024)
dtype = numpy.float64
njobs = 1
narrays_in_parallel, chunk_size_dim0 = resource_utils.job_parameters(
njobs, shape, dtype
)
assert narrays_in_parallel == 1
assert chunk_size_dim0 == 1024
# Check MEM limit with chunking
njobs = 2
narrays_in_parallel, chunk_size_dim0 = resource_utils.job_parameters(
njobs, shape, dtype
)
assert narrays_in_parallel == 2
assert chunk_size_dim0 == 512
# Check MEM limit without chunking
njobs = 2
narrays_in_parallel, chunk_size_dim0 = resource_utils.job_parameters(
njobs, shape, dtype, chunking_possible=False
)
assert narrays_in_parallel == 1
assert chunk_size_dim0 == 1024
# Check CPU limit
njobs = 16
narrays_in_parallel, chunk_size_dim0 = resource_utils.job_parameters(
njobs, shape, dtype
)
assert narrays_in_parallel == 3
assert chunk_size_dim0 == 341
[docs]
def test_log_required_memory(system_4cpus_8gb, caplog):
# 4 GB array
shape = (1024, 1024, 1024)
dtype = numpy.float32
level = logging.INFO
expected = "Memory required to process data: 4.00 GB (available: 8.00 GB)"
with _assert_logging(caplog, level, expected):
resource_utils.log_required_memory("process data", shape, dtype)
# 16 GB array
shape = (2048, 1024, 1024)
dtype = numpy.float64
level = logging.WARNING
expected = "Memory required to process data: 16.00 GB (available: 8.00 GB)"
with _assert_logging(caplog, level, expected):
resource_utils.log_required_memory("process data", shape, dtype)
@contextmanager
def _assert_logging(caplog, level, message):
with caplog.at_level(level):
yield
messages = {r.message for r in caplog.records}
assert message in messages