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.17
Platform: Linux-7.0.0-1017-azure-x86_64-with-glibc2.39
PyMieSim grid: [1, 1, 1, 1, 100, 1, 1]
Results: 100
Median runtime: 0.001475 s
All timings: [0.001922, 0.001472, 0.001488, 0.001456, 0.001475]
import platform
import statistics
import time
import numpy as np
from PyMieSim import Measure, 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(Measure.QSCA).as_numpy()
timings = []
for _ in range(5):
start = time.perf_counter()
values = experiment.get(Measure.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.091 seconds)