Use the builder pattern in core#703
Open
jetuk wants to merge 13 commits into
Open
Conversation
This moves some of the logic for constructing a complex core network into core itself. This is done using the builder pattern and should result in general move of code from schema to core. The eventual design goal is to have Network be generated and have only immutable methods. The solver and state can then be created using a unique ID (see generative pattern) allowing them to safely access network items without bounds checking (i.e. all indexes are known to be valid). Removes a lot of mutability in the main structs (e.g. Network). This will allow safe use of unchecked methods during simulation in future. See example with the ParameterTimings struct. # Conflicts: # pywr-core/src/models/multi.rs
# Conflicts: # pywr-schema/src/nodes/core.rs # pywr-schema/src/nodes/delay.rs # pywr-schema/src/nodes/loss_link.rs # pywr-schema/src/nodes/piecewise_link.rs # pywr-schema/src/nodes/river.rs # pywr-schema/src/nodes/river_gauge.rs # pywr-schema/src/parameters/discount_factor.rs # pywr-schema/src/parameters/hydropower.rs # pywr-schema/src/parameters/indexed_array.rs # pywr-schema/src/parameters/interpolated.rs # pywr-schema/src/parameters/polynomial.rs # pywr-schema/src/parameters/tables.rs
Distinguish between missing parameters and circular reference errors. Derive Debug for most structs to allow use of unwrap and expect on build methods.
Removes double building of the domain.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The main design goal here is to remove mutable methods from core's
Network. This will allow us to make stronger guarantees about the safety of indices in any given network (because you can only create one via a builder).It is a big refactor, but also simplifies the schema crate by removing the two stage (add-to-network then set-constraints) process. The schema now just needs to add things to the builder.