repyability 0.11__tar.gz → 0.12__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.
- {repyability-0.11 → repyability-0.12}/LICENSE +1 -1
- {repyability-0.11/repyability.egg-info → repyability-0.12}/PKG-INFO +50 -46
- {repyability-0.11 → repyability-0.12}/README.md +46 -23
- {repyability-0.11 → repyability-0.12}/pyproject.toml +31 -10
- {repyability-0.11 → repyability-0.12}/repyability/__init__.py +12 -0
- {repyability-0.11 → repyability-0.12}/repyability/_version.py +1 -1
- repyability-0.12/repyability/demonstration.py +870 -0
- {repyability-0.11 → repyability-0.12}/repyability/fault_tree.py +509 -109
- {repyability-0.11 → repyability-0.12}/repyability/network.py +481 -221
- {repyability-0.11 → repyability-0.12}/repyability/non_repairable.py +22 -30
- repyability-0.12/repyability/rbd/_bdd_kernel.py +529 -0
- {repyability-0.11 → repyability-0.12}/repyability/rbd/_block_replacement.py +5 -0
- repyability-0.12/repyability/rbd/_ccf_chain.py +843 -0
- {repyability-0.11 → repyability-0.12}/repyability/rbd/_chain_transient.py +143 -17
- {repyability-0.11 → repyability-0.12}/repyability/rbd/_compiled.py +12 -1
- {repyability-0.11 → repyability-0.12}/repyability/rbd/_condition_replacement.py +285 -7
- repyability-0.12/repyability/rbd/_conditional.py +601 -0
- {repyability-0.11 → repyability-0.12}/repyability/rbd/_crew_chain.py +49 -11
- {repyability-0.11 → repyability-0.12}/repyability/rbd/_dependent_lifetimes.py +1 -1
- repyability-0.12/repyability/rbd/_differential.py +110 -0
- {repyability-0.11 → repyability-0.12}/repyability/rbd/_exact.py +58 -0
- {repyability-0.11 → repyability-0.12}/repyability/rbd/_hidden_life.py +6 -4
- repyability-0.12/repyability/rbd/_hidden_tests.py +1653 -0
- repyability-0.12/repyability/rbd/_importance_time.py +404 -0
- {repyability-0.11 → repyability-0.12}/repyability/rbd/_mean_lifetime.py +7 -12
- {repyability-0.11 → repyability-0.12}/repyability/rbd/_model_utils.py +92 -8
- {repyability-0.11 → repyability-0.12}/repyability/rbd/_montecarlo.py +49 -1
- {repyability-0.11 → repyability-0.12}/repyability/rbd/_point_availability.py +189 -18
- repyability-0.12/repyability/rbd/_quadrature.py +280 -0
- repyability-0.12/repyability/rbd/_rates.py +216 -0
- repyability-0.12/repyability/rbd/_repairable_uncertainty.py +524 -0
- {repyability-0.11 → repyability-0.12}/repyability/rbd/_sampling.py +4 -27
- repyability-0.12/repyability/rbd/_sensitivity.py +611 -0
- repyability-0.12/repyability/rbd/_spares.py +1658 -0
- {repyability-0.11 → repyability-0.12}/repyability/rbd/_streams.py +4 -0
- repyability-0.12/repyability/rbd/_time_order.py +287 -0
- {repyability-0.11 → repyability-0.12}/repyability/rbd/_timeline_runs.py +86 -13
- repyability-0.12/repyability/rbd/bdd.py +587 -0
- {repyability-0.11 → repyability-0.12}/repyability/rbd/ccf.py +211 -28
- {repyability-0.11 → repyability-0.12}/repyability/rbd/degrading_node.py +1 -6
- {repyability-0.11 → repyability-0.12}/repyability/rbd/load_sharing_node.py +76 -83
- {repyability-0.11 → repyability-0.12}/repyability/rbd/modular.py +437 -19
- {repyability-0.11 → repyability-0.12}/repyability/rbd/non_repairable_rbd.py +1512 -374
- {repyability-0.11 → repyability-0.12}/repyability/rbd/numerical_convolution.py +2 -3
- {repyability-0.11 → repyability-0.12}/repyability/rbd/phased_mission.py +5 -0
- {repyability-0.11 → repyability-0.12}/repyability/rbd/rbd.py +273 -49
- {repyability-0.11 → repyability-0.12}/repyability/rbd/rbd_graph.py +6 -3
- {repyability-0.11 → repyability-0.12}/repyability/rbd/regression_node.py +7 -10
- {repyability-0.11 → repyability-0.12}/repyability/rbd/repairable_rbd.py +6810 -1034
- {repyability-0.11 → repyability-0.12}/repyability/rbd/repeated_node.py +9 -18
- {repyability-0.11 → repyability-0.12}/repyability/rbd/repeated_standby_node.py +5 -24
- {repyability-0.11 → repyability-0.12}/repyability/rbd/results.py +493 -44
- {repyability-0.11 → repyability-0.12}/repyability/rbd/routes.py +15 -14
- {repyability-0.11 → repyability-0.12}/repyability/rbd/serialisation.py +18 -16
- {repyability-0.11 → repyability-0.12}/repyability/rbd/shannon.py +7 -77
- {repyability-0.11 → repyability-0.12}/repyability/rbd/shards.py +34 -0
- {repyability-0.11 → repyability-0.12}/repyability/rbd/standby_node.py +97 -134
- {repyability-0.11 → repyability-0.12}/repyability/rbd/uncertainty.py +226 -4
- {repyability-0.11 → repyability-0.12}/repyability/repairable.py +11 -45
- repyability-0.12/repyability/tests/__init__.py +0 -0
- repyability-0.12/repyability/tests/repository.py +33 -0
- repyability-0.12/repyability/tests/seeded_event_loop.json +763 -0
- repyability-0.12/repyability/tests/test_allocation_trains.py +330 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_analysis_routes.py +248 -146
- repyability-0.12/repyability/tests/test_api_consistency.py +452 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_availability_allocation.py +4 -1
- repyability-0.12/repyability/tests/test_bdd_compiled.py +247 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_block_replacement.py +14 -16
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_capacity.py +2 -1
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_capacity_simulation.py +26 -0
- repyability-0.12/repyability/tests/test_ccf_allocations.py +348 -0
- repyability-0.12/repyability/tests/test_ccf_over_time.py +476 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_chains_over_time.py +96 -19
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_condition_long_run.py +5 -4
- repyability-0.12/repyability/tests/test_condition_over_time.py +175 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_condition_replacement.py +22 -16
- repyability-0.12/repyability/tests/test_conditional.py +824 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_control_variate.py +203 -2
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_crew_chain.py +3 -1
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_demonstration.py +12 -4
- repyability-0.12/repyability/tests/test_demonstration_plans.py +176 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_dependent_lifetimes.py +12 -19
- repyability-0.12/repyability/tests/test_differential_importance.py +456 -0
- repyability-0.12/repyability/tests/test_discounting.py +95 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_docs_examples.py +10 -4
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_exact_mttf.py +17 -24
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_expected_window.py +6 -8
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_fault_tree.py +376 -0
- repyability-0.12/repyability/tests/test_fitted_models_in_parallel.py +79 -0
- repyability-0.12/repyability/tests/test_greeks.py +173 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_hidden_failures_any_life.py +44 -35
- repyability-0.12/repyability/tests/test_hidden_failures_timed.py +426 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_imperfect_repair.py +3 -3
- repyability-0.12/repyability/tests/test_importance_over_time.py +363 -0
- repyability-0.12/repyability/tests/test_input_checks.py +149 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_inspection.py +34 -22
- repyability-0.12/repyability/tests/test_inspection_offsets.py +182 -0
- repyability-0.12/repyability/tests/test_intervals_with_crews.py +196 -0
- repyability-0.12/repyability/tests/test_joint_importance.py +284 -0
- repyability-0.12/repyability/tests/test_junctions.py +444 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_limited_failure_population.py +46 -39
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_load_sharing.py +22 -30
- repyability-0.12/repyability/tests/test_meshed_structures.py +255 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_monte_carlo.py +32 -9
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_network.py +109 -4
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_non_repairable.py +8 -20
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_opportunistic_maintenance.py +19 -7
- repyability-0.12/repyability/tests/test_packaging.py +41 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_performance_equivalence.py +31 -91
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_point_availability.py +8 -3
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_preventive_maintenance.py +9 -3
- repyability-0.12/repyability/tests/test_quadrature.py +273 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_rare_event.py +5 -4
- repyability-0.12/repyability/tests/test_rates.py +561 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_rbd_analytic_solvability.py +2 -6
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_rbd_imperfect_repair.py +202 -3
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_rbd_misc.py +2 -2
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_rbd_non_repairable.py +0 -16
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_redundancy_strategies.py +1 -1
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_regression_node.py +1 -21
- repyability-0.12/repyability/tests/test_removed_in_0_12.py +302 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_repair_crews.py +4 -2
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_repairable_ccf.py +7 -11
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_repairable_cost.py +6 -2
- repyability-0.12/repyability/tests/test_repairable_sensitivity.py +399 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_repairable_standby.py +12 -4
- repyability-0.12/repyability/tests/test_repairable_uncertainty.py +231 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_serialisation.py +2 -11
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_shards.py +9 -3
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_simulation_chunks.py +52 -8
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_simulation_engines.py +50 -3
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_small_probabilities.py +23 -1
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_spares.py +141 -10
- repyability-0.12/repyability/tests/test_spares_block_and_tested.py +660 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_staggered_and_partial_tests.py +9 -3
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_standby.py +9 -14
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_start_from_state.py +9 -3
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_structure_messages.py +8 -2
- repyability-0.12/repyability/tests/test_time_order.py +226 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_timelines.py +77 -2
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_total_cost.py +4 -0
- repyability-0.12/repyability/tests/test_uncertainty_importance.py +185 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_warm_standby.py +7 -10
- {repyability-0.11 → repyability-0.12}/repyability/timelines.py +63 -5
- repyability-0.12/repyability/utils/checks.py +60 -0
- repyability-0.12/repyability/utils/deprecation.py +74 -0
- repyability-0.12/repyability/utils/vectors.py +16 -0
- {repyability-0.11 → repyability-0.12/repyability.egg-info}/PKG-INFO +50 -46
- {repyability-0.11 → repyability-0.12}/repyability.egg-info/SOURCES.txt +43 -3
- {repyability-0.11 → repyability-0.12}/repyability.egg-info/requires.txt +2 -2
- repyability-0.11/repyability/demonstration.py +0 -495
- repyability-0.11/repyability/rbd/_ccf_chain.py +0 -274
- repyability-0.11/repyability/rbd/_spares.py +0 -549
- repyability-0.11/repyability/rbd/bdd.py +0 -352
- repyability-0.11/repyability/tests/test_deprecated_models.py +0 -165
- repyability-0.11/repyability/tests/test_deprecated_names.py +0 -109
- repyability-0.11/repyability/tests/test_fussell_vesely_deprecation.py +0 -44
- repyability-0.11/repyability/tests/test_spares_block_and_tested.py +0 -215
- repyability-0.11/repyability/utils/deprecation.py +0 -149
- {repyability-0.11 → repyability-0.12}/repyability/maintenance.py +0 -0
- /repyability-0.11/repyability/rbd/__init__.py → /repyability-0.12/repyability/py.typed +0 -0
- {repyability-0.11/repyability/tests → repyability-0.12/repyability/rbd}/__init__.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/rbd/_kernel.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/rbd/_ordered_bdd.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/rbd/_standby_chain.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/rbd/capacity.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/rbd/chunks.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/rbd/engines.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/rbd/helper_classes.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/rbd/min_path_sets.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/rbd/node_state.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/rbd/rare_event.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/rbd/redundancy_allocation.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/conftest.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/keyed_draws.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_api_docstrings.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_api_standardisation.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_bdd_core.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_bx_life.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_capacity_over_time.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_ccf.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_ccf_analyses.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_ccf_lifetime.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_condition_based.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_curve_points.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_engine_plugins.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_fussell_vesely_exact.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_helper_classes.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_maintenance_intervals.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_model_utils.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_papercuts.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_parameter_sensitivity.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_phased_mission.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_rbd_allocation.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_rbd_berge_cut_sets.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_rbd_exact_probability.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_rbd_exponential_standby.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_rbd_get_min_cut_sets.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_rbd_get_min_path_sets.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_rbd_hazard.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_rbd_importances.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_rbd_koon.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_rbd_modular.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_rbd_numerical_convolution.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_rbd_repeated_standby.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_rbd_set_working_failed.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_rbd_sf.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_rbd_structure.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_rbd_switching_probability.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_redundancy_allocation.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_redundancy_front.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_redundancy_options.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_reliability_redundancy.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_repairable.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_repairable_accounting.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_repairable_metrics.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_repairable_rbd.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_repeated_node.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_repeated_nodes.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_results.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_rng_reproducibility.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_simulation_validation.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_startup.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_structural_importance.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/tests/test_uncertainty.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/utils/json_io.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability/utils/wrappers.py +0 -0
- {repyability-0.11 → repyability-0.12}/repyability.egg-info/dependency_links.txt +0 -0
- {repyability-0.11 → repyability-0.12}/repyability.egg-info/top_level.txt +0 -0
- {repyability-0.11 → repyability-0.12}/setup.cfg +0 -0
|
@@ -1,27 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: repyability
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.12
|
|
4
4
|
Summary: Reliability engineering tools for Python
|
|
5
5
|
Author-email: derrynknife <derrynknife@gmail.com>
|
|
6
|
-
License:
|
|
7
|
-
|
|
8
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
9
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
10
|
-
in the Software without restriction, including without limitation the rights
|
|
11
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
12
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
13
|
-
furnished to do so, subject to the following conditions:
|
|
14
|
-
|
|
15
|
-
The above copyright notice and this permission notice shall be included in all
|
|
16
|
-
copies or substantial portions of the Software.
|
|
17
|
-
|
|
18
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
19
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
20
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
21
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
22
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
23
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
24
|
-
SOFTWARE.
|
|
6
|
+
License-Expression: MIT
|
|
25
7
|
Project-URL: Homepage, https://github.com/derrynknife/RePyability
|
|
26
8
|
Project-URL: Documentation, https://derrynknife.github.io/RePyability/
|
|
27
9
|
Project-URL: Repository, https://github.com/derrynknife/RePyability
|
|
@@ -30,7 +12,6 @@ Keywords: reliability,reliability-engineering,reliability-block-diagram,rbd,surv
|
|
|
30
12
|
Classifier: Development Status :: 4 - Beta
|
|
31
13
|
Classifier: Intended Audience :: Science/Research
|
|
32
14
|
Classifier: Intended Audience :: Education
|
|
33
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
34
15
|
Classifier: Operating System :: OS Independent
|
|
35
16
|
Classifier: Programming Language :: Python :: 3
|
|
36
17
|
Classifier: Programming Language :: Python :: 3.11
|
|
@@ -43,9 +24,9 @@ Requires-Python: >=3.11
|
|
|
43
24
|
Description-Content-Type: text/markdown
|
|
44
25
|
License-File: LICENSE
|
|
45
26
|
Requires-Dist: numpy<3,>=2.0
|
|
46
|
-
Requires-Dist: scipy>=1.
|
|
27
|
+
Requires-Dist: scipy>=1.13
|
|
47
28
|
Requires-Dist: networkx>=3.0
|
|
48
|
-
Requires-Dist: surpyval>=0.
|
|
29
|
+
Requires-Dist: surpyval>=0.22
|
|
49
30
|
Requires-Dist: tqdm>=4.64
|
|
50
31
|
Provides-Extra: fast
|
|
51
32
|
Requires-Dist: numba>=0.60; extra == "fast"
|
|
@@ -95,7 +76,15 @@ taking already-fitted lifetime models (from
|
|
|
95
76
|
demonstrate a reliability or an MTBF), what a test demonstrated, and the
|
|
96
77
|
chance a design passes.
|
|
97
78
|
- **Importance**: Birnbaum, improvement potential, RAW, RRW, criticality,
|
|
98
|
-
Fussell–Vesely, structural importance and parameter sensitivity
|
|
79
|
+
Fussell–Vesely, structural importance and parameter sensitivity, on
|
|
80
|
+
repairable systems in the long run or over time.
|
|
81
|
+
- **Sensitivity, the Greeks**: how far the system moves with each
|
|
82
|
+
component (delta) and with each lever, a life, a repair, the maintenance
|
|
83
|
+
or a crew; the shares of a change, which add up (differential
|
|
84
|
+
importance); whether two improvements are complements or substitutes
|
|
85
|
+
(gamma); which component is moving the availability now, and which
|
|
86
|
+
caused the failures (theta, Barlow–Proschan); and whose parameter
|
|
87
|
+
uncertainty widens the answer (vega).
|
|
99
88
|
- **Live state**: reliability, remaining life and importance given each
|
|
100
89
|
component's current age, and covariate-dependent components.
|
|
101
90
|
- **Redundancy and dependence**: cold, warm and hot standby; repeated nodes;
|
|
@@ -105,8 +94,10 @@ taking already-fitted lifetime models (from
|
|
|
105
94
|
histories with criticality measures; shared repair crews, exact for
|
|
106
95
|
exponential components in the long run and numerical over time, with
|
|
107
96
|
their importance; repairable standby groups (a duty unit and its spares,
|
|
108
|
-
repaired one at a time);
|
|
109
|
-
|
|
97
|
+
repaired one at a time); imperfect repair (Kijima's virtual age), with
|
|
98
|
+
replacement at the N-th failure; and uncertainty intervals on the
|
|
99
|
+
availability and the cost rate from uncertain (fitted) models of the
|
|
100
|
+
lives, repairs and maintenance.
|
|
110
101
|
- **Capacity**: how much a system delivers, from its components'
|
|
111
102
|
capacities (with several levels, or degrading through stages): the exact
|
|
112
103
|
distribution of its capacity at a time or in the long run, the
|
|
@@ -178,8 +169,9 @@ only when
|
|
|
178
169
|
places, nested diagrams):
|
|
179
170
|
|
|
180
171
|
- **components:** surpyval lifetime distributions and fixed
|
|
181
|
-
probabilities (non-parametric
|
|
182
|
-
|
|
172
|
+
probabilities (a diagram refuses a non-parametric fit, such as
|
|
173
|
+
Kaplan–Meier: fit a parametric distribution in surpyval); repeated
|
|
174
|
+
nodes; cold standby with one or
|
|
183
175
|
two units operating (any units) or more (identical units); warm standby
|
|
184
176
|
with one unit operating, and hot standby (any units); load sharing of
|
|
185
177
|
identical units; common-cause groups, for the system's reliability,
|
|
@@ -189,17 +181,21 @@ places, nested diagrams):
|
|
|
189
181
|
importance measures at any time, also given each component's current age;
|
|
190
182
|
the distribution of the system's capacity;
|
|
191
183
|
- **repairable questions,** for independent components repaired when they
|
|
192
|
-
fail, replaced on age or block schedules or on condition at inspections
|
|
193
|
-
|
|
194
|
-
|
|
184
|
+
fail, replaced on age or block schedules or on condition at inspections,
|
|
185
|
+
or tested for hidden failures (any life, the tests and repairs instant or
|
|
186
|
+
taking time, the tests finding every failure or missing some): the
|
|
187
|
+
long-run availability,
|
|
195
188
|
failure frequency, MUT/MDT/MTBF and cost rate; the availability over time
|
|
196
189
|
and over a mission, and the expected failures, outages, downtime and cost
|
|
197
190
|
over a window, from new or from the components' current states (their
|
|
198
191
|
ages, the repairs going on, where they are in their calendars, or the
|
|
199
192
|
long run); the capacity distribution in the long run and over time, with
|
|
200
193
|
the production availability of a window; and the spares used over a
|
|
201
|
-
horizon, and the stock to hold for a lead time (
|
|
202
|
-
|
|
194
|
+
horizon, and the stock to hold for a lead time (under block replacement,
|
|
195
|
+
with repairs and block replacements in no time). Common-cause groups of
|
|
196
|
+
members with exponential lives, tested or repaired, take nothing away:
|
|
197
|
+
the long-run values, importance and allocations stay exact, and the
|
|
198
|
+
values over time from new numerical.
|
|
203
199
|
|
|
204
200
|
**Simulated**, or refused with the simulation to run instead:
|
|
205
201
|
|
|
@@ -208,24 +204,32 @@ places, nested diagrams):
|
|
|
208
204
|
| **What you ask** | | |
|
|
209
205
|
| Sampled lifetimes or histories, and distributions or percentiles of an outcome over a window | Simulated (from new, or from the components' current states); each simulation's histories, the system's and its components', kept whole as timelines by `simulate_timelines` (from new) | Yes: the answer is a sample. Its mean over a window (failures, outages, downtime, cost, the capacity delivered) is exact, from new or from a state: `expected_events`, `expected_cost`, `mission_capacity`. |
|
|
210
206
|
| Comparing two designs (`compare`) | Simulated, with common random numbers | No, where both are exact: compare their exact values. |
|
|
211
|
-
| The uncertainty from fitted component parameters (`sf_uncertainty`, `mean_uncertainty`, `bx_life_uncertainty`, `time_to_reliability_uncertainty`) | Sampled over the parameters, each draw exact | Sampling is the method. |
|
|
212
|
-
| Small failure probabilities, with a
|
|
207
|
+
| The uncertainty from fitted component parameters (`sf_uncertainty`, `mean_uncertainty`, `bx_life_uncertainty`, `time_to_reliability_uncertainty`; for a repairable system `mean_availability_uncertainty`, `point_availability_uncertainty`, `mission_availability_uncertainty`, `expected_cost_rate_uncertainty`) | Sampled over the parameters, randomly or quasi-randomly (`sampling="sobol"`), each draw exact or numerical as the diagram's own value is | Sampling is the method. |
|
|
208
|
+
| Small failure probabilities, with a node only simulations take | Rare-event simulation (`unreliability_interval`); `ff` refused | Only while the node has no reliability of its own: an exact diagram gives `ff` directly, to full precision however small (a numerical node, such as a cold-standby group of non-exponential units, to its own accuracy, about 1e-6). |
|
|
213
209
|
| **Components** | | |
|
|
214
|
-
| Warm standby with two or more units operating, of non-exponential units | Simulated
|
|
215
|
-
| Cold standby with three or more different units operating, and load sharing of different units | Simulated
|
|
216
|
-
| Anything a
|
|
210
|
+
| Warm standby with two or more units operating, of non-exponential units | Simulated in the system's simulations; the analyses that need the group's reliability refused | Yes, in general: which spare is switched in where, and how much each has aged, branch with the order of the failures. With one unit operating it is numerical, and hot standby (k-out-of-*n*) exact. |
|
|
211
|
+
| Cold standby with three or more different units operating, and load sharing of different units | Simulated in the system's simulations; the analyses that need the group's reliability refused | Yes, in general: which spare goes where, and how old the others are, branch with the order of the failures. Identical units are numerical in both, and so are two different units operating. |
|
|
212
|
+
| Anything such a node is part of | Simulated in the system's simulations; the analyses that need the node's reliability refused | Only while the node has no reliability of its own. |
|
|
217
213
|
| Common-cause groups: analyses given ages, and the MTTF of a group splitting a failure probability | Refused (a simulated MTTF leaves a probability split out) | No: the analyses given ages need a model of members of different ages. A group splitting the failure rate (`basis="rate"`) has an exact MTTF, and the simulations draw its shared shocks. Importance, parameter sensitivity and redundancy allocation are exact with groups (a beta-factor member's copies join its group), and parameter uncertainty is sampled with them. |
|
|
218
|
-
| Kaplan–Meier lives in a repairable system | Long run refused; over time numerical | Non-parametric nodes are deprecated and go in 0.12 (#149): fit a parametric distribution in surpyval. |
|
|
219
214
|
| **Architecture and maintenance** | | |
|
|
220
|
-
| Phased missions and networks
|
|
221
|
-
|
|
|
222
|
-
| Common-cause groups in a repairable diagram |
|
|
223
|
-
|
|
|
224
|
-
| Shared repair crews | For exponential lives and repairs, the long run and importance exact, and the values over time numerical (the same Markov chain, followed by uniformization), but the allocations; other lives simulated | Other lives: yes, in general. Around a nested RBD the expected events and the capacity over time are refused, and could be numerical too (#162). |
|
|
215
|
+
| Phased missions and networks too large for their decision diagrams | Refused, pointing to `method="simulate"` | Only in practice: the diagrams grow with the phases' and the network's width rather than their paths, so meshed missions and networks are exact (a network grid of 100 nodes in a second and a half); one of 121 nodes passes the limit, `repyability.network.MAX_STATES`, which can be raised. |
|
|
216
|
+
| Block diagrams too meshed for their decision diagrams | Simulated (lifetimes, availability, cost and timelines, in Python); the exact and numerical analyses refused | Only in practice: the diagram grows with how wide the mesh is rather than with its paths, so most meshes are exact (a 10 × 10 grid in 0.04 seconds, a random mesh of 60 nodes and 345 links in 2); one of 70 nodes and 485 links passes the limit, `repyability.rbd.bdd.STEP_LIMIT`, which can be raised. |
|
|
217
|
+
| Common-cause groups in a repairable diagram | For exponential lives, tested or repaired: the long run, importance and the allocations exact (a beta-factor member's copies join its group, and the availability allocations keep the members' availability), the values over time from new numerical (the groups' Markov chains), and the simulations draw the shared causes, in Python. Members of other lives refused, and members held or started from a current state | Other lives: a shared cause has no one rate for members of different ages, so they need a model first. From a current state, no: the chains and the simulations could start from the members' states. |
|
|
218
|
+
| Shared repair crews | For exponential lives and repairs, the long run and importance exact, and the values over time numerical (the same Markov chain, followed by uniformization), but the allocations; other lives simulated. The maintenance and test intervals are chosen as if every repair started at once on request (`assume_unlimited_crews=True`), for a plan to simulate with the crews | Other lives: yes, in general. |
|
|
225
219
|
| Standby groups (a duty unit and its spares, repaired) | For exponential units, the long run and importance exact, and the values over time numerical (the units' Markov chain, followed by uniformization); other units simulated | Other units: yes, in general. |
|
|
226
220
|
| Opportunistic maintenance (renewals at a group's stops) | Simulated | Yes: each member's renewals depend on the others' ages. |
|
|
227
|
-
| Imperfect repair (Kijima), with or without replacement at the *N*-th failure | Simulated | Yes, in general: a repair does not renew the unit. |
|
|
228
|
-
| Spares
|
|
221
|
+
| Imperfect repair (Kijima), with or without replacement at the *N*-th failure | Simulated; but minimal repair (`q = 1`) in no time is numerical over a window from new (it fails `H(t)` times by `t`), its long run refused | Yes, in general: a repair does not renew the unit. |
|
|
222
|
+
| Spares with repair crews, standby groups, opportunistic maintenance or imperfect repair | Refused, pointing to `spares_demand(method="simulate")`. Otherwise numerical, demand and stock: block-replaced components' whether their repairs and block replacements take time or not (from a typical replacement in the long run), but for one dead on arrival while they may take none, and tested components', whatever their tests and repairs take and whether their tests miss failures | Yes, in general: a crew's queue, a group's switching or stops and an imperfect repair make the replacements depend on more than each unit's own lives. A unit dead on arrival whose renewals may take no time: no, the replacements at one instant could be counted. |
|
|
223
|
+
|
|
224
|
+
Where a system's expected values over a window are exact,
|
|
225
|
+
`availability()` and `cost()` give them by default, with no error, and the
|
|
226
|
+
simulations give their spread. Where a system needs simulating for a few of
|
|
227
|
+
its nodes (a standby group of other lives, a nested RBD sharing a crew, a
|
|
228
|
+
unit repaired imperfectly), their mean intervals by default take each
|
|
229
|
+
simulation's expected values given those nodes' histories, every other node
|
|
230
|
+
exact given their states: a fraction of the error of the simulations' own.
|
|
231
|
+
`conditional=True` simulates only those nodes, for the same means in less
|
|
232
|
+
time.
|
|
229
233
|
|
|
230
234
|
For your own diagram, `analysis_routes()` says how each analysis will be
|
|
231
235
|
computed (exact, numerical, simulated or refused) and why, without running
|
|
@@ -29,7 +29,15 @@ taking already-fitted lifetime models (from
|
|
|
29
29
|
demonstrate a reliability or an MTBF), what a test demonstrated, and the
|
|
30
30
|
chance a design passes.
|
|
31
31
|
- **Importance**: Birnbaum, improvement potential, RAW, RRW, criticality,
|
|
32
|
-
Fussell–Vesely, structural importance and parameter sensitivity
|
|
32
|
+
Fussell–Vesely, structural importance and parameter sensitivity, on
|
|
33
|
+
repairable systems in the long run or over time.
|
|
34
|
+
- **Sensitivity, the Greeks**: how far the system moves with each
|
|
35
|
+
component (delta) and with each lever, a life, a repair, the maintenance
|
|
36
|
+
or a crew; the shares of a change, which add up (differential
|
|
37
|
+
importance); whether two improvements are complements or substitutes
|
|
38
|
+
(gamma); which component is moving the availability now, and which
|
|
39
|
+
caused the failures (theta, Barlow–Proschan); and whose parameter
|
|
40
|
+
uncertainty widens the answer (vega).
|
|
33
41
|
- **Live state**: reliability, remaining life and importance given each
|
|
34
42
|
component's current age, and covariate-dependent components.
|
|
35
43
|
- **Redundancy and dependence**: cold, warm and hot standby; repeated nodes;
|
|
@@ -39,8 +47,10 @@ taking already-fitted lifetime models (from
|
|
|
39
47
|
histories with criticality measures; shared repair crews, exact for
|
|
40
48
|
exponential components in the long run and numerical over time, with
|
|
41
49
|
their importance; repairable standby groups (a duty unit and its spares,
|
|
42
|
-
repaired one at a time);
|
|
43
|
-
|
|
50
|
+
repaired one at a time); imperfect repair (Kijima's virtual age), with
|
|
51
|
+
replacement at the N-th failure; and uncertainty intervals on the
|
|
52
|
+
availability and the cost rate from uncertain (fitted) models of the
|
|
53
|
+
lives, repairs and maintenance.
|
|
44
54
|
- **Capacity**: how much a system delivers, from its components'
|
|
45
55
|
capacities (with several levels, or degrading through stages): the exact
|
|
46
56
|
distribution of its capacity at a time or in the long run, the
|
|
@@ -112,8 +122,9 @@ only when
|
|
|
112
122
|
places, nested diagrams):
|
|
113
123
|
|
|
114
124
|
- **components:** surpyval lifetime distributions and fixed
|
|
115
|
-
probabilities (non-parametric
|
|
116
|
-
|
|
125
|
+
probabilities (a diagram refuses a non-parametric fit, such as
|
|
126
|
+
Kaplan–Meier: fit a parametric distribution in surpyval); repeated
|
|
127
|
+
nodes; cold standby with one or
|
|
117
128
|
two units operating (any units) or more (identical units); warm standby
|
|
118
129
|
with one unit operating, and hot standby (any units); load sharing of
|
|
119
130
|
identical units; common-cause groups, for the system's reliability,
|
|
@@ -123,17 +134,21 @@ places, nested diagrams):
|
|
|
123
134
|
importance measures at any time, also given each component's current age;
|
|
124
135
|
the distribution of the system's capacity;
|
|
125
136
|
- **repairable questions,** for independent components repaired when they
|
|
126
|
-
fail, replaced on age or block schedules or on condition at inspections
|
|
127
|
-
|
|
128
|
-
|
|
137
|
+
fail, replaced on age or block schedules or on condition at inspections,
|
|
138
|
+
or tested for hidden failures (any life, the tests and repairs instant or
|
|
139
|
+
taking time, the tests finding every failure or missing some): the
|
|
140
|
+
long-run availability,
|
|
129
141
|
failure frequency, MUT/MDT/MTBF and cost rate; the availability over time
|
|
130
142
|
and over a mission, and the expected failures, outages, downtime and cost
|
|
131
143
|
over a window, from new or from the components' current states (their
|
|
132
144
|
ages, the repairs going on, where they are in their calendars, or the
|
|
133
145
|
long run); the capacity distribution in the long run and over time, with
|
|
134
146
|
the production availability of a window; and the spares used over a
|
|
135
|
-
horizon, and the stock to hold for a lead time (
|
|
136
|
-
|
|
147
|
+
horizon, and the stock to hold for a lead time (under block replacement,
|
|
148
|
+
with repairs and block replacements in no time). Common-cause groups of
|
|
149
|
+
members with exponential lives, tested or repaired, take nothing away:
|
|
150
|
+
the long-run values, importance and allocations stay exact, and the
|
|
151
|
+
values over time from new numerical.
|
|
137
152
|
|
|
138
153
|
**Simulated**, or refused with the simulation to run instead:
|
|
139
154
|
|
|
@@ -142,24 +157,32 @@ places, nested diagrams):
|
|
|
142
157
|
| **What you ask** | | |
|
|
143
158
|
| Sampled lifetimes or histories, and distributions or percentiles of an outcome over a window | Simulated (from new, or from the components' current states); each simulation's histories, the system's and its components', kept whole as timelines by `simulate_timelines` (from new) | Yes: the answer is a sample. Its mean over a window (failures, outages, downtime, cost, the capacity delivered) is exact, from new or from a state: `expected_events`, `expected_cost`, `mission_capacity`. |
|
|
144
159
|
| Comparing two designs (`compare`) | Simulated, with common random numbers | No, where both are exact: compare their exact values. |
|
|
145
|
-
| The uncertainty from fitted component parameters (`sf_uncertainty`, `mean_uncertainty`, `bx_life_uncertainty`, `time_to_reliability_uncertainty`) | Sampled over the parameters, each draw exact | Sampling is the method. |
|
|
146
|
-
| Small failure probabilities, with a
|
|
160
|
+
| The uncertainty from fitted component parameters (`sf_uncertainty`, `mean_uncertainty`, `bx_life_uncertainty`, `time_to_reliability_uncertainty`; for a repairable system `mean_availability_uncertainty`, `point_availability_uncertainty`, `mission_availability_uncertainty`, `expected_cost_rate_uncertainty`) | Sampled over the parameters, randomly or quasi-randomly (`sampling="sobol"`), each draw exact or numerical as the diagram's own value is | Sampling is the method. |
|
|
161
|
+
| Small failure probabilities, with a node only simulations take | Rare-event simulation (`unreliability_interval`); `ff` refused | Only while the node has no reliability of its own: an exact diagram gives `ff` directly, to full precision however small (a numerical node, such as a cold-standby group of non-exponential units, to its own accuracy, about 1e-6). |
|
|
147
162
|
| **Components** | | |
|
|
148
|
-
| Warm standby with two or more units operating, of non-exponential units | Simulated
|
|
149
|
-
| Cold standby with three or more different units operating, and load sharing of different units | Simulated
|
|
150
|
-
| Anything a
|
|
163
|
+
| Warm standby with two or more units operating, of non-exponential units | Simulated in the system's simulations; the analyses that need the group's reliability refused | Yes, in general: which spare is switched in where, and how much each has aged, branch with the order of the failures. With one unit operating it is numerical, and hot standby (k-out-of-*n*) exact. |
|
|
164
|
+
| Cold standby with three or more different units operating, and load sharing of different units | Simulated in the system's simulations; the analyses that need the group's reliability refused | Yes, in general: which spare goes where, and how old the others are, branch with the order of the failures. Identical units are numerical in both, and so are two different units operating. |
|
|
165
|
+
| Anything such a node is part of | Simulated in the system's simulations; the analyses that need the node's reliability refused | Only while the node has no reliability of its own. |
|
|
151
166
|
| Common-cause groups: analyses given ages, and the MTTF of a group splitting a failure probability | Refused (a simulated MTTF leaves a probability split out) | No: the analyses given ages need a model of members of different ages. A group splitting the failure rate (`basis="rate"`) has an exact MTTF, and the simulations draw its shared shocks. Importance, parameter sensitivity and redundancy allocation are exact with groups (a beta-factor member's copies join its group), and parameter uncertainty is sampled with them. |
|
|
152
|
-
| Kaplan–Meier lives in a repairable system | Long run refused; over time numerical | Non-parametric nodes are deprecated and go in 0.12 (#149): fit a parametric distribution in surpyval. |
|
|
153
167
|
| **Architecture and maintenance** | | |
|
|
154
|
-
| Phased missions and networks
|
|
155
|
-
|
|
|
156
|
-
| Common-cause groups in a repairable diagram |
|
|
157
|
-
|
|
|
158
|
-
| Shared repair crews | For exponential lives and repairs, the long run and importance exact, and the values over time numerical (the same Markov chain, followed by uniformization), but the allocations; other lives simulated | Other lives: yes, in general. Around a nested RBD the expected events and the capacity over time are refused, and could be numerical too (#162). |
|
|
168
|
+
| Phased missions and networks too large for their decision diagrams | Refused, pointing to `method="simulate"` | Only in practice: the diagrams grow with the phases' and the network's width rather than their paths, so meshed missions and networks are exact (a network grid of 100 nodes in a second and a half); one of 121 nodes passes the limit, `repyability.network.MAX_STATES`, which can be raised. |
|
|
169
|
+
| Block diagrams too meshed for their decision diagrams | Simulated (lifetimes, availability, cost and timelines, in Python); the exact and numerical analyses refused | Only in practice: the diagram grows with how wide the mesh is rather than with its paths, so most meshes are exact (a 10 × 10 grid in 0.04 seconds, a random mesh of 60 nodes and 345 links in 2); one of 70 nodes and 485 links passes the limit, `repyability.rbd.bdd.STEP_LIMIT`, which can be raised. |
|
|
170
|
+
| Common-cause groups in a repairable diagram | For exponential lives, tested or repaired: the long run, importance and the allocations exact (a beta-factor member's copies join its group, and the availability allocations keep the members' availability), the values over time from new numerical (the groups' Markov chains), and the simulations draw the shared causes, in Python. Members of other lives refused, and members held or started from a current state | Other lives: a shared cause has no one rate for members of different ages, so they need a model first. From a current state, no: the chains and the simulations could start from the members' states. |
|
|
171
|
+
| Shared repair crews | For exponential lives and repairs, the long run and importance exact, and the values over time numerical (the same Markov chain, followed by uniformization), but the allocations; other lives simulated. The maintenance and test intervals are chosen as if every repair started at once on request (`assume_unlimited_crews=True`), for a plan to simulate with the crews | Other lives: yes, in general. |
|
|
159
172
|
| Standby groups (a duty unit and its spares, repaired) | For exponential units, the long run and importance exact, and the values over time numerical (the units' Markov chain, followed by uniformization); other units simulated | Other units: yes, in general. |
|
|
160
173
|
| Opportunistic maintenance (renewals at a group's stops) | Simulated | Yes: each member's renewals depend on the others' ages. |
|
|
161
|
-
| Imperfect repair (Kijima), with or without replacement at the *N*-th failure | Simulated | Yes, in general: a repair does not renew the unit. |
|
|
162
|
-
| Spares
|
|
174
|
+
| Imperfect repair (Kijima), with or without replacement at the *N*-th failure | Simulated; but minimal repair (`q = 1`) in no time is numerical over a window from new (it fails `H(t)` times by `t`), its long run refused | Yes, in general: a repair does not renew the unit. |
|
|
175
|
+
| Spares with repair crews, standby groups, opportunistic maintenance or imperfect repair | Refused, pointing to `spares_demand(method="simulate")`. Otherwise numerical, demand and stock: block-replaced components' whether their repairs and block replacements take time or not (from a typical replacement in the long run), but for one dead on arrival while they may take none, and tested components', whatever their tests and repairs take and whether their tests miss failures | Yes, in general: a crew's queue, a group's switching or stops and an imperfect repair make the replacements depend on more than each unit's own lives. A unit dead on arrival whose renewals may take no time: no, the replacements at one instant could be counted. |
|
|
176
|
+
|
|
177
|
+
Where a system's expected values over a window are exact,
|
|
178
|
+
`availability()` and `cost()` give them by default, with no error, and the
|
|
179
|
+
simulations give their spread. Where a system needs simulating for a few of
|
|
180
|
+
its nodes (a standby group of other lives, a nested RBD sharing a crew, a
|
|
181
|
+
unit repaired imperfectly), their mean intervals by default take each
|
|
182
|
+
simulation's expected values given those nodes' histories, every other node
|
|
183
|
+
exact given their states: a fraction of the error of the simulations' own.
|
|
184
|
+
`conditional=True` simulates only those nodes, for the same means in less
|
|
185
|
+
time.
|
|
163
186
|
|
|
164
187
|
For your own diagram, `analysis_routes()` says how each analysis will be
|
|
165
188
|
computed (exact, numerical, simulated or refused) and why, without running
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
[build-system]
|
|
2
|
-
|
|
2
|
+
# 77 reads the licence as an SPDX expression (PEP 639).
|
|
3
|
+
requires = ["setuptools>=77", "wheel"]
|
|
3
4
|
build-backend = "setuptools.build_meta"
|
|
4
5
|
|
|
5
6
|
[project]
|
|
@@ -7,7 +8,8 @@ name = "repyability"
|
|
|
7
8
|
dynamic = ["version"]
|
|
8
9
|
description = "Reliability engineering tools for Python"
|
|
9
10
|
readme = "README.md"
|
|
10
|
-
license =
|
|
11
|
+
license = "MIT"
|
|
12
|
+
license-files = ["LICENSE"]
|
|
11
13
|
requires-python = ">=3.11"
|
|
12
14
|
authors = [{ name = "derrynknife", email = "derrynknife@gmail.com" }]
|
|
13
15
|
keywords = [
|
|
@@ -23,7 +25,6 @@ classifiers = [
|
|
|
23
25
|
"Development Status :: 4 - Beta",
|
|
24
26
|
"Intended Audience :: Science/Research",
|
|
25
27
|
"Intended Audience :: Education",
|
|
26
|
-
"License :: OSI Approved :: MIT License",
|
|
27
28
|
"Operating System :: OS Independent",
|
|
28
29
|
"Programming Language :: Python :: 3",
|
|
29
30
|
"Programming Language :: Python :: 3.11",
|
|
@@ -35,16 +36,18 @@ classifiers = [
|
|
|
35
36
|
]
|
|
36
37
|
dependencies = [
|
|
37
38
|
"numpy>=2.0,<3",
|
|
38
|
-
|
|
39
|
+
# The first SciPy built for NumPy 2.
|
|
40
|
+
"scipy>=1.13",
|
|
39
41
|
"networkx>=3.0",
|
|
40
42
|
# Deliberately uncapped: RePyability consumes a small surface of surpyval
|
|
41
43
|
# (sf/ff/qf/random/mean, extras/with_params, regression sf/sf_tvc,
|
|
42
44
|
# to_dict/from_dict). A surpyval release reaches every fresh install at
|
|
43
45
|
# once, so the upstream workflow runs the tests against surpyval's
|
|
44
46
|
# development branch to show a break before it is released. CI also tests
|
|
45
|
-
# this minimum. 0.
|
|
46
|
-
#
|
|
47
|
-
|
|
47
|
+
# this minimum. 0.22 names a distribution's parameters parameter_names
|
|
48
|
+
# (param_names goes in 0.23), and computes the Normal and LogNormal
|
|
49
|
+
# quantiles directly, as RePyability relies on.
|
|
50
|
+
"surpyval>=0.22",
|
|
48
51
|
"tqdm>=4.64",
|
|
49
52
|
]
|
|
50
53
|
|
|
@@ -85,6 +88,12 @@ Issues = "https://github.com/derrynknife/RePyability/issues"
|
|
|
85
88
|
# cannot silently rot.
|
|
86
89
|
testpaths = ["repyability"]
|
|
87
90
|
addopts = "--doctest-modules"
|
|
91
|
+
# A surpyval deprecation that RePyability or its tests run into fails them
|
|
92
|
+
# ("... will be removed in v0.23"), so that the upstream workflow, on
|
|
93
|
+
# surpyval's development branch, shows it before the name is removed.
|
|
94
|
+
filterwarnings = [
|
|
95
|
+
"error:.*will be removed in v[0-9]:DeprecationWarning:repyability",
|
|
96
|
+
]
|
|
88
97
|
|
|
89
98
|
[tool.setuptools.dynamic]
|
|
90
99
|
version = { attr = "repyability._version.__version__" }
|
|
@@ -92,6 +101,12 @@ version = { attr = "repyability._version.__version__" }
|
|
|
92
101
|
[tool.setuptools.packages.find]
|
|
93
102
|
include = ["repyability*"]
|
|
94
103
|
|
|
104
|
+
# The type-checking marker, and the data the installed tests read (#167):
|
|
105
|
+
# test_packaging checks that every data file in the package is listed here.
|
|
106
|
+
[tool.setuptools.package-data]
|
|
107
|
+
"repyability" = ["py.typed"]
|
|
108
|
+
"repyability.tests" = ["*.json"]
|
|
109
|
+
|
|
95
110
|
# For Black pre-commit hook
|
|
96
111
|
[tool.black]
|
|
97
112
|
line-length = 79
|
|
@@ -131,9 +146,15 @@ follow_imports = 'skip'
|
|
|
131
146
|
# Coverage
|
|
132
147
|
[tool.coverage.run]
|
|
133
148
|
source = ["repyability"]
|
|
134
|
-
# The compiled loop
|
|
135
|
-
#
|
|
136
|
-
|
|
149
|
+
# The compiled loop, decision diagram and sorting of a run's changes run as
|
|
150
|
+
# machine code, which coverage cannot trace (their equivalence with the
|
|
151
|
+
# Python code, and with numpy's sorting, is tested instead).
|
|
152
|
+
omit = [
|
|
153
|
+
"*/tests/*",
|
|
154
|
+
"*/rbd/_kernel.py",
|
|
155
|
+
"*/rbd/_bdd_kernel.py",
|
|
156
|
+
"*/rbd/_time_order.py",
|
|
157
|
+
]
|
|
137
158
|
|
|
138
159
|
[tool.coverage.report]
|
|
139
160
|
# The library (excluding tests) must stay above this bar.
|
|
@@ -11,8 +11,10 @@ from repyability.demonstration import (
|
|
|
11
11
|
demonstrated_mtbf,
|
|
12
12
|
demonstrated_reliability,
|
|
13
13
|
demonstration_pass_probability,
|
|
14
|
+
demonstration_plan,
|
|
14
15
|
demonstration_sample_size,
|
|
15
16
|
demonstration_test_multiple,
|
|
17
|
+
mtbf_demonstration_plan,
|
|
16
18
|
mtbf_pass_probability,
|
|
17
19
|
mtbf_test_time,
|
|
18
20
|
)
|
|
@@ -41,14 +43,17 @@ from repyability.rbd.results import (
|
|
|
41
43
|
AvailabilityAllocation,
|
|
42
44
|
AvailabilityResult,
|
|
43
45
|
CapacityDistribution,
|
|
46
|
+
ConditionalRun,
|
|
44
47
|
ConfidenceInterval,
|
|
45
48
|
ControlVariate,
|
|
46
49
|
CostResult,
|
|
47
50
|
Criticalities,
|
|
51
|
+
DemonstrationPlan,
|
|
48
52
|
ExpectedCost,
|
|
49
53
|
ExpectedEvents,
|
|
50
54
|
FailureCriticalityIndex,
|
|
51
55
|
MaintenancePlan,
|
|
56
|
+
RateBreakdown,
|
|
52
57
|
RedundancyAllocation,
|
|
53
58
|
ReliabilityRedundancyAllocation,
|
|
54
59
|
RestorationCriticalityIndex,
|
|
@@ -56,6 +61,7 @@ from repyability.rbd.results import (
|
|
|
56
61
|
SparesStock,
|
|
57
62
|
TimelineSimulation,
|
|
58
63
|
TotalCostAllocation,
|
|
64
|
+
UncertaintyImportance,
|
|
59
65
|
UncertaintyResult,
|
|
60
66
|
UpDownImportance,
|
|
61
67
|
)
|
|
@@ -99,9 +105,11 @@ __all__ = [
|
|
|
99
105
|
"demonstrated_reliability",
|
|
100
106
|
"demonstration_test_multiple",
|
|
101
107
|
"demonstration_pass_probability",
|
|
108
|
+
"demonstration_plan",
|
|
102
109
|
"mtbf_test_time",
|
|
103
110
|
"demonstrated_mtbf",
|
|
104
111
|
"mtbf_pass_probability",
|
|
112
|
+
"mtbf_demonstration_plan",
|
|
105
113
|
"ComponentOption",
|
|
106
114
|
# Up/down histories
|
|
107
115
|
"Timeline",
|
|
@@ -110,6 +118,7 @@ __all__ = [
|
|
|
110
118
|
"AnalysisRoute",
|
|
111
119
|
"AvailabilityResult",
|
|
112
120
|
"CapacityDistribution",
|
|
121
|
+
"ConditionalRun",
|
|
113
122
|
"ConfidenceInterval",
|
|
114
123
|
"ControlVariate",
|
|
115
124
|
"CostResult",
|
|
@@ -119,13 +128,16 @@ __all__ = [
|
|
|
119
128
|
"ReliabilityRedundancyAllocation",
|
|
120
129
|
"TotalCostAllocation",
|
|
121
130
|
"UncertaintyResult",
|
|
131
|
+
"UncertaintyImportance",
|
|
122
132
|
"Criticalities",
|
|
133
|
+
"DemonstrationPlan",
|
|
123
134
|
"UpDownImportance",
|
|
124
135
|
"FailureCriticalityIndex",
|
|
125
136
|
"RestorationCriticalityIndex",
|
|
126
137
|
"MaintenancePolicy",
|
|
127
138
|
"FailureLimitPolicy",
|
|
128
139
|
"MaintenancePlan",
|
|
140
|
+
"RateBreakdown",
|
|
129
141
|
"AvailabilityAllocation",
|
|
130
142
|
"SparesDemand",
|
|
131
143
|
"SparesStock",
|