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

1import logging 

2from pathlib import Path 

3 

4import numpy as np 

5 

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 

36 

37log = logging.getLogger(__name__) 

38 

39 

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 ) 

51 

52 

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 ) 

64 

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) 

72 

73 

74def learn_potential_from_data(config): 

75 log_configuration(config) 

76 

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 ) 

91 

92 

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 ) 

106 

107 

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 ) 

127 

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 ) 

134 

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 ) 

142 

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) 

157 

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 ) 

167 

168 if config.plot.grid: 

169 log.info("Plot the configuration of the grid.") 

170 plot_discrete_grid(config, slow_indices, preprocessed_trajectories) 

171 

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)