-
Notifications
You must be signed in to change notification settings - Fork 84
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
H-3426: Implement folding for data type constraints #5380
Merged
TimDiekmann
merged 8 commits into
main
from
t/h-3426-implement-folding-for-data-type-constraints
Oct 17, 2024
Merged
H-3426: Implement folding for data type constraints #5380
TimDiekmann
merged 8 commits into
main
from
t/h-3426-implement-folding-for-data-type-constraints
Oct 17, 2024
Conversation
This file contains 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
github-actions
bot
added
area/apps > hash*
Affects HASH (a `hash-*` app)
area/libs
Relates to first-party libraries/crates/packages (area)
type/eng > backend
Owned by the @backend team
labels
Oct 11, 2024
Base automatically changed from
t/h-3425-provide-a-simple-is_valid-function
to
main
October 11, 2024 17:34
TimDiekmann
force-pushed
the
t/h-3426-implement-folding-for-data-type-constraints
branch
from
October 14, 2024 14:00
1c7c742
to
7d5b02e
Compare
indietyp
requested changes
Oct 15, 2024
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
minor question / spelling mistake
libs/@blockprotocol/type-system/rust/src/schema/data_type/constraint/array.rs
Show resolved
Hide resolved
libs/@blockprotocol/type-system/rust/src/schema/data_type/constraint/boolean.rs
Show resolved
Hide resolved
libs/@blockprotocol/type-system/rust/src/schema/data_type/constraint/mod.rs
Outdated
Show resolved
Hide resolved
libs/@blockprotocol/type-system/rust/src/schema/data_type/constraint/mod.rs
Show resolved
Hide resolved
Benchmark results
|
Function | Value | Mean | Flame graphs |
---|---|---|---|
entity_by_id | entity type ID: https://blockprotocol.org/@alice/types/entity-type/person/v/1
|
Flame Graph | |
entity_by_id | entity type ID: https://blockprotocol.org/@alice/types/entity-type/uk-address/v/1
|
Flame Graph | |
entity_by_id | entity type ID: https://blockprotocol.org/@alice/types/entity-type/organization/v/1
|
Flame Graph | |
entity_by_id | entity type ID: https://blockprotocol.org/@alice/types/entity-type/building/v/1
|
Flame Graph | |
entity_by_id | entity type ID: https://blockprotocol.org/@alice/types/entity-type/page/v/2
|
Flame Graph | |
entity_by_id | entity type ID: https://blockprotocol.org/@alice/types/entity-type/book/v/1
|
Flame Graph | |
entity_by_id | entity type ID: https://blockprotocol.org/@alice/types/entity-type/song/v/1
|
Flame Graph | |
entity_by_id | entity type ID: https://blockprotocol.org/@alice/types/entity-type/playlist/v/1
|
Flame Graph | |
entity_by_id | entity type ID: https://blockprotocol.org/@alice/types/entity-type/block/v/1
|
Flame Graph |
representative_read_entity_type
Function | Value | Mean | Flame graphs |
---|---|---|---|
get_entity_type_by_id | Account ID: d4e16033-c281-4cde-aa35-9085bf2e7579
|
Flame Graph |
scaling_read_entity_complete_zero_depth
Function | Value | Mean | Flame graphs |
---|---|---|---|
entity_by_id | 50 entities | Flame Graph | |
entity_by_id | 10 entities | Flame Graph | |
entity_by_id | 25 entities | Flame Graph | |
entity_by_id | 1 entities | Flame Graph | |
entity_by_id | 5 entities | Flame Graph |
scaling_read_entity_linkless
Function | Value | Mean | Flame graphs |
---|---|---|---|
entity_by_id | 1000 entities | Flame Graph | |
entity_by_id | 100 entities | Flame Graph | |
entity_by_id | 10 entities | Flame Graph | |
entity_by_id | 10000 entities | Flame Graph | |
entity_by_id | 1 entities | Flame Graph |
representative_read_multiple_entities
Function | Value | Mean | Flame graphs |
---|---|---|---|
entity_by_property | depths: DT=2, PT=2, ET=2, E=2 | Flame Graph | |
entity_by_property | depths: DT=255, PT=255, ET=255, E=255 | Flame Graph | |
entity_by_property | depths: DT=0, PT=0, ET=0, E=0 | Flame Graph | |
entity_by_property | depths: DT=0, PT=0, ET=0, E=2 | Flame Graph | |
entity_by_property | depths: DT=0, PT=2, ET=2, E=2 | Flame Graph | |
entity_by_property | depths: DT=0, PT=0, ET=2, E=2 | Flame Graph | |
link_by_source_by_property | depths: DT=2, PT=2, ET=2, E=2 | Flame Graph | |
link_by_source_by_property | depths: DT=255, PT=255, ET=255, E=255 | Flame Graph | |
link_by_source_by_property | depths: DT=0, PT=0, ET=0, E=0 | Flame Graph | |
link_by_source_by_property | depths: DT=0, PT=0, ET=0, E=2 | Flame Graph | |
link_by_source_by_property | depths: DT=0, PT=2, ET=2, E=2 | Flame Graph | |
link_by_source_by_property | depths: DT=0, PT=0, ET=2, E=2 | Flame Graph |
scaling_read_entity_complete_one_depth
Function | Value | Mean | Flame graphs |
---|---|---|---|
entity_by_id | 50 entities | Flame Graph | |
entity_by_id | 10 entities | Flame Graph | |
entity_by_id | 25 entities | Flame Graph | |
entity_by_id | 1 entities | Flame Graph | |
entity_by_id | 5 entities | Flame Graph |
indietyp
approved these changes
Oct 17, 2024
TimDiekmann
deleted the
t/h-3426-implement-folding-for-data-type-constraints
branch
October 17, 2024 18:40
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
area/apps > hash*
Affects HASH (a `hash-*` app)
area/libs
Relates to first-party libraries/crates/packages (area)
type/eng > backend
Owned by the @backend team
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.
🌟 What is the purpose of this PR?
When data types are resolved the constraints should be folded and minimized. This is the groundwork and logic to be used when combining different constraints.
🔍 What does this change?
combine
onConstraint
asConstraint
is generic andcombine
would not use the generic parameter. Instead, I renamedConstraint
toConstraintValidator
and added a newConstraint
trait. This adds acombine
method which takes a mutable reference to a constraint and consumes another constraint. If they can be fully combined,None
is returned, otherwiseSome
with the remaining constraints. If the constraints cannot be combined at all because it would be unsatisfiable it will error.fold_intersections
function to construct a vector of all intersections using thecombine
method. This Is used to shrink theallOf
constraints in the closed data types.This PR is still in draft as I have another PR in the queue to implement the number combination logic and need some more testing around the behavior and signatures. Probably I'm replacing the mutable reference with an owned value. Methods with mutable references returning a results need to be careful to not change the value if they return an error (side-effects), in most cases this is not desired.
Pre-Merge Checklist 🚀
🚢 Has this modified a publishable library?
This PR:
📜 Does this require a change to the docs?
The changes in this PR:
🕸️ Does this require a change to the Turbo Graph?
The changes in this PR:
🐾 Next steps
🛡 What tests cover this?
Tests will be added in the follow-ups