Skip to content
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

Conversion now has both a value and a factor type #453

Draft
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

mkalte666
Copy link

@mkalte666 mkalte666 commented Jan 15, 2024

Initially, ConversionFactor and thus Conversion::T requred PartialEq. This makes sense for the conversion factor itself (i.e. scaling across units), however it breaks once you introduce complex numbers.

Those can still be scaled just like normal numbers - you essentially just increase or decrese a vector length, but the conversion function cannot compare them - "Z_1 < Z_2" is not trivially decidable.

It is, however, also not needed - unit scales are just that - scalars that scale. And those can be easily compared.

This commit seperates Conversion::T into Conversion::VT and Conversion::T and moves the PartialEq requirements from ConversionFactor into Conversion::TT directly.

This requires a lot of trait bounds added down the line, so im not 100% that this does not break anything down the line.

There might be a nicer way to go about this, but i haven't found any.

closes #452

Please have a look and see if this is where it should go.

Things that still need to be done:

  • Unit test to make sure from/to complex conversion works and isnt broken somewhere by accident
  • ?

Initially, `ConversionFactor` and thus `Conversion::T` requred `PartialEq`.
This makes sense for the conversion factor itself (i.e. scaling across
units), however it breaks once you introduce complex numbers.

Those can *still* be scaled just like normal numbers - you essentially
just increase or decrese a vector length, but the conversion function
cannot compare them - "Z_1 < Z_2" is not trivially decidable.

It is, however, also not needed - unit scales are just that - scalars
that scale. And those can be easily compared.

This commit seperates `Conversion::T` into `Conversion::VT` and
`Conversion::T` and moves the `PartialEq` requirements from
`ConversionFactor` into `Conversion::TT` directly.

This requires a lot of trait bounds added down the line, so im not 100%
that this does not break anything down the line.

There might be a nicer way to go about this, but i haven't found any.

closes iliekturtles#452
@iliekturtles
Copy link
Owner

Thanks for the PR. I kicked off the CI checks and will try to review this weekend.

@mkalte666
Copy link
Author

Should i rebase this and try again? Or do you have a different solution/idea/want for this? Not sure when i can schedule time again, but with any luck i can get it in before the weekend.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Conversion to/from complex storage types is wrong
2 participants