fmt: auto format changes
All checks were successful
gitea-physics/deepdog/pipeline/head This commit looks good

This commit is contained in:
2023-12-09 16:25:57 -06:00
parent 1741807be4
commit b10586bf55
4 changed files with 39 additions and 21 deletions

View File

@@ -18,6 +18,7 @@ class DirectMonteCarloResult:
monte_carlo_count: int
likelihood: float
@dataclass
class DirectMonteCarloConfig:
monte_carlo_count_per_cycle: int = 10000
@@ -28,6 +29,7 @@ class DirectMonteCarloConfig:
write_successes_to_file: bool = False
tag: str = ""
class DirectMonteCarloRun:
"""
A single model Direct Monte Carlo run, currently implemented only using single threading.
@@ -52,7 +54,7 @@ class DirectMonteCarloRun:
target_success: int
The number of successes to target before exiting early.
Should likely be ~100 but can go higher to.
max_monte_carlo_cycles_steps: int
The number of steps to use. Each step consists of monte_carlo_cycles cycles, each of which has monte_carlo_count_per_cycle iterations.
@@ -82,6 +84,7 @@ class DirectMonteCarloRun:
) = pdme.measurement.input_types.dot_range_measurements_low_high_arrays(
self.measurements
)
def _single_run(self, seed) -> numpy.ndarray:
rng = numpy.random.default_rng(seed)
@@ -98,7 +101,9 @@ class DirectMonteCarloRun:
numpy.array([di]), current_sample
)
current_sample = current_sample[numpy.all((vals > low) & (vals < high), axis=1)]
current_sample = current_sample[
numpy.all((vals > low) & (vals < high), axis=1)
]
return current_sample
def execute(self) -> DirectMonteCarloResult:
@@ -106,23 +111,30 @@ class DirectMonteCarloRun:
total_success = 0
total_count = 0
count_per_step = self.config.monte_carlo_count_per_cycle * self.config.monte_carlo_cycles
count_per_step = (
self.config.monte_carlo_count_per_cycle * self.config.monte_carlo_cycles
)
seed_sequence = numpy.random.SeedSequence(self.config.monte_carlo_seed)
while (
(step_count < self.config.max_monte_carlo_cycles_steps) and
(total_success < self.config.target_success)
while (step_count < self.config.max_monte_carlo_cycles_steps) and (
total_success < self.config.target_success
):
_logger.debug(f"Executing step {step_count}")
for cycle_i, seed in enumerate(seed_sequence.spawn(self.config.monte_carlo_cycles)):
for cycle_i, seed in enumerate(
seed_sequence.spawn(self.config.monte_carlo_cycles)
):
cycle_success_configs = self._single_run(seed)
cycle_success_count = len(cycle_success_configs)
if cycle_success_count > 0:
_logger.debug(f"For cycle {cycle_i} received {cycle_success_count} successes")
_logger.debug(
f"For cycle {cycle_i} received {cycle_success_count} successes"
)
_logger.debug(cycle_success_configs)
if self.config.write_successes_to_file:
sorted_by_freq = numpy.array(
[
pdme.subspace_simulation.sort_array_of_dipoles_by_frequency(dipole_config)
pdme.subspace_simulation.sort_array_of_dipoles_by_frequency(
dipole_config
)
for dipole_config in cycle_success_configs
]
)
@@ -137,10 +149,9 @@ class DirectMonteCarloRun:
_logger.debug(f"At end of step {step_count} have {total_success} successes")
step_count += 1
total_count += count_per_step
return DirectMonteCarloResult(
successes=total_success,
monte_carlo_count=total_count,
likelihood=total_success/total_count
likelihood=total_success / total_count,
)