Release Notes#

Updates in v1.7#

progpy#

  • Started “ProgPy Short Course”: A series of Jupyter Notebooks designed to help users get started with ProgPy and understand how to use it for prognostics. See nasa/progpy

  • Updates to improve composite model:
    • Support setting parameters in composed models using [model].[param] format (e.g., composite_model[“model1.Param1”] = 12)

    • Support adding functions to composite. Useful for simple translations

  • Prediction and Simulation event strategy. For models with multiple events can now specify if you would like prediction or simulation to end when “first” or “any” of the events are met

  • Updates to parameter estimation * Users can now estimate nested parameters (e.g., parameters[‘x0’][‘a’]) using a tuple. For example params=((‘x0’, ‘a’), …) * MSE updated to include a penalty if model becomes unstable (i.e., returns NaN) before minimum threshold. This encourages parameter estimation to converge on parameters for which the model is stable

  • Tensorflow no longer installed by default (this is important for users who are space constrained). If you’re using the data-driven features install ProgPy like so: pip install progpy[datadriven] or pip install -e ‘.[datadriven]’ (if using local copy)

  • Support for Python 3.12

  • Removed some warnings

  • Various Bugfixes and Performance optimizations

Notes for upgrading: * If you’re using the data-driven features install ProgPy like so: pip install progpy[datadriven] or pip install -e ‘.[datadriven]’ (if using local copy) * Use “events” keyword instead of “threshold_keys” in simulation

prog_server#

  • Add support for custom model, state_estimator, and predictor

  • New output and output prediction endpoints

  • Various bug fixes and optimizations

Updates in v1.6#

progpy#

  • Combined previous prog_models and prog_algs packages into a single package, progpy.

  • Added new progpy.MixtureOfExpertsModel, which combines multiple models of the same system into a single model, where only the best of the comprised models will be used at each timestep.

  • Added ability to set random seed in progpy.loading.GaussianNoiseWrapper, allowing for repeatable experiments

  • Various bug fixes and performance improvements

Upgrading from v1.5#

v1.6 combined prog_models and prog_algs into a single package progpy. To upgrade to 1.6, you will need to download the new progpy package (pip install progpy) and update all imports to use progpy. For example from prog_models import PrognosticsModel becomes from progpy import PrognosticsModel, and from prog_algs import predictors becomes from progpy import predictors.

prog_server#

  • Updated to work with progpy v1.6

Updates in V1.5#

prog_models#

  • Direct Models: Added support for new model type: Direct Models. Direct Models directly map current state and future load to time of event, rather than state-transition models which simulate forward to calculate time of event. They’re created by implementing the prog_models.PrognosticsModel.time_of_event().

  • New model types that combine multiple models. See 06. Combining Models for example of use.

    • Ensemble Model: Combinations of multiple models of the same system where results are aggregated.

    • Composite Model: Combinations of models of different systems that are interdependent.

  • New Model Type: Aircraft flight model interface, prog_models.models.aircraft_model.AircraftModel. Anticipated prognostics applications with the aircraft flight model include estimating and predicting loading of other aircraft systems (e.g., powertrain) and safety metrics.

  • New Model: Small Rotorcraft AircraftModel.

  • New DataModel: Polynomial Chaos Expansion (PCE) Direct Surrogate Model (prog_models.data_models.PolynomialChaosExpansion). See chaos example for example of use.

  • Started transition of InputContainers, StateContainers, OutputContainer and SimResult to use Pandas DataFrames. This release will bring the interface more in compliance with DataFrames. v1.6 will fully transition the classes to DataFrames.

  • Implemented new metrics that can be used in prog_models.PrognosticsModel.calc_error(): Root Mean Square Error (RMSE), Maximum Error (MAX_E), Mean Absolute Error (MAE), Mean Absolute Percentage Error (MAPE), and Dynamic Time Warping (DTW)

  • Error calculation metric (above) can now be set when calling prog_models.PrognosticsModel.estimate_params()

  • Reworked integration methods in simulation

    • New integration methods: RK4 and methods from scipy.integrate

    • Integration can now be set at the model level. For continuous models the specified integration method will apply when calling next_state

  • Python3.11 support

  • Various bug fixes and performance improvements

prog_algs#

  • Integration method can now be set for state estimation and prediction by setting model.parameters[‘integration_method’].

  • Minimum time step can now be set in state estimation, using the argument ‘dt’. This is useful for models that become unstable with large time steps.

  • Python3.11 support

prog_server#

  • Python3.11 support

Updates in V1.4#

prog_models#

  • Data-Driven Models

    • Created new prog_models.data_models.DataModel class as interface/superclass for all data-driven models. Data-driven models are interchangeable in use (e.g., simulation, use with prog_algs) with physics-based models. DataModels can be trained using data (prog_models.data_models.DataModel.from_data()), or an existing model (prog_models.data_models.DataModel.from_model())

    • Introduced new LSTM State Transition DataModel (prog_models.data_models.LSTMStateTransitionModel).

    • DMD model (prog_models.data_models.DMDModel) updated to new data-driven model interface. Can now be created from data as well as an existing model

    • Added ability to integrate training noise to data for DMD Model (prog_models.data_models.DMDModel)

  • New Model: Single-Phase DC Motor (prog_models.models.DCMotorSP)

  • Added the ability to select integration method when simulating (see integration_method keywork argument for prog_models.PrognosticsModel.simulate_to_threshold()). Current options are Euler and RK4

  • New feature allowing serialization of model parameters as JSON. See prog_models.PrognosticsModel.to_json(), prog_models.PrognosticsModel.from_json(), and serialization example

  • Added automatic step size feature in simulation. When enabled, step size will adapt to meet the exact save_pts and save_freq. Step size range can also be bounded

  • New Example Model: Simple Paris’ Law (prog_models.models.ParisLawCrackGrowth)

  • Added ability to set bounds when estimating parameters (See prog_models.PrognosticsModel.estimate_params())

  • Initialize method is now optional

  • Various bug fixes and performance improvements

prog_algs#

  • Added new prog_algs.predictors.ToEPredictionProfile Metric: Monotonicity. See prog_algs.predictors.ToEPredictionProfile.monotonicity()

  • Updated to support prog_models v1.4

  • Various bug fixes and performance improvements

prog_server and prog_client#

  • Added new endpoint (GET /api/v1/session/{id}/model) and client function (prog_client.Session.get_model()) to get the model from the server.

  • Updated to support prog_models and prog_algs v1.4

  • Various bug fixes and performance improvements

Updates in V1.3#

prog_models#

  • Surrogate Models Added initial draft of new feature to generate surrogate models automatically from prog_models.PrognosticsModel. Initial implementation uses Dynamic Mode Decomposition. Additional Surrogate Model Generation approaches will be explored for future releases. [Developed by NASA’s DRF Project]

  • New Example Models Added new prog_models.models.DCMotor, prog_models.models.ESC, and prog_models.models.Powertrain models [Developed by NASA’s SWS Project]

  • Datasets Added new feature that allows users to access prognostic datasets programmatically

  • Added new prog_models.LinearModel class - Linear Prognostics Models can be represented by a Linear Model. Similar to PrognosticsModels, LinearModels are created by subclassing the LinearModel class. Some algorithms will only work with Linear Models.

  • Added new StateContainer/InputContainer/OutputContainer objects for classes which allow for data access in matrix form and enforce expected keys.

  • Added new metric for SimResult: prog_models.sim_result.SimResult.monotonicity().

  • prog_models.sim_result.SimResult.plot() now automatically shows legends

  • Added drag to prog_models.models.ThrownObject model, making the model non-linear. Degree of nonlinearity can be effected using the model parameters (e.g., coefficient of drag cd).

  • observables from previous releases are now called performance_metrics

  • model.simulate_to* now returns named tuple, allowing for access by property name (e.g., result.states)

  • Updates to prog_models.sim_result.SimResult and prog_models.sim_result.LazySimResult for robustness

  • Various performance improvements and bug fixes

prog_algs#

  • New State Estimator Added prog_algs.state_estimators.KalmanFilter. Works with models derived from prog_models.LinearModel.

  • New Predictor Added prog_algs.predictors.UnscentedTransformPredictor.

  • Initial state estimate (x0) can now be passed as UncertainData to represent initial state uncertainty.

  • Added new metrics for prog_algs.predictors.ToEPredictionProfile: Prognostics horizon, Cumulative Relative Accuracy (CRA).

  • Added ability to plot prog_algs.predictors.ToEPredictionProfile: profile.plot().

  • Added new metric for prog_algs.predictors.Prediction: Monotonicity, Relative Accuracy (RA)

  • Added new metric for prog_algs.uncertain_data.UncertainData (and subclasses): Root Mean Square Error (RMSE)

  • Added new describe method for prog_algs.uncertain_data.UncertainData (and subclasses)

  • Add support for python 3.10

  • Various performance improvements and bugfixes

prog_server#

  • Added ability to set state using pickled prog_algs.uncertain_data.UncertainData type

prog_client#

  • Added new set_state method

Updates in V1.2#

prog_models#

  • New Feature: Vectorized Models
    • Distributed models were vectorized to support vectorized sample-based prognostics approaches

  • New Feature: Dynamic Step Sizes
    • Now step size can be a function of time or state

    • See examples.dynamic_step_size for more information

  • New Feature: New method model.apply_bounds
    • This method allows for other classes to use applied bound limits

  • Simulate_to* methods can now specify initial time. Also, outputs are now optional

  • Various bug fixes

prog_algs#

  • New Feature: Histogram and Scatter Plot of UncertainData.

  • New Feature: Vectorized particle filter.
    • Particle Filter State Estimator is now vectorized for vectorized models - this significantly improves performance.

  • New Feature: Unscented Transform Predictor.
    • New predictor that propogates sigma points forward to estimate time of event and future states.

  • New Feature: Prediction class to represent predicted future values.

  • New Feature: ToEPredictionProfile class to represent and operate on the result of multiple predictions generated at different prediction times.

  • Added metrics percentage_in_bounds and metrics and plots to UncertainData .

  • Add support for Python3.9.

  • General Bugfixes.

Updates in V1.1#

prog_models#

  • New Feature: Derived Parameters
    • Users can specify callbacks for parameters that are defined from others. These callbacks will be called when the dependency parameter is updated.

    • See examples.derived_params for more information.

  • New Feature: Parameter Estimation
    • Users can use the estimate_parameters method to estimate all or select parameters.

    • see examples.param_est

  • New Feature: Automatic Noise Generation
    • Now noise is automatically generated when next_state/dx (process_noise) and output (measurement_noise). This removed the need to explicitly call apply_*_noise functions in these methods.

    • See examples.noise for more details in setting noise

    • For any classes users created using V1.0.*, you should remove any call to apply_*_noise functions to prevent double noise application.

  • New Feature: Configurable State Bounds
    • Users can specify the range of valid values for each state (e.g., a temperature in celcius would have to be greater than -273.15 - absolute zero)

  • New Feature: Simulation Result Class
    • Simulations now return a simulation result object for each value (e.g., output, input, state, etc)

    • These simulation result objects can be used just like the previous lists.

    • Output and Event State are now “Lazily Evaluated”. This speeds up simulation when intermediate states are not printed and these properties are not used

    • A plot method has been added directly to the class (e.g., event_states.plot())

  • New Feature: Intermediate Result Printing
    • Use the print parameter to enable printing intermediate results during a simulation

    • e.g., model.simulate_to_threshold(…, print=True)

    • Note: This slows down simulation performance

  • Added support for python 3.9

  • Various bug fixes

ElectroChemistry Model Updates#

  • New Feature: Added thermal effects. Now the model include how the temperature is effected by use. Previous implementation only included effects of temperature on performance.

  • New Feature: Added degraded_capacity (i.e., EOL) event to model. There are now three different models: BatteryElectroChemEOL (degraded_capacity only), BatteryElectroChemEOD (discharge only), and BatteryElectroChemEODEOL (combined). BatteryElectroChem is an alias for BatteryElectroChemEODEOL.

  • New Feature: Updated SOC (EOD Event State) calculation to include voltage when near V_EOD. This prevents a situation where the voltage is below lower bound but SOC > 0.

CentrifugalPump Model Updates#

  • New Feature: Added CentrifugalPumpBase class where wear rates are parameters instead of part of the state vector.
    • Some users may use this class for prognostics, then use the parameter estimation tool occasionally to update the wear rates, which change very slowly.

  • Bugfix: Fixed bug where some event states were returned as negative

  • Bugfix: Fixed bug where some states were saved as parameters instead of part of the state.

  • Added example on use of CentrifugalPump Model (see examples.sim_pump)

  • Performance improvements

PneumaticValve Model Updates#

  • New Feature: Added PneumaticValveBase class where wear rates are parameters instead of part of the state vector.
    • Some users may use this class for prognostics, then use the parameter estimation tool occasionally to update the wear rates, which change very slowly.

  • Added example on use of PneumaticValve Model (see examples.sim_valve)