Skip to content

Commit b3a4c07

Browse files
committed
added non RNG parameters for TOML parameters files
1 parent f573334 commit b3a4c07

17 files changed

+173
-93
lines changed

api/src/main/java/org/fairdatapipeline/api/Object_component_read.java

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,11 @@
44
import java.nio.file.Path;
55
import java.util.List;
66
import org.fairdatapipeline.distribution.Distribution;
7+
import org.fairdatapipeline.distribution.ImmutableDistribution;
8+
import org.fairdatapipeline.estimate.ImmutableEstimate;
79
import org.fairdatapipeline.file.CleanableFileChannel;
810
import org.fairdatapipeline.parameters.ReadComponent;
11+
import org.fairdatapipeline.samples.ImmutableSamples;
912

1013
/**
1114
* This represents an object_component to read from (or raise issues with) An object_component
@@ -77,7 +80,11 @@ public Number readEstimate() {
7780
} catch (IOException e) {
7881
throw (new RuntimeException("readEstimate() -- IOException trying to read from file", e));
7982
}
80-
return data.getEstimate();
83+
if (!(data instanceof ImmutableEstimate)) {
84+
throw (new RuntimeException(
85+
"readEstimate() -- this objComponent (" + this.component_name + ") is not an estimate"));
86+
}
87+
return ((ImmutableEstimate) data).getEstimate();
8188
}
8289

8390
/**
@@ -93,7 +100,13 @@ public Distribution readDistribution() {
93100
throw (new RuntimeException(
94101
"readDistribution() -- IOException trying to read from file.", e));
95102
}
96-
return data.getDistribution();
103+
if (!(data instanceof ImmutableDistribution)) {
104+
throw (new RuntimeException(
105+
"readDistribution() -- this objComponent ("
106+
+ this.component_name
107+
+ ") is not a distribution"));
108+
}
109+
return ((ImmutableDistribution) data).getDistribution();
97110
}
98111

99112
/**
@@ -108,7 +121,11 @@ public List<Number> readSamples() {
108121
} catch (IOException e) {
109122
throw (new RuntimeException("readSamples() -- IOException trying to read from file.", e));
110123
}
111-
return data.getSamples();
124+
if (!(data instanceof ImmutableSamples)) {
125+
throw (new RuntimeException(
126+
"readSamples() -- this objComponent (" + this.component_name + ") is not a samples"));
127+
}
128+
return ((ImmutableSamples) data).getSamples();
112129
}
113130

114131
void register_me_in_registry() {

api/src/main/java/org/fairdatapipeline/distribution/Distribution.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import org.apache.commons.math3.distribution.RealDistribution;
1919
import org.apache.commons.math3.distribution.UniformRealDistribution;
2020
import org.apache.commons.math3.random.EmpiricalDistribution;
21-
import org.fairdatapipeline.parameters.Component;
21+
import org.fairdatapipeline.parameters.RngComponent;
2222
import org.immutables.value.Value.Auxiliary;
2323
import org.immutables.value.Value.Check;
2424
import org.immutables.value.Value.Immutable;
@@ -33,7 +33,7 @@
3333
TODO support other distributions:
3434
https://github.com/ScottishCovidResponse/SCRCIssueTracking/issues/671
3535
*/
36-
public interface Distribution extends Component {
36+
public interface Distribution extends RngComponent {
3737
enum DistributionType {
3838
gamma(),
3939
exponential(),

api/src/main/java/org/fairdatapipeline/estimate/Estimate.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@
66
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
77
import java.util.List;
88
import org.fairdatapipeline.distribution.Distribution;
9-
import org.fairdatapipeline.parameters.Component;
9+
import org.fairdatapipeline.parameters.RngComponent;
1010
import org.immutables.value.Value.Immutable;
1111

1212
/** a component to store a plain simple single Number */
1313
@Immutable
1414
@JsonDeserialize
1515
@JsonSerialize
16-
public interface Estimate extends Component {
16+
public interface Estimate extends RngComponent {
1717
/** @return Number - the value that is stored in this component */
1818
@JsonProperty("value")
1919
Number internalValue();
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package org.fairdatapipeline.parameters;
2+
3+
import com.fasterxml.jackson.annotation.JsonIgnore;
4+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
5+
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
6+
import java.util.List;
7+
import org.immutables.value.Value.Immutable;
8+
9+
@Immutable
10+
@JsonSerialize
11+
@JsonDeserialize
12+
public interface BoolList extends Component {
13+
List<Boolean> bools();
14+
15+
@JsonIgnore
16+
default List<Boolean> getBools() {
17+
return bools();
18+
}
19+
}
Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,3 @@
11
package org.fairdatapipeline.parameters;
22

3-
import org.apache.commons.math3.random.RandomGenerator;
4-
import org.immutables.value.Value.Auxiliary;
5-
6-
public interface Component extends ReadComponent, WriteComponent {
7-
@Auxiliary
8-
RandomGenerator rng();
9-
}
3+
public interface Component extends ReadComponent, WriteComponent {}

api/src/main/java/org/fairdatapipeline/parameters/ComponentsDeserializer.java

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,16 @@ public ComponentsDeserializer(RandomGenerator rng) {
2929

3030
private static final Map<String, Class<?>> typeMapping =
3131
Map.of(
32-
"point-estimate", ImmutableEstimate.class,
33-
"distribution", ImmutableDistribution.class,
34-
"samples", ImmutableSamples.class);
32+
"point-estimate",
33+
ImmutableEstimate.class,
34+
"distribution",
35+
ImmutableDistribution.class,
36+
"samples",
37+
ImmutableSamples.class,
38+
"bools",
39+
ImmutableBoolList.class,
40+
"strings",
41+
ImmutableStringList.class);
3542

3643
@Override
3744
public Components deserialize(JsonParser jsonParser, DeserializationContext ctxt)
@@ -42,23 +49,24 @@ public Components deserialize(JsonParser jsonParser, DeserializationContext ctxt
4249
Streams.stream(rootNode.fields())
4350
.map(this::deserializeSingleComponent)
4451
.collect(Collectors.toMap(Entry::getKey, Entry::getValue));
45-
4652
return ImmutableComponents.builder().components(components).build();
4753
}
4854

4955
private Entry<String, Component> deserializeSingleComponent(Entry<String, JsonNode> entry) {
5056
String key = entry.getKey();
5157
ObjectNode componentNode = entry.getValue().deepCopy();
52-
componentNode.putPOJO("rng", new Object()); // this is a hack to force rng to populate via
53-
// RandomGeneratorDeserializer.class
5458
String type = componentNode.get("type").asText();
5559
componentNode.remove("type");
5660
Class<?> deserializeClass = typeMapping.get(type);
5761

5862
if (deserializeClass == null) {
5963
throw new IllegalArgumentException(String.format("Unsupported component type %s", type));
6064
}
61-
65+
if (RngComponent.class.isAssignableFrom(deserializeClass.getInterfaces()[0])) {
66+
componentNode.putPOJO("rng", new Object());
67+
// this is a hack to force rng to populate via
68+
// RandomGeneratorDeserializer.class
69+
}
6270
ObjectMapper objectMapper = new DataPipelineMapper(rng);
6371
Component component;
6472
try {

api/src/main/java/org/fairdatapipeline/parameters/ComponentsSerializer.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,16 @@ public ComponentsSerializer(RandomGenerator rng) {
2424

2525
private static final Map<Class<?>, String> typeMapping =
2626
Map.of(
27-
ImmutableEstimate.class, "point-estimate",
28-
ImmutableDistribution.class, "distribution",
29-
ImmutableSamples.class, "samples");
27+
ImmutableEstimate.class,
28+
"point-estimate",
29+
ImmutableDistribution.class,
30+
"distribution",
31+
ImmutableSamples.class,
32+
"samples",
33+
ImmutableStringList.class,
34+
"strings",
35+
ImmutableBoolList.class,
36+
"bools");
3037

3138
@Override
3239
public void serialize(Components components, JsonGenerator gen, SerializerProvider serializers)
Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,3 @@
11
package org.fairdatapipeline.parameters;
22

3-
import java.util.List;
4-
import org.fairdatapipeline.distribution.Distribution;
5-
6-
public interface ReadComponent {
7-
Number getEstimate();
8-
9-
List<Number> getSamples();
10-
11-
Distribution getDistribution();
12-
}
3+
public interface ReadComponent {}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package org.fairdatapipeline.parameters;
2+
3+
import java.util.List;
4+
import org.apache.commons.math3.random.RandomGenerator;
5+
import org.fairdatapipeline.distribution.Distribution;
6+
import org.immutables.value.Value;
7+
8+
public interface RngComponent extends Component {
9+
@Value.Auxiliary
10+
RandomGenerator rng();
11+
12+
Number getEstimate();
13+
14+
List<Number> getSamples();
15+
16+
Distribution getDistribution();
17+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package org.fairdatapipeline.parameters;
2+
3+
import com.fasterxml.jackson.annotation.JsonIgnore;
4+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
5+
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
6+
import java.util.List;
7+
import org.immutables.value.Value.Immutable;
8+
9+
@Immutable
10+
@JsonSerialize
11+
@JsonDeserialize
12+
public interface StringList extends Component {
13+
List<String> strings();
14+
15+
@JsonIgnore
16+
default List<String> getStrings() {
17+
return strings();
18+
}
19+
}

0 commit comments

Comments
 (0)