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

Add more imperial units #6

Open
HugoGranstrom opened this issue Jul 1, 2021 · 13 comments
Open

Add more imperial units #6

HugoGranstrom opened this issue Jul 1, 2021 · 13 comments

Comments

@HugoGranstrom
Copy link
Member

For the units tutorial I'm planning to write someday (hopefully soon) I think it would be nice to have lots of examples mixing SI and Imperial units (because it's a mess you don't want to deal with manually). So I thought I'd create a PR for it. The only thing I really need is which imperial units do we want to support? There are so many obscure ones out there. I know you want chain to be included but do you have any other preferences @Vindaar?

@Vindaar
Copy link
Member

Vindaar commented Jul 1, 2021

Well, on my part I'm pretty indifferent about what units to actually add. I suppose the common imperial ones are important. Of the more esoteric ones like chain I really don't care.

If you (or someone else) provides:

  • a full name
  • a shorthand
  • what quantity it is
  • a conversion to SI units

I'll happily implement it.

If someone wants me to implement too many, I'll probably think about a small rewrite of the internal code. New units are a bit annoying to add right now as the stuff needs to be inserted into too many places. It's not a lot of work, but it gets tiring. It should be rather easy to automate most of that away with a DSL for unit definitions (which would be great, as it might eventually allow for arbitrary systems of units based on user defined unit classes).

edit: on a more practical side for a possible blog: think about the units you want to include in it. Tell me about them 1-2 days in advance and I'll have them ready by the time you want to use them. :)

@HugoGranstrom
Copy link
Member Author

Well, on my part I'm pretty indifferent about what units to actually add. I suppose the common imperial ones are important. Of the more esoteric ones like chain I really don't care.

Well then we'll just implement the units I need at the moment 😜

If you (or someone else) provides: [...] I'll happily implement it.

That's nice of you :)

If someone wants me to implement too many, I'll probably think about a small rewrite of the internal code. New units are a bit annoying to add right now as the stuff needs to be inserted into too many places. It's not a lot of work, but it gets tiring. It should be rather easy to automate most of that away with a DSL for unit definitions (which would be great, as it might eventually allow for arbitrary systems of units based on user defined unit classes).

Oh that does sound quite tiring 🤔 A DSL for it is inevitable sometime in the future either way I guess? Just imagine how many lines of code that PR will remove 🤣

edit: on a more practical side for a possible blog: think about the units you want to include in it. Tell me about them 1-2 days in advance and I'll have them ready by the time you want to use them. :)

Again, very kind of you!:D I'm still doing some research into real-world examples where units caused trouble so I don't have a definite list yet but I can't imagine it being out of the most common units so I'll write you a list of the ones I think I'll use tomorrow.

On the topic of the blog, do you think Define custom units is something that should be included in a Units Basics tutorial in the current state of Unchained? (Referring to the fact you think it's quite verbose atm without a DSL)

@Vindaar
Copy link
Member

Vindaar commented Jul 1, 2021

If someone wants me to implement too many, I'll probably think about a small rewrite of the internal code. New units are a bit annoying to add right now as the stuff needs to be inserted into too many places. It's not a lot of work, but it gets tiring. It should be rather easy to automate most of that away with a DSL for unit definitions (which would be great, as it might eventually allow for arbitrary systems of units based on user defined unit classes).

Oh that does sound quite tiring A DSL for it is inevitable sometime in the future either way I guess? Just imagine how many lines of code that PR will remove

It probably won't remove any, because the macro magic required will eat those. But by now at least I have an idea that the whole implementation works and I can implement a macro. Originally it was more "exploratory research" and the hard part was the parsing, simplifications etc. Those will all remain unchanged fortunately (as all of that is independent of the actual units).

edit: on a more practical side for a possible blog: think about the units you want to include in it. Tell me about them 1-2 days in advance and I'll have them ready by the time you want to use them. :)

Again, very kind of you!:D I'm still doing some research into real-world examples where units caused trouble so I don't have a definite list yet but I can't imagine it being out of the most common units so I'll write you a list of the ones I think I'll use tomorrow.

You're welcome!

On the topic of the blog, do you think Define custom units is something that should be included in a Units Basics tutorial in the current state of Unchained? (Referring to the fact you think it's quite verbose atm without a DSL)

By defining a custom unit you mean some combination of existing ones (so just calling defUnit?) or adding completely new ones?

If the former, yes I'd include it, because it's just one macro call and people will need it.

If it's the latter, no. That is too clumsy at the moment and shouldn't be needed for most use cases (for that people should open issues for the time being).

@HugoGranstrom
Copy link
Member Author

It probably won't remove any, because the macro magic required will eat those. But by now at least I have an idea that the whole implementation works and I can implement a macro. Originally it was more "exploratory research" and the hard part was the parsing, simplifications etc. Those will all remain unchanged fortunately (as all of that is independent of the actual units).

Fair enough :)

By defining a custom unit you mean some combination of existing ones (so just calling defUnit?) or adding completely new ones?

I'm not sure tbh I'm still a bit confused when you need defUnit and when you don't 😅 But I guess it's the first case.

@HugoGranstrom
Copy link
Member Author

Ok did some digging on the Discord history and found the answer:

I've just added basic support for units written in accented quotes (`kg*m*s^-2` etc.). For arguments to procedures one needs to define essentially all units using defUnit before once (or use them using . operator before, which defines them automatically.

@HugoGranstrom
Copy link
Member Author

Okay here comes a list of some (hopefully) useful units:

  • Foot
    • Full name: Foot
    • Shorthand: ft
    • Quantity: Length
    • Conversion: 1 ft = 0.3048 m
  • Yard
    • Yard
    • yd
    • Length
    • 1 yd = 0.9144 m
  • Acre
    • Acre
    • acre (couldn't find any shorthand)
    • Area
    • 1 acre = 4046.8564224 m²
  • Ounce
    • Ounce
    • oz
    • Mass
    • 1 oz = 28.349523125 g
  • Slug
    • Slug
    • slug
    • Mass
    • 1 slug = 14.59390294 kg
  • Pound-force
    • PoundForce
    • lbf
    • Force
    • 1 lbf = 4.44822162 N (= g.to(ft•s⁻²) * 1.lbs)

That should be it for units. Noticed you didn't have the gravitational acceleration among the constants, I guess that should be added as well?

  • g0 = 9.80665.m•s⁻²
  • G = 6.67430.m³•kg⁻¹•s⁻²

@HugoGranstrom
Copy link
Member Author

And no hurry, I won't be able to do much work this weekend either way :)

@Vindaar
Copy link
Member

Vindaar commented Jul 3, 2021

Ah, I forgot the constants. Will add them later. And I'll be so prudent as to use the correct value for G. 🙊

@HugoGranstrom
Copy link
Member Author

Lots of thanks! :D No hurry! You mean the value I got from Wikipedia is wrong? 🤣 (Or shouldn't I have ignored the uncertainty perhaps :P)

@Vindaar
Copy link
Member

Vindaar commented Jul 3, 2021

Lots of thanks! :D No hurry! You mean the value I got from Wikipedia is wrong? (Or shouldn't I have ignored the uncertainty perhaps :P)

You forgot a tiny ⁻¹¹ in there. ;)
G = 6.67430.m³•kg⁻¹•s⁻²
vs
G = 6.67430e-11.m³•kg⁻¹•s⁻²

almost the same, haha.

@HugoGranstrom
Copy link
Member Author

Oh that tiny thing... 😆🙈

@Vindaar
Copy link
Member

Vindaar commented Dec 19, 2022

Not imperial, but noting it here: Consider adding Percent as an additional UnitLess unit.

@arkanoid87
Copy link

I have to copypaste si_units.nim to add

declareQuantities:
  Derived:
    SpecificEnergy:
      [(Length, 2), (Time, -2)]


declareUnits:
  Derived:
    BritishThermalUnit:
      short:
        btu
      quantity:
        Energy
      conversion:
        1055.06.J

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

No branches or pull requests

3 participants