Coverage for physped/processing_pipelines.py: 0%
79 statements
« prev ^ index » next coverage.py v7.6.12, created at 2025-04-01 09:28 +0000
« prev ^ index » next coverage.py v7.6.12, created at 2025-04-01 09:28 +0000
1import logging
2from pathlib import Path
4import numpy as np
6from physped.core.lattice_selection import evaluate_selection_range
7from physped.core.parametrize_potential import (
8 learn_potential_from_trajectories,
9)
10from physped.core.pedestrian_initializer import (
11 sample_dynamics_from_trajectories,
12)
13from physped.core.pedestrian_simulator import simulate_pedestrians
14from physped.core.slow_dynamics import compute_slow_dynamics
15from physped.io.readers import (
16 read_piecewise_potential_from_file,
17 read_trajectories,
18 read_trajectories_from_file,
19)
20from physped.io.writers import save_piecewise_potential, save_trajectories
21from physped.preprocessing.trajectories import preprocess_trajectories
22from physped.utils.config_utils import (
23 log_configuration,
24)
25from physped.visualization.plot_discrete_grid import plot_discrete_grid
26from physped.visualization.plot_histograms import (
27 compute_joint_kl_divergence,
28 create_all_histograms,
29 plot_multiple_histograms,
30 save_joint_kl_divergence_to_file,
31)
32from physped.visualization.plot_potential_at_slow_index import (
33 plot_potential_at_slow_index,
34)
35from physped.visualization.plot_trajectories import plot_trajectories
37log = logging.getLogger(__name__)
40def read_and_preprocess_data(config):
41 log_configuration(config)
42 trajectories = read_trajectories(config)
43 preprocessed_trajectories = preprocess_trajectories(
44 trajectories, config=config
45 )
46 save_trajectories(
47 preprocessed_trajectories,
48 folderpath=Path.cwd(),
49 filename=config.filename.preprocessed_trajectories,
50 )
53def sample_and_save_dynamics_from_trajectories(config: dict):
54 log_configuration(config)
55 env_name = config.params.env_name
56 n_trajs = config.params.simulation.ntrajs
57 state = config.params.simulation.sample_state
58 preprocessed_trajectories = read_trajectories_from_file(
59 filepath=Path.cwd() / config.filename.preprocessed_trajectories
60 )
61 preprocessed_trajectories = compute_slow_dynamics(
62 preprocessed_trajectories, config=config
63 )
65 dynamics = sample_dynamics_from_trajectories(
66 preprocessed_trajectories, n_trajs, state
67 )
68 folderpath = Path.cwd() / "initial_dynamics"
69 folderpath.mkdir(parents=True, exist_ok=True)
70 filename = f"{env_name}_state_{state}_dynamics.npy"
71 np.save(folderpath / filename, dynamics)
74def learn_potential_from_data(config):
75 log_configuration(config)
77 preprocessed_trajectories = read_trajectories_from_file(
78 filepath=Path.cwd() / config.filename.preprocessed_trajectories
79 )
80 preprocessed_trajectories = compute_slow_dynamics(
81 preprocessed_trajectories, config=config
82 )
83 piecewise_potential = learn_potential_from_trajectories(
84 preprocessed_trajectories, config
85 )
86 save_piecewise_potential(
87 piecewise_potential,
88 Path.cwd() / "potentials",
89 config.filename.piecewise_potential,
90 )
93def simulate_from_potential(config):
94 log_configuration(config)
95 filepath = Path.cwd() / "potentials" / config.filename.piecewise_potential
96 piecewise_potential = read_piecewise_potential_from_file(filepath)
97 simulated_trajectories = simulate_pedestrians(
98 piecewise_potential,
99 config,
100 )
101 save_trajectories(
102 simulated_trajectories,
103 Path.cwd() / "simulated_trajectories",
104 config.filename.simulated_trajectories,
105 )
108def plot_figures(config):
109 log_configuration(config)
110 preprocessed_trajectories = read_trajectories_from_file(
111 filepath=Path.cwd() / config.filename.preprocessed_trajectories
112 )
113 preprocessed_trajectories = compute_slow_dynamics(
114 preprocessed_trajectories, config=config
115 )
116 config.params.input_ntrajs = len(preprocessed_trajectories.Pid.unique())
117 piecewise_potential = read_piecewise_potential_from_file(
118 filepath=Path.cwd()
119 / "potentials"
120 / config.filename.piecewise_potential
121 )
122 simulated_trajectories = read_trajectories_from_file(
123 filepath=Path.cwd()
124 / "simulated_trajectories"
125 / config.filename.simulated_trajectories
126 )
128 if config.plot.preprocessed_trajectories:
129 log.info("Plot preprocessed trajectories.")
130 plot_trajectories(preprocessed_trajectories, config, "recorded")
131 plot_trajectories(
132 preprocessed_trajectories, config, "recorded", traj_type="s"
133 )
135 if config.plot.simulated_trajectories:
136 log.info("Plot simulated trajectories")
137 config.params.trajectory_plot.plot_intended_path = False
138 plot_trajectories(simulated_trajectories, config, "simulated")
139 plot_trajectories(
140 simulated_trajectories, config, "simulated", traj_type="s"
141 )
143 if config.plot.histograms:
144 log.info("Plot probability distribution comparison.")
145 observables = ["xf", "yf", "uf", "vf"]
146 config.params.simulation.ntrajs = len(
147 simulated_trajectories.Pid.unique()
148 )
149 histograms = create_all_histograms(
150 preprocessed_trajectories, simulated_trajectories, config
151 )
152 joint_kl_divergence = compute_joint_kl_divergence(
153 piecewise_potential, simulated_trajectories
154 )
155 save_joint_kl_divergence_to_file(joint_kl_divergence, config)
156 plot_multiple_histograms(observables, histograms, "PDF", config)
158 config = evaluate_selection_range(config)
159 selection = config.params.selection.range
160 slow_indices = (
161 selection.x_indices[0],
162 selection.y_indices[0],
163 selection.r_indices[0],
164 selection.theta_indices[0],
165 selection.k_indices[0],
166 )
168 if config.plot.grid:
169 log.info("Plot the configuration of the grid.")
170 plot_discrete_grid(config, slow_indices, preprocessed_trajectories)
172 if config.plot.potential_at_selection:
173 log.info("Plot potential at selection.")
174 plot_potential_at_slow_index(config, slow_indices, piecewise_potential)