Note
Go to the end to download the full example code.
Reproducible parameter-sweep benchmark#
Benchmark a fixed PyMieSim parameter grid while recording environment metadata. The script is deterministic; runtime values are machine-dependent and should be compared only under the same environment.
Python: 3.11.16
Platform: Linux-6.17.0-1022-azure-x86_64-with-glibc2.39
PyMieSim grid: [1, 1, 1, 1, 100, 1, 1]
Results: 100
Median runtime: 0.001444 s
All timings: [0.001465, 0.001444, 0.001452, 0.001435, 0.001442]
import platform
import statistics
import time
import numpy as np
from PyMieSim import Experiment, GaussianSet, PolarizationSet, SphereSet, ureg
def build_experiment(size: int = 100) -> Experiment:
source = GaussianSet(
wavelength=[600] * ureg.nanometer,
polarization=PolarizationSet(angles=[0] * ureg.degree),
optical_power=[1e-3] * ureg.watt,
numerical_aperture=[0.2],
)
scatterer = SphereSet(
diameter=np.linspace(100, 1000, size) * ureg.nanometer,
material=[1.5],
medium=[1.0],
)
return Experiment(scatterer_set=scatterer, source_set=source)
experiment = build_experiment()
for _ in range(2):
experiment.get("Qsca").as_numpy()
timings = []
for _ in range(5):
start = time.perf_counter()
values = experiment.get("Qsca").as_numpy()
timings.append(time.perf_counter() - start)
print(f"Python: {platform.python_version()}")
print(f"Platform: {platform.platform()}")
print(f"PyMieSim grid: {experiment.array_shape}")
print(f"Results: {np.asarray(values).size}")
print(f"Median runtime: {statistics.median(timings):.6f} s")
print(f"All timings: {[round(value, 6) for value in timings]}")
Total running time of the script: (0 minutes 0.022 seconds)