Skip to content

Commit 33badde

Browse files
sebhoerlNitnelav
andauthored
Update to MATSim 2025 (#178)
* fixing imports * update IdF emission to matsim 15 (#175) * update workflow version * update to a recent PR of MATSim 16 * MATSim 2025 * add additional test values * add test for emission events * ignoring test on number of lines in shapefile * fix after merge --------- Co-authored-by: Valentin LE BESCOND <[email protected]>
1 parent 35a595b commit 33badde

File tree

37 files changed

+595
-333
lines changed

37 files changed

+595
-333
lines changed

core/src/main/java/org/eqasim/core/components/emissions/RunComputeEmissionsEvents.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ public void install(){
9999
com.google.inject.Injector injector = Injector.createInjector(config, module );
100100
EmissionModule emissionModule = injector.getInstance(EmissionModule.class);
101101

102-
final String outputDirectory = scenario.getConfig().controler().getOutputDirectory() + "/";
102+
final String outputDirectory = scenario.getConfig().controller().getOutputDirectory() + "/";
103103
EventWriterXML emissionEventWriter = new EventWriterXML( outputDirectory + "output_emissions_events.xml.gz" ) ;
104104
emissionModule.getEmissionEventsManager().addHandler(emissionEventWriter);
105105

core/src/main/java/org/eqasim/core/components/emissions/RunComputeEmissionsGrid.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public static void main(String[] args) throws CommandLine.ConfigurationException
3636

3737
Config config = ConfigUtils.loadConfig(cmd.getOptionStrict("config-path"), configGroups);
3838
cmd.applyConfiguration(config);
39-
final String outputDirectory = config.controler().getOutputDirectory() + "/";
39+
final String outputDirectory = config.controller().getOutputDirectory() + "/";
4040

4141
Network network = NetworkUtils.createNetwork();
4242
new MatsimNetworkReader(network).readFile(outputDirectory + "output_network.xml.gz");

core/src/main/java/org/eqasim/core/components/emissions/RunExportEmissionsNetwork.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public static void main(String[] args) throws CommandLine.ConfigurationException
5353

5454
Config config = ConfigUtils.loadConfig(cmd.getOptionStrict("config-path"), configGroups);
5555
cmd.applyConfiguration(config);
56-
final String outputDirectory = config.controler().getOutputDirectory() + "/";
56+
final String outputDirectory = config.controller().getOutputDirectory() + "/";
5757

5858
int timeBinSize = Integer.parseInt(cmd.getOption("time-bin-size").orElse("3600"));
5959

core/src/main/java/org/eqasim/core/components/traffic/EqasimLinkSpeedCalculator.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,9 @@
55
import org.matsim.core.mobsim.qsim.qnetsimengine.linkspeedcalculator.LinkSpeedCalculator;
66

77
public class EqasimLinkSpeedCalculator implements LinkSpeedCalculator {
8-
final private LinkSpeedCalculator delegate;
98
final private double crossingPenalty;
109

11-
public EqasimLinkSpeedCalculator(LinkSpeedCalculator delegate, double crossingPenalty) {
12-
this.delegate = delegate;
10+
public EqasimLinkSpeedCalculator(double crossingPenalty) {
1311
this.crossingPenalty = crossingPenalty;
1412
}
1513

@@ -23,10 +21,12 @@ public double getMaximumVelocity(QVehicle vehicle, Link link, double time) {
2321
}
2422
}
2523

24+
double maximumVelocity = Math.min(vehicle.getMaximumVelocity(), link.getFreespeed(time));
25+
2626
if (isMajor || link.getToNode().getInLinks().size() == 1) {
27-
return delegate.getMaximumVelocity(vehicle, link, time);
27+
return maximumVelocity;
2828
} else {
29-
double travelTime = link.getLength() / delegate.getMaximumVelocity(vehicle, link, time);
29+
double travelTime = link.getLength() / maximumVelocity;
3030
travelTime += crossingPenalty;
3131
return link.getLength() / travelTime;
3232
}
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,21 @@
11
package org.eqasim.core.components.traffic;
22

33
import org.eqasim.core.components.config.EqasimConfigGroup;
4-
import org.matsim.api.core.v01.Scenario;
5-
import org.matsim.core.api.experimental.events.EventsManager;
64
import org.matsim.core.mobsim.qsim.AbstractQSimModule;
7-
import org.matsim.core.mobsim.qsim.qnetsimengine.ConfigurableQNetworkFactory;
8-
import org.matsim.core.mobsim.qsim.qnetsimengine.QNetworkFactory;
9-
import org.matsim.core.mobsim.qsim.qnetsimengine.linkspeedcalculator.DefaultLinkSpeedCalculator;
5+
import org.matsim.core.mobsim.qsim.qnetsimengine.linkspeedcalculator.LinkSpeedCalculator;
106

117
import com.google.inject.Provides;
128
import com.google.inject.Singleton;
139

1410
public class EqasimTrafficQSimModule extends AbstractQSimModule {
1511
@Override
1612
protected void configureQSim() {
17-
18-
}
19-
20-
@Provides
21-
@Singleton
22-
public QNetworkFactory provideQNetworkFactory(EventsManager events, Scenario scenario,
23-
EqasimLinkSpeedCalculator linkSpeedCalculator) {
24-
ConfigurableQNetworkFactory networkFactory = new ConfigurableQNetworkFactory(events, scenario);
25-
networkFactory.setLinkSpeedCalculator(linkSpeedCalculator);
26-
return networkFactory;
13+
bind(LinkSpeedCalculator.class).to(EqasimLinkSpeedCalculator.class);
2714
}
2815

2916
@Provides
3017
@Singleton
3118
public EqasimLinkSpeedCalculator provideBaselineLinkSpeedCalculator(EqasimConfigGroup eqasimConfig) {
32-
DefaultLinkSpeedCalculator delegate = new DefaultLinkSpeedCalculator();
33-
return new EqasimLinkSpeedCalculator(delegate, eqasimConfig.getCrossingPenalty());
19+
return new EqasimLinkSpeedCalculator(eqasimConfig.getCrossingPenalty());
3420
}
3521
}

core/src/main/java/org/eqasim/core/scenario/config/GenerateConfig.java

+23-23
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,14 @@
1818
import org.matsim.core.config.CommandLine;
1919
import org.matsim.core.config.CommandLine.ConfigurationException;
2020
import org.matsim.core.config.Config;
21-
import org.matsim.core.config.groups.ControlerConfigGroup.RoutingAlgorithmType;
22-
import org.matsim.core.config.groups.PlanCalcScoreConfigGroup;
23-
import org.matsim.core.config.groups.PlanCalcScoreConfigGroup.ActivityParams;
24-
import org.matsim.core.config.groups.PlanCalcScoreConfigGroup.ModeParams;
25-
import org.matsim.core.config.groups.PlansCalcRouteConfigGroup;
26-
import org.matsim.core.config.groups.PlansCalcRouteConfigGroup.AccessEgressType;
27-
import org.matsim.core.config.groups.PlansCalcRouteConfigGroup.ModeRoutingParams;
21+
import org.matsim.core.config.groups.ControllerConfigGroup.RoutingAlgorithmType;
2822
import org.matsim.core.config.groups.PlansConfigGroup;
23+
import org.matsim.core.config.groups.RoutingConfigGroup;
24+
import org.matsim.core.config.groups.RoutingConfigGroup.AccessEgressType;
25+
import org.matsim.core.config.groups.RoutingConfigGroup.TeleportedModeParams;
26+
import org.matsim.core.config.groups.ScoringConfigGroup;
27+
import org.matsim.core.config.groups.ScoringConfigGroup.ActivityParams;
28+
import org.matsim.core.config.groups.ScoringConfigGroup.ModeParams;
2929
import org.matsim.core.controler.OutputDirectoryHierarchy.OverwriteFileSetting;
3030

3131
public class GenerateConfig {
@@ -61,17 +61,17 @@ public GenerateConfig(CommandLine cmd, String prefix, double sampleSize, int ran
6161
protected void adaptConfiguration(Config config) {
6262
// General settings
6363

64-
config.controler().setFirstIteration(0);
65-
config.controler().setLastIteration(DEFAULT_ITERATIONS);
66-
config.controler().setWriteEventsInterval(DEFAULT_ITERATIONS);
67-
config.controler().setWritePlansInterval(DEFAULT_ITERATIONS);
68-
config.controler().setOutputDirectory("simulation_output");
69-
config.controler().setOverwriteFileSetting(OverwriteFileSetting.deleteDirectoryIfExists);
64+
config.controller().setFirstIteration(0);
65+
config.controller().setLastIteration(DEFAULT_ITERATIONS);
66+
config.controller().setWriteEventsInterval(DEFAULT_ITERATIONS);
67+
config.controller().setWritePlansInterval(DEFAULT_ITERATIONS);
68+
config.controller().setOutputDirectory("simulation_output");
69+
config.controller().setOverwriteFileSetting(OverwriteFileSetting.deleteDirectoryIfExists);
7070

7171
config.global().setRandomSeed(randomSeed);
7272
config.global().setNumberOfThreads(threads);
7373

74-
config.controler().setRoutingAlgorithmType(RoutingAlgorithmType.FastAStarLandmarks);
74+
config.controller().setRoutingAlgorithmType(RoutingAlgorithmType.SpeedyALT);
7575

7676
config.transit().setUseTransit(true);
7777

@@ -92,7 +92,7 @@ protected void adaptConfiguration(Config config) {
9292
terminationConfig.setModes(MODES);
9393

9494
// Scoring config
95-
PlanCalcScoreConfigGroup scoringConfig = config.planCalcScore();
95+
ScoringConfigGroup scoringConfig = config.scoring();
9696

9797
scoringConfig.setMarginalUtilityOfMoney(0.0);
9898
scoringConfig.setMarginalUtlOfWaitingPt_utils_hr(0.0);
@@ -102,7 +102,7 @@ protected void adaptConfiguration(Config config) {
102102

103103
if (activityParams == null) {
104104
activityParams = new ActivityParams(activityType);
105-
config.planCalcScore().addActivityParams(activityParams);
105+
config.scoring().addActivityParams(activityParams);
106106
}
107107

108108
activityParams.setScoringThisActivityAtAll(false);
@@ -121,22 +121,22 @@ protected void adaptConfiguration(Config config) {
121121
}
122122

123123
// Routing configuration
124-
PlansCalcRouteConfigGroup routingConfig = config.plansCalcRoute();
124+
RoutingConfigGroup routingConfig = config.routing();
125125

126-
config.plansCalcRoute().setNetworkModes(NETWORK_MODES);
126+
config.routing().setNetworkModes(NETWORK_MODES);
127127

128-
config.plansCalcRoute().setAccessEgressType(AccessEgressType.accessEgressModeToLink);
129-
config.plansCalcRoute().setRoutingRandomness(0.0);
128+
config.routing().setAccessEgressType(AccessEgressType.accessEgressModeToLink);
129+
config.routing().setRoutingRandomness(0.0);
130130

131-
ModeRoutingParams outsideParams = routingConfig.getOrCreateModeRoutingParams("outside");
131+
TeleportedModeParams outsideParams = routingConfig.getOrCreateModeRoutingParams("outside");
132132
outsideParams.setBeelineDistanceFactor(1.0);
133133
outsideParams.setTeleportedModeSpeed(1000.0);
134134

135-
ModeRoutingParams bikeParams = routingConfig.getOrCreateModeRoutingParams(TransportMode.bike);
135+
TeleportedModeParams bikeParams = routingConfig.getOrCreateModeRoutingParams(TransportMode.bike);
136136
bikeParams.setBeelineDistanceFactor(1.4);
137137
bikeParams.setTeleportedModeSpeed(3.1); // 11.6 km/h
138138

139-
ModeRoutingParams walkParams = routingConfig.getOrCreateModeRoutingParams(TransportMode.walk);
139+
TeleportedModeParams walkParams = routingConfig.getOrCreateModeRoutingParams(TransportMode.walk);
140140
walkParams.setBeelineDistanceFactor(1.3);
141141
walkParams.setTeleportedModeSpeed(1.2); // 4.32 km/h
142142

core/src/main/java/org/eqasim/core/scenario/cutter/network/RunNetworkCutter.java

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

33
import java.io.File;
44
import java.io.IOException;
5+
import java.io.UncheckedIOException;
56
import java.net.MalformedURLException;
67
import java.util.Arrays;
78
import java.util.HashSet;
@@ -19,7 +20,6 @@
1920
import org.matsim.core.network.io.MatsimNetworkReader;
2021
import org.matsim.core.network.io.NetworkWriter;
2122
import org.matsim.core.scenario.ScenarioUtils;
22-
import org.matsim.core.utils.io.UncheckedIOException;
2323

2424
public class RunNetworkCutter {
2525
static public void main(String[] args) throws MalformedURLException, IOException, InterruptedException,

core/src/main/java/org/eqasim/core/scenario/cutter/population/PopulationCutterModule.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@
2727
import org.matsim.api.core.v01.network.Network;
2828
import org.matsim.api.core.v01.population.Population;
2929
import org.matsim.core.api.experimental.events.EventsManager;
30-
import org.matsim.core.config.groups.PlansCalcRouteConfigGroup;
31-
import org.matsim.core.config.groups.PlansCalcRouteConfigGroup.ModeRoutingParams;
30+
import org.matsim.core.config.groups.RoutingConfigGroup;
31+
import org.matsim.core.config.groups.RoutingConfigGroup.TeleportedModeParams;
3232
import org.matsim.core.controler.AbstractModule;
3333
import org.matsim.core.events.EventsUtils;
3434
import org.matsim.core.events.MatsimEventsReader;
@@ -77,12 +77,12 @@ PopulationCutter providePopulationCutter(Provider<PlanCutter> planCutterProvider
7777
return new PopulationCutter(planCutterProvider, population.getFactory(), numberOfThreads, batchSize);
7878
}
7979

80-
private Collection<String> getTeleportedModes(PlansCalcRouteConfigGroup routingConfig) {
80+
private Collection<String> getTeleportedModes(RoutingConfigGroup routingConfig) {
8181
Collection<String> teleportedModes = new HashSet<>();
8282

83-
for (Map.Entry<String, ModeRoutingParams> entry : routingConfig.getModeRoutingParams().entrySet()) {
83+
for (Map.Entry<String, TeleportedModeParams> entry : routingConfig.getTeleportedModeParams().entrySet()) {
8484
String mode = entry.getKey();
85-
ModeRoutingParams params = entry.getValue();
85+
TeleportedModeParams params = entry.getValue();
8686

8787
if (params.getTeleportedModeFreespeedFactor() != null) {
8888
throw new IllegalStateException("Cutter does not support teleportedModeFreespeedFactor yet!");
@@ -113,7 +113,7 @@ private boolean checkDisjoint(Collection<String> a, Collection<String> b) {
113113
}
114114

115115
@Provides
116-
public ModeAwareTripProcessor provideModeAwareTripProcessor(PlansCalcRouteConfigGroup routingConfig,
116+
public ModeAwareTripProcessor provideModeAwareTripProcessor(RoutingConfigGroup routingConfig,
117117
TransitConfigGroup transitConfig, ScenarioExtent extent,
118118
TeleportationTripProcessor teleportationTripProcessor, NetworkTripProcessor networkTripProcessor,
119119
TransitTripProcessor transitTripProcessor) {

core/src/main/java/org/eqasim/core/scenario/routing/RunPopulationRouting.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ static public void main(String[] args) throws ConfigurationException, Interrupte
4343
config.getModules().remove(EqasimTerminationConfigGroup.GROUP_NAME);
4444
configurator.addOptionalConfigGroups(config);
4545
cmd.applyConfiguration(config);
46-
config.strategy().clearStrategySettings();
46+
config.replanning().clearStrategySettings();
4747

4848
int batchSize = cmd.getOption("batch-size").map(Integer::parseInt).orElse(100);
4949
int numberOfThreads = cmd.getOption("threads").map(Integer::parseInt)
@@ -90,7 +90,7 @@ static public void insertVehicles(Config config, Scenario scenario) {
9090
for (Person person : scenario.getPopulation().getPersons().values()) {
9191
Map<String, Id<Vehicle>> personVehicles = new HashMap<>();
9292

93-
for (String mode : config.plansCalcRoute().getNetworkModes()) {
93+
for (String mode : config.routing().getNetworkModes()) {
9494
Vehicle vehicle = factory.createVehicle(Id.createVehicleId(person.getId().toString() + ":" + mode),
9595
VehicleUtils.getDefaultVehicleType());
9696
vehicles.addVehicle(vehicle);

core/src/main/java/org/eqasim/core/simulation/analysis/EqasimAnalysisModule.java

+4
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import org.matsim.api.core.v01.network.Network;
1111
import org.matsim.contrib.drt.run.MultiModeDrtConfigGroup;
1212
import org.matsim.core.controler.AbstractModule;
13+
import org.matsim.core.router.AnalysisMainModeIdentifier;
14+
import org.matsim.core.router.RoutingModeMainModeIdentifier;
1315
import org.matsim.pt.transitSchedule.api.TransitSchedule;
1416

1517
import com.google.inject.Provides;
@@ -31,6 +33,8 @@ public void install() {
3133
}
3234

3335
install(new StuckAnalysisModule());
36+
37+
bind(AnalysisMainModeIdentifier.class).toInstance(new RoutingModeMainModeIdentifier());
3438
}
3539

3640
@Provides

core/src/main/java/org/eqasim/core/simulation/modes/drt/utils/AdaptConfigForDrt.java

+14-10
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
package org.eqasim.core.simulation.modes.drt.utils;
22

3+
import java.nio.file.Path;
4+
import java.util.Arrays;
5+
import java.util.HashMap;
6+
import java.util.HashSet;
7+
import java.util.Map;
8+
import java.util.Set;
9+
import java.util.function.Function;
10+
import java.util.stream.Collectors;
11+
import java.util.stream.IntStream;
12+
313
import org.eqasim.core.components.config.EqasimConfigGroup;
414
import org.eqasim.core.misc.ClassUtils;
515
import org.eqasim.core.simulation.EqasimConfigurator;
@@ -17,16 +27,10 @@
1727
import org.matsim.core.config.CommandLine;
1828
import org.matsim.core.config.Config;
1929
import org.matsim.core.config.ConfigUtils;
20-
import org.matsim.core.config.groups.PlanCalcScoreConfigGroup;
2130
import org.matsim.core.config.groups.QSimConfigGroup;
31+
import org.matsim.core.config.groups.ScoringConfigGroup;
2232
import org.matsim.core.utils.misc.Time;
2333

24-
import java.nio.file.Path;
25-
import java.util.*;
26-
import java.util.function.Function;
27-
import java.util.stream.Collectors;
28-
import java.util.stream.IntStream;
29-
3034
public class AdaptConfigForDrt {
3135

3236
public static void adapt(Config config, Map<String, String> vehiclesPathByDrtMode, Map<String, String> operationalSchemes, Map<String, String> drtUtilityEstimators, Map<String, String> drtCostModels, String qsimEndtime, String modeAvailability) {
@@ -86,11 +90,11 @@ public static void adapt(Config config, Map<String, String> vehiclesPathByDrtMod
8690
eqasimConfig.setCostModel(drtMode, drtCostModels.get(drtMode));
8791
eqasimConfig.setEstimator(drtMode, drtUtilityEstimators.get(drtMode));
8892

89-
PlanCalcScoreConfigGroup.ModeParams modeParams = new PlanCalcScoreConfigGroup.ModeParams(drtMode);
90-
config.planCalcScore().addModeParams(modeParams);
93+
ScoringConfigGroup.ModeParams modeParams = new ScoringConfigGroup.ModeParams(drtMode);
94+
config.scoring().addModeParams(modeParams);
9195
}
9296

93-
DrtConfigs.adjustMultiModeDrtConfig(multiModeDrtConfigGroup, config.planCalcScore(), config.plansCalcRoute());
97+
DrtConfigs.adjustMultiModeDrtConfig(multiModeDrtConfigGroup, config.scoring(), config.routing());
9498

9599
// Additional requirements
96100
config.qsim().setStartTime(0.0);

core/src/main/java/org/eqasim/core/simulation/modes/feeder_drt/utils/AdaptConfigForFeederDrt.java

+10-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
package org.eqasim.core.simulation.modes.feeder_drt.utils;
22

3+
import java.util.Arrays;
4+
import java.util.HashMap;
5+
import java.util.HashSet;
6+
import java.util.List;
7+
import java.util.Map;
8+
import java.util.Set;
9+
310
import org.eqasim.core.components.config.EqasimConfigGroup;
411
import org.eqasim.core.misc.ClassUtils;
512
import org.eqasim.core.simulation.EqasimConfigurator;
@@ -15,11 +22,9 @@
1522
import org.matsim.core.config.CommandLine;
1623
import org.matsim.core.config.Config;
1724
import org.matsim.core.config.ConfigUtils;
18-
import org.matsim.core.config.groups.PlanCalcScoreConfigGroup;
25+
import org.matsim.core.config.groups.ScoringConfigGroup;
1926
import org.matsim.pt.config.TransitConfigGroup;
2027

21-
import java.util.*;
22-
2328
public class AdaptConfigForFeederDrt {
2429

2530
public static void adapt(Config config, Map<String, String> basePtModes, Map<String, String> baseDrtModes, Map<String, String> utilityEstimators, Map<String, String> accessEgressTransitStopModes, String modeAvailability) {
@@ -79,8 +84,8 @@ public static void adapt(Config config, Map<String, String> basePtModes, Map<Str
7984

8085
eqasimConfigGroup.setEstimator(feederDrtMode, utilityEstimators.get(feederDrtMode));
8186

82-
PlanCalcScoreConfigGroup.ActivityParams activityParams = new PlanCalcScoreConfigGroup.ActivityParams(feederDrtMode + " interaction");
83-
config.planCalcScore().addActivityParams(activityParams);
87+
ScoringConfigGroup.ActivityParams activityParams = new ScoringConfigGroup.ActivityParams(feederDrtMode + " interaction");
88+
config.scoring().addActivityParams(activityParams);
8489
activityParams.setTypicalDuration(1);
8590
activityParams.setScoringThisActivityAtAll(false);
8691
}

core/src/main/java/org/eqasim/core/simulation/termination/EqasimTerminationModule.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import java.util.Map;
88

99
import org.matsim.core.config.ConfigGroup;
10-
import org.matsim.core.config.groups.ControlerConfigGroup;
10+
import org.matsim.core.config.groups.ControllerConfigGroup;
1111
import org.matsim.core.controler.AbstractModule;
1212
import org.matsim.core.controler.OutputDirectoryHierarchy;
1313
import org.matsim.core.controler.TerminationCriterion;
@@ -29,7 +29,7 @@ public void install() {
2929

3030
@Provides
3131
@Singleton
32-
EqasimTerminationCriterion provideEqasimTerminationCriterion(ControlerConfigGroup controllerConfig,
32+
EqasimTerminationCriterion provideEqasimTerminationCriterion(ControllerConfigGroup controllerConfig,
3333
Map<String, TerminationIndicatorSupplier> indicators, Map<String, TerminationCriterionCalculator> criteria,
3434
TerminationWriter writer) {
3535
EqasimTerminationConfigGroup terminationConfig = EqasimTerminationConfigGroup.getOrCreate(getConfig());

core/src/main/java/org/eqasim/core/tools/RunImputeHeadway.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ static public void main(String[] args) throws ConfigurationException, Interrupte
2424
EqasimConfigurator configurator = new EqasimConfigurator();
2525
Config config = ConfigUtils.loadConfig(cmd.getOptionStrict("config-path"), configurator.getConfigGroups());
2626
cmd.applyConfiguration(config);
27-
config.strategy().clearStrategySettings();
27+
config.replanning().clearStrategySettings();
2828

2929
int batchSize = cmd.getOption("batch-size").map(Integer::parseInt).orElse(100);
3030
int numberOfThreads = cmd.getOption("threads").map(Integer::parseInt)

0 commit comments

Comments
 (0)