Search in sources :

Example 1 with Unit

use of org.tensorics.core.units.Unit in project tensorics-core by tensorics.

the class JScienceQuantificationStrategy method asSameUnit.

@Override
public <S extends ErronousValue<T> & Quantified> OperandPair<T, Unit> asSameUnit(S left, S right) {
    if (left.unit().equals(right.unit())) {
        return OperandPair.ofLeftRightUnit(left, right, left.unit());
    } else {
        final Unit standardUnitOfLeft = standardUnitOf(left);
        final Unit standardUnitOfRight = standardUnitOf(right);
        if (!standardUnitOfLeft.equals(standardUnitOfRight)) {
            throw new IllegalArgumentException("Units '" + standardUnitOfLeft + "' and '" + standardUnitOfRight + "' are not consistent or convertible");
        }
        return OperandPair.ofLeftRightUnit(toStandardUnit(left), toStandardUnit(right), standardUnitOfLeft);
    }
}
Also used : Unit(org.tensorics.core.units.Unit) JScienceUnit(org.tensorics.core.units.JScienceUnit)

Example 2 with Unit

use of org.tensorics.core.units.Unit in project tensorics-core by tensorics.

the class JScienceQuantificationStrategy method toStandardUnit.

private <S extends ErronousValue<T> & Quantified> ErronousValue<T> toStandardUnit(S scalar) {
    Unit unit = scalar.unit();
    throwIfNotJScience(unit);
    UnitConverter converter = extract(unit).toStandardUnit();
    return convert(converter, scalar);
}
Also used : UnitConverter(javax.measure.converter.UnitConverter) Unit(org.tensorics.core.units.Unit) JScienceUnit(org.tensorics.core.units.JScienceUnit)

Example 3 with Unit

use of org.tensorics.core.units.Unit in project tensorics-core by tensorics.

the class JScienceQuantificationStrategy method standardUnitOf.

private <S extends Quantified> Unit standardUnitOf(S scalar) {
    Unit unit = scalar.unit();
    throwIfNotJScience(unit);
    return JScienceUnit.of(((JScienceUnit) unit).getUnit().getStandardUnit());
}
Also used : Unit(org.tensorics.core.units.Unit) JScienceUnit(org.tensorics.core.units.JScienceUnit) JScienceUnit(org.tensorics.core.units.JScienceUnit)

Example 4 with Unit

use of org.tensorics.core.units.Unit in project tensorics-core by tensorics.

the class QuantityDivision method perform.

@Override
public QuantifiedValue<S> perform(QuantifiedValue<S> left, QuantifiedValue<S> right) {
    S value = operation().perform(left.value(), right.value());
    Unit unit = environment().quantification().divide(left.unit(), right.unit());
    return Tensorics.quantityOf(value, unit).withValidity(validityFor(left, right)).withError(productError(left, right));
}
Also used : Unit(org.tensorics.core.units.Unit)

Example 5 with Unit

use of org.tensorics.core.units.Unit in project tensorics-core by tensorics.

the class QuantitySumOrDifferenceOperation method perform.

@Override
public QuantifiedValue<S> perform(QuantifiedValue<S> left, QuantifiedValue<S> right) {
    OperandPair<S, Unit> pair = environment().quantification().asSameUnit(left, right);
    Optional<S> error = environment().errorPropagation().errorForSumAndDifference(pair.left(), pair.right());
    S value = operation().perform(pair.left().value(), pair.right().value());
    boolean validity = validityFor(left, right);
    Unit unit = pair.unit();
    return Tensorics.quantityOf(value, unit).withError(error).withValidity(validity);
}
Also used : Unit(org.tensorics.core.units.Unit)

Aggregations

Unit (org.tensorics.core.units.Unit)7 JScienceUnit (org.tensorics.core.units.JScienceUnit)4 UnitConverter (javax.measure.converter.UnitConverter)1 Ignore (org.junit.Ignore)1 Test (org.junit.Test)1 QuantifiedValue (org.tensorics.core.quantity.QuantifiedValue)1