Skip to content

Releases: nasa/fmdtools

v2.0-rc-5

12 Jun 23:47
ec0018d
Compare
Choose a tag to compare
v2.0-rc-5 Pre-release
Pre-release

Summary

This pre-release adds the following:

  • Add more features to Coords to support modelling, visualization, and animating environments
  • Supporting preliminary alignment between graph plots and our FRDL specification. This effort also refactored the graph module into a subpackage to support testing and future extensions, which means that any software using these graphs will need to adjust imports
  • Add/fix some bugs identified during new modelling efforts, like making it so non-default states sent to a model continue to be used in the model and deprecating methods in Function other than static_behavior and dynamic_behavior
  • Improving testing coverage
  • Docs no longer tracked (which was the case prior to 2.0-rc4
  • Aside from this, the fmdtools development environment has shifted to using Python 3.11. While older versions of python may still be compatible, it is recommended to update to install fmdtools in a Python 3.11 environment to remain up-to-date with our developments.

Detailed Release Notes

    Release Notes - Resilience Analysis and Design  - Version fmdtools 2.0-rc-5

Story

  • [RAD-374] - Create the ability to overlay multiple plots in the result.plot_metric_dist ()
  • [RAD-378] - Close missing testing pieces
  • [RAD-403] - Troupe fmdtools feature development opportunities
  • [RAD-406] - Align Graph representation with FRDL
  • [RAD-410] - Remove behavior() and condfaults() from function definition

Release Checklist

<style> </style>
Step Description Complete? Comment
1 Sync appropriate branches into release branch x  
1a "Internal branches (e.g. main dev)" x  
1b "External branches (e.g. main)" x  
2 Run script run_all_tests.py and verify test results are appropriate x  
2a "Run full tests" x  
2b "Regenerate badge" x  
3 Update version numbers in appropriate files x  
3a "Check files conf.py LICENSE.py README.py Intro_to_fmdtools.md pyproject.toml" x  
3b "Run a repository-wide search for the version number" x  
4 Generate the documentation using "./make html" x  
5 Commit and tag branch with the appropriate version. x  
5a "git tag -a v2.x.x -m 'version 2.x.x'" x  
6 Sync to remotes x  
6a "Push release branch to github and internal remotes" x  
6b "Push docs using git subtree push --prefix=_build/html public gh-pages" x  
7 Create a release in GitHub x  
7a "incorporate a narrative summary of features and changes" x  
7b "incorporate the auto-generated bitbucket release notes." x  
8 "Update project plan" x  
8a "Include any changed dependencies" x  
8b "Include version in schedule" x  
8c "Identify and include additional changes/activities" x  
9 Update/check external CI resources as needed x  
9a "CodeFactor" x from 110 to 99 issues
10 If release is 'stable' Upload to PyPI (see below N/A N/A

v2.0-rc-4

22 May 00:05
cafbacb
Compare
Choose a tag to compare
v2.0-rc-4 Pre-release
Pre-release

v2.0-rc-4 is mainly an update to documentation in preparation to the official v2.0 release.

Highlights include:

  • Updated logo
  • Improved organization of docs
  • More resources for docs (figures/diagrams, etc)
  • Removed minor bug in Result.get_values

Notes:

    Release Notes - Resilience Analysis and Design  - Version fmdtools 2.0-rc-4

Story

  • [RAD-241] - Release documentation update

Full Changelog: v2.0-rc-3...v2.0-rc-4

<style> </style>
Step Description Complete? Comment
1 Sync appropriate branches into release branch x  
1a "Internal branches (e.g. main dev)" x  
1b "External branches (e.g. main)" x  
2 Run script run_all_tests.py and verify test results are appropriate x  
2a "Run full tests" x  
2b "Regenerate badge" x  
3 Update version numbers in appropriate files x updated to 2.0-rc-4
3a "Check files conf.py LICENSE.py README.py Intro_to_fmdtools.md pyproject.toml" x  
3b "Run a repository-wide search for the version number" x  
4 Generate the documentation using "./make html" x  
5 Commit and tag branch with the appropriate version. x  
5a "git tag -a v2.x.x -m 'version 2.x.x'" x  
6 Sync to remotes x  
6a "Push release branch to github and internal remotes" x  
6b "Push docs using git subtree push --prefix=_build/html public gh-pages" x  
7 Create a release in GitHub x  
7a "incorporate a narrative summary of features and changes" x  
7b "incorporate the auto-generated bitbucket release notes." x  
8 "Update project plan" x  
8a "Include any changed dependencies" x  
8b "Include version in schedule" x  
8c "Identify and include additional changes/activities" x  
9 Update/check external CI resources as needed x  
9a "CodeFactor" x  
10 If release is 'stable' Upload to PyPI (see below x  

v2.0-rc-3

11 May 00:44
Compare
Choose a tag to compare
v2.0-rc-3 Pre-release
Pre-release

These updates cover basic adaptation of the rover model(s) and use cases, not counting the adaptation will need to be done for various papers.

  • Notably, it re-adds the ability to sample from histories using the ParameterHistSample class.
  • It also adapts a few of the notebooks for the RoverModel using this new class.
  • It also cleans up a few bugs which have been identified so far.
  • This version also comes with significant updates to documentation, to reflect upcoming release.

Full Changelog: v2.0-rc-2...v2.0-rc-3

Links to Bugs/Stories

  • [RAD-389] - Final Version 2 Rover Adaptation and Bugfixes

Checklist

<style> </style> <style> </style>
Step Description Complete? Comment
1 Sync appropriate branches into release branch x  
1a "Internal branches (e.g. main dev)" x  
1b "External branches (e.g. main)" x  
2 Run script run_all_tests.py and verify test results are appropriate x  
2a "Run full tests" x All pass except skiped. Added RAD-401 for numpy warning
2b "Regenerate badge" x  
3 Update version numbers in appropriate files x 2.0-rc-3
3a "Check files conf.py LICENSE.py README.py Intro_to_fmdtools.md" x  
3b "Run a repository-wide search for the version number" x added pyproject.toml to list for next time
4 Generate the documentation using "./make html" x  
5 Commit and tag branch with the appropriate version. x  
5a "git tag -a v2.x.x -m 'version 2.x.x'" x  
6 Sync to remotes x  
6a "Push release branch to github and internal remotes" x  
6b "Overwrite documentation on gh-pages and push to GitHub" x  
7 Create a release in GitHub x  
7a "incorporate a narrative summary of features and changes" x  
7b "incorporate the auto-generated bitbucket release notes." x Using github notes instead
8 "Update project plan" x  
8a "Include any changed dependencies" x  
8b "Include version in schedule" x  
8c "Identify and include additional changes/activities" x  
9 Update/check external CI resources as needed x Some issues added but still rated A
9a "CodeFactor" x  
10 If release is 'stable' Upload to PyPI (see below N/A  

2.0-rc-2

03 Feb 01:48
Compare
Choose a tag to compare
2.0-rc-2 Pre-release
Pre-release

The 2.0-rc-2 release adds more polish to the fmdtools codebase prior to release. This progress point represents a final refinement on the codebase and features prior to our official release.

The main changes are:

  • All blocks now require a defined slots for new objects, encouraging speed and type-safety

  • Results now save using numpy.save, removing an instance where the pickle module was (unsafely) being used to save and load results

  • Bringing several research examples in the rover up to speed with the current developments in fmdtools

  • Incorporation of a new taxiway model to demonstrate modelling of Systems of Systems

  • A polishing of the documentation repository.

      Release Notes - Resilience Analysis and Design  - Version fmdtools 2.0-rc-2
    

Story

  • [RAD-224] - Adapt AST Sampling notebook/methodology
  • [RAD-242] - Incorporate Taxiway model in examples
  • [RAD-249] - Avoid and deprecate pickle for save/load
  • [RAD-317] - Fix bug in multiplots - ticks should rotate even if no plot
  • [RAD-337] - Enable better attribute safety in Flows, Blocks, etc
<style> </style>

Release Checklist

Step Description Complete? Comment
1 Sync appropriate branches into release branch x  
1a "Internal branches (e.g. main dev)" x  
1b "External branches (e.g. main)" x  
2 Run script run_all_tests.py and verify test results are appropriate x  
2a "Run full tests" x Errors added as bug:s =========================== short test summary info =========================== ERROR examples/rover/rover_mode_space.py - TypeError: 'NoneType' object is not callable ERROR examples/rover/optimization/ea_analysis.py - FileNotFoundError: [Errno 2] No such file or directory: 'results/rslt_ea.csv'
2b "Regenerate badge" x  
3 Update version numbers in appropriate files x  
3a "Check files conf.py LICENSE.py README.py Intro_to_fmdtools.md" x  
3b "Run a repository-wide search for the version number" x  
4 Generate the documentation using "./make html" x  
5 Commit and tag branch with the appropriate version. x  
5a "git tag -a v2.x.x -m 'version 2.x.x'" x  
6 Sync to remotes x  
6a "Push release branch to github and internal remotes" x  
6b "Overwrite documentation on gh-pages and push to GitHub" x  
7 Create a release in GitHub x  
7a "incorporate a narrative summary of features and changes" x  
7b "incorporate the auto-generated bitbucket release notes." x  
8 "Update project plan" x  
8a "Include any changed dependencies" x  
8b "Include version in schedule" x  
8c "Identify and include additional changes/activities" x  
9 Update/check external CI resources as needed x  
9a "CodeFactor" x  Grade went from A- to A!
10 If release is 'stable' Upload to PyPI (see below N/A  

2.0-rc-1

08 Jan 23:27
Compare
Choose a tag to compare
2.0-rc-1 Pre-release
Pre-release

Narrative Summary

Version 2.0-rc-1 represents the final major change in the 2.0 release cycle for fmdtools. The major change here is a major refactoring of the define package, resulting in more tractable syntax for Block and Architecture classes. This effort represents a final shaping of the underlying fmdtools simulation structures into a logical, organized, object-oriented simulatin language. Note that models from 2.0-beta-3 and before will thus need to be adapted somewhat to work with this version. Some major changes include:

  • Re-organization of define package into object, container, block, and architecture subpackages representing each type of simulation.
  • Definition of new BaseObject, Container, and Architecture classes which are now used to define how simulation structures initialize attributes, create histories, return mutables, etc
  • FxnBlock is now named Function in keeping with class name convention
  • Model, ASG, Comparch repaced by FunctionArchitecture, ActionArchitecture, and ComponentArchitecture classes which all inherit from/specialize the base Architecture class
  • Simulation histories now fully created at instantiation via the tracking argument rather than in propagate.
  • Roles (i.e., init_c, init_p, init_flowname) now given explicit names corresponding to their type (i.e., container_c, container_p, flow_flowname)
  • Basic adaptation of tests, examples, and documentation.
  • Usage of "coverage" package in testing to give overall testing coverage report.

Auto-generated release notes

    Release Notes - Resilience Analysis and Design  - Version fmdtools 2.0-rc-1

Sub-task

  • [RAD-334] - Create sub-package for roles
  • [RAD-335] - Decompose/Refactor Architectures

Story

  • [RAD-233] - Refactor and Generalize Architectures (ASG, CompArch, Model)
  • [RAD-319] - Add testing coverage to code testing reporting

Release checklist

Read more

2.0-beta3

22 Nov 11:26
Compare
Choose a tag to compare
2.0-beta3 Pre-release
Pre-release

Overall Summary:
This PR covers the reimplementation of fmdtools.sim.search.ProblemInterface as:
• ParameterSimProblem, a class for optimizing parameters over simulations
• FaultSimProblem, a class for optimizing fault times
• DisturbanceSimProblem, a class for optimizing disturbances in the context of a simulation
• SimpleProblem, a class for setting up external function calls in an optimization
• ProblemArchitecture, a class for connecting different problems in an overall optimization architecture
It also covers adaptation of examples and tests to fit this:
• Pump optimization
• Drone/multirotor optimization
• Tank optimization
• New exampes/tests in the docstrings
Also in this PR are some bugfixes for the new version of recordclass (0.21).

Commit Narrative:
• Developing ParameterSearch class
o ParameterSearch will be used to search ParameterDomains over sims
o Add ability to pass variable mappings to ParameterDomains so you can search/sample discrete parameters more easily
• Adding tests/docs to ParameterProblem
o ExampleParameter, ExampleState, ExampleFxnBlocks defined in respective modules for testing purposes
o Tests added to ParameterProblem showcasing input/output callables
• Adding ParameterProblem to Search
o ParameterProblem added to search
o Some consolidation of drone scripts
• Adding tests for Drone to example
o Basic search tests added for Drone
o Variables now nan at initialization (instead of 0.0)
• Adding single-fault and disturbance optimization classes
-DisturbanceProblem, SingleFaultProblem now available for optimizaiton
o Tests of both in docs + drone model
o Fixed bug in Block copying--no longer requires new flows
o Single/JointFault scenario generation moved to respective scenario classes form sample.
• Developing SimpleProblem
o SimpleProblem added to search for callables which will be input to a ProblemArchitecture for the Drone (and others)
• More initial work on ProblemArchitecture
• Update search_testing.py
• More prototyping of ProblemArchitechture
• Adding way to connect/update variables in ProblemArchitectechture
• Further work on Problem Architecture
o Creating test problemarch to use in doctest
o Made it so that Problem tests can be imported from the module (and into ProblemArch)
• Creating initial docstrings for ProblemArchitecture
• Adding preliminary tests to ProblemArchitecture
o doctests now used for some problemarchitecture functions
• More development of ProblemArchitecture
o ProblemArch now mirrors objectives/constraints at arch level
o ProblemArch now creates callables for objectives/constraints at arch level
o ProblemArch now checks/updates consistency of upstream/downstream sims
• Incorporating ParameterArchitecture in search
o Added tests, examples, and docstrings to ParameterArchitecture.
o ParameterArchitecture moved from search_testing to search.
• Reformat DynamicInterface
DynamicInterface now follows programming style
• Adapting Drone Optimization
o drone_opt_rural now has problems defined
o adding better support for nested variables--now properly sets args
• More drone optimization adaptation
o Full optimization architecture implemented on drone arch
o Added ability to not include nominal result in fault scenario optimization
• Update recordclass requirement
o Recordclass to be used now 0.21.1, updated docs and modules to reflect this
• Adding optimization problem timing, history
o iter_hist now records the problem iterations
o time_execution can now be used to time the amount of time a problem takes to sim/update
o some adaptation of common and history to support iteration histories
• Adding ability to use history values as objectives/constraints
• Drone optimization example now working/up-to-date
o Adapted multirotor optimization notebook and consolidated codes from opt_drone_rural and search_testing into it
o propagate now has a fault_sample_from method which auto-generates a SampleApproach from arguments/nominal
o some polishing of search methods--now make it so showprogress=false by default, can work with multiple returns
o fixed various bugs in the drone model, coords, rand
• Adapting pump optimization
o bugfixing so that states etc copy instead of use defaults
o halfway done on pump optimization notebook
o some fixes to pump_stochastic.py
• Finishing Pump Optimization
o Optimization notebook for pump finished
o 'expected cost' changed to 'expected_cost' everywhere
• Finished adapting tank optimization example
o Tank optimization notebook completed. This notebook incorporates all functions from tank_opt.py
o Fixed bugs in tank optimization model
o Fixed bugs in search--objective connectors now work as desired
o closes RAD-328

Checklist

Read more

v2.0-beta2

02 Nov 21:19
Compare
Choose a tag to compare
v2.0-beta2 Pre-release
Pre-release

Summary

This second beta milestone for the fmdtools-2.0 development cycle has focused on the refactoring of fault and parameter sampling functionality, along with the analyze module as a whole. Notably, this refactoring has increased our codefactor score from C+ to B+, mainly from the refactoring of major trouble spots like fmdtools.sim.approach and fmdtools.analyze.plot. Throughout this process, we also have added 57 new tests, bringing us to 266 from 209.

Details

  • Replacement of approach module (NominalApproach and SampleApproach) with analyze.phases and sim.sample modules with the following classes:
    • FaultDomain for specifying types of fault modes to sample from
    • FaultSample for sampling these modes (Generating FaultScenarios)
    • PhaseMap for (and phases module) for representing phases of operation from the model history for fault sampling
    • SampleApproach for joining multiple faultsamples over multiple FaultDomains
    • ParameterDomain for defining variables to sample from parameters
    • ParameterSample for sampling parameters from a parameterdomain (generating ParameterScenarios)
  • Adaptation of propagate methods to align with these new names/classes. e.g., propagate.nominal_approach is now propagate.parameter_sample, etc.
  • Replacement of tabulate/plot methods with classes that perform the same role
    • FMEA taking the role of fmea()
    • Comparison taking the role of nominal_factor_comparison, nested_factor, comparison, etc
    • NominalEnvelope taking the role of plot.nominal_vals_xd
  • Refactoring analyze functionality to follow an object-oriented (rather than module-oriented) convention:
    • show module methods now a part of their respective classes (Geom, Coords, etc)
    • plot_dyn_order now a part of Model
    • plot_trajectories and plot_hist now a part of History
    • plot_metric now a part of Result, History
  • Creation of a analyze.common module for remaining base plot, analysis functionality
  • Removal of show, plot modules
  • Adaptation of presently-working examples and tests.

Auto-generated release notes:

Sub-task

  • [RAD-96] - Refactor SampleApproach
  • [RAD-255] - Adapt SampleApproach Use-cases in Rover Example
  • [RAD-259] - Enable exploration of sub-parameters in NominalApproach
  • [RAD-268] - Update Propagate methods
  • [RAD-272] - Fix complexity in plot module

Epic

  • [RAD-70] - Create function, flow, patterns/attributes for next generation of the Stereo Model

Story

  • [RAD-258] - Fix/update tabulate module and less-used plot methods
  • [RAD-260] - Refactor approach classes

Release checklist

Read more

v2.0-beta1

29 Sep 22:34
Compare
Choose a tag to compare
v2.0-beta1 Pre-release
Pre-release

Beta 1 Milestone: Environments, Coords, and Geoms

The beta1 milestone enables the modelling of environments using the Environment flow. Environments are CommsFlows which may be additionally be composed of two new classes:

  • Coords, which enables the modelling of gridworlds
  • GeomArch, which enables the modelling of maps/shapes via the newly-developed Geom, Geom

There is also additionally now a analyze.show module for showing these geometry classes, along with other aspects of the model which occur in 3d space (e.g., trajectories).

These classes/modules are now showcased in the (newly-refactored) multirotor model (which shows an adaptation of Coords) as well as the rover model (which shows an adaptation of GeomArch).

Full Changelog: v2.0-beta-0.0...v2.0-beta1

v2.0-beta

11 Aug 03:48
Compare
Choose a tag to compare
v2.0-beta Pre-release
Pre-release

Features

Some of the major features in the first -beta release include:

What's Changed

  • [RAD-168] - Create DSA analyses (indicator analyses)
  • [RAD-201] - Finish Adaptation of Examples
  • [RAD-226] - Figure out/fix local/comms argument to Block
  • [RAD-236] - Update with recordclass version
  • [RAD-240] - Fix nominal_vals_2d (3d and others)
  • [RAD-63] - Move tutorial to something persistently editable or viewable online
  • [RAD-195] - Edit Pump Example(s) and revise Docs
  • graph.py code cleaning by @louwersj in #7
    • plot.py cleaned import order - take note - TODO by @louwersj in #8
  • Improved search.py by @louwersj in #9
  • Update README.md by @hulsed in #15
  • Update Tank_Analysis.ipynb by @ColeJetton in #16
  • Tank and Multirotor Notebook Improvements by @ColeJetton in #18
  • Fixed Development Guide.rst hyperlinks by @ColeJetton in #19
  • Changes on MultiFlow demo and Tank_Analysis update. by @ColeJetton in #20
  • Documentation Improvement by @ColeJetton in #21

New Contributors

Full Changelog: v2.0-alpha...v2.0-beta-0.0

v2.0-alpha

17 May 01:17
Compare
Choose a tag to compare
v2.0-alpha Pre-release
Pre-release

2.0-alpha Release Update

The 2.0-alpha release brings a number of high-level, far-reaching changes to the fmdtools codebase, which change how models are defined, simulated, and analyzed. As a result of all of these changes, you can expect many of the old commands and syntaxes to no longer be present--the codebase has essentially been almost completely refactored with the long-term goal of making development easier and improving the underlying interfaces/syntaxes. The major goals of the 2.0 development cycle have been to:

  1. Decompose the overall model architecture into individual classes which can be documented, simulated, tested, and analyzed individually and composed in different model architectures. This has been done by creating specialized classes for States, Modes, Rands, Graphs, Results, Historys, etc.
  2. Replace dictionaries with recordclass-based classes when possible to reduce memory usage and better enable users to define model states.
  3. Refactor the overall module architecture to enable better discovery of fmdtools classes.
  4. Enable the simulation, analysis, and visualization of communications and perception via specialized constructs (MultiFlow and CommsFlow).
  5. Enable the simulation of indicators to track the occurrence of conditions and use them to start/end a given simulation (replacing end_conditions)

This is an alpha release, meaning that much of the code/tests/documentation here are not fully stable and are subject to to change. The goal of the alpha release is to show progress towards important features while enabling users to try what is here and find bugs. Expect further updates to documentation in the future to match all of the changes shown here.

Detailed Release Notes - Resilience Analysis and Design - Version fmdtools 2.0-alpha

Sub-task

  • [RAD-184] - Generalize rd.graph methods
  • [RAD-185] - add/refactor graphing methods to model constructs
  • [RAD-186] - propositional network graphs
  • [RAD-187] - Get graph properties from History

Bug

  • [RAD-86] - An error is thrown out when states are assigned lists
  • [RAD-89] - The function type is always set to 'comms' when creating CommsFlow

Epic

  • [RAD-77] - Create modelling features for DSA research
  • [RAD-170] - Low-level Software Engineering Improvements

Story

  • [RAD-61] - Unify tracking/display options with get_var syntax
  • [RAD-71] - Create Information Flow
  • [RAD-78] - Add ability to create propositional network from flows
  • [RAD-79] - Add specialized comms flow type
  • [RAD-80] - Add "Goals" to functions
  • [RAD-87] - User feedback bugfixes/improvements
  • [RAD-88] - Remove unnecessary sys.path calls
  • [RAD-92] - Augment CommsFlow to enable ATC communications
  • [RAD-97] - Enable multiple end_conditions via indicators
  • [RAD-98] - Refactor Graphing
  • [RAD-158] - Use __slots__/recordclass
  • [RAD-161] - Add Model Development Guide
  • [RAD-171] - Create and leverage base types: Parameters
  • [RAD-172] - Refactor all modules
  • [RAD-173] - Create and leverage base type: History
  • [RAD-174] - Create and leverage base type: States
  • [RAD-175] - Consolidate examples
  • [RAD-179] - Refactor Block/FxnBlock
  • [RAD-182] - Refactor Model
  • [RAD-183] - Add ability to simulate FxnBlock, ASG, Block in sim.propagate
  • [RAD-199] - Refactor and iterate on Graph Module

Task

  • [RAD-73] - Fix restuldisp.graph.GraphInteractor output
  • [RAD-188] - Split readme out of docs
  • [RAD-194] - Use Parameter in propagate