diff --git a/wpiunits/generate_units.py b/wpiunits/generate_units.py index 2c4bc0856ea..22d46561a24 100755 --- a/wpiunits/generate_units.py +++ b/wpiunits/generate_units.py @@ -51,6 +51,7 @@ def output(outPath, outfn, contents): "Mult", "Per", "Power", + "Resistance", "Temperature", "Time", "Torque", @@ -91,7 +92,11 @@ def output(outPath, outfn, contents): """ ), }, - "Current": {"base_unit": "Amps", "multiply": {"Voltage": "Power"}, "divide": {}}, + "Current": { + "base_unit": "Amps", + "multiply": {"Voltage": "Power", "Resistance": "Voltage"}, + "divide": {}, + }, "Dimensionless": { "base_unit": "Value", "multiply": { @@ -225,6 +230,13 @@ def output(outPath, outfn, contents): }, "divide": {"Voltage": "Current", "Current": "Voltage", "Energy": "Frequency"}, }, + "Resistance": { + "base_unit": "Ohms", + "multiply": { + "Current": "Voltage", + }, + "divide": {}, + }, "Temperature": {"base_unit": "Kelvin", "multiply": {}, "divide": {}}, "Time": { "base_unit": "Seconds", @@ -272,7 +284,16 @@ def output(outPath, outfn, contents): }, "divide": {}, }, - "Voltage": {"base_unit": "Volts", "multiply": {"Current": "Power"}, "divide": {}}, + "Voltage": { + "base_unit": "Volts", + "multiply": { + "Current": "Power", + }, + "divide": { + "Resistance": "Current", + "Current": "Resistance", + }, + }, } @@ -331,7 +352,6 @@ def indent(multiline_string, indentation): def main(): - dirname, _ = os.path.split(os.path.abspath(__file__)) env = Environment( diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Acceleration.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Acceleration.java index f4ceb282439..9b512b028bb 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Acceleration.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Acceleration.java @@ -277,6 +277,17 @@ default Per, PowerUnit> divide(Power divisor) { } + @Override + default Mult, ResistanceUnit> times(Resistance multiplier) { + return (Mult, ResistanceUnit>) Measure.super.times(multiplier); + } + + @Override + default Per, ResistanceUnit> divide(Resistance divisor) { + return (Per, ResistanceUnit>) Measure.super.divide(divisor); + } + + @Override default Mult, TemperatureUnit> times(Temperature multiplier) { return (Mult, TemperatureUnit>) Measure.super.times(multiplier); diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Angle.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Angle.java index c182d48f3c1..ab576da86be 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Angle.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Angle.java @@ -277,6 +277,17 @@ default Per divide(Power divisor) { } + @Override + default Mult times(Resistance multiplier) { + return (Mult) Measure.super.times(multiplier); + } + + @Override + default Per divide(Resistance divisor) { + return (Per) Measure.super.divide(divisor); + } + + @Override default Mult times(Temperature multiplier) { return (Mult) Measure.super.times(multiplier); diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/AngularAcceleration.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/AngularAcceleration.java index 44ff1c395b1..6ca0f01dc9b 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/AngularAcceleration.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/AngularAcceleration.java @@ -277,6 +277,17 @@ default Per divide(Power divisor) { } + @Override + default Mult times(Resistance multiplier) { + return (Mult) Measure.super.times(multiplier); + } + + @Override + default Per divide(Resistance divisor) { + return (Per) Measure.super.divide(divisor); + } + + @Override default Mult times(Temperature multiplier) { return (Mult) Measure.super.times(multiplier); diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/AngularMomentum.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/AngularMomentum.java index 631ac45cafa..6a3ec3a9d1a 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/AngularMomentum.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/AngularMomentum.java @@ -277,6 +277,17 @@ default Per divide(Power divisor) { } + @Override + default Mult times(Resistance multiplier) { + return (Mult) Measure.super.times(multiplier); + } + + @Override + default Per divide(Resistance divisor) { + return (Per) Measure.super.divide(divisor); + } + + @Override default Mult times(Temperature multiplier) { return (Mult) Measure.super.times(multiplier); diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/AngularVelocity.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/AngularVelocity.java index 5c017c5c8f1..c10c4c40898 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/AngularVelocity.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/AngularVelocity.java @@ -277,6 +277,17 @@ default Per divide(Power divisor) { } + @Override + default Mult times(Resistance multiplier) { + return (Mult) Measure.super.times(multiplier); + } + + @Override + default Per divide(Resistance divisor) { + return (Per) Measure.super.divide(divisor); + } + + @Override default Mult times(Temperature multiplier) { return (Mult) Measure.super.times(multiplier); diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Current.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Current.java index e7af53dfdac..b810c54536c 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Current.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Current.java @@ -277,6 +277,17 @@ default Per divide(Power divisor) { } + @Override + default Voltage times(Resistance multiplier) { + return Volts.of(baseUnitMagnitude() * multiplier.baseUnitMagnitude()); + } + + @Override + default Per divide(Resistance divisor) { + return (Per) Measure.super.divide(divisor); + } + + @Override default Mult times(Temperature multiplier) { return (Mult) Measure.super.times(multiplier); diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Dimensionless.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Dimensionless.java index 942f55d4155..fb2627c61b9 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Dimensionless.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Dimensionless.java @@ -277,6 +277,17 @@ default Per divide(Power divisor) { } + @Override + default Mult times(Resistance multiplier) { + return (Mult) Measure.super.times(multiplier); + } + + @Override + default Per divide(Resistance divisor) { + return (Per) Measure.super.divide(divisor); + } + + @Override default Temperature times(Temperature multiplier) { return Kelvin.of(baseUnitMagnitude() * multiplier.baseUnitMagnitude()); diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Distance.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Distance.java index f87106362ef..10d4fcfcdc2 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Distance.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Distance.java @@ -277,6 +277,17 @@ default Per divide(Power divisor) { } + @Override + default Mult times(Resistance multiplier) { + return (Mult) Measure.super.times(multiplier); + } + + @Override + default Per divide(Resistance divisor) { + return (Per) Measure.super.divide(divisor); + } + + @Override default Mult times(Temperature multiplier) { return (Mult) Measure.super.times(multiplier); diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Energy.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Energy.java index d20f8f19622..c5c881ac15d 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Energy.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Energy.java @@ -277,6 +277,17 @@ default Per divide(Power divisor) { } + @Override + default Mult times(Resistance multiplier) { + return (Mult) Measure.super.times(multiplier); + } + + @Override + default Per divide(Resistance divisor) { + return (Per) Measure.super.divide(divisor); + } + + @Override default Mult times(Temperature multiplier) { return (Mult) Measure.super.times(multiplier); diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Force.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Force.java index 2f69f808b8b..8be6ce514d5 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Force.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Force.java @@ -277,6 +277,17 @@ default Per divide(Power divisor) { } + @Override + default Mult times(Resistance multiplier) { + return (Mult) Measure.super.times(multiplier); + } + + @Override + default Per divide(Resistance divisor) { + return (Per) Measure.super.divide(divisor); + } + + @Override default Mult times(Temperature multiplier) { return (Mult) Measure.super.times(multiplier); diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Frequency.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Frequency.java index ebce2a9a31c..e7d2f8b6c59 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Frequency.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Frequency.java @@ -277,6 +277,17 @@ default Per divide(Power divisor) { } + @Override + default Mult times(Resistance multiplier) { + return (Mult) Measure.super.times(multiplier); + } + + @Override + default Per divide(Resistance divisor) { + return (Per) Measure.super.divide(divisor); + } + + @Override default Mult times(Temperature multiplier) { return (Mult) Measure.super.times(multiplier); diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableResistance.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableResistance.java new file mode 100644 index 00000000000..34b780e7d3f --- /dev/null +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/ImmutableResistance.java @@ -0,0 +1,28 @@ +// Copyright (c) FIRST and other WPILib contributors. +// Open Source Software; you can modify and/or share it under the terms of +// the WPILib BSD license file in the root directory of this project. + +// THIS FILE WAS AUTO-GENERATED BY ./wpiunits/generate_units.py. DO NOT MODIFY + +package edu.wpi.first.units.measure; + +import static edu.wpi.first.units.Units.*; +import edu.wpi.first.units.*; + +@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +public record ImmutableResistance(double magnitude, double baseUnitMagnitude, ResistanceUnit unit) implements Resistance { + @Override + public Resistance copy() { + return this; + } + + @Override + public String toString() { + return toShortString(); + } + + @Override + public boolean equals(Object o) { + return o instanceof Measure m && isEquivalent(m); + } +} diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/LinearAcceleration.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/LinearAcceleration.java index f595bcc33ff..f26715af809 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/LinearAcceleration.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/LinearAcceleration.java @@ -277,6 +277,17 @@ default Per divide(Power divisor) { } + @Override + default Mult times(Resistance multiplier) { + return (Mult) Measure.super.times(multiplier); + } + + @Override + default Per divide(Resistance divisor) { + return (Per) Measure.super.divide(divisor); + } + + @Override default Mult times(Temperature multiplier) { return (Mult) Measure.super.times(multiplier); diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/LinearMomentum.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/LinearMomentum.java index 92177a9598c..038dad4a0ba 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/LinearMomentum.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/LinearMomentum.java @@ -277,6 +277,17 @@ default Per divide(Power divisor) { } + @Override + default Mult times(Resistance multiplier) { + return (Mult) Measure.super.times(multiplier); + } + + @Override + default Per divide(Resistance divisor) { + return (Per) Measure.super.divide(divisor); + } + + @Override default Mult times(Temperature multiplier) { return (Mult) Measure.super.times(multiplier); diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/LinearVelocity.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/LinearVelocity.java index 4f3d1c389de..26376dfb177 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/LinearVelocity.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/LinearVelocity.java @@ -277,6 +277,17 @@ default Per divide(Power divisor) { } + @Override + default Mult times(Resistance multiplier) { + return (Mult) Measure.super.times(multiplier); + } + + @Override + default Per divide(Resistance divisor) { + return (Per) Measure.super.divide(divisor); + } + + @Override default Mult times(Temperature multiplier) { return (Mult) Measure.super.times(multiplier); diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Mass.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Mass.java index 6046be68d45..9ce34abf0a2 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Mass.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Mass.java @@ -277,6 +277,17 @@ default Per divide(Power divisor) { } + @Override + default Mult times(Resistance multiplier) { + return (Mult) Measure.super.times(multiplier); + } + + @Override + default Per divide(Resistance divisor) { + return (Per) Measure.super.divide(divisor); + } + + @Override default Mult times(Temperature multiplier) { return (Mult) Measure.super.times(multiplier); diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MomentOfInertia.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MomentOfInertia.java index c56c6ba0015..f8c9e83889c 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MomentOfInertia.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MomentOfInertia.java @@ -277,6 +277,17 @@ default Per divide(Power divisor) { } + @Override + default Mult times(Resistance multiplier) { + return (Mult) Measure.super.times(multiplier); + } + + @Override + default Per divide(Resistance divisor) { + return (Per) Measure.super.divide(divisor); + } + + @Override default Mult times(Temperature multiplier) { return (Mult) Measure.super.times(multiplier); diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Mult.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Mult.java index 9ea6033054f..92c4a179677 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Mult.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Mult.java @@ -277,6 +277,17 @@ default Per, PowerUnit> divide(Power divisor) { } + @Override + default Mult, ResistanceUnit> times(Resistance multiplier) { + return (Mult, ResistanceUnit>) Measure.super.times(multiplier); + } + + @Override + default Per, ResistanceUnit> divide(Resistance divisor) { + return (Per, ResistanceUnit>) Measure.super.divide(divisor); + } + + @Override default Mult, TemperatureUnit> times(Temperature multiplier) { return (Mult, TemperatureUnit>) Measure.super.times(multiplier); diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutResistance.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutResistance.java new file mode 100644 index 00000000000..6acee59f56d --- /dev/null +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/MutResistance.java @@ -0,0 +1,25 @@ +// Copyright (c) FIRST and other WPILib contributors. +// Open Source Software; you can modify and/or share it under the terms of +// the WPILib BSD license file in the root directory of this project. + +// THIS FILE WAS AUTO-GENERATED BY ./wpiunits/generate_units.py. DO NOT MODIFY + +package edu.wpi.first.units.measure; + +import static edu.wpi.first.units.Units.*; +import edu.wpi.first.units.*; +import edu.wpi.first.units.mutable.MutableMeasureBase; + +@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +public final class MutResistance + extends MutableMeasureBase + implements Resistance { + public MutResistance(double magnitude, double baseUnitMagnitude, ResistanceUnit unit) { + super(magnitude, baseUnitMagnitude, unit); + } + + @Override + public Resistance copy() { + return new ImmutableResistance(magnitude(), baseUnitMagnitude(), unit()); + } +} diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Per.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Per.java index b467e977a0e..74610e40101 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Per.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Per.java @@ -277,6 +277,17 @@ default Per, PowerUnit> divide(Power divisor) { } + @Override + default Mult, ResistanceUnit> times(Resistance multiplier) { + return (Mult, ResistanceUnit>) Measure.super.times(multiplier); + } + + @Override + default Per, ResistanceUnit> divide(Resistance divisor) { + return (Per, ResistanceUnit>) Measure.super.divide(divisor); + } + + @Override default Mult, TemperatureUnit> times(Temperature multiplier) { return (Mult, TemperatureUnit>) Measure.super.times(multiplier); diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Power.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Power.java index 054bfa785d4..d704ccf02d2 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Power.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Power.java @@ -277,6 +277,17 @@ default Dimensionless divide(Power divisor) { } + @Override + default Mult times(Resistance multiplier) { + return (Mult) Measure.super.times(multiplier); + } + + @Override + default Per divide(Resistance divisor) { + return (Per) Measure.super.divide(divisor); + } + + @Override default Mult times(Temperature multiplier) { return (Mult) Measure.super.times(multiplier); diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Resistance.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Resistance.java new file mode 100644 index 00000000000..3148f14221a --- /dev/null +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Resistance.java @@ -0,0 +1,345 @@ +// Copyright (c) FIRST and other WPILib contributors. +// Open Source Software; you can modify and/or share it under the terms of +// the WPILib BSD license file in the root directory of this project. + +// THIS FILE WAS AUTO-GENERATED BY ./wpiunits/generate_units.py. DO NOT MODIFY + +package edu.wpi.first.units.measure; + +import static edu.wpi.first.units.Units.*; +import edu.wpi.first.units.*; + +@SuppressWarnings({"unchecked", "cast", "checkstyle", "PMD"}) +public interface Resistance extends Measure { + static Resistance ofRelativeUnits(double magnitude, ResistanceUnit unit) { + return new ImmutableResistance(magnitude, unit.toBaseUnits(magnitude), unit); + } + + static Resistance ofBaseUnits(double baseUnitMagnitude, ResistanceUnit unit) { + return new ImmutableResistance(unit.fromBaseUnits(baseUnitMagnitude), baseUnitMagnitude, unit); + } + + @Override + Resistance copy(); + + @Override + default MutResistance mutableCopy() { + return new MutResistance(magnitude(), baseUnitMagnitude(), unit()); + } + + @Override + ResistanceUnit unit(); + + @Override + default ResistanceUnit baseUnit() { return (ResistanceUnit) unit().getBaseUnit(); } + + @Override + default double in(ResistanceUnit unit) { + return unit.fromBaseUnits(baseUnitMagnitude()); + } + + @Override + default Resistance unaryMinus() { + return (Resistance) unit().ofBaseUnits(0 - baseUnitMagnitude()); + } + + @Override + default Resistance plus(Measure other) { + return (Resistance) unit().ofBaseUnits(baseUnitMagnitude() + other.baseUnitMagnitude()); + } + + @Override + default Resistance minus(Measure other) { + return (Resistance) unit().ofBaseUnits(baseUnitMagnitude() - other.baseUnitMagnitude()); + } + + @Override + default Resistance times(double multiplier) { + return (Resistance) unit().ofBaseUnits(baseUnitMagnitude() * multiplier); + } + + @Override + default Resistance divide(double divisor) { + return (Resistance) unit().ofBaseUnits(baseUnitMagnitude() / divisor); + } + + @Override + default Velocity per(TimeUnit period) { + return divide(period.of(1)); + } + + + @Override + default Mult> times(Acceleration multiplier) { + return (Mult>) Measure.super.times(multiplier); + } + + @Override + default Per> divide(Acceleration divisor) { + return (Per>) Measure.super.divide(divisor); + } + + + @Override + default Mult times(Angle multiplier) { + return (Mult) Measure.super.times(multiplier); + } + + @Override + default Per divide(Angle divisor) { + return (Per) Measure.super.divide(divisor); + } + + + @Override + default Mult times(AngularAcceleration multiplier) { + return (Mult) Measure.super.times(multiplier); + } + + @Override + default Per divide(AngularAcceleration divisor) { + return (Per) Measure.super.divide(divisor); + } + + + @Override + default Mult times(AngularMomentum multiplier) { + return (Mult) Measure.super.times(multiplier); + } + + @Override + default Per divide(AngularMomentum divisor) { + return (Per) Measure.super.divide(divisor); + } + + + @Override + default Mult times(AngularVelocity multiplier) { + return (Mult) Measure.super.times(multiplier); + } + + @Override + default Per divide(AngularVelocity divisor) { + return (Per) Measure.super.divide(divisor); + } + + + @Override + default Voltage times(Current multiplier) { + return Volts.of(baseUnitMagnitude() * multiplier.baseUnitMagnitude()); + } + + @Override + default Per divide(Current divisor) { + return (Per) Measure.super.divide(divisor); + } + + @Override + default Resistance divide(Dimensionless divisor) { + return (Resistance) Ohms.of(baseUnitMagnitude() / divisor.baseUnitMagnitude()); + } + + @Override + default Resistance times(Dimensionless multiplier) { + return (Resistance) Ohms.of(baseUnitMagnitude() * multiplier.baseUnitMagnitude()); + } + + + @Override + default Mult times(Distance multiplier) { + return (Mult) Measure.super.times(multiplier); + } + + @Override + default Per divide(Distance divisor) { + return (Per) Measure.super.divide(divisor); + } + + + @Override + default Mult times(Energy multiplier) { + return (Mult) Measure.super.times(multiplier); + } + + @Override + default Per divide(Energy divisor) { + return (Per) Measure.super.divide(divisor); + } + + + @Override + default Mult times(Force multiplier) { + return (Mult) Measure.super.times(multiplier); + } + + @Override + default Per divide(Force divisor) { + return (Per) Measure.super.divide(divisor); + } + + + @Override + default Mult times(Frequency multiplier) { + return (Mult) Measure.super.times(multiplier); + } + + @Override + default Per divide(Frequency divisor) { + return (Per) Measure.super.divide(divisor); + } + + + @Override + default Mult times(LinearAcceleration multiplier) { + return (Mult) Measure.super.times(multiplier); + } + + @Override + default Per divide(LinearAcceleration divisor) { + return (Per) Measure.super.divide(divisor); + } + + + @Override + default Mult times(LinearMomentum multiplier) { + return (Mult) Measure.super.times(multiplier); + } + + @Override + default Per divide(LinearMomentum divisor) { + return (Per) Measure.super.divide(divisor); + } + + + @Override + default Mult times(LinearVelocity multiplier) { + return (Mult) Measure.super.times(multiplier); + } + + @Override + default Per divide(LinearVelocity divisor) { + return (Per) Measure.super.divide(divisor); + } + + + @Override + default Mult times(Mass multiplier) { + return (Mult) Measure.super.times(multiplier); + } + + @Override + default Per divide(Mass divisor) { + return (Per) Measure.super.divide(divisor); + } + + + @Override + default Mult times(MomentOfInertia multiplier) { + return (Mult) Measure.super.times(multiplier); + } + + @Override + default Per divide(MomentOfInertia divisor) { + return (Per) Measure.super.divide(divisor); + } + + + @Override + default Mult> times(Mult multiplier) { + return (Mult>) Measure.super.times(multiplier); + } + + @Override + default Per> divide(Mult divisor) { + return (Per>) Measure.super.divide(divisor); + } + + + @Override + default Mult> times(Per multiplier) { + return (Mult>) Measure.super.times(multiplier); + } + + @Override + default Per> divide(Per divisor) { + return (Per>) Measure.super.divide(divisor); + } + + + @Override + default Mult times(Power multiplier) { + return (Mult) Measure.super.times(multiplier); + } + + @Override + default Per divide(Power divisor) { + return (Per) Measure.super.divide(divisor); + } + + + @Override + default Mult times(Resistance multiplier) { + return (Mult) Measure.super.times(multiplier); + } + + @Override + default Dimensionless divide(Resistance divisor) { + return Value.of(baseUnitMagnitude() / divisor.baseUnitMagnitude()); + } + + + @Override + default Mult times(Temperature multiplier) { + return (Mult) Measure.super.times(multiplier); + } + + @Override + default Per divide(Temperature divisor) { + return (Per) Measure.super.divide(divisor); + } + + + @Override + default Mult times(Time multiplier) { + return (Mult) Measure.super.times(multiplier); + } + + @Override + default Velocity divide(Time divisor) { + return VelocityUnit.combine(unit(), divisor.unit()).ofBaseUnits(baseUnitMagnitude() / divisor.baseUnitMagnitude()); + } + + + @Override + default Mult times(Torque multiplier) { + return (Mult) Measure.super.times(multiplier); + } + + @Override + default Per divide(Torque divisor) { + return (Per) Measure.super.divide(divisor); + } + + + @Override + default Mult> times(Velocity multiplier) { + return (Mult>) Measure.super.times(multiplier); + } + + @Override + default Per> divide(Velocity divisor) { + return (Per>) Measure.super.divide(divisor); + } + + + @Override + default Mult times(Voltage multiplier) { + return (Mult) Measure.super.times(multiplier); + } + + @Override + default Per divide(Voltage divisor) { + return (Per) Measure.super.divide(divisor); + } + +} diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Temperature.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Temperature.java index c9396f79223..fcfd2ce2964 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Temperature.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Temperature.java @@ -277,6 +277,17 @@ default Per divide(Power divisor) { } + @Override + default Mult times(Resistance multiplier) { + return (Mult) Measure.super.times(multiplier); + } + + @Override + default Per divide(Resistance divisor) { + return (Per) Measure.super.divide(divisor); + } + + @Override default Mult times(Temperature multiplier) { return (Mult) Measure.super.times(multiplier); diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Time.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Time.java index aa4945c2a8d..7cbc885566f 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Time.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Time.java @@ -277,6 +277,17 @@ default Per divide(Power divisor) { } + @Override + default Mult times(Resistance multiplier) { + return (Mult) Measure.super.times(multiplier); + } + + @Override + default Per divide(Resistance divisor) { + return (Per) Measure.super.divide(divisor); + } + + @Override default Mult times(Temperature multiplier) { return (Mult) Measure.super.times(multiplier); diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Torque.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Torque.java index ff1ccee5260..f626d23197e 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Torque.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Torque.java @@ -277,6 +277,17 @@ default Per divide(Power divisor) { } + @Override + default Mult times(Resistance multiplier) { + return (Mult) Measure.super.times(multiplier); + } + + @Override + default Per divide(Resistance divisor) { + return (Per) Measure.super.divide(divisor); + } + + @Override default Mult times(Temperature multiplier) { return (Mult) Measure.super.times(multiplier); diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Velocity.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Velocity.java index e69991d1112..5e78e37c892 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Velocity.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Velocity.java @@ -277,6 +277,17 @@ default Per, PowerUnit> divide(Power divisor) { } + @Override + default Mult, ResistanceUnit> times(Resistance multiplier) { + return (Mult, ResistanceUnit>) Measure.super.times(multiplier); + } + + @Override + default Per, ResistanceUnit> divide(Resistance divisor) { + return (Per, ResistanceUnit>) Measure.super.divide(divisor); + } + + @Override default Mult, TemperatureUnit> times(Temperature multiplier) { return (Mult, TemperatureUnit>) Measure.super.times(multiplier); diff --git a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Voltage.java b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Voltage.java index 403bb7080ae..f23f6e057f7 100644 --- a/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Voltage.java +++ b/wpiunits/src/generated/main/java/edu/wpi/first/units/measure/Voltage.java @@ -130,8 +130,8 @@ default Power times(Current multiplier) { } @Override - default Per divide(Current divisor) { - return (Per) Measure.super.divide(divisor); + default Resistance divide(Current divisor) { + return Ohms.of(baseUnitMagnitude() / divisor.baseUnitMagnitude()); } @Override @@ -277,6 +277,17 @@ default Per divide(Power divisor) { } + @Override + default Mult times(Resistance multiplier) { + return (Mult) Measure.super.times(multiplier); + } + + @Override + default Current divide(Resistance divisor) { + return Amps.of(baseUnitMagnitude() / divisor.baseUnitMagnitude()); + } + + @Override default Mult times(Temperature multiplier) { return (Mult) Measure.super.times(multiplier); diff --git a/wpiunits/src/main/java/edu/wpi/first/units/Measure.java b/wpiunits/src/main/java/edu/wpi/first/units/Measure.java index 86c8de9a887..6ba7cad72dd 100644 --- a/wpiunits/src/main/java/edu/wpi/first/units/Measure.java +++ b/wpiunits/src/main/java/edu/wpi/first/units/Measure.java @@ -25,6 +25,7 @@ import edu.wpi.first.units.measure.Mult; import edu.wpi.first.units.measure.Per; import edu.wpi.first.units.measure.Power; +import edu.wpi.first.units.measure.Resistance; import edu.wpi.first.units.measure.Temperature; import edu.wpi.first.units.measure.Time; import edu.wpi.first.units.measure.Torque; @@ -246,6 +247,8 @@ && baseUnit().equals(ratio.denominator().getBaseUnit())) { return times(velocity); } else if (multiplier instanceof Voltage voltage) { return times(voltage); + } else if (multiplier instanceof Resistance resistance) { + return times(resistance); } else { // Dimensional analysis fallthrough or a generic input measure type // Do a basic unit multiplication @@ -530,6 +533,18 @@ default Measure times(Voltage multiplier) { .ofBaseUnits(baseUnitMagnitude() * multiplier.baseUnitMagnitude()); } + /** + * Multiplies this measure by a resistance and returns the resulting measure in the most + * appropriate unit. + * + * @param multiplier the measurement to multiply by. + * @return the multiplication result + */ + default Measure times(Resistance multiplier) { + return MultUnit.combine(unit(), multiplier.unit()) + .ofBaseUnits(baseUnitMagnitude() * multiplier.baseUnitMagnitude()); + } + /** * Multiplies this measure by a conversion factor, returning the converted measurement. Unlike * {@link #times(Per)}, this allows for basic unit cancellation to return measurements of a known @@ -687,6 +702,8 @@ default Measure divide(Measure divisor) { return divide(velocity); } else if (divisor instanceof Voltage voltage) { return divide(voltage); + } else if (divisor instanceof Resistance resistance) { + return divide(resistance); } else { // Dimensional analysis fallthrough or a generic input measure type // Do a basic unit multiplication @@ -957,6 +974,17 @@ default Measure divide(Voltage divisor) { .ofBaseUnits(baseUnitMagnitude() / divisor.baseUnitMagnitude()); } + /** + * Divides this measure by a resistance and returns the result in the most appropriate unit. + * + * @param divisor the measurement to divide by. + * @return the division result + */ + default Measure divide(Resistance divisor) { + return PerUnit.combine(unit(), divisor.unit()) + .ofBaseUnits(baseUnitMagnitude() / divisor.baseUnitMagnitude()); + } + /** * Divides this measure by a ratio in terms of this measurement's unit to another unit, returning * a measurement in terms of the other unit. diff --git a/wpiunits/src/main/java/edu/wpi/first/units/ResistanceUnit.java b/wpiunits/src/main/java/edu/wpi/first/units/ResistanceUnit.java new file mode 100644 index 00000000000..0fba48f38cb --- /dev/null +++ b/wpiunits/src/main/java/edu/wpi/first/units/ResistanceUnit.java @@ -0,0 +1,104 @@ +// Copyright (c) FIRST and other WPILib contributors. +// Open Source Software; you can modify and/or share it under the terms of +// the WPILib BSD license file in the root directory of this project. + +package edu.wpi.first.units; + +import edu.wpi.first.units.measure.ImmutableResistance; +import edu.wpi.first.units.measure.MutResistance; +import edu.wpi.first.units.measure.Resistance; + +/** + * Unit of resistance dimension. + * + *

This is the base type for units of resistance dimension. It is also used to specify the + * dimension for {@link Measure}: Measure<ResistanceUnit>. + * + *

Actual units (such as {@link Units#Ohms} and {@link Units#KiloOhms}) can be found in the + * {@link Units} class. + */ +public final class ResistanceUnit extends PerUnit { + private static final CombinatoryUnitCache cache = + new CombinatoryUnitCache<>(ResistanceUnit::new); + + ResistanceUnit(VoltageUnit numerator, CurrentUnit denominator) { + super( + numerator.isBaseUnit() && denominator.isBaseUnit() + ? null + : combine(numerator.getBaseUnit(), denominator.getBaseUnit()), + numerator, + denominator); + } + + ResistanceUnit( + ResistanceUnit baseUnit, + UnaryFunction toBaseConverter, + UnaryFunction fromBaseConverter, + String name, + String symbol) { + super(baseUnit, toBaseConverter, fromBaseConverter, name, symbol); + } + + /** + * Combines an voltage and a current unit to form a unit of resistance. + * + * @param voltage the unit of voltage + * @param current the unit of current + * @return the combined unit of resistance + */ + public static ResistanceUnit combine(VoltageUnit voltage, CurrentUnit current) { + return cache.combine(voltage, current); + } + + @Override + public ResistanceUnit getBaseUnit() { + return (ResistanceUnit) super.getBaseUnit(); + } + + @Override + public Resistance of(double magnitude) { + return new ImmutableResistance(magnitude, toBaseUnits(magnitude), this); + } + + @Override + public Resistance ofBaseUnits(double baseUnitMagnitude) { + return new ImmutableResistance(fromBaseUnits(baseUnitMagnitude), baseUnitMagnitude, this); + } + + @Override + public Resistance zero() { + return (Resistance) super.zero(); + } + + @Override + public Resistance one() { + return (Resistance) super.one(); + } + + @Override + public MutResistance mutable(double initialMagnitude) { + return new MutResistance(initialMagnitude, toBaseUnits(initialMagnitude), this); + } + + /** + * Creates a ratio unit between this unit and an arbitrary other unit. + * + * @param other the other unit + * @param the type of the other unit + * @return the ratio unit + */ + public PerUnit per(U other) { + return PerUnit.combine(this, other); + } + + /** + * Converts a measurement value in terms of another power unit to this unit. + * + * @param magnitude the magnitude of the measurement in terms of the other power unit + * @param otherUnit the other power unit + * @return the value of the measurement in terms of this unit + */ + public double convertFrom(double magnitude, ResistanceUnit otherUnit) { + return fromBaseUnits(otherUnit.toBaseUnits(magnitude)); + } +} diff --git a/wpiunits/src/main/java/edu/wpi/first/units/Units.java b/wpiunits/src/main/java/edu/wpi/first/units/Units.java index cc2042c823e..95759154b5d 100644 --- a/wpiunits/src/main/java/edu/wpi/first/units/Units.java +++ b/wpiunits/src/main/java/edu/wpi/first/units/Units.java @@ -523,6 +523,25 @@ private Units() { public static final PerUnit VoltsPerRadianPerSecondSquared = Volts.per(RadiansPerSecond.per(Second)); + // ResistanceUnit + /** The base unit of resistance. Equivalent to one {@link #Volt} per {@link #Amp}. */ + public static final ResistanceUnit Ohms = derive(Volts.per(Amp)).named("Ohm").symbol("Ω").make(); + + /** The base unit of resistance. Equivalent to one {@link #Volt} per {@link #Amp}. */ + public static final ResistanceUnit Ohm = Ohms; // alias + + /** A unit equal to 1,000 {@link #Ohms}. */ + public static final ResistanceUnit KiloOhms = Kilo(Ohms); + + /** A unit equal to 1,000 {@link #Ohms}. */ + public static final ResistanceUnit KiloOhm = KiloOhms; // alias + + /** A unit equal to 1/1000 of a {@link #Ohm}. */ + public static final ResistanceUnit MilliOhms = Milli(Ohms); + + /** A unit equal to 1/1000 of a {@link #Ohm}. */ + public static final ResistanceUnit MilliOhm = MilliOhms; // alias + /** * Creates a unit equal to a thousandth of the base unit, eg Milliseconds = Milli(Units.Seconds). * diff --git a/wpiunits/src/main/java/edu/wpi/first/units/VoltageUnit.java b/wpiunits/src/main/java/edu/wpi/first/units/VoltageUnit.java index 07774031b0c..75069351707 100644 --- a/wpiunits/src/main/java/edu/wpi/first/units/VoltageUnit.java +++ b/wpiunits/src/main/java/edu/wpi/first/units/VoltageUnit.java @@ -81,6 +81,16 @@ public VelocityUnit per(TimeUnit period) { return VelocityUnit.combine(this, period); } + /** + * Combines this unit of voltage with a unit of current to form a unit of resistance. + * + * @param currentUnit the unit of current + * @return the combined resistance unit + */ + public ResistanceUnit per(CurrentUnit currentUnit) { + return ResistanceUnit.combine(this, currentUnit); + } + /** * Creates a generic ratio unit of this voltage to a different unit type. *