fmdtools 2.5.3__tar.gz → 2.5.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (273) hide show
  1. {fmdtools-2.5.3 → fmdtools-2.5.5}/LICENSE +1 -1
  2. {fmdtools-2.5.3/fmdtools.egg-info → fmdtools-2.5.5}/PKG-INFO +7 -7
  3. {fmdtools-2.5.3 → fmdtools-2.5.5}/README.md +5 -5
  4. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/airspacelib/base/state.py +35 -28
  5. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/airspacelib/contingency_management/model_aircraft.py +2 -2
  6. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/airspacelib/contingency_management/model_environment.py +1 -1
  7. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/water_pump/test_pump_stochastic.py +2 -2
  8. {fmdtools-2.5.3 → fmdtools-2.5.5/fmdtools.egg-info}/PKG-INFO +7 -7
  9. {fmdtools-2.5.3 → fmdtools-2.5.5}/fmdtools.egg-info/SOURCES.txt +95 -1
  10. {fmdtools-2.5.3 → fmdtools-2.5.5}/pyproject.toml +79 -1
  11. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/__init__.py +1 -1
  12. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/analyze/common.py +74 -9
  13. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/analyze/graph/base.py +14 -4
  14. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/analyze/history.py +66 -29
  15. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/analyze/phases.py +11 -6
  16. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/analyze/result.py +65 -18
  17. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/analyze/tabulate.py +43 -27
  18. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/define/architecture/action.py +1 -1
  19. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/define/architecture/geom.py +4 -1
  20. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/define/base.py +8 -3
  21. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/define/block/base.py +10 -3
  22. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/define/container/base.py +2 -2
  23. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/define/container/mode.py +19 -1
  24. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/define/container/parameter.py +3 -2
  25. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/define/container/rand.py +320 -86
  26. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/define/container/state.py +26 -15
  27. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/define/container/time.py +2 -2
  28. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/define/object/coords.py +8 -3
  29. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/define/object/timer.py +9 -6
  30. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/sim/propagate.py +2 -1
  31. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/sim/sample.py +152 -49
  32. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/sim/scenario.py +38 -20
  33. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/sim/search.py +15 -8
  34. fmdtools-2.5.5/tests/test_appended_history_snapshots.py +172 -0
  35. fmdtools-2.5.5/tests/test_approach_joint_domains.py +186 -0
  36. fmdtools-2.5.5/tests/test_approach_model_timestep.py +192 -0
  37. fmdtools-2.5.5/tests/test_approach_phase_map_ownership.py +129 -0
  38. fmdtools-2.5.5/tests/test_architecture_vector_inputs.py +176 -0
  39. fmdtools-2.5.5/tests/test_array_state_limits.py +126 -0
  40. fmdtools-2.5.5/tests/test_array_state_rounding.py +131 -0
  41. fmdtools-2.5.5/tests/test_binomial_trial_counts.py +189 -0
  42. fmdtools-2.5.5/tests/test_bounded_array_increments.py +141 -0
  43. fmdtools-2.5.5/tests/test_callable_parameter_domains.py +142 -0
  44. fmdtools-2.5.5/tests/test_choice_draw_mass.py +198 -0
  45. fmdtools-2.5.5/tests/test_choice_probability_precision.py +173 -0
  46. fmdtools-2.5.5/tests/test_common.py +166 -0
  47. fmdtools-2.5.5/tests/test_comparison_ci_metrics.py +208 -0
  48. fmdtools-2.5.5/tests/test_coordinate_cell_boundaries.py +124 -0
  49. fmdtools-2.5.5/tests/test_default_fault_sample_timestep.py +184 -0
  50. fmdtools-2.5.5/tests/test_degradation_path_boundaries.py +153 -0
  51. fmdtools-2.5.5/tests/test_dirichlet_batches.py +195 -0
  52. fmdtools-2.5.5/tests/test_disconnected_graph_robustness.py +154 -0
  53. fmdtools-2.5.5/tests/test_discrete_grid_values.py +171 -0
  54. fmdtools-2.5.5/tests/test_discrete_sample_sizes.py +252 -0
  55. fmdtools-2.5.5/tests/test_even_sampling_mass.py +159 -0
  56. fmdtools-2.5.5/tests/test_expectation_without_nominal.py +120 -0
  57. fmdtools-2.5.5/tests/test_explicit_history_times.py +137 -0
  58. fmdtools-2.5.5/tests/test_factor_sort_priority.py +142 -0
  59. fmdtools-2.5.5/tests/test_fault_history_paths.py +179 -0
  60. fmdtools-2.5.5/tests/test_fault_object_overrides.py +205 -0
  61. fmdtools-2.5.5/tests/test_fault_space_ownership.py +151 -0
  62. fmdtools-2.5.5/tests/test_fault_space_sample_limits.py +124 -0
  63. fmdtools-2.5.5/tests/test_fault_summary_paths.py +170 -0
  64. fmdtools-2.5.5/tests/test_fault_weight_arrays.py +150 -0
  65. fmdtools-2.5.5/tests/test_faulty_scenario_selection.py +143 -0
  66. fmdtools-2.5.5/tests/test_fmea_input_ownership.py +126 -0
  67. fmdtools-2.5.5/tests/test_generated_history_phase_timestep.py +92 -0
  68. fmdtools-2.5.5/tests/test_graph_edge_comparison.py +129 -0
  69. fmdtools-2.5.5/tests/test_graph_zero_seed.py +117 -0
  70. fmdtools-2.5.5/tests/test_history_alignment_ownership.py +136 -0
  71. fmdtools-2.5.5/tests/test_history_sample_indices.py +147 -0
  72. fmdtools-2.5.5/tests/test_hypergeometric_count_conversion.py +167 -0
  73. fmdtools-2.5.5/tests/test_immutable_fault_injection.py +185 -0
  74. fmdtools-2.5.5/tests/test_implicit_sampling_start.py +158 -0
  75. fmdtools-2.5.5/tests/test_integer_bound_conversion.py +177 -0
  76. fmdtools-2.5.5/tests/test_integer_history_differences.py +196 -0
  77. fmdtools-2.5.5/tests/test_integer_rate_metrics.py +176 -0
  78. fmdtools-2.5.5/tests/test_join_phase_timestep.py +118 -0
  79. fmdtools-2.5.5/tests/test_joint_fault_metadata_order.py +137 -0
  80. fmdtools-2.5.5/tests/test_joint_fault_phase_map.py +192 -0
  81. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_joint_fault_weights.py +2 -1
  82. fmdtools-2.5.5/tests/test_joint_scenario_quadrature.py +229 -0
  83. fmdtools-2.5.5/tests/test_location_scale_draw_sizes.py +268 -0
  84. fmdtools-2.5.5/tests/test_lognormal_defaults.py +180 -0
  85. fmdtools-2.5.5/tests/test_metric_weight_alignment.py +140 -0
  86. fmdtools-2.5.5/tests/test_mixed_shape_degradation.py +180 -0
  87. fmdtools-2.5.5/tests/test_multidimensional_state_comparison.py +96 -0
  88. fmdtools-2.5.5/tests/test_multinomial_sampling_arguments.py +195 -0
  89. fmdtools-2.5.5/tests/test_multivariate_hypergeometric_options.py +201 -0
  90. fmdtools-2.5.5/tests/test_multivariate_normal_arguments.py +199 -0
  91. fmdtools-2.5.5/tests/test_named_default_restoration.py +143 -0
  92. fmdtools-2.5.5/tests/test_named_parameter_maps.py +129 -0
  93. fmdtools-2.5.5/tests/test_nearest_point_exclusion.py +89 -0
  94. fmdtools-2.5.5/tests/test_nested_comparison_inputs.py +173 -0
  95. fmdtools-2.5.5/tests/test_nested_comparison_parentage.py +213 -0
  96. fmdtools-2.5.5/tests/test_nested_history_summary.py +120 -0
  97. fmdtools-2.5.5/tests/test_nested_parameter_constraints.py +148 -0
  98. fmdtools-2.5.5/tests/test_nested_sample_metrics.py +173 -0
  99. fmdtools-2.5.5/tests/test_nested_scenario_parameters.py +167 -0
  100. fmdtools-2.5.5/tests/test_not_equal_constraints.py +138 -0
  101. fmdtools-2.5.5/tests/test_object_history_copy.py +140 -0
  102. fmdtools-2.5.5/tests/test_offset_time_grids.py +119 -0
  103. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_packages.py +2 -2
  104. fmdtools-2.5.5/tests/test_parameter_grid_bounds.py +140 -0
  105. fmdtools-2.5.5/tests/test_parameter_sample_defaults.py +146 -0
  106. fmdtools-2.5.5/tests/test_permutation_axis_probabilities.py +188 -0
  107. fmdtools-2.5.5/tests/test_permuted_nan_probabilities.py +193 -0
  108. fmdtools-2.5.5/tests/test_permuted_slice_probabilities.py +184 -0
  109. fmdtools-2.5.5/tests/test_phase_map_default_isolation.py +91 -0
  110. fmdtools-2.5.5/tests/test_ragged_confidence_histories.py +166 -0
  111. fmdtools-2.5.5/tests/test_rand.py +177 -0
  112. fmdtools-2.5.5/tests/test_random_combination_types.py +169 -0
  113. fmdtools-2.5.5/tests/test_reference_risk_calculations.py +124 -0
  114. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_result.py +107 -11
  115. fmdtools-2.5.5/tests/test_result_constructor_input.py +121 -0
  116. fmdtools-2.5.5/tests/test_sample.py +501 -0
  117. fmdtools-2.5.5/tests/test_scenario.py +211 -0
  118. fmdtools-2.5.5/tests/test_scenario_metric_mappings.py +184 -0
  119. fmdtools-2.5.5/tests/test_shape_distribution_sizes.py +221 -0
  120. fmdtools-2.5.5/tests/test_simple_problem_vector_inputs.py +164 -0
  121. fmdtools-2.5.5/tests/test_simulation_exposure.py +160 -0
  122. fmdtools-2.5.5/tests/test_standard_draw_arguments.py +205 -0
  123. fmdtools-2.5.5/tests/test_string_state_histories.py +96 -0
  124. fmdtools-2.5.5/tests/test_time_reset.py +103 -0
  125. fmdtools-2.5.5/tests/test_triangular_arraylike_parameters.py +181 -0
  126. fmdtools-2.5.5/tests/test_tuple_table_factors.py +143 -0
  127. fmdtools-2.5.5/tests/test_uniform_bound_dtypes.py +174 -0
  128. fmdtools-2.5.5/tests/test_wald_density.py +188 -0
  129. fmdtools-2.5.5/tests/test_weighted_percent_metrics.py +106 -0
  130. fmdtools-2.5.5/tests/test_zero_fault_start_times.py +120 -0
  131. fmdtools-2.5.5/tests/test_zero_time_objectives.py +117 -0
  132. fmdtools-2.5.5/tests/test_zero_timer_increment.py +130 -0
  133. fmdtools-2.5.3/tests/test_sample.py +0 -165
  134. fmdtools-2.5.3/tests/test_scenario.py +0 -111
  135. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/__init__.py +0 -0
  136. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/airport_taxiway/model_asset.py +0 -0
  137. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/airport_taxiway/model_atc.py +0 -0
  138. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/airport_taxiway/model_common.py +0 -0
  139. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/airport_taxiway/model_main.py +0 -0
  140. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/airport_taxiway/test_asset.py +0 -0
  141. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/airport_taxiway/test_model.py +0 -0
  142. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/airspacelib/__init__.py +0 -0
  143. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/airspacelib/base/__init__.py +0 -0
  144. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/airspacelib/base/aircraft.py +0 -0
  145. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/airspacelib/base/aircraftarchitecture.py +0 -0
  146. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/airspacelib/base/arch/__init__.py +0 -0
  147. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/airspacelib/base/arch/aviate.py +0 -0
  148. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/airspacelib/base/arch/controlflight.py +0 -0
  149. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/airspacelib/base/arch/flows.py +0 -0
  150. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/airspacelib/base/arch/holdpayload.py +0 -0
  151. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/airspacelib/base/arch/perceiveenvironment.py +0 -0
  152. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/airspacelib/base/arch/storeee.py +0 -0
  153. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/airspacelib/base/parameter.py +0 -0
  154. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/airspacelib/contingency_management/__init__.py +0 -0
  155. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/airspacelib/contingency_management/model_flightplanner.py +0 -0
  156. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/airspacelib/water_rescue/__init__.py +0 -0
  157. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/airspacelib/water_rescue/model_drone.py +0 -0
  158. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/airspacelib/water_rescue/model_environment.py +0 -0
  159. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/airspacelib/water_rescue/model_main.py +0 -0
  160. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/airspacelib/water_rescue/model_responder.py +0 -0
  161. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/airspacelib/wildfire_response/__init__.py +0 -0
  162. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/airspacelib/wildfire_response/model_aircraft.py +0 -0
  163. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/airspacelib/wildfire_response/model_environment.py +0 -0
  164. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/airspacelib/wildfire_response/model_main.py +0 -0
  165. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/cooling_tank/__init__.py +0 -0
  166. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/cooling_tank/model_main.py +0 -0
  167. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/cooling_tank/model_optimization.py +0 -0
  168. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/cooling_tank/test_tank.py +0 -0
  169. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/electric_power_system/__init__.py +0 -0
  170. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/electric_power_system/model_main.py +0 -0
  171. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/electric_power_system/test_model.py +0 -0
  172. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/human_hazard_mitigation/__init__.py +0 -0
  173. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/human_hazard_mitigation/model_main.py +0 -0
  174. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/multirotor_drone/__init__.py +0 -0
  175. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/multirotor_drone/model_dynamic.py +0 -0
  176. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/multirotor_drone/model_hierarchical.py +0 -0
  177. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/multirotor_drone/model_rural.py +0 -0
  178. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/multirotor_drone/model_static.py +0 -0
  179. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/multirotor_drone/model_urban.py +0 -0
  180. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/multirotor_drone/script_opt_model_rural.py +0 -0
  181. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/multirotor_drone/test_multirotor.py +0 -0
  182. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/navigating_rover/__init__.py +0 -0
  183. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/navigating_rover/model_degradation.py +0 -0
  184. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/navigating_rover/model_human.py +0 -0
  185. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/navigating_rover/model_main.py +0 -0
  186. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/navigating_rover/model_troupe.py +0 -0
  187. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/navigating_rover/script_ea_analysis.py +0 -0
  188. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/navigating_rover/script_mode_space.py +0 -0
  189. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/navigating_rover/script_search_rover.py +0 -0
  190. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/navigating_rover/test_rover.py +0 -0
  191. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/state_communication/__init__.py +0 -0
  192. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/state_communication/model_main.py +0 -0
  193. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/state_communication/test_multiflow.py +0 -0
  194. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/water_pump/__init__.py +0 -0
  195. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/water_pump/model_indiv.py +0 -0
  196. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/water_pump/model_main.py +0 -0
  197. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/water_pump/model_stochastic.py +0 -0
  198. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/water_pump/script_jointfaults.py +0 -0
  199. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/water_pump/script_parallelism.py +0 -0
  200. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/water_pump/test_pump.py +0 -0
  201. {fmdtools-2.5.3 → fmdtools-2.5.5}/examples/water_pump/test_pump_example.py +0 -0
  202. {fmdtools-2.5.3 → fmdtools-2.5.5}/fmdtools.egg-info/dependency_links.txt +0 -0
  203. {fmdtools-2.5.3 → fmdtools-2.5.5}/fmdtools.egg-info/requires.txt +0 -0
  204. {fmdtools-2.5.3 → fmdtools-2.5.5}/fmdtools.egg-info/top_level.txt +0 -0
  205. {fmdtools-2.5.3 → fmdtools-2.5.5}/setup.cfg +0 -0
  206. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/analyze/__init__.py +0 -0
  207. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/analyze/graph/__init__.py +0 -0
  208. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/analyze/graph/label.py +0 -0
  209. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/analyze/graph/model.py +0 -0
  210. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/analyze/graph/style.py +0 -0
  211. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/define/__init__.py +0 -0
  212. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/define/architecture/__init__.py +0 -0
  213. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/define/architecture/base.py +0 -0
  214. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/define/architecture/component.py +0 -0
  215. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/define/architecture/function.py +0 -0
  216. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/define/block/__init__.py +0 -0
  217. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/define/block/action.py +0 -0
  218. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/define/block/component.py +0 -0
  219. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/define/block/function.py +0 -0
  220. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/define/container/__init__.py +0 -0
  221. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/define/environment.py +0 -0
  222. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/define/flow/__init__.py +0 -0
  223. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/define/flow/base.py +0 -0
  224. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/define/flow/commsflow.py +0 -0
  225. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/define/flow/multiflow.py +0 -0
  226. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/define/object/__init__.py +0 -0
  227. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/define/object/base.py +0 -0
  228. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/define/object/geom.py +0 -0
  229. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/define/pathplan.py +0 -0
  230. {fmdtools-2.5.3 → fmdtools-2.5.5}/src/fmdtools/sim/__init__.py +0 -0
  231. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/__init__.py +0 -0
  232. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/common.py +0 -0
  233. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_array_differences.py +0 -0
  234. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_array_random_states.py +0 -0
  235. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_array_result_equality.py +0 -0
  236. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_bootstrap_statistic_arguments.py +0 -0
  237. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_calc_metric_ci_constant_outputs.py +0 -0
  238. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_comparison_groups.py +0 -0
  239. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_confidence_history_clipping.py +0 -0
  240. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_error_history_plots.py +0 -0
  241. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_exact_nominal_expectation.py +0 -0
  242. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_explicit_result_file_formats.py +0 -0
  243. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_exponential_rayleigh_draw_sizes.py +0 -0
  244. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_fault_sample_without_nominal.py +0 -0
  245. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_fault_time_without_traces.py +0 -0
  246. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_gamma_sampling_density.py +0 -0
  247. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_geom.py +0 -0
  248. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_graph.py +0 -0
  249. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_hierarchical.py +0 -0
  250. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_history_phase_identifiers.py +0 -0
  251. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_history_standard_deviation.py +0 -0
  252. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_independent_single_replicate_seeds.py +0 -0
  253. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_individual_result_paths.py +0 -0
  254. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_integer_draw_mass.py +0 -0
  255. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_join_phasemaps.py +0 -0
  256. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_json_result_arrays.py +0 -0
  257. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_named_metric_rounding.py +0 -0
  258. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_nested_nominal_groups.py +0 -0
  259. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_nesting_custom_separators.py +0 -0
  260. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_parameter_sample_seeds.py +0 -0
  261. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_parameter_subsampling_types.py +0 -0
  262. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_pareto_density.py +0 -0
  263. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_pathplan.py +0 -0
  264. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_phase_timestep.py +0 -0
  265. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_pruned_fault_times.py +0 -0
  266. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_result_folder_selection.py +0 -0
  267. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_scenario_defaults.py +0 -0
  268. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_standard_t_density.py +0 -0
  269. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_table_factor_indices.py +0 -0
  270. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_time.py +0 -0
  271. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_uniform_density.py +0 -0
  272. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_unit_random_density.py +0 -0
  273. {fmdtools-2.5.3 → fmdtools-2.5.5}/tests/test_vonmises_density.py +0 -0
@@ -1,4 +1,4 @@
1
- fmdtools version 2.5.3
1
+ fmdtools version 2.5.5
2
2
  ---------------------------
3
3
  Apache License
4
4
  Version 2.0, January 2004
@@ -1,10 +1,10 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fmdtools
3
- Version: 2.5.3
3
+ Version: 2.5.5
4
4
  Summary: System resilience modelling, simulation, and assessment in Python
5
5
  Author: fmdtools Developers
6
6
  Maintainer-email: Daniel Hulse <daniel.e.hulse@nasa.gov>
7
- License: fmdtools version 2.5.3
7
+ License: fmdtools version 2.5.5
8
8
  ---------------------------
9
9
  Apache License
10
10
  Version 2.0, January 2004
@@ -394,7 +394,7 @@ More guidance on development installations is provided in [How to Contribute](ht
394
394
  Note that this version reflects the latest version on the ``main`` git branch along with any local changes. To use a particular version of ``fmdtools`` in the context of a development install you can checkout the tag corresponding to the version you want, e.g.:
395
395
 
396
396
  ```
397
- git checkout v2.5.3
397
+ git checkout v2.5.5
398
398
  ```
399
399
 
400
400
 
@@ -500,9 +500,9 @@ Decent (but **very imperfect**) results can be achieved using LLMs for model dev
500
500
 
501
501
  ```prompt
502
502
  You are an experienced software engineer learning a new Python library for the first time.
503
- Make an fmdtools simulation of a <enter your system here> using the latest syntax from `https://github.com/nasa/fmdtools/tree/v2.5.1` for all modeling (`fmdtools.define`), simulation (`fmdtools.sim`), and analysis (`fmdtools.analyze`) classes.
503
+ Make an fmdtools simulation of a <enter your system here> using the latest syntax from `https://github.com/nasa/fmdtools/tree/v2.5.5` for all modeling (`fmdtools.define`), simulation (`fmdtools.sim`), and analysis (`fmdtools.analyze`) classes.
504
504
  The output should be a bare bones but well-commented .py file with simple behaviors for each class and a small script at the bottom leveraging the built-in capabilities in the `fmdtools.analyze` package instead of directly using external libraries like matplotlib.
505
- As you are going, explain the structure of each class, the usage of each function call and how they each leverage the correct fmdtools v2.5.1 syntax.
505
+ As you are going, explain the structure of each class, the usage of each function call and how they each leverage the correct fmdtools v2.5.5 syntax.
506
506
  ```
507
507
 
508
508
  The important aspects of this prompt are specifying the URL and version--otherwise the LLM is likely to hallucinate usage or recall an earlier version of fmdtools. Do not expect perfect output from this--you may have to spend some time identifying the problems so they can be fixed!
@@ -548,8 +548,8 @@ To cite a particular version of the fmdtools, you may use:
548
548
  author = {{NASA}},
549
549
  title = {fmdtools},
550
550
  url = {https://github.com/nasa/fmdtools},
551
- version = {2.5.3},
552
- date = {2026-9-30},
551
+ version = {2.5.5},
552
+ date = {2026-10-08},
553
553
  }
554
554
  ```
555
555
 
@@ -123,7 +123,7 @@ More guidance on development installations is provided in [How to Contribute](ht
123
123
  Note that this version reflects the latest version on the ``main`` git branch along with any local changes. To use a particular version of ``fmdtools`` in the context of a development install you can checkout the tag corresponding to the version you want, e.g.:
124
124
 
125
125
  ```
126
- git checkout v2.5.3
126
+ git checkout v2.5.5
127
127
  ```
128
128
 
129
129
 
@@ -229,9 +229,9 @@ Decent (but **very imperfect**) results can be achieved using LLMs for model dev
229
229
 
230
230
  ```prompt
231
231
  You are an experienced software engineer learning a new Python library for the first time.
232
- Make an fmdtools simulation of a <enter your system here> using the latest syntax from `https://github.com/nasa/fmdtools/tree/v2.5.1` for all modeling (`fmdtools.define`), simulation (`fmdtools.sim`), and analysis (`fmdtools.analyze`) classes.
232
+ Make an fmdtools simulation of a <enter your system here> using the latest syntax from `https://github.com/nasa/fmdtools/tree/v2.5.5` for all modeling (`fmdtools.define`), simulation (`fmdtools.sim`), and analysis (`fmdtools.analyze`) classes.
233
233
  The output should be a bare bones but well-commented .py file with simple behaviors for each class and a small script at the bottom leveraging the built-in capabilities in the `fmdtools.analyze` package instead of directly using external libraries like matplotlib.
234
- As you are going, explain the structure of each class, the usage of each function call and how they each leverage the correct fmdtools v2.5.1 syntax.
234
+ As you are going, explain the structure of each class, the usage of each function call and how they each leverage the correct fmdtools v2.5.5 syntax.
235
235
  ```
236
236
 
237
237
  The important aspects of this prompt are specifying the URL and version--otherwise the LLM is likely to hallucinate usage or recall an earlier version of fmdtools. Do not expect perfect output from this--you may have to spend some time identifying the problems so they can be fixed!
@@ -277,8 +277,8 @@ To cite a particular version of the fmdtools, you may use:
277
277
  author = {{NASA}},
278
278
  title = {fmdtools},
279
279
  url = {https://github.com/nasa/fmdtools},
280
- version = {2.5.3},
281
- date = {2026-9-30},
280
+ version = {2.5.5},
281
+ date = {2026-10-08},
282
282
  }
283
283
  ```
284
284
 
@@ -41,19 +41,26 @@ class AircraftPosition(State):
41
41
  dy: float = 0.0
42
42
  dims = ('x', 'y')
43
43
 
44
- def get_goal(self):
44
+ def get_dims(self, *dims):
45
+ """Get the dimensions to calculate over. Default is self.dims."""
46
+ if not dims:
47
+ return self.dims
48
+ else:
49
+ return dims
50
+
51
+ def get_goal(self, *dims):
45
52
  """Get the goal attributes (goal_x, goal_y) of the AircraftPosition."""
46
- return self.get(*['goal_'+d for d in self.dims])
53
+ return self.get(*['goal_'+d for d in self.get_dims(*dims)])
47
54
 
48
- def get_loc(self):
55
+ def get_loc(self, *dims):
49
56
  """Get the location (x, y) attributes of the AircraftPosition."""
50
- return self.get(*self.dims)
57
+ return self.get(*self.get_dims(*dims))
51
58
 
52
- def get_vel(self):
59
+ def get_vel(self, *dims):
53
60
  """Get the velocity attributes (dx, dy) of the AircraftPosition."""
54
- return self.get(*['d'+d for d in self.dims])
61
+ return self.get(*['d'+d for d in self.get_dims(*dims)])
55
62
 
56
- def find_direction(self):
63
+ def find_direction(self, *dims):
57
64
  """
58
65
  Find the (unit vector) direction from the x,y to goal_x, goal_y.
59
66
 
@@ -71,22 +78,22 @@ class AircraftPosition(State):
71
78
  >>> ap.find_direction()
72
79
  array([0., 1.])
73
80
  """
74
- dist = self.calc_dist()
81
+ dist = self.calc_dist(*dims)
75
82
  if dist > 0.0:
76
83
  return self.calc_vector_dist()/self.calc_dist()
77
84
  else:
78
85
  return np.zeros(len(self.dims))
79
86
 
80
- def calc_vector_dist(self):
87
+ def calc_vector_dist(self, *dims):
81
88
  """Calculate the vector distance from x,y to goal_x, goal_y."""
82
- return self.get_goal() - self.get_loc()
89
+ return self.get_goal(*dims) - self.get_loc(*dims)
83
90
 
84
- def calc_dist(self):
91
+ def calc_dist(self, *dims):
85
92
  """Calculate the scalar distance from x,y to goal_x, goal_y."""
86
- vector_dist = self.calc_vector_dist()
93
+ vector_dist = self.calc_vector_dist(*dims)
87
94
  return np.sqrt(sum(vector_dist**2))
88
95
 
89
- def at_goal(self):
96
+ def at_goal(self, *dims):
90
97
  """
91
98
  Determine if the aircraft is at its goal location.
92
99
 
@@ -99,17 +106,17 @@ class AircraftPosition(State):
99
106
  >>> ap.at_goal()
100
107
  True
101
108
  """
102
- return all(self.get_goal() == self.get_loc())
109
+ return all(self.get_goal(*dims) == self.get_loc(*dims))
103
110
 
104
- def in_range(self, dist_range=10.0):
111
+ def in_range(self, *dims, dist_range=10.0):
105
112
  """Determine if the aircraft is in the range of its goal location."""
106
- return self.calc_dist() <= dist_range
113
+ return self.calc_dist(*dims) <= dist_range
107
114
 
108
- def calc_dist_to_travel(self, dist_range=10.0):
115
+ def calc_dist_to_travel(self, *dims, dist_range=10.0):
109
116
  """Determine the distance to the goal location (under max dist dist_range)."""
110
- return np.min([dist_range, self.calc_dist()])
117
+ return np.min([dist_range, self.calc_dist(*dims)])
111
118
 
112
- def update_dist_to_travel(self, maxvel=10.0):
119
+ def update_dist_to_travel(self, *dims, maxvel=10.0):
113
120
  """
114
121
  Update dx, dy to reflect goal location (travelling at max velocity).
115
122
 
@@ -128,14 +135,14 @@ class AircraftPosition(State):
128
135
  >>> ap
129
136
  AircraftPosition(x=0.0, goal_x=10.0, dx=10.0, y=0.0, goal_y=0.0, dy=0.0)
130
137
  """
131
- if self.in_range(dist_range=maxvel):
132
- vel = self.calc_dist()
138
+ if self.in_range(*dims, dist_range=maxvel):
139
+ vel = self.calc_dist(*dims)
133
140
  else:
134
141
  vel = maxvel
135
- vels = vel * self.find_direction()
136
- self.put(**{'d'+dim: vels[i] for i, dim in enumerate(self.dims)})
142
+ vels = vel * self.find_direction(*dims)
143
+ self.put(**{'d'+dim: vels[i] for i, dim in enumerate(self.get_dims(*dims))})
137
144
 
138
- def update_position(self, maxvel=10.0):
145
+ def update_position(self, *dims, maxvel=10.0):
139
146
  """
140
147
  Update x, y to reflect progress towards the goal location at maxvel.
141
148
 
@@ -157,12 +164,12 @@ class AircraftPosition(State):
157
164
  >>> ap
158
165
  AircraftPosition(x=10.0, goal_x=10.0, dx=0.0, y=10.0, goal_y=10.0, dy=0.0)
159
166
  """
160
- self.update_dist_to_travel(maxvel=maxvel)
161
- self.increment_position()
167
+ self.update_dist_to_travel(*dims, maxvel=maxvel)
168
+ self.increment_position(*dims)
162
169
 
163
- def increment_position(self):
170
+ def increment_position(self, *dims):
164
171
  """Increment position (x,y) by (dx, dy)."""
165
- self.inc(**{dim: getattr(self, 'd'+dim) for dim in self.dims})
172
+ self.inc(**{dim: getattr(self, 'd'+dim) for dim in self.get_dims(*dims)})
166
173
 
167
174
 
168
175
  class AircraftPosition3(AircraftPosition):
@@ -148,9 +148,9 @@ class ContingencyControlFlight(ControlFlight):
148
148
  """Set new landing location in depletion scenario."""
149
149
  ts = self.trajectories.s.copy()
150
150
  ts.assign(self.environment.c.start, "goal_x", "goal_y")
151
- dist_to_start = ts.calc_dist_to_travel(1000)
151
+ dist_to_start = ts.calc_dist_to_travel(dist_range=1000)
152
152
  ts.assign(self.environment.c.end, "goal_x", "goal_y")
153
- dist_to_end = ts.calc_dist_to_travel(1000)
153
+ dist_to_end = ts.calc_dist_to_travel(dist_range=1000)
154
154
  if dist_to_end < self.electricity.s.charge:
155
155
  self.s.endpt = self.environment.c.end
156
156
  elif dist_to_start < self.electricity.s.charge:
@@ -165,7 +165,7 @@ class Threat(GeomPoint):
165
165
 
166
166
  def update_position(self):
167
167
  """Update position given known speed."""
168
- self.s.update_position(self.s.buffer_speed)
168
+ self.s.update_position(maxvel=self.s.buffer_speed)
169
169
 
170
170
  def get_shapely_args(self):
171
171
  return (self.s.x, self.s.y)
@@ -48,7 +48,7 @@ class StochasticPumpTests(unittest.TestCase, CommonTests):
48
48
  49.32124529702974,
49
49
  0.31327201999190035,
50
50
  21.386958080811567,
51
- 3.3311929677576186,
51
+ 3.331196298953918,
52
52
  9.066120598345039,
53
53
  131.79987407014573,
54
54
  5.81402243889764,
@@ -277,7 +277,7 @@ class StochasticPumpTests(unittest.TestCase, CommonTests):
277
277
 
278
278
  if __name__ == '__main__':
279
279
  # suite = unittest.TestSuite()
280
- # suite.addTest(StochasticPumpTests("test_model_copy_same"))
280
+ # suite.addTest(StochasticPumpTests("test_stochastic_pdf"))
281
281
  # suite.addTest(StochasticPumpTests("test_save_load_nominalapproach_indiv"))
282
282
  # runner = unittest.TextTestRunner()
283
283
  # runner.run(suite)
@@ -1,10 +1,10 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fmdtools
3
- Version: 2.5.3
3
+ Version: 2.5.5
4
4
  Summary: System resilience modelling, simulation, and assessment in Python
5
5
  Author: fmdtools Developers
6
6
  Maintainer-email: Daniel Hulse <daniel.e.hulse@nasa.gov>
7
- License: fmdtools version 2.5.3
7
+ License: fmdtools version 2.5.5
8
8
  ---------------------------
9
9
  Apache License
10
10
  Version 2.0, January 2004
@@ -394,7 +394,7 @@ More guidance on development installations is provided in [How to Contribute](ht
394
394
  Note that this version reflects the latest version on the ``main`` git branch along with any local changes. To use a particular version of ``fmdtools`` in the context of a development install you can checkout the tag corresponding to the version you want, e.g.:
395
395
 
396
396
  ```
397
- git checkout v2.5.3
397
+ git checkout v2.5.5
398
398
  ```
399
399
 
400
400
 
@@ -500,9 +500,9 @@ Decent (but **very imperfect**) results can be achieved using LLMs for model dev
500
500
 
501
501
  ```prompt
502
502
  You are an experienced software engineer learning a new Python library for the first time.
503
- Make an fmdtools simulation of a <enter your system here> using the latest syntax from `https://github.com/nasa/fmdtools/tree/v2.5.1` for all modeling (`fmdtools.define`), simulation (`fmdtools.sim`), and analysis (`fmdtools.analyze`) classes.
503
+ Make an fmdtools simulation of a <enter your system here> using the latest syntax from `https://github.com/nasa/fmdtools/tree/v2.5.5` for all modeling (`fmdtools.define`), simulation (`fmdtools.sim`), and analysis (`fmdtools.analyze`) classes.
504
504
  The output should be a bare bones but well-commented .py file with simple behaviors for each class and a small script at the bottom leveraging the built-in capabilities in the `fmdtools.analyze` package instead of directly using external libraries like matplotlib.
505
- As you are going, explain the structure of each class, the usage of each function call and how they each leverage the correct fmdtools v2.5.1 syntax.
505
+ As you are going, explain the structure of each class, the usage of each function call and how they each leverage the correct fmdtools v2.5.5 syntax.
506
506
  ```
507
507
 
508
508
  The important aspects of this prompt are specifying the URL and version--otherwise the LLM is likely to hallucinate usage or recall an earlier version of fmdtools. Do not expect perfect output from this--you may have to spend some time identifying the problems so they can be fixed!
@@ -548,8 +548,8 @@ To cite a particular version of the fmdtools, you may use:
548
548
  author = {{NASA}},
549
549
  title = {fmdtools},
550
550
  url = {https://github.com/nasa/fmdtools},
551
- version = {2.5.3},
552
- date = {2026-9-30},
551
+ version = {2.5.5},
552
+ date = {2026-10-08},
553
553
  }
554
554
  ```
555
555
 
@@ -127,49 +127,143 @@ src/fmdtools/sim/scenario.py
127
127
  src/fmdtools/sim/search.py
128
128
  tests/__init__.py
129
129
  tests/common.py
130
+ tests/test_appended_history_snapshots.py
131
+ tests/test_approach_joint_domains.py
132
+ tests/test_approach_model_timestep.py
133
+ tests/test_approach_phase_map_ownership.py
134
+ tests/test_architecture_vector_inputs.py
130
135
  tests/test_array_differences.py
131
136
  tests/test_array_random_states.py
132
137
  tests/test_array_result_equality.py
138
+ tests/test_array_state_limits.py
139
+ tests/test_array_state_rounding.py
140
+ tests/test_binomial_trial_counts.py
133
141
  tests/test_bootstrap_statistic_arguments.py
142
+ tests/test_bounded_array_increments.py
134
143
  tests/test_calc_metric_ci_constant_outputs.py
144
+ tests/test_callable_parameter_domains.py
145
+ tests/test_choice_draw_mass.py
146
+ tests/test_choice_probability_precision.py
147
+ tests/test_common.py
148
+ tests/test_comparison_ci_metrics.py
135
149
  tests/test_comparison_groups.py
136
150
  tests/test_confidence_history_clipping.py
151
+ tests/test_coordinate_cell_boundaries.py
152
+ tests/test_default_fault_sample_timestep.py
153
+ tests/test_degradation_path_boundaries.py
154
+ tests/test_dirichlet_batches.py
155
+ tests/test_disconnected_graph_robustness.py
156
+ tests/test_discrete_grid_values.py
157
+ tests/test_discrete_sample_sizes.py
137
158
  tests/test_error_history_plots.py
159
+ tests/test_even_sampling_mass.py
138
160
  tests/test_exact_nominal_expectation.py
161
+ tests/test_expectation_without_nominal.py
162
+ tests/test_explicit_history_times.py
139
163
  tests/test_explicit_result_file_formats.py
140
164
  tests/test_exponential_rayleigh_draw_sizes.py
165
+ tests/test_factor_sort_priority.py
166
+ tests/test_fault_history_paths.py
167
+ tests/test_fault_object_overrides.py
141
168
  tests/test_fault_sample_without_nominal.py
169
+ tests/test_fault_space_ownership.py
170
+ tests/test_fault_space_sample_limits.py
171
+ tests/test_fault_summary_paths.py
142
172
  tests/test_fault_time_without_traces.py
173
+ tests/test_fault_weight_arrays.py
174
+ tests/test_faulty_scenario_selection.py
175
+ tests/test_fmea_input_ownership.py
143
176
  tests/test_gamma_sampling_density.py
177
+ tests/test_generated_history_phase_timestep.py
144
178
  tests/test_geom.py
145
179
  tests/test_graph.py
180
+ tests/test_graph_edge_comparison.py
181
+ tests/test_graph_zero_seed.py
146
182
  tests/test_hierarchical.py
183
+ tests/test_history_alignment_ownership.py
147
184
  tests/test_history_phase_identifiers.py
185
+ tests/test_history_sample_indices.py
148
186
  tests/test_history_standard_deviation.py
187
+ tests/test_hypergeometric_count_conversion.py
188
+ tests/test_immutable_fault_injection.py
189
+ tests/test_implicit_sampling_start.py
149
190
  tests/test_independent_single_replicate_seeds.py
150
191
  tests/test_individual_result_paths.py
192
+ tests/test_integer_bound_conversion.py
151
193
  tests/test_integer_draw_mass.py
194
+ tests/test_integer_history_differences.py
195
+ tests/test_integer_rate_metrics.py
196
+ tests/test_join_phase_timestep.py
152
197
  tests/test_join_phasemaps.py
198
+ tests/test_joint_fault_metadata_order.py
199
+ tests/test_joint_fault_phase_map.py
153
200
  tests/test_joint_fault_weights.py
201
+ tests/test_joint_scenario_quadrature.py
154
202
  tests/test_json_result_arrays.py
203
+ tests/test_location_scale_draw_sizes.py
204
+ tests/test_lognormal_defaults.py
205
+ tests/test_metric_weight_alignment.py
206
+ tests/test_mixed_shape_degradation.py
207
+ tests/test_multidimensional_state_comparison.py
208
+ tests/test_multinomial_sampling_arguments.py
209
+ tests/test_multivariate_hypergeometric_options.py
210
+ tests/test_multivariate_normal_arguments.py
211
+ tests/test_named_default_restoration.py
155
212
  tests/test_named_metric_rounding.py
213
+ tests/test_named_parameter_maps.py
214
+ tests/test_nearest_point_exclusion.py
215
+ tests/test_nested_comparison_inputs.py
216
+ tests/test_nested_comparison_parentage.py
217
+ tests/test_nested_history_summary.py
156
218
  tests/test_nested_nominal_groups.py
219
+ tests/test_nested_parameter_constraints.py
220
+ tests/test_nested_sample_metrics.py
221
+ tests/test_nested_scenario_parameters.py
157
222
  tests/test_nesting_custom_separators.py
223
+ tests/test_not_equal_constraints.py
224
+ tests/test_object_history_copy.py
225
+ tests/test_offset_time_grids.py
158
226
  tests/test_packages.py
227
+ tests/test_parameter_grid_bounds.py
228
+ tests/test_parameter_sample_defaults.py
159
229
  tests/test_parameter_sample_seeds.py
160
230
  tests/test_parameter_subsampling_types.py
161
231
  tests/test_pareto_density.py
162
232
  tests/test_pathplan.py
233
+ tests/test_permutation_axis_probabilities.py
234
+ tests/test_permuted_nan_probabilities.py
235
+ tests/test_permuted_slice_probabilities.py
236
+ tests/test_phase_map_default_isolation.py
163
237
  tests/test_phase_timestep.py
164
238
  tests/test_pruned_fault_times.py
239
+ tests/test_ragged_confidence_histories.py
240
+ tests/test_rand.py
241
+ tests/test_random_combination_types.py
242
+ tests/test_reference_risk_calculations.py
165
243
  tests/test_result.py
244
+ tests/test_result_constructor_input.py
166
245
  tests/test_result_folder_selection.py
167
246
  tests/test_sample.py
168
247
  tests/test_scenario.py
169
248
  tests/test_scenario_defaults.py
249
+ tests/test_scenario_metric_mappings.py
250
+ tests/test_shape_distribution_sizes.py
251
+ tests/test_simple_problem_vector_inputs.py
252
+ tests/test_simulation_exposure.py
253
+ tests/test_standard_draw_arguments.py
170
254
  tests/test_standard_t_density.py
255
+ tests/test_string_state_histories.py
171
256
  tests/test_table_factor_indices.py
172
257
  tests/test_time.py
258
+ tests/test_time_reset.py
259
+ tests/test_triangular_arraylike_parameters.py
260
+ tests/test_tuple_table_factors.py
261
+ tests/test_uniform_bound_dtypes.py
173
262
  tests/test_uniform_density.py
174
263
  tests/test_unit_random_density.py
175
- tests/test_vonmises_density.py
264
+ tests/test_vonmises_density.py
265
+ tests/test_wald_density.py
266
+ tests/test_weighted_percent_metrics.py
267
+ tests/test_zero_fault_start_times.py
268
+ tests/test_zero_time_objectives.py
269
+ tests/test_zero_timer_increment.py
@@ -18,7 +18,7 @@ classifiers = [
18
18
  description = "System resilience modelling, simulation, and assessment in Python"
19
19
  license = {file="LICENSE"}
20
20
  name = "fmdtools"
21
- version="2.5.3"
21
+ version="2.5.5"
22
22
  readme = "README.md"
23
23
  requires-python = ">=3.12"
24
24
 
@@ -109,3 +109,81 @@ omit = [
109
109
  "*/Temp/*"
110
110
  ]
111
111
 
112
+ [tool.bumpversion]
113
+ current_version = "2.5.5"
114
+ parse = """(?x)
115
+ (?P<major>0|[1-9]\\d*)\\.
116
+ (?P<minor>0|[1-9]\\d*)\\.
117
+ (?P<patch>0|[1-9]\\d*)
118
+ (?:
119
+ . # dot for pre-release section
120
+ (?P<stage>[a-zA-Z-]+) # pre-release label
121
+ (?P<num>0|[1-9]\\d*) # pre-release version number
122
+ )? # pre-release section is optional
123
+ """
124
+ serialize = [
125
+ "{major}.{minor}.{patch}.{stage}{num}",
126
+ "{major}.{minor}.{patch}",
127
+ ]
128
+ search = "{current_version}"
129
+ replace = "{new_version}"
130
+ regex = false
131
+ ignore_missing_version = false
132
+ tag = true
133
+ sign_tags = true
134
+ tag_name = "v{new_version}"
135
+ tag_message = "Bump version: {current_version} → {new_version}"
136
+ allow_dirty = false
137
+ commit = true
138
+ message = "Bump version: {current_version} → {new_version}"
139
+ commit_args = ""
140
+
141
+ [tool.bumpversion.parts.stage]
142
+ values = ["dev", "rc", "final"]
143
+ optional_value = "final"
144
+
145
+ [[tool.bumpversion.files]]
146
+ filename = "src/fmdtools/__init__.py"
147
+ search = "__version__ = '{current_version}'"
148
+ replace = "__version__ = '{new_version}'"
149
+
150
+ [[tool.bumpversion.files]]
151
+ filename = "conf.py"
152
+ search = "release = '{current_version}'"
153
+ replace = "release = '{new_version}'"
154
+
155
+ [[tool.bumpversion.files]]
156
+ filename = "LICENSE"
157
+ search = "fmdtools version {current_version}"
158
+ replace = "fmdtools version {new_version}"
159
+
160
+ [[tool.bumpversion.files]]
161
+ filename = "README.md"
162
+ search = "git checkout v{current_version}"
163
+ replace = "git checkout v{new_version}"
164
+
165
+ [[tool.bumpversion.files]]
166
+ filename = "README.md"
167
+ search = "https://github.com/nasa/fmdtools/tree/v{current_version}"
168
+ replace = "https://github.com/nasa/fmdtools/tree/v{new_version}"
169
+
170
+ [[tool.bumpversion.files]]
171
+ filename = "README.md"
172
+ search = "fmdtools v{current_version}"
173
+ replace = "fmdtools v{new_version}"
174
+
175
+ [[tool.bumpversion.files]]
176
+ filename = "README.md"
177
+ search = "version = {{{current_version}}}"
178
+ replace = "version = {{{new_version}}}"
179
+
180
+ [[tool.bumpversion.files]]
181
+ filename = "README.md"
182
+ search = "date = {{\\d{{4}}-\\d{{2}}-\\d{{2}}}}"
183
+ replace = "date = {{{now:%Y-%m-%d}}}"
184
+ regex = true
185
+
186
+ [[tool.bumpversion.files]]
187
+ filename = "docs-source/Intro_to_fmdtools.md"
188
+ search = "fmdtools v{current_version}"
189
+ replace = "fmdtools v{new_version}"
@@ -22,6 +22,6 @@ import fmdtools.sim as sim
22
22
  import fmdtools.analyze as analyze
23
23
 
24
24
  __all__ = ['analyze', 'sim', 'define']
25
- __version__ = '2.5.3'
25
+ __version__ = '2.5.5'
26
26
  __copyright__ = "Copyright 2024 United States Government"
27
27
  __license__ = "Apache-2.0"