Skip to content

Commit 9fed904

Browse files
committed
Delegation methods in TensorStreams and new valuesOf method for tensoris
1 parent f7879d5 commit 9fed904

7 files changed

+116
-5
lines changed

src/java/org/tensorics/core/lang/TensoricDoubles.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.tensorics.core.tensor.Shape;
3737
import org.tensorics.core.tensor.Tensor;
3838
import org.tensorics.core.tensor.lang.OngoingQuantifiedTensorOperation;
39+
import org.tensorics.core.tensor.lang.OngoingQuantityTensorValueExtraction;
3940
import org.tensorics.core.tensor.lang.OngoingTensorOperation;
4041
import org.tensorics.core.tensorbacked.Tensorbacked;
4142
import org.tensorics.core.tensorbacked.lang.OngoingQuantifiedTensorBackedOperation;
@@ -52,7 +53,8 @@
5253
public final class TensoricDoubles {
5354

5455
private static final TensoricDoubleSupport SUPPORT = new TensoricDoubleSupport();
55-
//private static final TensoricsDoubleExpressionSupport EXPRESSION_SUPPORT = new TensoricsDoubleExpressionSupport();
56+
// private static final TensoricsDoubleExpressionSupport EXPRESSION_SUPPORT = new
57+
// TensoricsDoubleExpressionSupport();
5658

5759
private TensoricDoubles() {
5860
/* only static methods */
@@ -256,5 +258,8 @@ public static final OngoingQuantifiedScalarConversion<Double> convert(Quantified
256258
return SUPPORT.convert(value);
257259
}
258260

261+
public static final OngoingQuantityTensorValueExtraction<Double> valuesOf(Tensor<QuantifiedValue<Double>> tensor) {
262+
return SUPPORT.valuesOf(tensor);
263+
}
259264

260265
}

src/java/org/tensorics/core/lang/TensoricSupport.java

+5
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import org.tensorics.core.tensor.Shape;
3939
import org.tensorics.core.tensor.Tensor;
4040
import org.tensorics.core.tensor.lang.OngoingQuantifiedTensorOperation;
41+
import org.tensorics.core.tensor.lang.OngoingQuantityTensorValueExtraction;
4142
import org.tensorics.core.tensor.lang.OngoingTensorOperation;
4243
import org.tensorics.core.tensor.lang.QuantityTensorSupport;
4344
import org.tensorics.core.tensor.lang.TensorSupport;
@@ -242,6 +243,10 @@ public final OngoingQuantityIterableValueExtraction<V> valuesOfI(Iterable<Quanti
242243
return quantifiedTensoricFieldUsage.valuesOf(quantities);
243244
}
244245

246+
public final OngoingQuantityTensorValueExtraction<V> valuesOf(Tensor<QuantifiedValue<V>> tensor) {
247+
return quantifiedTensoricFieldUsage.valuesOf(tensor);
248+
}
249+
245250
public final QuantifiedValue<V> sizeOfQ(Iterable<QuantifiedValue<V>> values) {
246251
return quantifiedTensoricFieldUsage.sizeOf(values);
247252
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/**
2+
* Copyright (c) 2018 European Organisation for Nuclear Research (CERN), All Rights Reserved.
3+
*/
4+
5+
package org.tensorics.core.tensor.lang;
6+
7+
import static java.util.Objects.requireNonNull;
8+
import static org.tensorics.core.tensor.stream.TensorStreamMappers.values;
9+
10+
import org.tensorics.core.lang.Tensorics;
11+
import org.tensorics.core.quantity.QuantifiedValue;
12+
import org.tensorics.core.quantity.operations.QuantityOperationRepository;
13+
import org.tensorics.core.tensor.Tensor;
14+
import org.tensorics.core.tensor.stream.TensorStreams;
15+
import org.tensorics.core.units.JScienceUnit;
16+
import org.tensorics.core.units.Unit;
17+
18+
public class OngoingQuantityTensorValueExtraction<V> {
19+
20+
private final QuantityOperationRepository<V> operationRepository;
21+
private final Tensor<QuantifiedValue<V>> quantifiedValueTensor;
22+
23+
OngoingQuantityTensorValueExtraction(QuantityOperationRepository<V> operationRepository,
24+
Tensor<QuantifiedValue<V>> quantifiedValueTensor) {
25+
this.operationRepository = requireNonNull(operationRepository, "operationRepository must not be null");
26+
this.quantifiedValueTensor = requireNonNull(quantifiedValueTensor, "quantifiedValueTensor must not be null");
27+
}
28+
29+
public Tensor<V> inUnitsOf(Unit unit) {
30+
return Tensorics.stream(quantifiedValueTensor).map(values(v -> valueInUnit(v, unit)))
31+
.collect(TensorStreams.toTensor(quantifiedValueTensor.shape().dimensionSet()));
32+
}
33+
34+
public Tensor<V> inUnitsOf(javax.measure.unit.Unit<?> unit) {
35+
return inUnitsOf(JScienceUnit.of(unit));
36+
}
37+
38+
private V valueInUnit(QuantifiedValue<V> v, Unit unit) {
39+
return operationRepository.environment().quantification().convertValueToUnit(v, unit).value();
40+
}
41+
42+
}

src/java/org/tensorics/core/tensor/lang/OngoingTensorReduction.java

-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
import org.tensorics.core.reduction.ReductionStrategy;
88
import org.tensorics.core.tensor.Tensor;
9-
import org.tensorics.core.tensor.operations.TensorReduction;
109

1110
public class OngoingTensorReduction<V> {
1211

src/java/org/tensorics/core/tensor/lang/QuantityTensorSupport.java

+7-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
/*******************************************************************************
33
*
44
* This file is part of tensorics.
5-
*
5+
*
66
* Copyright (c) 2008-2011, CERN. All rights reserved.
77
*
88
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -16,7 +16,7 @@
1616
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1717
* See the License for the specific language governing permissions and
1818
* limitations under the License.
19-
*
19+
*
2020
******************************************************************************/
2121
// @formatter:on
2222

@@ -30,7 +30,7 @@
3030

3131
/**
3232
* Provides starting methods for tensoric eDSL expressions, which are related to tensors of quantities.
33-
*
33+
*
3434
* @author kfuchsbe
3535
* @param <S> the type of the scalar values (elements of the field on which the operations are based on)
3636
*/
@@ -47,4 +47,8 @@ public OngoingQuantifiedTensorOperation<S> calculate(Tensor<QuantifiedValue<S>>
4747
return new OngoingQuantifiedTensorOperation<>(pseudoField, left);
4848
}
4949

50+
public OngoingQuantityTensorValueExtraction<S> valuesOf(Tensor<QuantifiedValue<S>> quantifiedValueTensor) {
51+
return new OngoingQuantityTensorValueExtraction<>(pseudoField, quantifiedValueTensor);
52+
}
53+
5054
}

src/java/org/tensorics/core/tensor/stream/TensorStreams.java

+27
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
import java.util.Map;
2424
import java.util.Set;
25+
import java.util.function.BiFunction;
2526
import java.util.function.Function;
2627
import java.util.stream.Stream;
2728

@@ -104,4 +105,30 @@ public static <V, T, TB extends Tensorbacked<T>> TensorbackedCollector<V, T, TB>
104105
return new TensorbackedCollector<>(tensorBackedClass, positionMapper, valueMapper);
105106
}
106107

108+
/* Delegation methods to stream mappers. Names to be reviewed */
109+
110+
public static <T, CI, CO> Function<Map.Entry<Position, T>, Map.Entry<Position, T>> coordinatesOfType(
111+
Class<CI> dimension, Function<CI, CO> coordinateMapper) {
112+
return TensorStreamMappers.coordinatesOfType(dimension, coordinateMapper);
113+
}
114+
115+
public static <T> Function<Map.Entry<Position, T>, Map.Entry<Position, T>> positions(
116+
Function<Position, Position> positionMapper) {
117+
return TensorStreamMappers.positions(positionMapper);
118+
}
119+
120+
public static <I, O> Function<Map.Entry<Position, I>, Map.Entry<Position, O>> values(Function<I, O> valueMapper) {
121+
return TensorStreamMappers.values(valueMapper);
122+
}
123+
124+
public static <T> Function<Map.Entry<Position, T>, Map.Entry<Position, T>> positions(
125+
BiFunction<Position, T, Position> positionMapper) {
126+
return TensorStreamMappers.positions(positionMapper);
127+
}
128+
129+
public static <I, O> Function<Map.Entry<Position, I>, Map.Entry<Position, O>> values(
130+
BiFunction<Position, I, O> valueMapper) {
131+
return TensorStreamMappers.values(valueMapper);
132+
}
133+
107134
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/**
2+
* Copyright (c) 2018 European Organisation for Nuclear Research (CERN), All Rights Reserved.
3+
*/
4+
5+
package org.tensorics.core.lang;
6+
7+
import static org.tensorics.core.lang.Tensorics.at;
8+
import static org.tensorics.core.lang.Tensorics.quantityOf;
9+
10+
import javax.measure.unit.SI;
11+
12+
import org.assertj.core.api.Assertions;
13+
import org.junit.Test;
14+
import org.tensorics.core.quantity.QuantifiedValue;
15+
import org.tensorics.core.tensor.Tensor;
16+
17+
public class TensoricQuantifiedDoublesTest {
18+
19+
@Test
20+
public void valuesOfMapsToCorrectCoordinates() {
21+
Tensor<QuantifiedValue<Double>> quantities = Tensorics.<QuantifiedValue<Double>> builder(String.class)
22+
.put(at("a"), quantityOf(1.0, SI.METER)).put(at("b"), quantityOf(2.0, SI.METER)).build();
23+
24+
Tensor<Double> centimeters = TensoricDoubles.valuesOf(quantities).inUnitsOf(SI.CENTIMETER);
25+
Assertions.assertThat(centimeters.get("a")).isEqualTo(100.0);
26+
Assertions.assertThat(centimeters.get("b")).isEqualTo(200.0);
27+
}
28+
29+
}

0 commit comments

Comments
 (0)