From a497ce81c9aabd7b87e2e74a02bad4953255a373 Mon Sep 17 00:00:00 2001 From: staudtMarius Date: Thu, 19 Dec 2024 08:30:36 +0100 Subject: [PATCH 01/10] Update `simonaAPI` to version `0.6.0` --- CHANGELOG.md | 1 + build.gradle | 2 +- .../participant/evcs/EvModelWrapper.scala | 4 +-- .../simona/service/ev/ExtEvDataService.scala | 6 ++-- .../sim/setup/SimonaStandaloneSetup.scala | 30 +++++++--------- .../simona/test/common/model/MockEvModel.java | 4 +-- .../EvcsAgentModelCalculationSpec.scala | 32 ++++++++--------- .../service/ev/ExtEvDataServiceSpec.scala | 35 ++++++++++++------- .../simona/sim/setup/ExtSimLoaderSpec.scala | 6 ++-- 9 files changed, 64 insertions(+), 56 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 28934b1028..f2331ff4e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -113,6 +113,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Removed Deployment stage from Jenkinsfile [#1063](https://github.com/ie3-institute/simona/issues/1063) - Prepare 'ChpModelSpec' and 'CylindricalThermalStorageSpec' for Storage without storageVolumeLvlMin [#1012](https://github.com/ie3-institute/simona/issues/1012) - Fixed SonarQube quality gate using the correct parameter '-Dsonar.qualitygate.wait=true' [#1072](https://github.com/ie3-institute/simona/issues/1072) +- Updated `simonaAPI` to version `0.6.0` [#1080](https://github.com/ie3-institute/simona/issues/1080) ### Fixed - Fix rendering of references in documentation [#505](https://github.com/ie3-institute/simona/issues/505) diff --git a/build.gradle b/build.gradle index 752fd1f424..cd778d9241 100644 --- a/build.gradle +++ b/build.gradle @@ -88,7 +88,7 @@ dependencies { exclude group: 'edu.ie3' } - implementation('com.github.ie3-institute:simonaAPI:0.5.0') { + implementation('com.github.ie3-institute:simonaAPI:0.6.0') { exclude group: 'org.apache.logging.log4j' exclude group: 'org.slf4j' /* Exclude our own nested dependencies */ diff --git a/src/main/scala/edu/ie3/simona/model/participant/evcs/EvModelWrapper.scala b/src/main/scala/edu/ie3/simona/model/participant/evcs/EvModelWrapper.scala index 7883557dbe..eb7354a09e 100644 --- a/src/main/scala/edu/ie3/simona/model/participant/evcs/EvModelWrapper.scala +++ b/src/main/scala/edu/ie3/simona/model/participant/evcs/EvModelWrapper.scala @@ -35,10 +35,10 @@ final case class EvModelWrapper( def id: String = original.getId lazy val pRatedAc: Power = Kilowatts( - original.getSRatedAC.to(KILOWATT).getValue.doubleValue + original.getPRatedAC.to(KILOWATT).getValue.doubleValue ) lazy val pRatedDc: Power = Kilowatts( - original.getSRatedDC.to(KILOWATT).getValue.doubleValue + original.getPRatedDC.to(KILOWATT).getValue.doubleValue ) lazy val eStorage: Energy = KilowattHours( original.getEStorage.to(KILOWATTHOUR).getValue.doubleValue diff --git a/src/main/scala/edu/ie3/simona/service/ev/ExtEvDataService.scala b/src/main/scala/edu/ie3/simona/service/ev/ExtEvDataService.scala index 680c6050b1..7f27121552 100644 --- a/src/main/scala/edu/ie3/simona/service/ev/ExtEvDataService.scala +++ b/src/main/scala/edu/ie3/simona/service/ev/ExtEvDataService.scala @@ -6,7 +6,7 @@ package edu.ie3.simona.service.ev -import edu.ie3.simona.api.data.ev.ExtEvData +import edu.ie3.simona.api.data.ev.ExtEvDataConnection import edu.ie3.simona.api.data.ev.model.EvModel import edu.ie3.simona.api.data.ev.ontology._ import edu.ie3.simona.api.data.ontology.DataMessageFromExt @@ -46,7 +46,7 @@ object ExtEvDataService { ) final case class ExtEvStateData( - extEvData: ExtEvData, + extEvData: ExtEvDataConnection, uuidToActorRef: Map[UUID, ActorRef] = Map.empty[UUID, ActorRef], extEvMessage: Option[EvDataMessageFromExt] = None, freeLots: ReceiveDataMap[UUID, Int] = ReceiveDataMap.empty, @@ -55,7 +55,7 @@ object ExtEvDataService { ) extends ServiceBaseStateData final case class InitExtEvData( - extEvData: ExtEvData + extEvData: ExtEvDataConnection ) extends InitializeServiceStateData } diff --git a/src/main/scala/edu/ie3/simona/sim/setup/SimonaStandaloneSetup.scala b/src/main/scala/edu/ie3/simona/sim/setup/SimonaStandaloneSetup.scala index 55848d2ced..3e62408033 100644 --- a/src/main/scala/edu/ie3/simona/sim/setup/SimonaStandaloneSetup.scala +++ b/src/main/scala/edu/ie3/simona/sim/setup/SimonaStandaloneSetup.scala @@ -16,8 +16,8 @@ import edu.ie3.simona.agent.EnvironmentRefs import edu.ie3.simona.agent.grid.GridAgent import edu.ie3.simona.agent.grid.GridAgentMessages.CreateGridAgent import edu.ie3.simona.api.ExtSimAdapter -import edu.ie3.simona.api.data.ExtData -import edu.ie3.simona.api.data.ev.{ExtEvData, ExtEvSimulation} +import edu.ie3.simona.api.data.ExtDataConnection +import edu.ie3.simona.api.data.ev.ExtEvDataConnection import edu.ie3.simona.api.simulation.ExtSimAdapterData import edu.ie3.simona.config.{ArgsParser, RefSystemParser, SimonaConfig} import edu.ie3.simona.event.listener.{ResultEventListener, RuntimeEventListener} @@ -219,20 +219,21 @@ class SimonaStandaloneSetup( ) // setup data services that belong to this external simulation - val (extData, extDataInit): ( - Iterable[ExtData], - Iterable[(Class[_ <: SimonaService[_]], ClassicRef)], - ) = - extLink.getExtDataSimulations.asScala.zipWithIndex.map { - case (_: ExtEvSimulation, dIndex) => + extLink.setup(extSimAdapterData) + val extSim = extLink.getExtSimulation + + val extDataInit + : Iterable[(Class[_ <: SimonaService[_]], ClassicRef)] = + extSim.getDataConnections.asScala.zipWithIndex.map { + case (evConnection: ExtEvDataConnection, dIndex) => val extEvDataService = context.toClassic.simonaActorOf( ExtEvDataService.props(scheduler.toClassic), s"$index-$dIndex", ) - val extEvData = new ExtEvData(extEvDataService, extSimAdapter) + evConnection.setActorRefs(extEvDataService, extSimAdapter) extEvDataService ! SimonaService.Create( - InitExtEvData(extEvData), + InitExtEvData(evConnection), ScheduleLock.singleKey( context, scheduler, @@ -240,13 +241,8 @@ class SimonaStandaloneSetup( ), ) - (extEvData, (classOf[ExtEvDataService], extEvDataService)) - }.unzip - - extLink.getExtSimulation.setup( - extSimAdapterData, - extData.toList.asJava, - ) + (classOf[ExtEvDataService], extEvDataService) + } // starting external simulation new Thread(extLink.getExtSimulation, s"External simulation $index") diff --git a/src/test/java/edu/ie3/simona/test/common/model/MockEvModel.java b/src/test/java/edu/ie3/simona/test/common/model/MockEvModel.java index 12cb693568..fa431319ae 100644 --- a/src/test/java/edu/ie3/simona/test/common/model/MockEvModel.java +++ b/src/test/java/edu/ie3/simona/test/common/model/MockEvModel.java @@ -68,12 +68,12 @@ public String getId() { } @Override - public ComparableQuantity getSRatedAC() { + public ComparableQuantity getPRatedAC() { return sRatedAC; } @Override - public ComparableQuantity getSRatedDC() { + public ComparableQuantity getPRatedDC() { return sRatedDC; } diff --git a/src/test/scala/edu/ie3/simona/agent/participant/EvcsAgentModelCalculationSpec.scala b/src/test/scala/edu/ie3/simona/agent/participant/EvcsAgentModelCalculationSpec.scala index 4d3c444156..5af145f60a 100644 --- a/src/test/scala/edu/ie3/simona/agent/participant/EvcsAgentModelCalculationSpec.scala +++ b/src/test/scala/edu/ie3/simona/agent/participant/EvcsAgentModelCalculationSpec.scala @@ -1363,9 +1363,9 @@ class EvcsAgentModelCalculationSpec resultListener.expectMsgPF() { case FlexOptionsResultEvent(flexResult) => flexResult.getInputModel shouldBe evcsInputModelQv.getUuid flexResult.getTime shouldBe 900.toDateTime - flexResult.getpRef should beEquivalentTo(ev900.unwrap().getSRatedAC) - flexResult.getpMin should beEquivalentTo(ev900.unwrap().getSRatedAC) - flexResult.getpMax should beEquivalentTo(ev900.unwrap().getSRatedAC) + flexResult.getpRef should beEquivalentTo(ev900.unwrap().getPRatedAC) + flexResult.getpMin should beEquivalentTo(ev900.unwrap().getPRatedAC) + flexResult.getpMax should beEquivalentTo(ev900.unwrap().getPRatedAC) } emAgent.send(evcsAgent, IssueNoControl(900)) @@ -1377,7 +1377,7 @@ class EvcsAgentModelCalculationSpec Kilowatts( ev900 .unwrap() - .getSRatedAC + .getPRatedAC .to(PowerSystemUnits.KILOWATT) .getValue .doubleValue @@ -1431,7 +1431,7 @@ class EvcsAgentModelCalculationSpec case ParticipantResultEvent(result: EvResult) if result.getTime.equals(900.toDateTime) => result.getInputModel shouldBe ev900.uuid - result.getP should beEquivalentTo(ev900.unwrap().getSRatedAC) + result.getP should beEquivalentTo(ev900.unwrap().getPRatedAC) result.getQ should beEquivalentTo(0d.asMegaVar) result.getSoc should beEquivalentTo(0d.asPercent) case ParticipantResultEvent(result: EvResult) @@ -1446,7 +1446,7 @@ class EvcsAgentModelCalculationSpec case ParticipantResultEvent(result: EvcsResult) => result.getInputModel shouldBe evcsInputModelQv.getUuid result.getTime shouldBe 900.toDateTime - result.getP should beEquivalentTo(ev900.unwrap().getSRatedAC) + result.getP should beEquivalentTo(ev900.unwrap().getPRatedAC) result.getQ should beEquivalentTo(0d.asMegaVar) } @@ -1480,9 +1480,9 @@ class EvcsAgentModelCalculationSpec resultListener.expectMsgPF() { case FlexOptionsResultEvent(flexResult) => flexResult.getInputModel shouldBe evcsInputModelQv.getUuid flexResult.getTime shouldBe 4500.toDateTime - flexResult.getpRef should beEquivalentTo(ev4500.unwrap().getSRatedAC) - flexResult.getpMin should beEquivalentTo(ev4500.unwrap().getSRatedAC) - flexResult.getpMax should beEquivalentTo(ev4500.unwrap().getSRatedAC) + flexResult.getpRef should beEquivalentTo(ev4500.unwrap().getPRatedAC) + flexResult.getpMin should beEquivalentTo(ev4500.unwrap().getPRatedAC) + flexResult.getpMax should beEquivalentTo(ev4500.unwrap().getPRatedAC) } emAgent.send(evcsAgent, IssueNoControl(4500)) @@ -1530,9 +1530,9 @@ class EvcsAgentModelCalculationSpec resultListener.expectMsgPF() { case FlexOptionsResultEvent(flexResult) => flexResult.getInputModel shouldBe evcsInputModelQv.getUuid flexResult.getTime shouldBe 9736.toDateTime - flexResult.getpRef should beEquivalentTo(ev4500.unwrap().getSRatedAC) + flexResult.getpRef should beEquivalentTo(ev4500.unwrap().getPRatedAC) flexResult.getpMin should beEquivalentTo(0d.asKiloWatt) - flexResult.getpMax should beEquivalentTo(ev4500.unwrap().getSRatedAC) + flexResult.getpMax should beEquivalentTo(ev4500.unwrap().getPRatedAC) } emAgent.send(evcsAgent, IssuePowerControl(9736, Kilowatts(10.0))) @@ -1595,7 +1595,7 @@ class EvcsAgentModelCalculationSpec emAgent.send(evcsAgent, FlexActivation(11700)) val combinedChargingPower = - ev11700.unwrap().getSRatedAC.add(ev4500.unwrap().getSRatedAC) + ev11700.unwrap().getPRatedAC.add(ev4500.unwrap().getPRatedAC) val combinedChargingPowerSq = Kilowatts( combinedChargingPower.to(PowerSystemUnits.KILOWATT).getValue.doubleValue ) @@ -1620,7 +1620,7 @@ class EvcsAgentModelCalculationSpec flexResult.getTime shouldBe 11700.toDateTime flexResult.getpRef should beEquivalentTo(combinedChargingPower) flexResult.getpMin should beEquivalentTo( - ev4500.unwrap().getSRatedAC.multiply(-1) + ev4500.unwrap().getPRatedAC.multiply(-1) ) flexResult.getpMax should beEquivalentTo(combinedChargingPower) } @@ -1772,7 +1772,7 @@ class EvcsAgentModelCalculationSpec flexResult.getpMin should beEquivalentTo( ev4500 .unwrap() - .getSRatedAC + .getPRatedAC .multiply( -1 ) @@ -1965,9 +1965,9 @@ class EvcsAgentModelCalculationSpec resultListener.expectMsgPF() { case FlexOptionsResultEvent(flexResult) => flexResult.getInputModel shouldBe evcsInputModelQv.getUuid flexResult.getTime shouldBe 36000.toDateTime - flexResult.getpRef should beEquivalentTo(ev4500.unwrap().getSRatedAC) + flexResult.getpRef should beEquivalentTo(ev4500.unwrap().getPRatedAC) flexResult.getpMin should beEquivalentTo(0.asKiloWatt) - flexResult.getpMax should beEquivalentTo(ev4500.unwrap().getSRatedAC) + flexResult.getpMax should beEquivalentTo(ev4500.unwrap().getPRatedAC) } emAgent.send(evcsAgent, IssuePowerControl(36000, Kilowatts(4.0))) diff --git a/src/test/scala/edu/ie3/simona/service/ev/ExtEvDataServiceSpec.scala b/src/test/scala/edu/ie3/simona/service/ev/ExtEvDataServiceSpec.scala index 8e6cf9e07d..a1846a39a1 100644 --- a/src/test/scala/edu/ie3/simona/service/ev/ExtEvDataServiceSpec.scala +++ b/src/test/scala/edu/ie3/simona/service/ev/ExtEvDataServiceSpec.scala @@ -7,7 +7,7 @@ package edu.ie3.simona.service.ev import com.typesafe.config.ConfigFactory -import edu.ie3.simona.api.data.ev.ExtEvData +import edu.ie3.simona.api.data.ev.ExtEvDataConnection import edu.ie3.simona.api.data.ev.model.EvModel import edu.ie3.simona.api.data.ev.ontology._ import edu.ie3.simona.api.data.ontology.ScheduleDataServiceMessage @@ -67,7 +67,8 @@ class ExtEvDataServiceSpec val extSimAdapter = TestProbe("extSimAdapter") val evService = TestActorRef(new ExtEvDataService(scheduler.ref)) - val extEvData = new ExtEvData(evService, extSimAdapter.ref) + val extEvData = new ExtEvDataConnection() + extEvData.setActorRefs(evService, extSimAdapter.ref) val key = ScheduleLock.singleKey(TSpawner, scheduler.ref.toTyped, INIT_SIM_TICK) @@ -90,7 +91,8 @@ class ExtEvDataServiceSpec val extSimAdapter = TestProbe("extSimAdapter") val evService = TestActorRef(new ExtEvDataService(scheduler.ref)) - val extEvData = new ExtEvData(evService, extSimAdapter.ref) + val extEvData = new ExtEvDataConnection() + extEvData.setActorRefs(evService, extSimAdapter.ref) val evcs1 = TestProbe("evcs1") @@ -124,7 +126,8 @@ class ExtEvDataServiceSpec val extSimAdapter = TestProbe("extSimAdapter") val evService = TestActorRef(new ExtEvDataService(scheduler.ref)) - val extEvData = new ExtEvData(evService, extSimAdapter.ref) + val extEvData = new ExtEvDataConnection() + extEvData.setActorRefs(evService, extSimAdapter.ref) val key = ScheduleLock.singleKey(TSpawner, scheduler.ref.toTyped, INIT_SIM_TICK) @@ -171,7 +174,8 @@ class ExtEvDataServiceSpec val extSimAdapter = TestProbe("extSimAdapter") val evService = TestActorRef(new ExtEvDataService(scheduler.ref)) - val extEvData = new ExtEvData(evService, extSimAdapter.ref) + val extEvData = new ExtEvDataConnection() + extEvData.setActorRefs(evService, extSimAdapter.ref) val key = ScheduleLock.singleKey(TSpawner, scheduler.ref.toTyped, INIT_SIM_TICK) @@ -204,7 +208,8 @@ class ExtEvDataServiceSpec val extSimAdapter = TestProbe("extSimAdapter") val evService = TestActorRef(new ExtEvDataService(scheduler.ref)) - val extEvData = new ExtEvData(evService, extSimAdapter.ref) + val extEvData = new ExtEvDataConnection() + extEvData.setActorRefs(evService, extSimAdapter.ref) val key = ScheduleLock.singleKey(TSpawner, scheduler.ref.toTyped, INIT_SIM_TICK) @@ -305,7 +310,8 @@ class ExtEvDataServiceSpec val extSimAdapter = TestProbe("extSimAdapter") val evService = TestActorRef(new ExtEvDataService(scheduler.ref)) - val extEvData = new ExtEvData(evService, extSimAdapter.ref) + val extEvData = new ExtEvDataConnection() + extEvData.setActorRefs(evService, extSimAdapter.ref) val key = ScheduleLock.singleKey(TSpawner, scheduler.ref.toTyped, INIT_SIM_TICK) @@ -380,7 +386,8 @@ class ExtEvDataServiceSpec val extSimAdapter = TestProbe("extSimAdapter") val evService = TestActorRef(new ExtEvDataService(scheduler.ref)) - val extEvData = new ExtEvData(evService, extSimAdapter.ref) + val extEvData = new ExtEvDataConnection() + extEvData.setActorRefs(evService, extSimAdapter.ref) val key = ScheduleLock.singleKey(TSpawner, scheduler.ref.toTyped, INIT_SIM_TICK) @@ -423,7 +430,8 @@ class ExtEvDataServiceSpec val extSimAdapter = TestProbe("extSimAdapter") val evService = TestActorRef(new ExtEvDataService(scheduler.ref)) - val extEvData = new ExtEvData(evService, extSimAdapter.ref) + val extEvData = new ExtEvDataConnection() + extEvData.setActorRefs(evService, extSimAdapter.ref) val key = ScheduleLock.singleKey(TSpawner, scheduler.ref.toTyped, INIT_SIM_TICK) @@ -527,7 +535,8 @@ class ExtEvDataServiceSpec val extSimAdapter = TestProbe("extSimAdapter") val evService = TestActorRef(new ExtEvDataService(scheduler.ref)) - val extEvData = new ExtEvData(evService, extSimAdapter.ref) + val extEvData = new ExtEvDataConnection() + extEvData.setActorRefs(evService, extSimAdapter.ref) val key = ScheduleLock.singleKey(TSpawner, scheduler.ref.toTyped, INIT_SIM_TICK) @@ -574,7 +583,8 @@ class ExtEvDataServiceSpec val extSimAdapter = TestProbe("extSimAdapter") val evService = TestActorRef(new ExtEvDataService(scheduler.ref)) - val extEvData = new ExtEvData(evService, extSimAdapter.ref) + val extEvData = new ExtEvDataConnection() + extEvData.setActorRefs(evService, extSimAdapter.ref) val key = ScheduleLock.singleKey(TSpawner, scheduler.ref.toTyped, INIT_SIM_TICK) @@ -652,7 +662,8 @@ class ExtEvDataServiceSpec val extSimAdapter = TestProbe("extSimAdapter") val evService = TestActorRef(new ExtEvDataService(scheduler.ref)) - val extEvData = new ExtEvData(evService, extSimAdapter.ref) + val extEvData = new ExtEvDataConnection() + extEvData.setActorRefs(evService, extSimAdapter.ref) val key = ScheduleLock.singleKey(TSpawner, scheduler.ref.toTyped, INIT_SIM_TICK) diff --git a/src/test/scala/edu/ie3/simona/sim/setup/ExtSimLoaderSpec.scala b/src/test/scala/edu/ie3/simona/sim/setup/ExtSimLoaderSpec.scala index 49851d1ab4..432657bb16 100644 --- a/src/test/scala/edu/ie3/simona/sim/setup/ExtSimLoaderSpec.scala +++ b/src/test/scala/edu/ie3/simona/sim/setup/ExtSimLoaderSpec.scala @@ -102,7 +102,7 @@ class ExtSimLoaderSpec extends UnitSpec { } } - "load a proper jar correctly" in { + "load a proper jar correctly" ignore { val jar = getResource(workingJar) val jars = Iterable(jar) val extLinks = jars.flatMap(ExtSimLoader.loadExtLink) @@ -113,7 +113,7 @@ class ExtSimLoaderSpec extends UnitSpec { extLinks.headOption.value shouldBe an[ExtLinkInterface] } - "load multiple proper jars correctly" in { + "load multiple proper jars correctly" ignore { val jarOne = getResource(workingJar) val jarTwo = getResource(workingJar2) val jars = Iterable(jarOne, jarTwo) @@ -127,7 +127,7 @@ class ExtSimLoaderSpec extends UnitSpec { } } - "load a jar with multiple ExtLinks" in { + "load a jar with multiple ExtLinks" ignore { val jarOne = getResource(twoImplementationJar) val jars = Iterable(jarOne) val extLinks = jars.flatMap(ExtSimLoader.loadExtLink) From 9b8f27b8b9c83eec4b413505504f02d87006205b Mon Sep 17 00:00:00 2001 From: staudtMarius Date: Mon, 6 Jan 2025 15:49:23 +0100 Subject: [PATCH 02/10] Updating `mock_ext_sim` jars. --- .../ext-sim-loader/_jars/mock_ext_sim-2.jar | Bin 2323 -> 976 bytes .../_jars/mock_ext_sim-empty_file.jar | Bin 2301 -> 965 bytes .../mock_ext_sim-missing_service_file.jar | Bin 2003 -> 781 bytes .../mock_ext_sim-two_implementations.jar | Bin 6150 -> 1392 bytes .../mock_ext_sim-wrong_implementation.jar | Bin 2299 -> 875 bytes .../ext-sim-loader/_jars/mock_ext_sim.jar | Bin 2323 -> 976 bytes .../simona/sim/setup/ExtSimLoaderSpec.scala | 6 +++--- 7 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/resources/edu/ie3/simona/sim/setup/ext-sim-loader/_jars/mock_ext_sim-2.jar b/src/test/resources/edu/ie3/simona/sim/setup/ext-sim-loader/_jars/mock_ext_sim-2.jar index 08134aa1b8f3a1ece0edd58f2ef47fac4d1adbd4..1df2c586a405c2143dbaccc6776ed34a40ffd266 100644 GIT binary patch literal 976 zcmWIWW@Zs#VBp|j(5Y36VgLdr5CH_7Knj zDD-vo^K^3!4$<><`|Nw>w2!y0-bG$-U9EFx&TkGfxMKX^>7%DiNQUW`t3|z@9A=}z z$iVO&hy{U$xmJ|;Waedi<`(4WCFdj-7f%g1>BSrwrmQxEmdu-LFRQ;XUo$B=V&&evasvSI&54cX2bRI=yB^MoTSPrkN%d867`*^ zGP6_VvfOC`->UD)yQ`jM+NRd`>9@1+JRggR?B{NLT41lV<*Wa!4Zq*}w!AVp7Ze{q zQxrI-ZI5?2@48!WW6%UXDWTW#OluZtYP`NU zk6&J->W^GW_rZ7J#db5&W!H#)zsCLdm^vbkc2uKArVw%*6{i-JWhSQYo`5`o69)%bYw%;|4ubWbn> zBbt#(gc)}N16l$E0t{~*K{PzMp=(1=ZXm@Vu%uBFNW!%tB|c;mu%$7ucCZO$KoaH$ zc#1>Tjx8)9+ClC<3rw_d2f#xXT|aurBCP+9RX-8o9N^8$1~P^f2%~|9#Dg;~0Q_1c AQ~&?~ literal 2323 zcmWIWW@h1HVBp|jcpkAdgaHVcKm-tQ0t5VC*~I9q+%#fdEU3N8|Y&hRt5$&Oy#Z>C8J5%%d?3r`x@87RysOS_I`!&HRG37!(W80z? zZha!B{erJC&$r&AxK*k$=H!9$Yy6=3Teho9Kx7ao6HceYae zr`NTkzY<+dwp2@r9X@r<{pOaJ+%@ZSi+9U~@a072S1i)25j}kC;JmZ7(K1?szwT__ z{Ze@JC`Wtr5ZGPu9_ac`ng5UyLa7PTB3F{b{tNa|7GIq zM9JUK7m z;XO0{rFQDm+ZMSQpV={8P}4AFmebLfalv_QPWSfqOfOqfc9~ni^TMC2NfJ7LQ&he` zQTMf-zr}LiG&zw<2|3SK>ux9arJS3qyZ!Eu=ub}T8>W6vj#2G6xM|JL7*|EtyZap$ zrgwz$Ueog0wj^tQom_f_cBExOf;3ODxNOzpY0VmII?RJUpO2k!b`sw~+dIotQ)evd zHTAf(=+b|^xzjw2CjISpPl)$;+3Z`t_woYsJO%fI4$B_5NS>LrWRl@@hBZo}zoU*D zlpka3H~8|IB~_tsR)=7b?0Oc*?9UMjyBlq|QZ7f>96TkLT=AUa`rStl%zNsNp8bCG ze97D{$4u^*_N^w%480O#KjbjYJ0>6&sPciG^Xs{@&X=Yo74a>tZ8`2473=hBzv`KP zi(AwS|69%Q_pBDnKK~yrCnfn>Cb0vP^LJ)olE#{xeKPa1A&GeEr0D$14g#&`pFKM= zL(SJiLwEWmF^{0m+6RV9JBlVw(5c|iYTEAms7<#|_-E6L{aQi+onC(!>O>yh*cm9q z`SHQrxgY1{pYQqheEoZS1{;^lE?k++lH8F`SiFwET0Cjpr(d5!pWk@d#E`kaA8ns*o4jQ$yBg0D?j0-}zNz3s`ehaBj$dm+$rsiYEkHl_IV9!%-^WSHQf}fbae12<*8idWV-(IJtNQ0 zH;*JgeAsi^qjzsg)}PqjH;$joxOMuV(ZPF0%WZ#6;I51My+r)huJzMEgrjYa>JzXmjnrE6`dtjAkz;)-yT26nXWB)gu)i>}@pAZwY=C9(p zb4O-xndx<;%kXG~rF*B{sc(5cKif{tzI*w|&pYR>KDDeB+BC62_$JHD^y|?#)T+{p z?(QgR-@UtYY4x3}lVcy7Bg*x41&dKC03l!kf>!{=sYPX($*ILCB`8Qoq))_E37|?b zAU4IS16Z8v0gGzA;>_IqyhOdkf=oSNxe7{%o_WCHH7zkY)!SF|>S-U-YubKibWeC* zEnchf@#LA)Y{1mb$RxsyyM6-N2Lu8PZyiB2+_C7|&}%D@Vh~u;s0k$D+K}olbQ3_T zVHG2&ih=-;#brPysKUah15{x_07%CyAQPkmRDI#o1**Ov0Ho^>kO|WTt<2ChqgQ4y z?MoUzVrs@wwV|7dUZNn(JOC_X&>RGfR!I4RY!bGl1u+TaHAXh1NPs6abp7ZF4dD`F btong&Bb4j{yjg)-K}{V_hInA~&I9uR*v?P1 diff --git a/src/test/resources/edu/ie3/simona/sim/setup/ext-sim-loader/_jars/mock_ext_sim-empty_file.jar b/src/test/resources/edu/ie3/simona/sim/setup/ext-sim-loader/_jars/mock_ext_sim-empty_file.jar index 08d8dbe51915f9f355add687f92ce4b3126d2fe5..f6d5f2dedfc3f3e5964a27d11f85a4c09aafb123 100644 GIT binary patch delta 605 zcmew>c$A$lz?+#xgn@yBgF&ZOEovg4JQotr+_@gYn^371^?GucjRqqF!*?JSWME)$ zttj!y%**!7Ey&SJ&PgmTo*Hn{i#bqWjoIX$G{f#$yDL0xeh7RO5k11%;>bVoj`if_ z`z)jo z3rEhqw`o1+xl9|u46e27Hx;b8EG@@=sASKL=Lttvo_uZj@vdNy-WM-$zWx3M? zzE$6ocUL{jv`ww=({E?tc|H~s+0Whhw7_0z%UAzd$s2yZ_icG)a4sl5e#W1x*A8`C z?`*u$qPb!iNSHi>O&6Jap3Nc^cccL0 z1q_xnmH}yuC<^dqWD;RUXa}if0&8Gk5Q5SS3<3;q9nUgOF5r+-!>-g6u9SgcN#lRU U$s0KA`B)iP8KQw{BLr+90O*a$PXGV_ literal 2301 zcmWIWW@h1HVBp|jI2^e&gaHVcKm-tQ0UF7xF)jD_P{N^BoE5;9=K6=W8W*AUE+*TGK zJ2j;g!$M>=98fixsm6HK@gu1#PRuRHNySi}^1N?jH_*p2tPBiln95x%N>YpR5_5vV zx`Q)w^^$WEi;H`M@B0fo3jCWU7h|c#F;z>WqRGK~YVgP7&J$ZS>?U-pOiTEXn>l?~ z!QSk3)x2NVUlKQ*^kR4Yl)`USL3JUDJMWx%cc$j^*)!+X-@jkaP|+za_G^MsV#Ezc#<1#HnlZziB6AV_9Hj8 z$0rPV${Ft*SZ_E(_nm7}algVRY1Z#+b}muOOEqZpTs1v>^>d4yckjBpv_$P@>^Ph- z|I5VJk4hdt$~yINVpT@cti+A(+gHaFx^F2tQuVrIb8om~s6o$;OXB&9f34%#{$riH zd2(LB!+U1@OYPLBw=HrrKC@%Gpr&EUET^L{@v52=Y>C4lO%Nh zrl@>>qV8)ue~ab3X>uZ!5^|oe*4<9-OF1`Jcl+HR(Vv{wH%$GU9HZKCaMPNfF|LZP zclSFiOz#Ngy{6^0ZAsSrI=S=;?MTan1ZkdPaoMWH)0#EbbeIQyJ|8>d>?FQ}ws)4P zrp{Q@YwB@n(WU=-bEkP4P5RsIo)GWxve~zO@8t#Nc?#|a9hN zKYMm$hMKR3hVJxBVje-AwGRxJb`(vVpi{x2)wJFBQJZd`@Xw|f`?Z7uI=%id)QLR0 zu`^JJ^W%fLb3e|@Ki~81`TFlJLap)6L}#D_&7942d-Lfp2`@BPx>aSpZarSzA97vrgpK4ki7p*${l$*QKgO@_JMDE-u54=c ziW=GHlathH)-yM5RqZ`;N6h_Bxl`I3)uPZ9?eiMen7>htYq}{|>FD55%2T<@$#nha zdq$q0Zyrg0_^{`+NAKR0tUs~4ZyZ0FaqIL!ql5R1mfQZCz+D&hdx`k1UGG;KeB!Lx z^59*4W?Hqx&)DZX`~F5wUU;v6=8m)9r!^f2t$X_8?8nCCJD=}=XOb?T zWsco87TI^`&zUH$*D>K0Od;t%db(C5G|x1>_P{F7fa}hYwVeJ&$Nq0Rt8d_+J|QM( z&0ocH=Z?(YGSllwm*LR}OZQH@Q{VD@ezu*OefRQ_pLfn%eQH@Nv}t04@J*JP>DQxg zs8yvG-Q7{tzI%7)(&{@`C&xZEN0jU66@U;h0l_PP;?$zD%;eN!loAwOhbdMaz~WpF zSXAp3XXfVTCF&&>Wao4|E%$1Qy`U3e*Z})NnGy1EaSC%mV;kNk6av diff --git a/src/test/resources/edu/ie3/simona/sim/setup/ext-sim-loader/_jars/mock_ext_sim-missing_service_file.jar b/src/test/resources/edu/ie3/simona/sim/setup/ext-sim-loader/_jars/mock_ext_sim-missing_service_file.jar index d16efe1e26d0c3c0f9cb40ec72748a63d602e2ee..95ececf299405197d78b35645d09944fc2f8902f 100644 GIT binary patch literal 781 zcmWIWW@Zs#VBp|j(5+RAVgLdr5CH_7Knj zDD-vo^K^3!4$<><`|Nw>w2!y0-bG$-U9EFx&TkGfxMKX^>7%DiNQTXo3rEhqw`o1+xl9|u46e27Hx;b8EG@@=sASKL=Lttvo_uZj@vdNy- zWM-$zWx3M?zE$6ocUL{jv`ww=({E?tc|H~s+0Whhw7_0z%UAzd8-Bm{ZFyyIE+{^J z#-FR#4s~1aY`oE;y-z6Y$P<~P(VeC%rzmhv+aB+5-gUR$#-Is&QbMoenbs`Q)OdYy z9>2Uu)gQT%?t|~bi|uBl%dQdqevSL@F?B>7fr1qnlJLkBLXM;2)S|M?sm0BfV{Hvj+t literal 2003 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 eqJE1nj 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 A8UO$Q literal 2323 zcmWIWW@h1HVBp|jcpkAdgaHVcKm-tQ0t5VC*~I9q+%#fdEU3N8|Y&hRt5$&Oy#Z>C8J5%%d?3r`x@87RysOS_I`!&HRG37!(W80z? zZha!B{erJC&$r&AxK*k$=H!9$Yy6=3Teho9Kx7ao6HceYae zr`NTkzY<+dwp2@r9X@r<{pOaJ+%@ZSi+9U~@a072S1i)25j}kC;JmZ7(K1?szwT__ z{Ze@JC`Wtr5ZGPu9_ac`ng5UyLa7PTB3F{b{tNa|7GIq zM9JUK7m z;XO0{rFQDm+ZMSQpV={8P}4AFmebLfalv_QPWSfqOfOqfc9~ni^TMC2NfJ7LQ&he` zQTMf-zr}LiG&zw<2|3SK>ux9arJS3qyZ!Eu=ub}T8>W6vj#2G6xM|JL7*|EtyZap$ zrgwz$Ueog0wj^tQom_f_cBExOf;3ODxNOzpY0VmII?RJUpO2k!b`sw~+dIotQ)evd zHTAf(=+b|^xzjw2CjISpPl)$;+3Z`t_woYsJO%fI4$B_5NS>LrWRl@@hBZo}zoU*D zlpka3H~8|IB~_tsR)=7b?0Oc*?9UMjyBlq|QZ7f>96TkLT=AUa`rStl%zNsNp8bCG ze97D{$4u^*_N^w%480O#KjbjYJ0>6&sPciG^Xs{@&X=Yo74a>tZ8`2473=hBzv`KP zi(AwS|69%Q_pBDnKK~yrCnfn>Cb0vP^LJ)olE#{xeKPa1A&GeEr0D$14g#&`pFKM= zL(SJiLwEWmF^{0m+6RV9JBlVw(5c|iYTEAms7<#|_-E6L{aQi+onC(!>O>yh*cm9q z`SHQrxgY1{pYQqheEoZS1{;^lE?k++lH8F`SiFwET0Cjpr(d5!pWk@d#E`kaA8ns*o4jQ$yBg0D?j0-}zNz3s`ehaBj$dm+$rsiYEkHl_IV9!%-^WSHQf}fbae12<*8idWV-(IJtNQ0 zH;*JgeAsi^qjzsg)}PqjH;$joxOMuV(ZPF0%WZ#6;I51My+r)huJzMEgrjYa>JzXmjnrE6`dtjAkz;)-yT26nXWB)gu)i>}@pAZwY=C9(p zb4O-xndx<;%kXG~rF*B{sc(5cKif{tzI*w|&pYR>KDDeB+BC62_$JHD^y|?#)T+{p z?(QgR-@UtYY4x3}lVcy7Bg*x41&dKC03l!kf>!{=sYPX($*ILCB`8Qoq))_E37|?b zAU4IS16Z8v0gGzA;>_IqyhOdkf=oSNxe7{%o_WCHH7zkY)!SF|>S-U-YubKibWeC* zEnchf@#LA)Y{1mb$RxsyyM6-N2Lu8PZyiB2+_C7|&}%D@Vh~u;s0k$D+K}olbQ3_T zVHG2&ih=-;#brPysKUah15{x_07%CyAQPkmRDI#o1**Ov0Ho^>kO|WTt<2ChqgQ4y z?MoUzVrs@wwV|7dUZNn(JOC_X&>RGfR!I4RY!bGl1u+TaHAXh1NPs6abp7ZF4dD`F btong&Bb4j{yjg)-K}{V_hInA~&I9uR*v?P1 diff --git a/src/test/scala/edu/ie3/simona/sim/setup/ExtSimLoaderSpec.scala b/src/test/scala/edu/ie3/simona/sim/setup/ExtSimLoaderSpec.scala index 432657bb16..49851d1ab4 100644 --- a/src/test/scala/edu/ie3/simona/sim/setup/ExtSimLoaderSpec.scala +++ b/src/test/scala/edu/ie3/simona/sim/setup/ExtSimLoaderSpec.scala @@ -102,7 +102,7 @@ class ExtSimLoaderSpec extends UnitSpec { } } - "load a proper jar correctly" ignore { + "load a proper jar correctly" in { val jar = getResource(workingJar) val jars = Iterable(jar) val extLinks = jars.flatMap(ExtSimLoader.loadExtLink) @@ -113,7 +113,7 @@ class ExtSimLoaderSpec extends UnitSpec { extLinks.headOption.value shouldBe an[ExtLinkInterface] } - "load multiple proper jars correctly" ignore { + "load multiple proper jars correctly" in { val jarOne = getResource(workingJar) val jarTwo = getResource(workingJar2) val jars = Iterable(jarOne, jarTwo) @@ -127,7 +127,7 @@ class ExtSimLoaderSpec extends UnitSpec { } } - "load a jar with multiple ExtLinks" ignore { + "load a jar with multiple ExtLinks" in { val jarOne = getResource(twoImplementationJar) val jars = Iterable(jarOne) val extLinks = jars.flatMap(ExtSimLoader.loadExtLink) From cfd392ac79c3bd8874bb97715dcba421094ae4e9 Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Tue, 7 Jan 2025 17:46:27 +0100 Subject: [PATCH 03/10] Using the EM model strategy set in EmInput Signed-off-by: Sebastian Peter --- CHANGELOG.md | 1 + .../scala/edu/ie3/simona/agent/grid/GridAgentController.scala | 4 +--- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f2331ff4e7..4d122911c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -156,6 +156,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Correct wrong use of term "wall clock time" [#727](https://github.com/ie3-institute/simona/issues/727) - Fixed Deployment of `simona` to `Maven Central` in new GHA Pipeline [#1029](https://github.com/ie3-institute/simona/issues/1029) - Fixed SonarQube quality gate using the right link for PRs or Branches [#1061](https://github.com/ie3-institute/simona/issues/1061) +- EM strategy is ignored [#1091](https://github.com/ie3-institute/simona/issues/1091) ## [3.0.0] - 2023-08-07 diff --git a/src/main/scala/edu/ie3/simona/agent/grid/GridAgentController.scala b/src/main/scala/edu/ie3/simona/agent/grid/GridAgentController.scala index 8d615ec3af..c6b689fd55 100644 --- a/src/main/scala/edu/ie3/simona/agent/grid/GridAgentController.scala +++ b/src/main/scala/edu/ie3/simona/agent/grid/GridAgentController.scala @@ -878,9 +878,7 @@ class GridAgentController( emInput, modelConfiguration, outputConfig, - maybeControllingEm - .map(_ => "PRIORITIZED") - .getOrElse("PROPORTIONAL"), + emInput.getControlStrategy, simulationStartDate, maybeControllingEm.toRight( environmentRefs.scheduler From 8b164e4064cfb04c02fd97bfad7a1b82d3dbfd6d Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Tue, 7 Jan 2025 17:49:40 +0100 Subject: [PATCH 04/10] Update CHANGELOG.md Co-authored-by: Daniel Feismann <98817556+danielfeismann@users.noreply.github.com> --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d122911c6..416c701666 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -156,7 +156,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Correct wrong use of term "wall clock time" [#727](https://github.com/ie3-institute/simona/issues/727) - Fixed Deployment of `simona` to `Maven Central` in new GHA Pipeline [#1029](https://github.com/ie3-institute/simona/issues/1029) - Fixed SonarQube quality gate using the right link for PRs or Branches [#1061](https://github.com/ie3-institute/simona/issues/1061) -- EM strategy is ignored [#1091](https://github.com/ie3-institute/simona/issues/1091) +- Fixed ignored EM strategy [#1091](https://github.com/ie3-institute/simona/issues/1091) ## [3.0.0] - 2023-08-07 From a739cabdf29bf34b79f72dc906c58ba9a0c5abcd Mon Sep 17 00:00:00 2001 From: Sebastian Peter Date: Thu, 9 Jan 2025 16:31:55 +0100 Subject: [PATCH 05/10] Enhancing title in `CITATION.cff` Signed-off-by: Sebastian Peter --- CHANGELOG.md | 1 + CITATION.cff | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 416c701666..7b49fc0488 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -114,6 +114,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Prepare 'ChpModelSpec' and 'CylindricalThermalStorageSpec' for Storage without storageVolumeLvlMin [#1012](https://github.com/ie3-institute/simona/issues/1012) - Fixed SonarQube quality gate using the correct parameter '-Dsonar.qualitygate.wait=true' [#1072](https://github.com/ie3-institute/simona/issues/1072) - Updated `simonaAPI` to version `0.6.0` [#1080](https://github.com/ie3-institute/simona/issues/1080) +- Enhanced title in `CITATION.cff` [#1088](https://github.com/ie3-institute/simona/issues/1088) ### Fixed - Fix rendering of references in documentation [#505](https://github.com/ie3-institute/simona/issues/505) diff --git a/CITATION.cff b/CITATION.cff index 0008300e9f..8e6591eeed 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -1,5 +1,5 @@ cff-version: 1.2.0 -title: SIMONA +title: "SIMONA - A Discrete-Event Distribution Grid Simulation Environment" message: "If you use this software, please cite it as below." type: software authors: From b2f6bcc56fea8506c0e789301a37ae4d28af5bb8 Mon Sep 17 00:00:00 2001 From: staudtMarius Date: Thu, 9 Jan 2025 16:32:57 +0100 Subject: [PATCH 06/10] Throw exception if the slack node is not directly conected to a transformer. --- CHANGELOG.md | 1 + .../edu/ie3/simona/io/grid/GridProvider.scala | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 416c701666..a8f233e5f6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -43,6 +43,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Create `CITATION.cff` [#1035](https://github.com/ie3-institute/simona/issues/1035) - Introduce ThermalDemandWrapper [#1049](https://github.com/ie3-institute/simona/issues/1049) - Added Marius Staudt to list of reviewers [#1057](https://github.com/ie3-institute/simona/issues/1057) +- Throw exception if the slack node is not directly conected to a transformer. [#525](https://github.com/ie3-institute/simona/issues/525) ### Changed - Adapted to changed data source in PSDM [#435](https://github.com/ie3-institute/simona/issues/435) diff --git a/src/main/scala/edu/ie3/simona/io/grid/GridProvider.scala b/src/main/scala/edu/ie3/simona/io/grid/GridProvider.scala index 3dda241c4d..efde83abb0 100644 --- a/src/main/scala/edu/ie3/simona/io/grid/GridProvider.scala +++ b/src/main/scala/edu/ie3/simona/io/grid/GridProvider.scala @@ -7,6 +7,7 @@ package edu.ie3.simona.io.grid import com.typesafe.scalalogging.LazyLogging +import edu.ie3.datamodel.exceptions.{InvalidGridException, SourceException} import edu.ie3.datamodel.io.naming.FileNamingStrategy import edu.ie3.datamodel.io.source.csv.{ CsvJointGridContainerSource, @@ -51,6 +52,27 @@ object GridProvider extends LazyLogging { // checks the grid container and throws exception if there is an error ValidationUtils.check(jointGridContainer) + // check slack node location + val slackSubGrid = jointGridContainer.getSubGridTopologyGraph + .vertexSet() + .asScala + .filter(_.getRawGrid.getNodes.asScala.exists(_.isSlack)) + .maxByOption( + _.getPredominantVoltageLevel.getNominalVoltage.getValue + .doubleValue() + ) + .getOrElse( + throw new InvalidGridException( + "There is no slack node present in the grid." + ) + ) + + if (slackSubGrid.getRawGrid.getNodes.size() > 1) { + throw new SourceException( + "There are too many nodes the the slack grid. This is currently not support." + ) + } + jointGridContainer case None => throw new RuntimeException( From c6a5d24cacba0ff47de37b343d64e4508dbc009a Mon Sep 17 00:00:00 2001 From: staudtMarius Date: Fri, 10 Jan 2025 10:46:48 +0100 Subject: [PATCH 07/10] Fix exception message. --- src/main/scala/edu/ie3/simona/io/grid/GridProvider.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/scala/edu/ie3/simona/io/grid/GridProvider.scala b/src/main/scala/edu/ie3/simona/io/grid/GridProvider.scala index efde83abb0..0b11d732ca 100644 --- a/src/main/scala/edu/ie3/simona/io/grid/GridProvider.scala +++ b/src/main/scala/edu/ie3/simona/io/grid/GridProvider.scala @@ -69,7 +69,7 @@ object GridProvider extends LazyLogging { if (slackSubGrid.getRawGrid.getNodes.size() > 1) { throw new SourceException( - "There are too many nodes the the slack grid. This is currently not support." + "There are too many nodes in the slack grid. This is currently not support." ) } From a29f53ca0a1637bade026a48438093865f3cf0c7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 10 Jan 2025 14:21:29 +0000 Subject: [PATCH 08/10] Bump pekkoVersion from 1.1.2 to 1.1.3 (#1100) --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 483aca87b8..ae04be5fae 100644 --- a/build.gradle +++ b/build.gradle @@ -25,7 +25,7 @@ ext { scalaVersion = '2.13' scalaBinaryVersion = '2.13.15' - pekkoVersion = '1.1.2' + pekkoVersion = '1.1.3' jtsVersion = '1.20.0' confluentKafkaVersion = '7.4.0' tscfgVersion = '1.2.1' From e1b54afe8fa2a38a0e4df5dc46b72d109ecb5c69 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 10 Jan 2025 14:35:04 +0000 Subject: [PATCH 09/10] Bump org.apache.poi:poi-ooxml from 5.3.0 to 5.4.0 (#1101) --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index ae04be5fae..42941a08c9 100644 --- a/build.gradle +++ b/build.gradle @@ -144,7 +144,7 @@ dependencies { implementation "com.sksamuel.avro4s:avro4s-core_${scalaVersion}:4.1.2" implementation 'org.apache.commons:commons-math3:3.6.1' // apache commons math3 - implementation 'org.apache.poi:poi-ooxml:5.3.0' // used for FilenameUtils + implementation 'org.apache.poi:poi-ooxml:5.4.0' // used for FilenameUtils implementation 'javax.measure:unit-api:2.2' implementation 'tech.units:indriya:2.2.2' // quantities implementation "org.typelevel:squants_${scalaVersion}:1.8.3" From 61bdaac7415cddd8002d0c1cb2e5448c85cde8e2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2025 13:41:08 +0000 Subject: [PATCH 10/10] Bump org.apache.commons:commons-csv from 1.12.0 to 1.13.0 (#1102) --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 42941a08c9..d87f4ddc0a 100644 --- a/build.gradle +++ b/build.gradle @@ -148,7 +148,7 @@ dependencies { implementation 'javax.measure:unit-api:2.2' implementation 'tech.units:indriya:2.2.2' // quantities implementation "org.typelevel:squants_${scalaVersion}:1.8.3" - implementation 'org.apache.commons:commons-csv:1.12.0' + implementation 'org.apache.commons:commons-csv:1.13.0' implementation 'org.scalanlp:breeze_2.13:2.1.0' // scientific calculations (http://www.scalanlp.org/) implementation 'de.lmu.ifi.dbs.elki:elki:0.7.5' // Statistics (for random load model) implementation 'org.jgrapht:jgrapht-core:1.5.2'