diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index 07673e99d9..c451d7a065 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -19,7 +19,6 @@ diff --git a/.idea/vcs.xml b/.idea/vcs.xml index e7dbf5c4f7..b3f968953f 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -5,4 +5,4 @@ - \ No newline at end of file + diff --git a/alchemist-api/build.gradle.kts b/alchemist-api/build.gradle.kts index 8b9292aa9f..74cf14ebd1 100644 --- a/alchemist-api/build.gradle.kts +++ b/alchemist-api/build.gradle.kts @@ -16,7 +16,6 @@ dependencies { api(libs.jool) api(libs.listset) implementation(libs.kotlin.reflect) - testImplementation(libs.kotlin.test) } diff --git a/alchemist-api/src/main/java/it/unibo/alchemist/model/Incarnation.java b/alchemist-api/src/main/java/it/unibo/alchemist/model/Incarnation.java index e137564fbd..b9bcbcc2fb 100644 --- a/alchemist-api/src/main/java/it/unibo/alchemist/model/Incarnation.java +++ b/alchemist-api/src/main/java/it/unibo/alchemist/model/Incarnation.java @@ -119,8 +119,6 @@ Reaction createReaction( * @param node * the node that will host this object. If it is `null` the actionable * will not belong to a {@link Node} - * @param time - * the time distribution of the reaction * @param actionable * the actionable hosting this object * @param additionalParameters @@ -131,7 +129,6 @@ Condition createCondition( RandomGenerator randomGenerator, Environment environment, @Nullable Node node, - TimeDistribution time, Actionable actionable, @Nullable Object additionalParameters ); @@ -144,8 +141,6 @@ Condition createCondition( * @param node * the node that will host this object. If it is `null` the actionable * will not belong to a {@link Node} - * @param time - * the time distribution of the reaction * @param actionable * the actionable hosting this object * @param additionalParameters @@ -156,7 +151,6 @@ Action createAction( RandomGenerator randomGenerator, Environment environment, @Nullable Node node, - TimeDistribution time, Actionable actionable, @Nullable Object additionalParameters ); diff --git a/alchemist-api/src/main/kotlin/it/unibo/alchemist/model/Environment.kt b/alchemist-api/src/main/kotlin/it/unibo/alchemist/model/Environment.kt index beacb1bff9..5a781ab16d 100644 --- a/alchemist-api/src/main/kotlin/it/unibo/alchemist/model/Environment.kt +++ b/alchemist-api/src/main/kotlin/it/unibo/alchemist/model/Environment.kt @@ -83,7 +83,7 @@ interface Environment> : /** * Return all the Layers in this [Environment]. */ - val layers: ListSet> + val layers: Map> /** * Returns the current [LinkingRule]. diff --git a/alchemist-cognitive-agents/build.gradle.kts b/alchemist-cognitive-agents/build.gradle.kts index c0e8717d71..7d43526a26 100644 --- a/alchemist-cognitive-agents/build.gradle.kts +++ b/alchemist-cognitive-agents/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2022, Danilo Pianini and contributors + * Copyright (C) 2010-2025, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -15,6 +15,8 @@ plugins { } dependencies { + ksp(alchemist("factories-generator")) + api(alchemist("api")) implementation(alchemist("euclidean-geometry")) diff --git a/alchemist-cognitive-agents/src/main/kotlin/it/unibo/alchemist/model/cognitive/steering/TypeBased.kt b/alchemist-cognitive-agents/src/main/kotlin/it/unibo/alchemist/model/cognitive/steering/TypeBased.kt index fac01c0098..4ff374b74a 100644 --- a/alchemist-cognitive-agents/src/main/kotlin/it/unibo/alchemist/model/cognitive/steering/TypeBased.kt +++ b/alchemist-cognitive-agents/src/main/kotlin/it/unibo/alchemist/model/cognitive/steering/TypeBased.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2023, Danilo Pianini and contributors + * Copyright (C) 2010-2025, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -28,6 +28,6 @@ import kotlin.reflect.KClass class TypeBased( environment: Euclidean2DEnvironment, node: Node, - typeWeights: LinkedHashMap>, Double>, + typeWeights: Map>, Double>, defaultWeight: Double = 0.0, ) : Weighted(environment, node, { typeWeights[this::class] ?: defaultWeight }) diff --git a/alchemist-cognitive-agents/src/test/kotlin/it/unibo/alchemist/model/cognitive/TestSensory.kt b/alchemist-cognitive-agents/src/test/kotlin/it/unibo/alchemist/model/cognitive/TestSensory.kt index 84484654d3..7f8f0ef967 100644 --- a/alchemist-cognitive-agents/src/test/kotlin/it/unibo/alchemist/model/cognitive/TestSensory.kt +++ b/alchemist-cognitive-agents/src/test/kotlin/it/unibo/alchemist/model/cognitive/TestSensory.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2023, Danilo Pianini and contributors + * Copyright (C) 2010-2026, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -11,7 +11,6 @@ package it.unibo.alchemist.model.cognitive import io.kotest.core.spec.style.StringSpec import io.kotest.matchers.shouldBe -import it.unibo.alchemist.model.Incarnation import it.unibo.alchemist.model.SupportedIncarnations import it.unibo.alchemist.model.cognitive.properties.Pedestrian import it.unibo.alchemist.model.cognitive.properties.Perceptive2D @@ -31,14 +30,10 @@ import org.apache.commons.math3.random.RandomGenerator * * @param T used internally */ -class TestSensory : - StringSpec({ +class TestSensory : StringSpec({ - fun createHomogeneousPedestrian( - incarnation: Incarnation, - randomGenerator: RandomGenerator, - environment: Physics2DEnvironment, - ) = GenericNode(incarnation, environment).apply { + fun createHomogeneousPedestrian(randomGenerator: RandomGenerator, environment: Physics2DEnvironment) = + GenericNode(environment).apply { listOf( Pedestrian(randomGenerator, this), Social(this), @@ -47,32 +42,28 @@ class TestSensory : ).forEach(this::addProperty) } - "field of view" { - val environment = - ContinuousPhysics2DEnvironment( - SupportedIncarnations.get("protelis").orElseThrow(), - ) - val rand = MersenneTwister(1) - environment.linkingRule = NoLinks() - val incarnation: Incarnation = - SupportedIncarnations - .get(SupportedIncarnations.getAvailableIncarnations().first()) - .get() - val observed = createHomogeneousPedestrian(incarnation, rand, environment) - val origin = Euclidean2DPosition(5.0, 5.0) - environment.addNode(observed, origin) - val radius = 10.0 - origin.surrounding(radius).forEach { - with(createHomogeneousPedestrian(incarnation, rand, environment)) { - environment.addNode(this, it) - environment.setHeading(this, origin - it) - } + "field of view" { + val environment = + ContinuousPhysics2DEnvironment( + SupportedIncarnations.get("protelis").orElseThrow(), + ) + val rand = MersenneTwister(1) + environment.linkingRule = NoLinks() + val observed = createHomogeneousPedestrian(rand, environment) + val origin = Euclidean2DPosition(5.0, 5.0) + environment.addNode(observed, origin) + val radius = 10.0 + origin.surrounding(radius).forEach { + with(createHomogeneousPedestrian(rand, environment)) { + environment.addNode(this, it) + environment.setHeading(this, origin - it) } - environment.nodes.minusElement(observed).forEach { - with(FieldOfView2D(environment, it, radius, Math.PI / 2)) { - influentialNodes().size shouldBe 1 - influentialNodes().first() shouldBe observed - } + } + environment.nodes.minusElement(observed).forEach { + with(FieldOfView2D(environment, it, radius, Math.PI / 2)) { + influentialNodes().size shouldBe 1 + influentialNodes().first() shouldBe observed } } - }) + } +}) diff --git a/alchemist-composeui/build.gradle.kts b/alchemist-composeui/build.gradle.kts index 0de97ab72e..45863e6941 100644 --- a/alchemist-composeui/build.gradle.kts +++ b/alchemist-composeui/build.gradle.kts @@ -1,11 +1,5 @@ -import dev.detekt.gradle.Detekt -import it.unibo.alchemist.build.devServer -import it.unibo.alchemist.build.webCommonConfiguration -import org.gradle.kotlin.dsl.withType -import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl - /* - * Copyright (C) 2010-2025, Danilo Pianini and contributors + * Copyright (C) 2010-2026, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -13,6 +7,10 @@ import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl * as described in the file LICENSE in the Alchemist distribution's top directory. */ +import it.unibo.alchemist.build.devServer +import it.unibo.alchemist.build.webCommonConfiguration +import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl + plugins { id("kotlin-multiplatform-convention") alias(libs.plugins.compose.multiplatform) @@ -46,8 +44,3 @@ publishing.publications.withType().configureEach { } } } - -// exclude files in build from Detekt -tasks.withType().configureEach { - exclude("**/alchemist_composeui/**") -} diff --git a/alchemist-engine/src/test/kotlin/it/unibo/alchemist/core/TestConcurrency.kt b/alchemist-engine/src/test/kotlin/it/unibo/alchemist/core/TestConcurrency.kt index 3ec5d40559..d0dcf3841d 100644 --- a/alchemist-engine/src/test/kotlin/it/unibo/alchemist/core/TestConcurrency.kt +++ b/alchemist-engine/src/test/kotlin/it/unibo/alchemist/core/TestConcurrency.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2025, Danilo Pianini and contributors + * Copyright (C) 2010-2026, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -36,7 +36,7 @@ internal class TestConcurrency { fun `simulation commands should interleave`() { val incarnation = BiochemistryIncarnation() val environment = Continuous2DEnvironment(incarnation) - val node = GenericNode(incarnation, environment) + val node = GenericNode(environment) environment.linkingRule = NoLinks() val timeDistribution = DiracComb(1.0) val reaction = Event(node, timeDistribution) diff --git a/alchemist-engine/src/test/kotlin/it/unibo/alchemist/core/TestSimulationControl.kt b/alchemist-engine/src/test/kotlin/it/unibo/alchemist/core/TestSimulationControl.kt index a4cbe79af7..c31f92abd4 100644 --- a/alchemist-engine/src/test/kotlin/it/unibo/alchemist/core/TestSimulationControl.kt +++ b/alchemist-engine/src/test/kotlin/it/unibo/alchemist/core/TestSimulationControl.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2023, Danilo Pianini and contributors + * Copyright (C) 2010-2025, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -68,7 +68,7 @@ class TestSimulationControl : fun Environment.tickRate(delta: Double) { this.simulation.schedule { - this.addGlobalReaction(GlobalTestReaction(DiracComb(Time.ZERO, delta), this)) + this.addGlobalReaction(GlobalTestReaction(this, DiracComb(Time.ZERO, delta))) } } } diff --git a/alchemist-engine/src/test/kotlin/it/unibo/alchemist/core/test/GoToTimeRegressionTest.kt b/alchemist-engine/src/test/kotlin/it/unibo/alchemist/core/test/GoToTimeRegressionTest.kt index 07834115f6..4742563fec 100644 --- a/alchemist-engine/src/test/kotlin/it/unibo/alchemist/core/test/GoToTimeRegressionTest.kt +++ b/alchemist-engine/src/test/kotlin/it/unibo/alchemist/core/test/GoToTimeRegressionTest.kt @@ -1,3 +1,12 @@ +/* + * Copyright (C) 2010-2025, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + package it.unibo.alchemist.core.test import it.unibo.alchemist.model.Environment @@ -24,7 +33,7 @@ object GoToTimeRegressionTest { private fun Environment.tickRate(delta: Double) { this.simulation.schedule { - this.addGlobalReaction(GlobalTestReaction(DiracComb(Time.ZERO, delta), this)) + this.addGlobalReaction(GlobalTestReaction(this, DiracComb(Time.ZERO, delta))) } } diff --git a/alchemist-euclidean-geometry/build.gradle.kts b/alchemist-euclidean-geometry/build.gradle.kts index 8fd5b458fb..0c00b1f526 100644 --- a/alchemist-euclidean-geometry/build.gradle.kts +++ b/alchemist-euclidean-geometry/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2022, Danilo Pianini and contributors + * Copyright (C) 2010-2025, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -15,6 +15,8 @@ plugins { } dependencies { + ksp(alchemist("factories-generator")) + api(alchemist("api")) api(alchemist("implementationbase")) api(libs.dyn4j) diff --git a/alchemist-euclidean-geometry/src/test/java/it/unibo/alchemist/model/obstacles/TestContinuous2DObstacle.java b/alchemist-euclidean-geometry/src/test/java/it/unibo/alchemist/model/obstacles/TestContinuous2DObstacle.java index 76c81b82f0..021392acc6 100644 --- a/alchemist-euclidean-geometry/src/test/java/it/unibo/alchemist/model/obstacles/TestContinuous2DObstacle.java +++ b/alchemist-euclidean-geometry/src/test/java/it/unibo/alchemist/model/obstacles/TestContinuous2DObstacle.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2025, Danilo Pianini and contributors + * Copyright (C) 2010-2026, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -33,7 +33,7 @@ private Node createIntNode( final Incarnation incarnation, final Environment environment ) { - return new GenericNode<>(incarnation, environment) { + return new GenericNode<>(environment) { @Override public Integer createT() { return 0; diff --git a/alchemist-euclidean-geometry/src/test/kotlin/it/unibo/alchemist/model/interfaces/geometry/TestEuclidean2DTransformation.kt b/alchemist-euclidean-geometry/src/test/kotlin/it/unibo/alchemist/model/interfaces/geometry/TestEuclidean2DTransformation.kt index bc068953ec..f530e36957 100644 --- a/alchemist-euclidean-geometry/src/test/kotlin/it/unibo/alchemist/model/interfaces/geometry/TestEuclidean2DTransformation.kt +++ b/alchemist-euclidean-geometry/src/test/kotlin/it/unibo/alchemist/model/interfaces/geometry/TestEuclidean2DTransformation.kt @@ -9,7 +9,6 @@ package it.unibo.alchemist.model.interfaces.geometry -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings import io.kotest.core.spec.style.FreeSpec import io.kotest.matchers.shouldBe import it.unibo.alchemist.model.geometry.Euclidean2DShapeFactory @@ -22,36 +21,24 @@ import it.unibo.alchemist.model.positions.Euclidean2DPosition private val factory: Euclidean2DShapeFactory = GeometricShapeFactory.getInstance() -@SuppressFBWarnings("SE_BAD_FIELD_STORE") class TestEuclidean2DTransformation : FreeSpec({ "Test origin" - { - factory - .oneOfEachWithSize(1.0) + factory.oneOfEachWithSize(1.0) .filter { it.value !is AdimensionalShape } .forEach { it.key { - var shape = - it.value.transformed { - origin(0.0, 0.0) - } + var shape = it.value.transformed { origin(0.0, 0.0) } val reference = shape.centroid - shape = - shape.transformed { - origin(0.0, 0.0) - } + shape = shape.transformed { origin(0.0, 0.0) } reference.distanceTo(shape.centroid) shouldBe 0.0 - shape = - shape.transformed { - origin(0.0, 10.0) - } + shape = shape.transformed { origin(0.0, 10.0) } reference.distanceTo(shape.centroid) shouldBe 10.0 - shape = - shape.transformed { - origin(10.0, 10.0) - origin(3.0, 3.0) - origin(6.0, 0.0) - } + shape = shape.transformed { + origin(10.0, 10.0) + origin(3.0, 3.0) + origin(6.0, 0.0) + } reference.distanceTo(shape.centroid) shouldBe 6.0 } } diff --git a/alchemist-euclidean-geometry/src/test/kotlin/it/unibo/alchemist/model/interfaces/geometry/euclidean2d/TestEuclidean2DShapeFactory.kt b/alchemist-euclidean-geometry/src/test/kotlin/it/unibo/alchemist/model/interfaces/geometry/euclidean2d/TestEuclidean2DShapeFactory.kt index 2e28d901b9..0733a39da3 100644 --- a/alchemist-euclidean-geometry/src/test/kotlin/it/unibo/alchemist/model/interfaces/geometry/euclidean2d/TestEuclidean2DShapeFactory.kt +++ b/alchemist-euclidean-geometry/src/test/kotlin/it/unibo/alchemist/model/interfaces/geometry/euclidean2d/TestEuclidean2DShapeFactory.kt @@ -1,6 +1,5 @@ package it.unibo.alchemist.model.interfaces.geometry.euclidean2d -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings import io.kotest.assertions.throwables.shouldNotThrowAny import io.kotest.assertions.throwables.shouldThrow import io.kotest.core.spec.style.FreeSpec @@ -26,7 +25,6 @@ private val fakeShape = override fun transformed(transformation: Euclidean2DTransformation.() -> Unit) = this } -@SuppressFBWarnings("SE_BAD_FIELD_STORE") class TestEuclidean2DShapeFactory : FreeSpec({ /* @@ -36,11 +34,10 @@ class TestEuclidean2DShapeFactory : */ "!Shape.intersect symmetry" - { val firsts = factory.oneOfEachWithSize(DEFAULT_SHAPE_SIZE) - val seconds = - firsts.mapValues { - // puts the other shapes in a corner to test "edge" cases - it.value.transformed { origin(DEFAULT_SHAPE_SIZE * 2, DEFAULT_SHAPE_SIZE * 2) } - } + val seconds = firsts.mapValues { + // puts the other shapes in a corner to test "edge" cases + it.value.transformed { origin(DEFAULT_SHAPE_SIZE * 2, DEFAULT_SHAPE_SIZE * 2) } + } val names = firsts.keys.toList() for (f in names.indices) { for (s in f until names.size) { @@ -55,9 +52,7 @@ class TestEuclidean2DShapeFactory : "Test requireCompatible" { shouldNotThrowAny { - factory - .oneOfEachWithSize(DEFAULT_SHAPE_SIZE) - .values + factory.oneOfEachWithSize(DEFAULT_SHAPE_SIZE).values .forEach { factory.requireCompatible(it) } } shouldThrow { @@ -74,20 +69,19 @@ class TestEuclidean2DShapeFactory : val angle = Math.PI / 4 val initialOrigin = Euclidean2DPosition(100.0, 100.0) val shape = it.value.transformed { origin(initialOrigin) } - val rotated = - shape - .transformed { rotate(angle) } - .transformed { origin(500.0, 500.0) } - .transformed { rotate(angle) } - .transformed { origin(0.0, 0.0) } - .transformed { rotate(angle) } - .transformed { origin(7.0, 0.0) } - .transformed { rotate(angle) } - .transformed { repeat(3) { rotate(angle) } } - .transformed { - origin(initialOrigin) - rotate(angle) - } + val rotated = shape + .transformed { rotate(angle) } + .transformed { origin(500.0, 500.0) } + .transformed { rotate(angle) } + .transformed { origin(0.0, 0.0) } + .transformed { rotate(angle) } + .transformed { origin(7.0, 0.0) } + .transformed { rotate(angle) } + .transformed { repeat(3) { rotate(angle) } } + .transformed { + origin(initialOrigin) + rotate(angle) + } rotated.centroid shouldBe shape.centroid } } diff --git a/alchemist-euclidean-geometry/src/test/kotlin/it/unibo/alchemist/model/neighborhoods/TestNeighborhood.kt b/alchemist-euclidean-geometry/src/test/kotlin/it/unibo/alchemist/model/neighborhoods/TestNeighborhood.kt index a1f7e7d0b9..1f240f49a7 100644 --- a/alchemist-euclidean-geometry/src/test/kotlin/it/unibo/alchemist/model/neighborhoods/TestNeighborhood.kt +++ b/alchemist-euclidean-geometry/src/test/kotlin/it/unibo/alchemist/model/neighborhoods/TestNeighborhood.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2022, Danilo Pianini and contributors + * Copyright (C) 2010-2026, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -9,7 +9,6 @@ package it.unibo.alchemist.model.neighborhoods import it.unibo.alchemist.model.Environment -import it.unibo.alchemist.model.Incarnation import it.unibo.alchemist.model.Node import it.unibo.alchemist.model.SupportedIncarnations import it.unibo.alchemist.model.environments.Continuous2DEnvironment @@ -22,12 +21,10 @@ import org.junit.jupiter.api.Test * Tests pertaining to the `it.unibo.alchemist.model.implementations.neighborhoods` package. */ class TestNeighborhood { - private fun createIntNode( - incarnation: Incarnation, - environment: Environment, - ): Node = object : GenericNode(incarnation, environment) { - override fun createT(): Int = 0 - } + private fun createIntNode(environment: Environment): Node = + object : GenericNode(environment) { + override fun createT(): Int = 0 + } /** * Tests whether the clone function of the @@ -37,8 +34,8 @@ class TestNeighborhood { fun testClone() { val incarnation = SupportedIncarnations.get("protelis").orElseThrow() val environment = Continuous2DEnvironment(incarnation) - val n1 = createIntNode(incarnation, environment) - val n2 = createIntNode(incarnation, environment) + val n1 = createIntNode(environment) + val n2 = createIntNode(environment) val neigh1 = Neighborhoods.make(environment, n1, mutableListOf(n2)) val neigh2 = neigh1.remove(n2) Assertions.assertEquals(0, neigh2.size()) diff --git a/alchemist-factories-generator/build.gradle.kts b/alchemist-factories-generator/build.gradle.kts new file mode 100644 index 0000000000..9552fe4017 --- /dev/null +++ b/alchemist-factories-generator/build.gradle.kts @@ -0,0 +1,16 @@ +import Libs.alchemist + +plugins { + id("kotlin-multiplatform-convention") +} + +kotlin { + sourceSets { + val jvmMain by getting { + dependencies { + api(alchemist("api")) + implementation(libs.ksp.api) + } + } + } +} diff --git a/alchemist-factories-generator/src/jvmMain/kotlin/it/unibo/alchemist/boundary/dsl/processor/DslBuilderProcessor.kt b/alchemist-factories-generator/src/jvmMain/kotlin/it/unibo/alchemist/boundary/dsl/processor/DslBuilderProcessor.kt new file mode 100644 index 0000000000..11974d0834 --- /dev/null +++ b/alchemist-factories-generator/src/jvmMain/kotlin/it/unibo/alchemist/boundary/dsl/processor/DslBuilderProcessor.kt @@ -0,0 +1,162 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary.dsl.processor + +import com.google.devtools.ksp.getClassDeclarationByName +import com.google.devtools.ksp.getConstructors +import com.google.devtools.ksp.isAbstract +import com.google.devtools.ksp.isPublic +import com.google.devtools.ksp.processing.CodeGenerator +import com.google.devtools.ksp.processing.Dependencies +import com.google.devtools.ksp.processing.Resolver +import com.google.devtools.ksp.processing.SymbolProcessor +import com.google.devtools.ksp.symbol.KSAnnotated +import com.google.devtools.ksp.symbol.KSClassDeclaration +import com.google.devtools.ksp.symbol.KSType +import com.google.devtools.ksp.symbol.KSTypeParameter +import it.unibo.alchemist.boundary.dsl.processor.datatypes.InjectableConstructor +import it.unibo.alchemist.boundary.dsl.processor.extensions.asString +import it.unibo.alchemist.boundary.dsl.processor.extensions.injectableConstructors +import it.unibo.alchemist.boundary.dsl.processor.extensions.nameOrTypeName +import it.unibo.alchemist.core.Simulation +import it.unibo.alchemist.model.Environment +import it.unibo.alchemist.model.Incarnation +import it.unibo.alchemist.model.LinkingRule +import it.unibo.alchemist.model.Node +import it.unibo.alchemist.model.Reaction +import it.unibo.alchemist.model.TimeDistribution +import java.io.PrintWriter +import java.nio.charset.StandardCharsets +import org.apache.commons.math3.random.RandomGenerator + +/** Symbol processor that emits DSL helpers for `@AlchemistKotlinDSL` classes. */ +class DslBuilderProcessor(private val codeGenerator: CodeGenerator) : SymbolProcessor { + + override fun process(resolver: Resolver): List { + context(resolver) { + resolver.getNewFiles() + .flatMap { it.declarations } + .filterIsInstance() + .filter { it.isPublic() && !it.isAbstract() } + .forEach { classDeclaration -> + val injectableConstructors = classDeclaration.getConstructors() + .flatMap { it.injectableConstructors() } + .toSet() // Remove duplicates + if (injectableConstructors.isNotEmpty()) { + val file = codeGenerator.createNewFile( + dependencies = classDeclaration.containingFile + ?.let { Dependencies(false, it) } + ?: Dependencies.ALL_FILES, + packageName = classDeclaration.packageName.asString(), + fileName = "${classDeclaration.simpleName.asString()}Factory.kt", + ) + val writer = PrintWriter(file, true, StandardCharsets.UTF_8) + writer.println("// This file is generated by the Alchemist DSL Processor. Do not edit.\n") + writer.println("package ${classDeclaration.packageName.asString()}\n") + injectableConstructors.forEach { processConstructor(writer, classDeclaration, it) } + } + } + } + return emptyList() + } + + internal companion object { + + const val NEWLINE_INDENT = ",\n| " + + context(resolver: Resolver) + fun injectableTypes(): Set = sequenceOf( + resolver.getClassDeclarationByName>(), + resolver.getClassDeclarationByName>(), + resolver.getClassDeclarationByName>(), + resolver.getClassDeclarationByName(), + resolver.getClassDeclarationByName>(), + resolver.getClassDeclarationByName>(), + resolver.getClassDeclarationByName>(), + ).map { checkNotNull(it).asStarProjectedType() }.toSet() + + private fun processConstructor( + writer: PrintWriter, + classDeclaration: KSClassDeclaration, + injectableConstructor: InjectableConstructor, + ) { + val (constructor, injectableParams, preservedParams) = injectableConstructor + val typeParameters = constructor.typeParameters.render() + context(constructor.typeParameters.toSet()) { + val parameters = preservedParams.joinToString(separator = NEWLINE_INDENT) { parameter -> + val vararg = if (parameter.isVararg) "vararg " else "" + "$vararg${parameter.name?.asString()}: ${parameter.type.asString()}" + } + val whereClause = constructor.typeParameters + .flatMap { typeParam -> + typeParam.bounds.map { bound -> + "${typeParam.simpleName.asString()} : ${bound.asString()}" + } + } + .takeIf { it.isNotEmpty() } + ?.joinToString(separator = NEWLINE_INDENT, prefix = "where\n ", postfix = "\n") + .orEmpty() + val useAllArguments = preservedParams.size + injectableParams.size == constructor.parameters.size + val arguments = constructor.parameters.asSequence() + .run { + when { + useAllArguments -> this + else -> { + val argumentsToUse = (preservedParams + injectableParams).toSet() + filter { it in argumentsToUse } + } + } + } + .joinToString(NEWLINE_INDENT) { + /* + * If it is a Java constructor, all arguments will be used. + * Since the same is true if there are no default parameters in Kotlin, + * it is safe to call positionally if `useAllArguments` is true. + * If it is a Kotlin constructor with default parameters, named arguments must be used to + * support cases in which there are mandatory parameters after the optional ones. + */ + val name = it.name + when { + useAllArguments || name == null -> { + "${if (it.isVararg) "*" else ""}${it.nameOrTypeName()}" + } + else -> "${name.asString()} = ${it.nameOrTypeName()}" + } + } + val context = injectableParams.joinToString(prefix = "context(", postfix = ")") { param -> + "${param.nameOrTypeName()}: ${param.type.asString()}" + } + val classSimpleName = classDeclaration.simpleName.asString() + val functionName = classSimpleName.replaceFirstChar { it.lowercaseChar() } + val contextParameterNames = injectableParams.joinToString("") { param -> + param.nameOrTypeName().replaceFirstChar { it.uppercase() } + } + val argumentsString = if (parameters.isEmpty()) "()" else "(\n| $parameters\n|)" + writer.println( + """ + |/** + | * Contextual builder for [$classSimpleName]. + | */ + |@JvmName("${functionName}WithContextual$contextParameterNames") + |$context + |fun $typeParameters$functionName$argumentsString $whereClause= ${classSimpleName}$typeParameters( + | $arguments + |) + | + """.trimMargin(), + ) + } + } + + private fun List.render() = takeIf { it.isNotEmpty() } + ?.joinToString(prefix = "<", postfix = "> ") { typeArgument -> typeArgument.name.asString() } + .orEmpty() + } +} diff --git a/alchemist-factories-generator/src/jvmMain/kotlin/it/unibo/alchemist/boundary/dsl/processor/DslBuilderProcessorProvider.kt b/alchemist-factories-generator/src/jvmMain/kotlin/it/unibo/alchemist/boundary/dsl/processor/DslBuilderProcessorProvider.kt new file mode 100644 index 0000000000..02180bc309 --- /dev/null +++ b/alchemist-factories-generator/src/jvmMain/kotlin/it/unibo/alchemist/boundary/dsl/processor/DslBuilderProcessorProvider.kt @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2010-2025, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary.dsl.processor + +import com.google.devtools.ksp.processing.SymbolProcessor +import com.google.devtools.ksp.processing.SymbolProcessorEnvironment +import com.google.devtools.ksp.processing.SymbolProcessorProvider + +/** + * Provider for [DslBuilderProcessor] that creates instances for KSP processing. + */ +class DslBuilderProcessorProvider : SymbolProcessorProvider { + override fun create(environment: SymbolProcessorEnvironment): SymbolProcessor = + DslBuilderProcessor(environment.codeGenerator) +} diff --git a/alchemist-factories-generator/src/jvmMain/kotlin/it/unibo/alchemist/boundary/dsl/processor/datatypes/InjectableConstructor.kt b/alchemist-factories-generator/src/jvmMain/kotlin/it/unibo/alchemist/boundary/dsl/processor/datatypes/InjectableConstructor.kt new file mode 100644 index 0000000000..35f9d8e0d4 --- /dev/null +++ b/alchemist-factories-generator/src/jvmMain/kotlin/it/unibo/alchemist/boundary/dsl/processor/datatypes/InjectableConstructor.kt @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary.dsl.processor.datatypes + +import com.google.devtools.ksp.symbol.KSFunctionDeclaration +import com.google.devtools.ksp.symbol.KSType +import com.google.devtools.ksp.symbol.KSValueParameter + +internal data class InjectableConstructor( + val constructor: KSFunctionDeclaration, + val injectableParameters: List, + val preservedParameters: List, +) { + val returnType: KSType? by lazy { constructor.returnType?.resolve() } + val injectableTypes by lazy { injectableParameters.map { it.type.resolve() } } + val preservedTypes by lazy { preservedParameters.map { it.type.resolve() } } + + override fun toString(): String = "InjectableConstructor(${returnType?.toString()}, " + + "injectableParameters=${injectableParameters.typedAsString()}, " + + "preservedParameters=${preservedParameters.typedAsString()}" + + private fun List.typedAsString(): String = this.zip(this.map { it.type.resolve() }) + .joinToString(", ", prefix = "[", postfix = "]") { (param, type) -> "${param.name?.asString()}: $type" } + + override fun equals(other: Any?): Boolean = other is InjectableConstructor && + other.returnType == returnType && + other.injectableTypes == injectableTypes && + other.preservedTypes == preservedTypes + + override fun hashCode(): Int = listOf( + returnType, + injectableTypes, + preservedTypes, + ).hashCode() +} diff --git a/alchemist-factories-generator/src/jvmMain/kotlin/it/unibo/alchemist/boundary/dsl/processor/datatypes/TypePosition.kt b/alchemist-factories-generator/src/jvmMain/kotlin/it/unibo/alchemist/boundary/dsl/processor/datatypes/TypePosition.kt new file mode 100644 index 0000000000..7b272182b7 --- /dev/null +++ b/alchemist-factories-generator/src/jvmMain/kotlin/it/unibo/alchemist/boundary/dsl/processor/datatypes/TypePosition.kt @@ -0,0 +1,12 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary.dsl.processor.datatypes + +internal enum class TypePosition { TYPE, TYPE_ARG } diff --git a/alchemist-factories-generator/src/jvmMain/kotlin/it/unibo/alchemist/boundary/dsl/processor/extensions/KSDeclarationExtensions.kt b/alchemist-factories-generator/src/jvmMain/kotlin/it/unibo/alchemist/boundary/dsl/processor/extensions/KSDeclarationExtensions.kt new file mode 100644 index 0000000000..8dfe02e767 --- /dev/null +++ b/alchemist-factories-generator/src/jvmMain/kotlin/it/unibo/alchemist/boundary/dsl/processor/extensions/KSDeclarationExtensions.kt @@ -0,0 +1,15 @@ +/* + * Copyright (C) 2010-2025, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary.dsl.processor.extensions + +import com.google.devtools.ksp.symbol.KSDeclaration + +internal val KSDeclaration.typeName: String + get() = qualifiedName?.asString()?.takeIf { it.isNotEmpty() } ?: simpleName.asString() diff --git a/alchemist-factories-generator/src/jvmMain/kotlin/it/unibo/alchemist/boundary/dsl/processor/extensions/KSFunctionDeclarationExtensions.kt b/alchemist-factories-generator/src/jvmMain/kotlin/it/unibo/alchemist/boundary/dsl/processor/extensions/KSFunctionDeclarationExtensions.kt new file mode 100644 index 0000000000..9da640e2b3 --- /dev/null +++ b/alchemist-factories-generator/src/jvmMain/kotlin/it/unibo/alchemist/boundary/dsl/processor/extensions/KSFunctionDeclarationExtensions.kt @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary.dsl.processor.extensions + +import com.google.devtools.ksp.isPublic +import com.google.devtools.ksp.processing.Resolver +import com.google.devtools.ksp.symbol.KSFunctionDeclaration +import com.google.devtools.ksp.symbol.KSType +import it.unibo.alchemist.boundary.dsl.processor.datatypes.InjectableConstructor + +/** + * Finds a public constructor for the given class declaration. + * Prefers the primary constructor, otherwise returns the constructor + * with the most parameters. + * + * @return The found constructor, or null if no suitable constructor exists + */ +internal val KSFunctionDeclaration.parameterTypes: List get() = parameters.map { it.type.resolve() } + +context(resolver: Resolver) +internal fun KSFunctionDeclaration.injectableConstructors(): Sequence = when { + isPublic() -> { + val injectable = parameters.filter { !it.hasDefault && it.type.resolve().isInjectable() } + val injectabletypes = injectable.map { it.type.resolve() }.toSet() + when { + injectabletypes.size == injectable.size && injectable.none { it.isVararg } -> { + val defaultParameters = parameters.filter { it.hasDefault } + injectable.powerSetWithoutEmptySet().flatMap { toInject -> + val toInjectSet = toInject.toSet() + val valueParameters = parameters - toInjectSet + (0..defaultParameters.size).asSequence().map { toDrop -> + val defaultParametersToDrop = defaultParameters.drop(toDrop).toSet() + InjectableConstructor( + this, + toInject - defaultParametersToDrop, + valueParameters - defaultParametersToDrop, + ) + } + } + } + else -> emptySequence() + } + } + else -> emptySequence() +} diff --git a/alchemist-factories-generator/src/jvmMain/kotlin/it/unibo/alchemist/boundary/dsl/processor/extensions/KSTypeArgumentExtensions.kt b/alchemist-factories-generator/src/jvmMain/kotlin/it/unibo/alchemist/boundary/dsl/processor/extensions/KSTypeArgumentExtensions.kt new file mode 100644 index 0000000000..51c2686d1d --- /dev/null +++ b/alchemist-factories-generator/src/jvmMain/kotlin/it/unibo/alchemist/boundary/dsl/processor/extensions/KSTypeArgumentExtensions.kt @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary.dsl.processor.extensions + +import com.google.devtools.ksp.symbol.KSTypeArgument +import com.google.devtools.ksp.symbol.KSTypeParameter +import com.google.devtools.ksp.symbol.Variance +import it.unibo.alchemist.boundary.dsl.processor.datatypes.TypePosition + +context(valid: Set) +internal fun KSTypeArgument.renderAsTypeArg(substitutions: Map): String = + when (val refType = type) { + null -> "*" + else -> when (variance) { + Variance.STAR -> "*" + Variance.COVARIANT -> "out ${refType.resolve().render(TypePosition.TYPE, substitutions)}" + Variance.CONTRAVARIANT -> "in ${refType.resolve().render(TypePosition.TYPE, substitutions)}" + Variance.INVARIANT -> refType.resolve().render(TypePosition.TYPE, substitutions) + } + } diff --git a/alchemist-factories-generator/src/jvmMain/kotlin/it/unibo/alchemist/boundary/dsl/processor/extensions/KSTypeExtensions.kt b/alchemist-factories-generator/src/jvmMain/kotlin/it/unibo/alchemist/boundary/dsl/processor/extensions/KSTypeExtensions.kt new file mode 100644 index 0000000000..d9061d8860 --- /dev/null +++ b/alchemist-factories-generator/src/jvmMain/kotlin/it/unibo/alchemist/boundary/dsl/processor/extensions/KSTypeExtensions.kt @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary.dsl.processor.extensions + +import com.google.devtools.ksp.innerArguments +import com.google.devtools.ksp.processing.Resolver +import com.google.devtools.ksp.symbol.KSClassDeclaration +import com.google.devtools.ksp.symbol.KSType +import com.google.devtools.ksp.symbol.KSTypeAlias +import com.google.devtools.ksp.symbol.KSTypeArgument +import com.google.devtools.ksp.symbol.KSTypeParameter +import it.unibo.alchemist.boundary.dsl.processor.DslBuilderProcessor +import it.unibo.alchemist.boundary.dsl.processor.datatypes.TypePosition + +context(resolver: Resolver) +internal fun KSType.isInjectable() = DslBuilderProcessor.injectableTypes().any { it.isAssignableFrom(this) } + +context(valid: Set) +internal fun KSType.render( + position: TypePosition, + substitutions: Map = emptyMap(), +): String = buildString { + when (val typedDeclaration = declaration) { + is KSTypeAlias -> { + // map alias params -> use-site args, then render RHS under that substitution + val aliasMap = declaration.typeParameters.zip(arguments).toMap() + val expanded = typedDeclaration.type.resolve() + append(expanded.render(position, substitutions + aliasMap)) + } + is KSTypeParameter -> { + val replacement = substitutions[typedDeclaration] + when { + replacement != null -> append(replacement.renderAsTypeArg(substitutions)) + typedDeclaration in valid -> append(declaration.simpleName.asString()) + position == TypePosition.TYPE_ARG -> append("*") + else -> { + // fallback for non-arg position (avoid emitting bare '*', which is illegal) + val fallback = typedDeclaration.bounds.firstOrNull()?.resolve() + append(fallback?.render(TypePosition.TYPE, substitutions) ?: "Any?") + } + } + } + is KSClassDeclaration -> { + append(typedDeclaration.typeName) + // Protect against mismatched counts (inner classes / typealias quirks): + val declParamCount = typedDeclaration.typeParameters.size + val args = (this@render.innerArguments.ifEmpty { this@render.arguments }) + .take(declParamCount) + if (args.isNotEmpty()) { + append(args.joinToString(prefix = "<", postfix = ">") { it.renderAsTypeArg(substitutions) }) + } + } + else -> error("Unsupported type: $typedDeclaration") + } + + if (isMarkedNullable) append("?") +} diff --git a/alchemist-factories-generator/src/jvmMain/kotlin/it/unibo/alchemist/boundary/dsl/processor/extensions/KSTypeReferenceExtensions.kt b/alchemist-factories-generator/src/jvmMain/kotlin/it/unibo/alchemist/boundary/dsl/processor/extensions/KSTypeReferenceExtensions.kt new file mode 100644 index 0000000000..df115e6ba3 --- /dev/null +++ b/alchemist-factories-generator/src/jvmMain/kotlin/it/unibo/alchemist/boundary/dsl/processor/extensions/KSTypeReferenceExtensions.kt @@ -0,0 +1,17 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary.dsl.processor.extensions + +import com.google.devtools.ksp.symbol.KSTypeParameter +import com.google.devtools.ksp.symbol.KSTypeReference +import it.unibo.alchemist.boundary.dsl.processor.datatypes.TypePosition + +context(valid: Set) +internal fun KSTypeReference.asString(): String = resolve().render(TypePosition.TYPE) diff --git a/alchemist-factories-generator/src/jvmMain/kotlin/it/unibo/alchemist/boundary/dsl/processor/extensions/KSValueParameterExtensions.kt b/alchemist-factories-generator/src/jvmMain/kotlin/it/unibo/alchemist/boundary/dsl/processor/extensions/KSValueParameterExtensions.kt new file mode 100644 index 0000000000..d0921c5e3d --- /dev/null +++ b/alchemist-factories-generator/src/jvmMain/kotlin/it/unibo/alchemist/boundary/dsl/processor/extensions/KSValueParameterExtensions.kt @@ -0,0 +1,15 @@ +/* + * Copyright (C) 2010-2025, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary.dsl.processor.extensions + +import com.google.devtools.ksp.symbol.KSValueParameter + +internal fun KSValueParameter.nameOrTypeName(): String = name?.asString() + ?: type.resolve().declaration.simpleName.asString().replaceFirstChar { it.lowercase() } diff --git a/alchemist-factories-generator/src/jvmMain/kotlin/it/unibo/alchemist/boundary/dsl/processor/extensions/ListExtensions.kt b/alchemist-factories-generator/src/jvmMain/kotlin/it/unibo/alchemist/boundary/dsl/processor/extensions/ListExtensions.kt new file mode 100644 index 0000000000..d7bed55d43 --- /dev/null +++ b/alchemist-factories-generator/src/jvmMain/kotlin/it/unibo/alchemist/boundary/dsl/processor/extensions/ListExtensions.kt @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2010-2025, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary.dsl.processor.extensions + +internal fun List.powerSetWithoutEmptySet(): Sequence> = sequence { + val numberOfSubsets = 1 shl size // 2^n subsets + for (i in 1 until numberOfSubsets) { + val subset = mutableListOf() + for (j in 0 until size) { + if (i and (1 shl j) != 0) { + subset.add(this@powerSetWithoutEmptySet[j]) + } + } + yield(subset) + } +} diff --git a/alchemist-factories-generator/src/jvmMain/resources/META-INF/services/com.google.devtools.ksp.processing.SymbolProcessorProvider b/alchemist-factories-generator/src/jvmMain/resources/META-INF/services/com.google.devtools.ksp.processing.SymbolProcessorProvider new file mode 100644 index 0000000000..a7f2e32765 --- /dev/null +++ b/alchemist-factories-generator/src/jvmMain/resources/META-INF/services/com.google.devtools.ksp.processing.SymbolProcessorProvider @@ -0,0 +1 @@ +it.unibo.alchemist.boundary.dsl.processor.DslBuilderProcessorProvider \ No newline at end of file diff --git a/alchemist-graphql-surrogates/src/main/kotlin/it/unibo/alchemist/boundary/graphql/schema/model/surrogates/EnvironmentSurrogate.kt b/alchemist-graphql-surrogates/src/main/kotlin/it/unibo/alchemist/boundary/graphql/schema/model/surrogates/EnvironmentSurrogate.kt index f23bb1310b..9df5c84dfd 100644 --- a/alchemist-graphql-surrogates/src/main/kotlin/it/unibo/alchemist/boundary/graphql/schema/model/surrogates/EnvironmentSurrogate.kt +++ b/alchemist-graphql-surrogates/src/main/kotlin/it/unibo/alchemist/boundary/graphql/schema/model/surrogates/EnvironmentSurrogate.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2023, Danilo Pianini and contributors + * Copyright (C) 2010-2026, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -55,7 +55,7 @@ data class EnvironmentSurrogate>( * @return the layers in this environment. */ @GraphQLDescription("The layers in this environment") - fun layers() = origin.layers.map { + fun layers() = origin.layers.values.map { it.toGraphQLLayerSurrogate { coordinates -> origin.makePosition(coordinates) } diff --git a/alchemist-graphql/build.gradle.kts b/alchemist-graphql/build.gradle.kts index 8a9a5b2722..edae46ef3e 100644 --- a/alchemist-graphql/build.gradle.kts +++ b/alchemist-graphql/build.gradle.kts @@ -11,7 +11,6 @@ import Libs.alchemist import Libs.incarnation import com.apollographql.apollo3.gradle.internal.ApolloGenerateSourcesTask import com.expediagroup.graphql.plugin.gradle.tasks.AbstractGenerateClientTask -import dev.detekt.gradle.Detekt import it.unibo.alchemist.build.allVerificationTasks plugins { @@ -127,9 +126,3 @@ publishing.publications { } } } - -// exclude files in build from Detekt -tasks.withType().configureEach { - exclude("**/boundary/graphql/client/**") - exclude("**/io/kotest/framework/runtime/**") -} diff --git a/alchemist-implementationbase/build.gradle.kts b/alchemist-implementationbase/build.gradle.kts index ad20c4a61c..cada7f26bf 100644 --- a/alchemist-implementationbase/build.gradle.kts +++ b/alchemist-implementationbase/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2022, Danilo Pianini and contributors + * Copyright (C) 2010-2025, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -14,6 +14,8 @@ plugins { } dependencies { + ksp(alchemist("factories-generator")) + api(alchemist("api")) api(alchemist("maintenance-tooling")) api(libs.apache.commons.math3) diff --git a/alchemist-implementationbase/src/main/java/it/unibo/alchemist/model/environments/Abstract2DEnvironment.java b/alchemist-implementationbase/src/main/java/it/unibo/alchemist/model/environments/Abstract2DEnvironment.java index 858b3d0f4a..30a30b4569 100644 --- a/alchemist-implementationbase/src/main/java/it/unibo/alchemist/model/environments/Abstract2DEnvironment.java +++ b/alchemist-implementationbase/src/main/java/it/unibo/alchemist/model/environments/Abstract2DEnvironment.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2023, Danilo Pianini and contributors + * Copyright (C) 2010-2026, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -53,8 +53,8 @@ protected Abstract2DEnvironment(final Incarnation incarnation) { */ @Nonnull @Override - protected P computeActualInsertionPosition(@Nonnull final Node node, @Nonnull final P p) { - return p; + protected P computeActualInsertionPosition(@Nonnull final Node node, @Nonnull final P originalPosition) { + return originalPosition; } @Override diff --git a/alchemist-implementationbase/src/main/java/it/unibo/alchemist/model/timedistributions/ExponentialTime.java b/alchemist-implementationbase/src/main/java/it/unibo/alchemist/model/timedistributions/ExponentialTime.java index b9104d95e1..67fe869f04 100644 --- a/alchemist-implementationbase/src/main/java/it/unibo/alchemist/model/timedistributions/ExponentialTime.java +++ b/alchemist-implementationbase/src/main/java/it/unibo/alchemist/model/timedistributions/ExponentialTime.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2023, Danilo Pianini and contributors + * Copyright (C) 2010-2025, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the diff --git a/alchemist-implementationbase/src/main/kotlin/it/unibo/alchemist/model/environments/AbstractEnvironment.kt b/alchemist-implementationbase/src/main/kotlin/it/unibo/alchemist/model/environments/AbstractEnvironment.kt index a17fedfde4..ea1f7da744 100644 --- a/alchemist-implementationbase/src/main/kotlin/it/unibo/alchemist/model/environments/AbstractEnvironment.kt +++ b/alchemist-implementationbase/src/main/kotlin/it/unibo/alchemist/model/environments/AbstractEnvironment.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2025, Danilo Pianini and contributors + * Copyright (C) 2010-2026, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -54,12 +54,13 @@ abstract class AbstractEnvironment> protected constructor( ) : Environment { private val _nodes: ListSet> = ArrayListSet() private val _globalReactions = ArrayListSet>() - private val _layers: MutableMap> = LinkedHashMap() + final override var layers: Map> = LinkedHashMap() + private set private val neighCache = TIntObjectHashMap>() private val nodeToPos = TIntObjectHashMap

() - private val spatialIndex: SpatialIndex> = requireNotNull(internalIndex) + private val spatialIndex: SpatialIndex> = internalIndex - override val layers: ListSet> get() = ArrayListSet(_layers.values) +// override val layers: Map> get() = _layers override val globalReactions: ListSet> get() = ListSets.unmodifiableListSet(_globalReactions) @@ -105,7 +106,8 @@ abstract class AbstractEnvironment> protected constructor( } override fun addLayer(molecule: Molecule, layer: Layer) { - check(_layers.put(molecule, layer) == null) { "Two layers have been associated to $molecule" } + check(molecule !in layers.keys) { "A layer for $molecule was already associated to this environment." } + layers += molecule to layer } override fun addGlobalReaction(reaction: GlobalReaction) { @@ -147,11 +149,11 @@ abstract class AbstractEnvironment> protected constructor( * * @param node * the node - * @param p + * @param originalPosition * the original (requested) position * @return the actual position where the node should be located */ - protected abstract fun computeActualInsertionPosition(node: Node, p: P): P + protected abstract fun computeActualInsertionPosition(node: Node, originalPosition: P): P override fun forEach(action: Consumer?>?) { nodes.forEach(action) @@ -169,19 +171,16 @@ abstract class AbstractEnvironment> protected constructor( private fun getAllNodesInRange(center: P, range: Double): List> { require(range > 0) { "Range query must be positive (provided: $range)" } - @Suppress("UPPER_BOUND_VIOLATED_BASED_ON_JAVA_ANNOTATIONS") - val validCache = - cache ?: Caffeine - .newBuilder() - .maximumSize(1000) - .build, List>> { (pos, r) -> runQuery(pos, r) } - .also { cache = it } + val validCache = cache ?: Caffeine.newBuilder() + .maximumSize(1000) + .build, List>> { (pos, r) -> runQuery(pos, r) } + .also { cache = it } return validCache[center to range] } override fun getDistanceBetweenNodes(n1: Node, n2: Node): Double = getPosition(n1).distanceTo(getPosition(n2)) - override fun getLayer(molecule: Molecule): Layer? = _layers[molecule] + override fun getLayer(molecule: Molecule): Layer? = layers[molecule] override fun getNeighborhood(node: Node): Neighborhood { val result = neighCache[node.id] diff --git a/alchemist-implementationbase/src/main/kotlin/it/unibo/alchemist/model/environments/EmptyEnvironment.kt b/alchemist-implementationbase/src/main/kotlin/it/unibo/alchemist/model/environments/EmptyEnvironment.kt new file mode 100644 index 0000000000..e283bfc1b5 --- /dev/null +++ b/alchemist-implementationbase/src/main/kotlin/it/unibo/alchemist/model/environments/EmptyEnvironment.kt @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.model.environments + +import it.unibo.alchemist.model.Incarnation +import it.unibo.alchemist.model.Neighborhood +import it.unibo.alchemist.model.Node +import it.unibo.alchemist.model.Position +import org.danilopianini.util.SpatialIndex + +/** + * An [AbstractEnvironment] implementation that intentionally provides no spatial functionality. + * + * This environment is meant as a placeholder or sentinel implementation in contexts where an + * [it.unibo.alchemist.model.Environment] + * instance is required, but node insertion, movement, neighborhood computation, and position construction must be + * disallowed. + * + * @param incarnation the [Incarnation] associated with this environment. + * @param dimensions the number of spatial dimensions exposed by this environment. + */ +class EmptyEnvironment>(incarnation: Incarnation, override val dimensions: Int = 2) : + AbstractEnvironment( + incarnation, + object : SpatialIndex> { + override val dimensions: Int = dimensions + override fun insert(element: Node, vararg position: Double) = nope() + override fun remove(element: Node, vararg position: Double) = nope() + override fun move(element: Node, start: DoubleArray, end: DoubleArray) = nope() + override fun query(vararg parallelotope: DoubleArray) = emptyList>() + }, + ) { + + /** + * This environment does not support node insertion positions. + * + * @throws UnsupportedOperationException always. + */ + override fun computeActualInsertionPosition(node: Node, originalPosition: P): P = nope() + + /** + * This environment does not support node insertion. + * + * @throws UnsupportedOperationException always. + */ + override fun nodeAdded(node: Node, position: P, neighborhood: Neighborhood) = nope() + + /** + * The origin (all zeros) for each coordinate axis. + * + * This value is provided only to satisfy the [AbstractEnvironment] contract and does not imply that + * spatial operations are supported. + */ + override val offset: DoubleArray = DoubleArray(dimensions) { 0.0 } + + /** + * The (unit) extent for each coordinate axis. + * + * This value is provided only to satisfy the [AbstractEnvironment] contract and does not imply that + * spatial operations are supported. + */ + override val size: DoubleArray = DoubleArray(dimensions) { 1.0 } + + /** + * This environment cannot create positions. + * + * @throws UnsupportedOperationException always. + */ + override fun makePosition(vararg coordinates: Number): P = nope() + + /** + * This environment cannot create positions. + * + * @throws UnsupportedOperationException always. + */ + override fun makePosition(coordinates: DoubleArray): P = nope() + + /** + * This environment does not support node movement. + * + * @throws UnsupportedOperationException always. + */ + override fun moveNodeToPosition(node: Node, newPosition: P) = nope() + + private companion object { + + /** + * Throws the failure used by all unsupported operations in [EmptyEnvironment]. + * + * @return never returns normally. + * @throws UnsupportedOperationException always. + */ + private fun nope(): Nothing = throw UnsupportedOperationException( + "The empty environment cannot generate positions, and does not support the insertion of nodes.", + ) + } +} diff --git a/alchemist-implementationbase/src/main/kotlin/it/unibo/alchemist/model/nodes/GenericNode.kt b/alchemist-implementationbase/src/main/kotlin/it/unibo/alchemist/model/nodes/GenericNode.kt index 682602a9e7..f4b8715ebc 100644 --- a/alchemist-implementationbase/src/main/kotlin/it/unibo/alchemist/model/nodes/GenericNode.kt +++ b/alchemist-implementationbase/src/main/kotlin/it/unibo/alchemist/model/nodes/GenericNode.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2023, Danilo Pianini and contributors + * Copyright (C) 2010-2025, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -10,7 +10,6 @@ package it.unibo.alchemist.model.nodes import com.google.common.collect.MapMaker import it.unibo.alchemist.model.Environment -import it.unibo.alchemist.model.Incarnation import it.unibo.alchemist.model.Molecule import it.unibo.alchemist.model.Node import it.unibo.alchemist.model.NodeProperty @@ -32,10 +31,6 @@ import javax.annotation.Nonnull open class GenericNode @JvmOverloads constructor( - /** - * simulation incarnation. - */ - val incarnation: Incarnation, /** * The environment in which the node is places. */ @@ -48,9 +43,6 @@ constructor( val molecules: MutableMap = LinkedHashMap(), final override val properties: MutableList> = ArrayList(), ) : Node { - constructor( - environment: Environment, - ) : this(environment.incarnation, environment) final override fun addReaction(reactionToAdd: Reaction) { reactions.add(reactionToAdd) @@ -69,7 +61,7 @@ constructor( /** * @return an empty concentration */ - protected open fun createT(): T = incarnation.createConcentration() + protected open fun createT(): T = environment.incarnation.createConcentration() final override fun equals(other: Any?): Boolean = other is Node<*> && other.id == id diff --git a/alchemist-implementationbase/src/main/kotlin/it/unibo/alchemist/model/terminators/StableForSteps.kt b/alchemist-implementationbase/src/main/kotlin/it/unibo/alchemist/model/terminators/StableForSteps.kt index 6ef6f8ac82..fe00fe05a3 100644 --- a/alchemist-implementationbase/src/main/kotlin/it/unibo/alchemist/model/terminators/StableForSteps.kt +++ b/alchemist-implementationbase/src/main/kotlin/it/unibo/alchemist/model/terminators/StableForSteps.kt @@ -41,10 +41,10 @@ import java.util.function.Predicate * @property checkInterval the recurrence of the test * @property equalIntervals the number of [checkInterval] intervals required to be unchanged for [test] to return true */ -data class StableForSteps(private val checkInterval: Long, private val equalIntervals: Long) : - TerminationPredicate> { +data class StableForSteps>(private val checkInterval: Long, private val equalIntervals: Long) : + TerminationPredicate { private var success: Long = 0 - private var positions: Map, Position<*>> = emptyMap() + private var positions: Map, P> = emptyMap() private var contents = makeTable(0) init { @@ -53,7 +53,7 @@ data class StableForSteps(private val checkInterval: Long, private val } } - override fun invoke(environment: Environment>): Boolean { + override fun invoke(environment: Environment): Boolean { if (environment.simulation.step % checkInterval == 0L) { val newPositions = environment.associateBy({ it }, { environment.getPosition(it) }) val newContents = makeTable(environment.nodeCount) @@ -71,7 +71,9 @@ data class StableForSteps(private val checkInterval: Long, private val private companion object { private fun makeTable(size: Int): Table, Molecule, T> = - Tables.newCustomTable(Maps.newLinkedHashMapWithExpectedSize, Map>(size)) { + Tables.newCustomTable, Molecule, T>( + Maps.newLinkedHashMapWithExpectedSize, Map>(size), + ) { Maps.newLinkedHashMapWithExpectedSize(size) } } diff --git a/alchemist-implementationbase/src/main/kotlin/it/unibo/alchemist/model/timedistributions/MoleculeControlledTimeDistribution.kt b/alchemist-implementationbase/src/main/kotlin/it/unibo/alchemist/model/timedistributions/MoleculeControlledTimeDistribution.kt index fead3e8aa0..3612bbde85 100644 --- a/alchemist-implementationbase/src/main/kotlin/it/unibo/alchemist/model/timedistributions/MoleculeControlledTimeDistribution.kt +++ b/alchemist-implementationbase/src/main/kotlin/it/unibo/alchemist/model/timedistributions/MoleculeControlledTimeDistribution.kt @@ -50,7 +50,6 @@ constructor( ) : AnyRealDistribution( start, - @Suppress("OVERRIDE_DEPRECATION") object : RealDistribution { /* * Unknown values diff --git a/alchemist-implementationbase/src/main/kotlin/it/unibo/alchemist/model/timedistributions/SimpleNetworkArrivals.kt b/alchemist-implementationbase/src/main/kotlin/it/unibo/alchemist/model/timedistributions/SimpleNetworkArrivals.kt index 559b5b845e..776b7f4462 100644 --- a/alchemist-implementationbase/src/main/kotlin/it/unibo/alchemist/model/timedistributions/SimpleNetworkArrivals.kt +++ b/alchemist-implementationbase/src/main/kotlin/it/unibo/alchemist/model/timedistributions/SimpleNetworkArrivals.kt @@ -15,7 +15,6 @@ import it.unibo.alchemist.model.Molecule import it.unibo.alchemist.model.Node import it.unibo.alchemist.model.Time import it.unibo.alchemist.model.times.DoubleTime -import java.lang.IllegalStateException /** * This class models a distribution that follows the packet arrival times as described in @@ -29,14 +28,6 @@ import java.lang.IllegalStateException * then it will get used as a constant delay. Otherwise, the String will be used within [Incarnation.getProperty] * */ - -private val Molecule?.isMeaningful: Molecule? - get() = this?.takeUnless { name.isNullOrBlank() } - -/** - * A time distribution that simulates network packet arrivals based on EdgeCloudSim model. - * Computes delays based on propagation delay and packet transmission time (packet size / bandwidth). - */ class SimpleNetworkArrivals private constructor( /** The incarnation used to resolve properties from nodes. */ val incarnation: Incarnation, @@ -161,7 +152,7 @@ class SimpleNetworkArrivals private constructor( ).let { bw -> accessPointIdentificator?.let { id -> if (node.isAccessPoint || myNeighborhood.isEmpty()) { - bw / Math.max(myNeighborhood.size, 1) + bw / myNeighborhood.size.coerceAtLeast(1) } else { val accesspoints = myNeighborhood.filter { it.isAccessPoint } when (accesspoints.size) { @@ -175,8 +166,10 @@ class SimpleNetworkArrivals private constructor( } ?: bw } - /** Computes the packet size, defaulting to 1.0 if not specified or invalid. */ - @Suppress("UnreachableCode") // Detekt false positive. Remove once fixed. + /** + * Computes the packet size from constants or properties. + * Defaults to 1.0 if not specified or invalid. + */ val packetSize: Double get() = constantPacketSize ?: incarnation.getProperty(node, packetSizeMolecule, packetSizeProperty).takeIf { it.isFinite() && it >= 0 } @@ -218,6 +211,11 @@ class SimpleNetworkArrivals private constructor( ) override fun getRate(): Double = 1 / (propagationDelay + packetSize / bandwidth) -} -private operator fun Time.plus(other: Double) = DoubleTime(toDouble() + other) + private companion object { + private val Molecule?.isMeaningful: Molecule? + get() = this?.takeUnless { name.isNullOrBlank() } + + private operator fun Time.plus(other: Double) = DoubleTime(toDouble() + other) + } +} diff --git a/alchemist-implementationbase/src/main/kotlin/it/unibo/alchemist/util/Environments.kt b/alchemist-implementationbase/src/main/kotlin/it/unibo/alchemist/util/Environments.kt index 7fad2a21d3..459f87f4a6 100644 --- a/alchemist-implementationbase/src/main/kotlin/it/unibo/alchemist/util/Environments.kt +++ b/alchemist-implementationbase/src/main/kotlin/it/unibo/alchemist/util/Environments.kt @@ -40,12 +40,12 @@ object Environments { /** * Computes the diameter of all subnetworks in the environment. - * The diameter is the longest shortest path between any two nodes, - * evaluated using the [allShortestHopPaths] method. - * Returns a [Set] containing the subnetworks. + * The diameter is the longest shortest path between any two nodes. + * Returns a [Map] containing the subnetwork related to each [Node] of the environment. */ - fun Environment.allSubNetworksByNodeWithHopDistance(): Map, Network> = - allSubNetworksByNode(hopDistance()) + fun Environment.allSubNetworks( + computeDistance: (Node, Node) -> Double = environmentMetricDistance(), + ): Set> = allSubNetworksByNode(computeDistance).values.toSet() /** * Computes the diameter of all subnetworks in the environment. @@ -53,13 +53,13 @@ object Environments { * evaluated using the [allShortestHopPaths] method. * Returns a [Set] containing the subnetworks. */ - fun Environment.allSubNetworksWithHopDistance(): Set> = - allSubNetworksByNodeWithHopDistance().values.toSet() + fun Environment.allSubNetworksByNodeWithHopDistance(): Map, Network> = + allSubNetworksByNode(hopDistance()) /** * Computes the diameter of all subnetworks in the environment. * The diameter is the longest shortest path between any two nodes. - * Returns a [Set] containing the subnetworks. + * Returns a [Map] mapping each node to the subnetwork it belongs to. */ fun Environment.allSubNetworksByNode( computeDistance: (Node, Node) -> Double = environmentMetricDistance(), @@ -94,6 +94,7 @@ object Environments { .maxOrNull() ?: 0.0, ) + result[centerNode] = subnetwork } } } @@ -102,12 +103,12 @@ object Environments { /** * Computes the diameter of all subnetworks in the environment. - * The diameter is the longest shortest path between any two nodes. - * Returns a [Map] containing the subnetwork related to each [Node] of the environment. + * The diameter is the longest shortest path between any two nodes, + * evaluated using the [allShortestHopPaths] method. + * Returns a [Set] containing the subnetworks. */ - fun Environment.allSubNetworks( - computeDistance: (Node, Node) -> Double = environmentMetricDistance(), - ): Set> = allSubNetworksByNode(computeDistance).values.toSet() + fun Environment.allSubNetworksWithHopDistance(): Set> = + allSubNetworksByNodeWithHopDistance().values.toSet() /** * Calculates the shortest paths using the Floyd-Warshall algorithm calculating the Hop Distance between nodes. diff --git a/alchemist-implementationbase/src/test/kotlin/it/unibo/alchemist/util/TestDiameterUtils.kt b/alchemist-implementationbase/src/test/kotlin/it/unibo/alchemist/util/TestDiameterUtils.kt index 1d087afbef..99bd40b8a0 100644 --- a/alchemist-implementationbase/src/test/kotlin/it/unibo/alchemist/util/TestDiameterUtils.kt +++ b/alchemist-implementationbase/src/test/kotlin/it/unibo/alchemist/util/TestDiameterUtils.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2025, Danilo Pianini and contributors + * Copyright (C) 2010-2026, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -11,10 +11,10 @@ package it.unibo.alchemist.util import it.unibo.alchemist.model.Environment import it.unibo.alchemist.model.environments.Continuous2DEnvironment +import it.unibo.alchemist.model.incarnations.ProtelisIncarnation import it.unibo.alchemist.model.linkingrules.ConnectWithinDistance import it.unibo.alchemist.model.nodes.GenericNode import it.unibo.alchemist.model.positions.Euclidean2DPosition -import it.unibo.alchemist.model.protelis.ProtelisIncarnation import it.unibo.alchemist.util.Environments.allSubNetworksByNode import it.unibo.alchemist.util.Environments.allSubNetworksByNodeWithHopDistance import it.unibo.alchemist.util.Environments.isNetworkSegmented @@ -28,7 +28,7 @@ import kotlin.test.assertTrue * Adds a node to the environment at the specified [coordinates]. */ infix fun Environment.addNodeAt(coordinates: Pair) = addNode( - GenericNode(ProtelisIncarnation(), this), + GenericNode(this), Euclidean2DPosition(coordinates.first, coordinates.second), ) diff --git a/alchemist-incarnation-biochemistry/build.gradle.kts b/alchemist-incarnation-biochemistry/build.gradle.kts index affba6e24c..43d88b022f 100644 --- a/alchemist-incarnation-biochemistry/build.gradle.kts +++ b/alchemist-incarnation-biochemistry/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2022, Danilo Pianini and contributors + * Copyright (C) 2010-2025, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -24,14 +24,20 @@ plugins { dependencies { antlr(libs.antlr4) + + ksp(alchemist("factories-generator")) + api(alchemist("implementationbase")) api(alchemist("euclidean-geometry")) api(alchemist("physics")) + implementation(libs.apache.commons.lang3) implementation(libs.boilerplate) implementation(libs.jirf) implementation(libs.trove4j) + runtimeOnly(libs.antlr4.runtime) + testImplementation(alchemist("engine")) testImplementation(alchemist("loading")) } diff --git a/alchemist-incarnation-biochemistry/src/main/java/it/unibo/alchemist/model/biochemistry/BiochemistryIncarnation.java b/alchemist-incarnation-biochemistry/src/main/java/it/unibo/alchemist/model/biochemistry/BiochemistryIncarnation.java index 584892a168..48de22ded8 100644 --- a/alchemist-incarnation-biochemistry/src/main/java/it/unibo/alchemist/model/biochemistry/BiochemistryIncarnation.java +++ b/alchemist-incarnation-biochemistry/src/main/java/it/unibo/alchemist/model/biochemistry/BiochemistryIncarnation.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2023, Danilo Pianini and contributors + * Copyright (C) 2010-2026, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -59,7 +59,7 @@ public Node createNode( if (Double.isNaN(diameter)) { throw new IllegalArgumentException("Invalid diameter: " + parameter); } - final Node node = new GenericNode<>(this, environment); + final Node node = new GenericNode<>(environment); if (diameter == 0) { node.addProperty(new CircularCell(environment, node)); } else { @@ -108,7 +108,6 @@ public Condition createCondition( final RandomGenerator randomGenerator, final Environment environment, final Node node, - final TimeDistribution time, final Actionable actionable, final @Nullable Object additionalParameters ) { @@ -120,7 +119,6 @@ public Action createAction( final RandomGenerator randomGenerator, final Environment environment, final Node node, - final TimeDistribution time, final Actionable actionable, final @Nullable Object additionalParameters ) { diff --git a/alchemist-incarnation-biochemistry/src/main/java/it/unibo/alchemist/model/biochemistry/nodes/EnvironmentNodeImpl.java b/alchemist-incarnation-biochemistry/src/main/java/it/unibo/alchemist/model/biochemistry/nodes/EnvironmentNodeImpl.java index 4923333138..7b27c9c6d4 100644 --- a/alchemist-incarnation-biochemistry/src/main/java/it/unibo/alchemist/model/biochemistry/nodes/EnvironmentNodeImpl.java +++ b/alchemist-incarnation-biochemistry/src/main/java/it/unibo/alchemist/model/biochemistry/nodes/EnvironmentNodeImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2023, Danilo Pianini and contributors + * Copyright (C) 2010-2026, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -10,7 +10,6 @@ package it.unibo.alchemist.model.biochemistry.nodes; import it.unibo.alchemist.model.Environment; -import it.unibo.alchemist.model.Incarnation; import it.unibo.alchemist.model.Molecule; import it.unibo.alchemist.model.biochemistry.EnvironmentNode; import it.unibo.alchemist.model.nodes.GenericNode; @@ -26,23 +25,13 @@ public final class EnvironmentNodeImpl extends GenericNode implements En @Serial private static final long serialVersionUID = 1L; - /** - * Create a new environment node. - * - * @param incarnation the simulation incarnation - * @param environment the environment - */ - public EnvironmentNodeImpl(final Incarnation incarnation, final Environment environment) { - super(incarnation, environment); - } - /** * Create a new environment node. * * @param environment the environment */ public EnvironmentNodeImpl(final Environment environment) { - super(environment.getIncarnation(), environment); + super(environment); } @Override diff --git a/alchemist-incarnation-biochemistry/src/test/java/it/unibo/alchemist/model/biochemistry/properties/TestDeformableCell.java b/alchemist-incarnation-biochemistry/src/test/java/it/unibo/alchemist/model/biochemistry/properties/TestDeformableCell.java index 1b2bd94faf..d06cbaf9a9 100644 --- a/alchemist-incarnation-biochemistry/src/test/java/it/unibo/alchemist/model/biochemistry/properties/TestDeformableCell.java +++ b/alchemist-incarnation-biochemistry/src/test/java/it/unibo/alchemist/model/biochemistry/properties/TestDeformableCell.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2023, Danilo Pianini and contributors + * Copyright (C) 2010-2026, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -80,7 +80,7 @@ class TestDeformableCell { private TimeDistribution time; private Node createDeformableCell(final double maxDiameter, final double rigidity) { - final Node node = new GenericNode<>(incarnation, environment); + final Node node = new GenericNode<>(environment); node.addProperty( new CircularDeformableCell(environment, node, maxDiameter, rigidity) ); diff --git a/alchemist-incarnation-protelis/build.gradle.kts b/alchemist-incarnation-protelis/build.gradle.kts index 3286a1e7c2..dcb3a8e239 100644 --- a/alchemist-incarnation-protelis/build.gradle.kts +++ b/alchemist-incarnation-protelis/build.gradle.kts @@ -1,3 +1,12 @@ +/* + * Copyright (C) 2010-2025, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + import Libs.alchemist /* @@ -14,6 +23,8 @@ plugins { } dependencies { + // KSP + ksp(alchemist("factories-generator")) // API api(alchemist("api")) api(alchemist("implementationbase")) diff --git a/alchemist-incarnation-protelis/src/main/kotlin/it/unibo/alchemist/model/protelis/ProtelisIncarnation.kt b/alchemist-incarnation-protelis/src/main/kotlin/it/unibo/alchemist/model/incarnations/ProtelisIncarnation.kt similarity index 94% rename from alchemist-incarnation-protelis/src/main/kotlin/it/unibo/alchemist/model/protelis/ProtelisIncarnation.kt rename to alchemist-incarnation-protelis/src/main/kotlin/it/unibo/alchemist/model/incarnations/ProtelisIncarnation.kt index 87681433b2..d3a759834c 100644 --- a/alchemist-incarnation-protelis/src/main/kotlin/it/unibo/alchemist/model/protelis/ProtelisIncarnation.kt +++ b/alchemist-incarnation-protelis/src/main/kotlin/it/unibo/alchemist/model/incarnations/ProtelisIncarnation.kt @@ -1,17 +1,17 @@ /* - * Copyright (C) 2010-2025, Danilo Pianini and contributors + * Copyright (C) 2010-2026, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the * GNU General Public License, with a linking exception, * as described in the file LICENSE in the Alchemist distribution's top directory. */ -package it.unibo.alchemist.model.protelis + +package it.unibo.alchemist.model.incarnations import com.google.common.cache.CacheBuilder import com.google.common.cache.CacheLoader import com.google.common.cache.LoadingCache -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings import it.unibo.alchemist.model.Action import it.unibo.alchemist.model.Actionable import it.unibo.alchemist.model.Condition @@ -75,7 +75,6 @@ class ProtelisIncarnation

> : Incarnation { randomGenerator: RandomGenerator, environment: Environment, node: Node?, - time: TimeDistribution, actionable: Actionable, additionalParameters: Any?, ): Action { @@ -133,7 +132,6 @@ class ProtelisIncarnation

> : Incarnation { randomGenerator: RandomGenerator, environment: Environment, node: Node?, - time: TimeDistribution, actionable: Actionable, additionalParameters: Any?, ): Condition { @@ -177,7 +175,7 @@ class ProtelisIncarnation

> : Incarnation { randomGenerator: RandomGenerator, environment: Environment, parameter: Any?, - ): Node = GenericNode(this, environment).apply { + ): Node = GenericNode(environment).apply { addProperty(ProtelisDevice(environment, this)) } @@ -201,11 +199,11 @@ class ProtelisIncarnation

> : Incarnation { } parameter?.let { result.actions = - listOf(createAction(randomGenerator, environment, node, timeDistribution, result, it)) + listOf(createAction(randomGenerator, environment, node, result, it)) } if (isSend) { result.conditions = - listOf(createCondition(randomGenerator, environment, node, timeDistribution, result, null)) + listOf(createCondition(randomGenerator, environment, node, result, null)) } return result } @@ -248,10 +246,11 @@ class ProtelisIncarnation

> : Incarnation { private val nodeRef = WeakReference(node) private val hash = Objects.hash(molecule, property, node) - val node: Node get() = - checkNotNull(nodeRef.get()) { - "Memory management issue: a Protelis node has been garbage-collected while still in use." - } + val node: Node + get() = + checkNotNull(nodeRef.get()) { + "Memory management issue: a Protelis node has been garbage-collected while still in use." + } override fun equals(other: Any?) = other is CacheKey && other.nodeRef.get() === nodeRef.get() && @@ -293,17 +292,13 @@ class ProtelisIncarnation

> : Incarnation { } /** - * An [ExecutionEnvironment] that can read and shadow the content of a + * An [org.protelis.vm.ExecutionEnvironment] that can read and shadow the content of a * Node, but cannot modify it. This is used to prevent badly written * properties from interacting with the simulation flow. * * @param node the [Node] */ - class ProtectedExecutionEnvironment - @SuppressFBWarnings(value = ["EI_EXPOSE_REP2"], justification = "This is intentional") - constructor( - private val node: Node<*>, - ) : ExecutionEnvironment { + class ProtectedExecutionEnvironment(private val node: Node<*>) : ExecutionEnvironment { private val shadow: ExecutionEnvironment = SimpleExecutionEnvironment() override fun commit() = Unit @@ -357,7 +352,7 @@ class ProtelisIncarnation

> : Incarnation { } } - private object NoNode : Node { + private data object NoNode : Node { @Serial private const val serialVersionUID = 1L @@ -389,10 +384,6 @@ class ProtelisIncarnation

> : Incarnation { override fun setConcentration(molecule: Molecule, concentration: Any) = notImplemented() - override fun equals(other: Any?): Boolean = other === this - - override fun hashCode(): Int = -1 - override fun addProperty(nodeProperty: NodeProperty) = notImplemented() /** diff --git a/alchemist-incarnation-protelis/src/main/kotlin/it/unibo/alchemist/model/protelis/AlchemistExecutionContext.kt b/alchemist-incarnation-protelis/src/main/kotlin/it/unibo/alchemist/model/protelis/AlchemistExecutionContext.kt index e28211771b..51376a3d71 100644 --- a/alchemist-incarnation-protelis/src/main/kotlin/it/unibo/alchemist/model/protelis/AlchemistExecutionContext.kt +++ b/alchemist-incarnation-protelis/src/main/kotlin/it/unibo/alchemist/model/protelis/AlchemistExecutionContext.kt @@ -12,7 +12,6 @@ package it.unibo.alchemist.model.protelis import com.google.common.cache.CacheBuilder import com.google.common.cache.CacheLoader import com.google.common.hash.Hashing -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings import it.unibo.alchemist.model.Environment import it.unibo.alchemist.model.GeoPosition import it.unibo.alchemist.model.Molecule @@ -166,7 +165,6 @@ class AlchemistExecutionContext

>( override fun getCurrentTime() = reaction.tau.toDouble() - @SuppressFBWarnings(value = ["EI_EXPOSE_REP"], justification = INTENTIONAL) override fun getDeviceUID(): DeviceUID = protelisDevice override fun hashCode(): Int { @@ -304,7 +302,5 @@ class AlchemistExecutionContext

>( * It only makes sense in case the environment is a [MapEnvironment] */ val APPROXIMATE_NBR_RANGE: Molecule = SimpleMolecule("APPROXIMATE_NBR_RANGE") - - private const val INTENTIONAL = "This is intentional" } } diff --git a/alchemist-incarnation-protelis/src/main/kotlin/it/unibo/alchemist/model/protelis/properties/ProtelisDevice.kt b/alchemist-incarnation-protelis/src/main/kotlin/it/unibo/alchemist/model/protelis/properties/ProtelisDevice.kt index 2dcbd40fcc..ed13f7fcdb 100644 --- a/alchemist-incarnation-protelis/src/main/kotlin/it/unibo/alchemist/model/protelis/properties/ProtelisDevice.kt +++ b/alchemist-incarnation-protelis/src/main/kotlin/it/unibo/alchemist/model/protelis/properties/ProtelisDevice.kt @@ -13,9 +13,10 @@ import it.unibo.alchemist.model.Environment import it.unibo.alchemist.model.Node import it.unibo.alchemist.model.NodeProperty import it.unibo.alchemist.model.Position +import it.unibo.alchemist.model.Reaction +import it.unibo.alchemist.model.incarnations.ProtelisIncarnation import it.unibo.alchemist.model.protelis.AlchemistExecutionContext import it.unibo.alchemist.model.protelis.AlchemistNetworkManager -import it.unibo.alchemist.model.protelis.ProtelisIncarnation import it.unibo.alchemist.model.protelis.actions.RunProtelisProgram import it.unibo.alchemist.model.protelis.actions.SendToNeighbor import org.protelis.lang.datatype.DeviceUID diff --git a/alchemist-incarnation-protelis/src/test/java/it/unibo/alchemist/model/protelis/TestIncarnation.java b/alchemist-incarnation-protelis/src/test/java/it/unibo/alchemist/model/protelis/TestIncarnation.java index ba326ae221..091009b9da 100644 --- a/alchemist-incarnation-protelis/src/test/java/it/unibo/alchemist/model/protelis/TestIncarnation.java +++ b/alchemist-incarnation-protelis/src/test/java/it/unibo/alchemist/model/protelis/TestIncarnation.java @@ -16,6 +16,7 @@ import it.unibo.alchemist.model.Reaction; import it.unibo.alchemist.model.TimeDistribution; import it.unibo.alchemist.model.environments.Continuous2DEnvironment; +import it.unibo.alchemist.model.incarnations.ProtelisIncarnation; import it.unibo.alchemist.model.positions.Euclidean2DPosition; import it.unibo.alchemist.model.protelis.actions.SendToNeighbor; import it.unibo.alchemist.model.protelis.conditions.ComputationalRoundComplete; diff --git a/alchemist-incarnation-protelis/src/test/kotlin/it/unibo/alchemist/model/protelis/TestGetPosition.kt b/alchemist-incarnation-protelis/src/test/kotlin/it/unibo/alchemist/model/protelis/TestGetPosition.kt index c66e703e7f..b11c409e1e 100644 --- a/alchemist-incarnation-protelis/src/test/kotlin/it/unibo/alchemist/model/protelis/TestGetPosition.kt +++ b/alchemist-incarnation-protelis/src/test/kotlin/it/unibo/alchemist/model/protelis/TestGetPosition.kt @@ -16,6 +16,7 @@ import it.unibo.alchemist.model.Environment import it.unibo.alchemist.model.Node.Companion.asProperty import it.unibo.alchemist.model.Time import it.unibo.alchemist.model.environments.Continuous2DEnvironment +import it.unibo.alchemist.model.incarnations.ProtelisIncarnation import it.unibo.alchemist.model.linkingrules.NoLinks import it.unibo.alchemist.model.positions.Euclidean2DPosition import it.unibo.alchemist.model.protelis.actions.RunProtelisProgram diff --git a/alchemist-incarnation-sapere/build.gradle.kts b/alchemist-incarnation-sapere/build.gradle.kts index 129508c494..89a547679f 100644 --- a/alchemist-incarnation-sapere/build.gradle.kts +++ b/alchemist-incarnation-sapere/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2022, Danilo Pianini and contributors + * Copyright (C) 2010-2025, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -14,11 +14,12 @@ plugins { } dependencies { + ksp(alchemist("factories-generator")) api(alchemist("api")) + api(alchemist("sapere-mathexp")) implementation(alchemist("implementationbase")) implementation(alchemist("maps")) implementation(alchemist("physics")) - implementation(alchemist("sapere-mathexp")) implementation(libs.boilerplate) implementation(libs.trove4j) } diff --git a/alchemist-incarnation-sapere/src/main/java/it/unibo/alchemist/model/sapere/SAPEREIncarnation.java b/alchemist-incarnation-sapere/src/main/java/it/unibo/alchemist/model/incarnations/SAPEREIncarnation.java similarity index 91% rename from alchemist-incarnation-sapere/src/main/java/it/unibo/alchemist/model/sapere/SAPEREIncarnation.java rename to alchemist-incarnation-sapere/src/main/java/it/unibo/alchemist/model/incarnations/SAPEREIncarnation.java index 0c3cdb9cf9..696d465206 100644 --- a/alchemist-incarnation-sapere/src/main/java/it/unibo/alchemist/model/sapere/SAPEREIncarnation.java +++ b/alchemist-incarnation-sapere/src/main/java/it/unibo/alchemist/model/incarnations/SAPEREIncarnation.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2023, Danilo Pianini and contributors + * Copyright (C) 2010-2026, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -7,7 +7,7 @@ * as described in the file LICENSE in the Alchemist distribution's top directory. */ -package it.unibo.alchemist.model.sapere; +package it.unibo.alchemist.model.incarnations; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import it.unibo.alchemist.model.Action; @@ -20,6 +20,8 @@ import it.unibo.alchemist.model.Position; import it.unibo.alchemist.model.Reaction; import it.unibo.alchemist.model.TimeDistribution; +import it.unibo.alchemist.model.sapere.ILsaMolecule; +import it.unibo.alchemist.model.sapere.ILsaNode; import it.unibo.alchemist.model.sapere.actions.LsaAllNeighborsAction; import it.unibo.alchemist.model.sapere.actions.LsaRandomNeighborAction; import it.unibo.alchemist.model.sapere.actions.LsaStandardAction; @@ -37,6 +39,7 @@ import javax.annotation.Nullable; import java.io.Serial; import java.io.Serializable; +import java.util.Collection; import java.util.Collections; import java.util.LinkedList; import java.util.List; @@ -70,7 +73,7 @@ public final class SAPEREIncarnation

> final String matchStart = "(?:\\s*(?<"; final String condition = matchStart + CONDITION_GROUP + ">\\+"; final String action = matchStart + ACTION_GROUP + ">[+*]"; - final String matchEnd = "?\\{[^\\{\\}]+?\\}))"; + final String matchEnd = "?\\{[^{}]+?}))"; MATCH_CONDITION = Pattern.compile(condition + matchEnd); MATCH_ACTION = Pattern.compile(action + matchEnd); final String sequence = matchEnd + "*\\s*"; @@ -204,7 +207,7 @@ public Reaction> createReaction( final Matcher condMatcher = MATCH_CONDITION.matcher(conditionsSpec); while (condMatcher.find()) { final String condition = condMatcher.group(CONDITION_GROUP); - conditions.add(createCondition(randomGenerator, environment, node, timeDistribution, result, condition)); + conditions.add(createCondition(randomGenerator, environment, node, result, condition)); } } else { illegalSpec( @@ -219,7 +222,7 @@ public Reaction> createReaction( final Matcher actMatcher = MATCH_ACTION.matcher(actionsSpec); while (actMatcher.find()) { final String action = actMatcher.group(ACTION_GROUP); - actions.add(createAction(randomGenerator, environment, node, timeDistribution, result, action)); + actions.add(createAction(randomGenerator, environment, node, result, action)); } } else { illegalSpec("not a sequence of valid conditions" @@ -246,7 +249,6 @@ public Condition> createCondition( final RandomGenerator randomGenerator, final Environment, P> environment, final Node> node, - final TimeDistribution> time, final Actionable> reaction, final @Nullable Object additionalParameters ) { @@ -266,7 +268,6 @@ public Action> createAction( final RandomGenerator randomGenerator, final Environment, P> environment, final Node> node, - final TimeDistribution> time, final Actionable> actionable, final @Nullable Object additionalParameters ) { @@ -274,25 +275,34 @@ public Action> createAction( final var parameters = additionalParameters.toString(); if (parameters.startsWith("+")) { return new LsaRandomNeighborAction( - (LsaNode) node, - createMolecule(parameters.substring(1)), + randomGenerator, environment, - randomGenerator + (LsaNode) node, + createMolecule(parameters.substring(1)) ); } if (parameters.startsWith("*")) { return new LsaAllNeighborsAction( + randomGenerator, + environment, (LsaNode) node, - createMolecule(parameters.substring(1)), - environment + createMolecule(parameters.substring(1)) ); } - return new LsaStandardAction(createMolecule(parameters), (LsaNode) node, randomGenerator); + return new LsaStandardAction(randomGenerator, (LsaNode) node, createMolecule(parameters)); } @Override public List createConcentration(final Object descriptor) { - return createConcentration(); + if (descriptor == null) { + return createConcentration(); + } + if (descriptor instanceof final Collection descriptorList) { + return descriptorList.stream().map(it -> + it instanceof final ILsaMolecule lsa ? lsa : createMolecule(it.toString()) + ).toList(); + } + return List.of(createMolecule(descriptor.toString())); } @Override diff --git a/alchemist-incarnation-sapere/src/main/java/it/unibo/alchemist/model/sapere/actions/LsaAllNeighborsAction.java b/alchemist-incarnation-sapere/src/main/java/it/unibo/alchemist/model/sapere/actions/LsaAllNeighborsAction.java index 89f1c080d2..481cb99f00 100644 --- a/alchemist-incarnation-sapere/src/main/java/it/unibo/alchemist/model/sapere/actions/LsaAllNeighborsAction.java +++ b/alchemist-incarnation-sapere/src/main/java/it/unibo/alchemist/model/sapere/actions/LsaAllNeighborsAction.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2023, Danilo Pianini and contributors + * Copyright (C) 2010-2026, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -29,22 +29,6 @@ public final class LsaAllNeighborsAction extends LsaRandomNeighborAction { @Serial private static final long serialVersionUID = -4798752202640197182L; - /** - * @param node - * the node in which the reaction is programmed - * @param molecule - * the LSA - * @param environment - * the current environment - */ - public LsaAllNeighborsAction( - final ILsaNode node, - final ILsaMolecule molecule, - final Environment, ?> environment - ) { - this(node, molecule, environment, null); - } - /** * @param node * the node in which the reaction is programmed @@ -56,12 +40,12 @@ public LsaAllNeighborsAction( * unused. Can be null. */ public LsaAllNeighborsAction( - final ILsaNode node, - final ILsaMolecule molecule, - final Environment, ?> environment, - final RandomGenerator randomGenerator + final RandomGenerator randomGenerator, + final Environment, ?> environment, + final ILsaNode node, + final ILsaMolecule molecule ) { - super(node, molecule, environment, randomGenerator); + super(randomGenerator, environment, node, molecule); } @Override diff --git a/alchemist-incarnation-sapere/src/main/java/it/unibo/alchemist/model/sapere/actions/LsaRandomNeighborAction.java b/alchemist-incarnation-sapere/src/main/java/it/unibo/alchemist/model/sapere/actions/LsaRandomNeighborAction.java index cb72c1bff5..0f5bddfc85 100644 --- a/alchemist-incarnation-sapere/src/main/java/it/unibo/alchemist/model/sapere/actions/LsaRandomNeighborAction.java +++ b/alchemist-incarnation-sapere/src/main/java/it/unibo/alchemist/model/sapere/actions/LsaRandomNeighborAction.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2023, Danilo Pianini and contributors + * Copyright (C) 2010-2026, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -63,12 +63,12 @@ public class LsaRandomNeighborAction extends LsaStandardAction { */ @SuppressWarnings("unchecked") public LsaRandomNeighborAction( - final ILsaNode node, - final ILsaMolecule molecule, - final Environment, ?> environment, - final RandomGenerator randomGenerator + final RandomGenerator randomGenerator, + final Environment, ?> environment, + final ILsaNode node, + final ILsaMolecule molecule ) { - super(molecule, node); + super(randomGenerator, node, molecule); final String molString = molecule.toString(); initO = molString.contains(LsaMolecule.SYN_O); initD = molString.contains(LsaMolecule.SYN_D); @@ -88,7 +88,7 @@ public LsaRandomNeighborAction cloneAction( final Node> node, final Reaction> reaction ) { - return new LsaRandomNeighborAction((ILsaNode) node, getMolecule(), getEnvironment(), randomEngine); + return new LsaRandomNeighborAction(randomEngine, getEnvironment(), (ILsaNode) node, getMolecule()); } /** diff --git a/alchemist-incarnation-sapere/src/main/java/it/unibo/alchemist/model/sapere/actions/LsaStandardAction.java b/alchemist-incarnation-sapere/src/main/java/it/unibo/alchemist/model/sapere/actions/LsaStandardAction.java index 7998c6487b..e74440323f 100644 --- a/alchemist-incarnation-sapere/src/main/java/it/unibo/alchemist/model/sapere/actions/LsaStandardAction.java +++ b/alchemist-incarnation-sapere/src/main/java/it/unibo/alchemist/model/sapere/actions/LsaStandardAction.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2023, Danilo Pianini and contributors + * Copyright (C) 2010-2026, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -48,19 +48,6 @@ public class LsaStandardAction extends AbstractLsaAction { ) private final RandomGenerator rand; - /** - * Builds a new local action, without any RandomGenerator. #RANDOM. - * - * @param n - * The source node - * @param m - * The ILsaMolecule instance you want to add to the node lsa - * space. - */ - public LsaStandardAction(final ILsaMolecule m, final ILsaNode n) { - this(m, n, null); - } - /** * Builds a new local action. * @@ -72,7 +59,7 @@ public LsaStandardAction(final ILsaMolecule m, final ILsaNode n) { * @param random * The Random generator to use */ - public LsaStandardAction(final ILsaMolecule m, final ILsaNode n, final RandomGenerator random) { + public LsaStandardAction(final RandomGenerator random, final ILsaNode n, final ILsaMolecule m) { super(n, Collections.singletonList(m)); mol = Objects.requireNonNull(m); rand = random; @@ -94,7 +81,7 @@ public LsaStandardAction(final ILsaMolecule m, final ILsaNode n, final RandomGen */ @Override public LsaStandardAction cloneAction(final Node> node, final Reaction> reaction) { - return new LsaStandardAction(getMolecule(), (ILsaNode) node); + return new LsaStandardAction(rand, (ILsaNode) node, getMolecule()); } /** diff --git a/alchemist-incarnation-sapere/src/test/java/it/unibo/alchemist/model/sapere/TestIncarnation.java b/alchemist-incarnation-sapere/src/test/java/it/unibo/alchemist/model/sapere/TestIncarnation.java index 1a8e7a75c9..780c055535 100644 --- a/alchemist-incarnation-sapere/src/test/java/it/unibo/alchemist/model/sapere/TestIncarnation.java +++ b/alchemist-incarnation-sapere/src/test/java/it/unibo/alchemist/model/sapere/TestIncarnation.java @@ -13,6 +13,7 @@ import it.unibo.alchemist.model.Reaction; import it.unibo.alchemist.model.TimeDistribution; import it.unibo.alchemist.model.environments.Continuous2DEnvironment; +import it.unibo.alchemist.model.incarnations.SAPEREIncarnation; import it.unibo.alchemist.model.positions.Euclidean2DPosition; import it.unibo.alchemist.model.sapere.actions.LsaAllNeighborsAction; import it.unibo.alchemist.model.sapere.actions.LsaRandomNeighborAction; diff --git a/alchemist-incarnation-sapere/src/test/java/it/unibo/alchemist/model/sapere/nodes/LsaNodeConcurrencyTest.java b/alchemist-incarnation-sapere/src/test/java/it/unibo/alchemist/model/sapere/nodes/LsaNodeConcurrencyTest.java index 3a9bbe5b6c..3625454a18 100644 --- a/alchemist-incarnation-sapere/src/test/java/it/unibo/alchemist/model/sapere/nodes/LsaNodeConcurrencyTest.java +++ b/alchemist-incarnation-sapere/src/test/java/it/unibo/alchemist/model/sapere/nodes/LsaNodeConcurrencyTest.java @@ -11,8 +11,8 @@ import it.unibo.alchemist.model.Environment; import it.unibo.alchemist.model.Molecule; +import it.unibo.alchemist.model.incarnations.SAPEREIncarnation; import it.unibo.alchemist.model.sapere.ILsaMolecule; -import it.unibo.alchemist.model.sapere.SAPEREIncarnation; import it.unibo.alchemist.model.sapere.molecules.LsaMolecule; import it.unibo.alchemist.model.environments.Continuous2DEnvironment; import it.unibo.alchemist.model.positions.Euclidean2DPosition; diff --git a/alchemist-incarnation-sapere/src/test/kotlin/it/unibo/alchemist/model/sapere/RegressionTest.kt b/alchemist-incarnation-sapere/src/test/kotlin/it/unibo/alchemist/model/sapere/RegressionTest.kt index 305b7109ef..fda9430d82 100644 --- a/alchemist-incarnation-sapere/src/test/kotlin/it/unibo/alchemist/model/sapere/RegressionTest.kt +++ b/alchemist-incarnation-sapere/src/test/kotlin/it/unibo/alchemist/model/sapere/RegressionTest.kt @@ -11,6 +11,7 @@ package it.unibo.alchemist.model.sapere import io.kotest.core.spec.style.StringSpec import io.kotest.matchers.shouldBe import it.unibo.alchemist.model.environments.Continuous2DEnvironment +import it.unibo.alchemist.model.incarnations.SAPEREIncarnation import it.unibo.alchemist.model.positions.Euclidean2DPosition import it.unibo.alchemist.model.sapere.nodes.LsaNode import it.unibo.alchemist.model.timedistributions.DiracComb diff --git a/alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/ScafiIncarnation.scala b/alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/incarnations/ScafiIncarnation.scala similarity index 83% rename from alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/ScafiIncarnation.scala rename to alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/incarnations/ScafiIncarnation.scala index 642caaa914..6683e51a0e 100644 --- a/alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/ScafiIncarnation.scala +++ b/alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/incarnations/ScafiIncarnation.scala @@ -1,19 +1,20 @@ /* - * Copyright (C) 2010-2019, Danilo Pianini and contributors listed in the main project's alchemist/build.gradle file. + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the * GNU General Public License, with a linking exception, * as described in the file LICENSE in the Alchemist distribution's top directory. */ -package it.unibo.alchemist.model +package it.unibo.alchemist.model.incarnations -import it.unibo.alchemist.model.ScafiIncarnationUtils._ -import it.unibo.alchemist.model.implementations.actions.{RunScafiProgram, SendScafiMessage} -import it.unibo.alchemist.model.implementations.conditions.ScafiComputationalRoundComplete -import it.unibo.alchemist.model.implementations.nodes.ScafiDevice +import it.unibo.alchemist.model._ import it.unibo.alchemist.model.molecules.SimpleMolecule import it.unibo.alchemist.model.nodes.GenericNode import it.unibo.alchemist.model.reactions.{ChemicalReaction, Event} +import it.unibo.alchemist.model.scafi.actions.{RunScafiProgram, SendScafiMessage} +import it.unibo.alchemist.model.scafi.conditions.ScafiComputationalRoundComplete +import it.unibo.alchemist.model.scafi.properties.ScafiDevice import it.unibo.alchemist.model.timedistributions.{DiracComb, ExponentialTime} import it.unibo.alchemist.model.times.DoubleTime import it.unibo.alchemist.scala.ScalaInterpreter @@ -25,6 +26,9 @@ import scala.collection.mutable.ListBuffer import scala.jdk.CollectionConverters._ sealed class ScafiIncarnation[T, P <: Position[P]] extends Incarnation[T, P] { + + import ScafiIncarnationUtils.runInScafiDeviceContext + private[this] def notNull[V](value: V, name: String = "Object"): V = Objects.requireNonNull(value, s"$name must not be null") @@ -44,7 +48,6 @@ sealed class ScafiIncarnation[T, P <: Position[P]] extends Incarnation[T, P] { randomGenerator: RandomGenerator, environment: Environment[T, P], node: Node[T], - time: TimeDistribution[T], reaction: Actionable[T], param: Any ): Action[T] = runInScafiDeviceContext[T, Action[T]]( @@ -86,13 +89,13 @@ sealed class ScafiIncarnation[T, P <: Position[P]] extends Incarnation[T, P] { } ) - /** NOTE: String v may be prefixed by "_" symbol to avoid caching the value resulting from its interpretation */ + /** NOTE: String v may be prefixed by the "_" symbol to avoid caching the value resulting from its interpretation */ override def createConcentration(data: Any): T = { /* * TODO: support double-try parse in case of strings (to avoid "\"string\"" in the YAML file) */ val dataString = data.toString - val doCacheValue = !dataString.startsWith("_"); + val doCacheValue = !dataString.startsWith("_") CachedInterpreter[AnyRef](if (doCacheValue) dataString else dataString.tail, doCacheValue).asInstanceOf[T] } @@ -102,7 +105,6 @@ sealed class ScafiIncarnation[T, P <: Position[P]] extends Incarnation[T, P] { randomGenerator: RandomGenerator, environment: Environment[T, P], node: Node[T], - time: TimeDistribution[T], reaction: Actionable[T], parameters: Any ): Condition[T] = runInScafiDeviceContext[T, Condition[T]]( @@ -139,7 +141,7 @@ sealed class ScafiIncarnation[T, P <: Position[P]] extends Incarnation[T, P] { environment: Environment[T, P], parameters: Any ): GenericNode[T] = { - val scafiNode = new GenericNode[T](this, environment) + val scafiNode = new GenericNode[T](environment) scafiNode.addProperty(new ScafiDevice(scafiNode)) scafiNode } @@ -164,12 +166,12 @@ sealed class ScafiIncarnation[T, P <: Position[P]] extends Incarnation[T, P] { } if (parameters != null) { result.setActions( - ListBuffer[Action[T]](createAction(randomGenerator, environment, node, time, result, parameterString)).asJava + ListBuffer[Action[T]](createAction(randomGenerator, environment, node, result, parameterString)).asJava ) } if (isSend) { result.setConditions( - ListBuffer[Condition[T]](createCondition(randomGenerator, environment, node, time, result, null)).asJava + ListBuffer[Condition[T]](createCondition(randomGenerator, environment, node, result, null)).asJava ) } result @@ -185,7 +187,7 @@ sealed class ScafiIncarnation[T, P <: Position[P]] extends Incarnation[T, P] { val frequency = toDouble(parameters) if (frequency.isNaN) { throw new IllegalArgumentException( - parameters + " is not a valid number, the time distribution could not be created." + parameters.toString + " is not a valid number, the time distribution could not be created." ) } new DiracComb(new DoubleTime(randomGenerator.nextDouble() / frequency), frequency) @@ -209,9 +211,7 @@ object ScafiIncarnationUtils { body(node.asProperty(classOf[ScafiDevice[T]])) } - def runOnlyOnScafiDevice[T, A](node: Node[T], message: String)(body: => A): A = - runInScafiDeviceContext(node, message, (_: ScafiDevice[T]) => body) - def isScafiNode[T](node: Node[T]): Boolean = node.asPropertyOrNull[ScafiDevice[T]](classOf[ScafiDevice[T]]) != null + private def isScafiNode[T](node: Node[T]): Boolean = node.asPropertyOrNull[ScafiDevice[T]](classOf[ScafiDevice[T]]) != null def allActions[T, P <: Position[P], C](node: Node[T], klass: Class[C]): mutable.Buffer[C] = for { @@ -219,7 +219,7 @@ object ScafiIncarnationUtils { action: Action[T] <- reaction.getActions.asScala if klass.isInstance(action) } yield action.asInstanceOf[C] - def allScafiProgramsFor[T, P <: Position[P]](node: Node[T]) = + def allScafiProgramsFor[T, P <: Position[P]](node: Node[T]): mutable.Buffer[RunScafiProgram[T, P]] = allActions[T, P, RunScafiProgram[T, P]](node, classOf[RunScafiProgram[T, P]]) def allConditionsFor[T](node: Node[T], conditionClass: Class[_]): mutable.Buffer[Condition[T]] = @@ -228,14 +228,6 @@ object ScafiIncarnationUtils { condition <- reaction.getConditions.asScala if conditionClass.isInstance(condition) } yield condition - def inboundDependencies[T](node: Node[T], conditionClass: Class[_]): mutable.Buffer[Dependency] = - for { - c <- allConditionsFor(node, conditionClass) - dep <- c.getInboundDependencies.iterator().asScala - } yield dep - - def allCompletedScafiProgram[T](node: Node[T], conditionClass: Class[_]): mutable.Buffer[Dependency] = - inboundDependencies(node, classOf[ScafiComputationalRoundComplete[T]]) } object CachedInterpreter { diff --git a/alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/scafi/ScafiIncarnationForAlchemist.scala b/alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/scafi/ScafiIncarnationForAlchemist.scala index 0ff8f615f3..2fd49719b3 100644 --- a/alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/scafi/ScafiIncarnationForAlchemist.scala +++ b/alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/scafi/ScafiIncarnationForAlchemist.scala @@ -12,8 +12,8 @@ import it.unibo.alchemist.model.Position import it.unibo.alchemist.model.positions.Euclidean2DPosition import java.util.Optional -import it.unibo.alchemist.model.implementations.nodes.NodeManager import it.unibo.alchemist.model.molecules.SimpleMolecule +import it.unibo.alchemist.model.scafi.nodes.NodeManager import it.unibo.alchemist.model.times.DoubleTime import it.unibo.alchemist.model.{Environment, Layer} import it.unibo.scafi.incarnations.BasicAbstractIncarnation diff --git a/alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/implementations/actions/RunScafiProgram.scala b/alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/scafi/actions/RunScafiProgram.scala similarity index 97% rename from alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/implementations/actions/RunScafiProgram.scala rename to alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/scafi/actions/RunScafiProgram.scala index 6ac37e7897..c40cfd6b4c 100644 --- a/alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/implementations/actions/RunScafiProgram.scala +++ b/alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/scafi/actions/RunScafiProgram.scala @@ -1,19 +1,20 @@ /* - * Copyright (C) 2010-2019, Danilo Pianini and contributors listed in the main project's alchemist/build.gradle file. + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the * GNU General Public License, with a linking exception, * as described in the file LICENSE in the Alchemist distribution's top directory. */ -package it.unibo.alchemist.model.implementations.actions +package it.unibo.alchemist.model.scafi.actions import it.unibo.alchemist.model.actions.AbstractLocalAction import it.unibo.alchemist.model.{Node, Position, Reaction} -import it.unibo.alchemist.model.implementations.nodes.SimpleNodeManager import it.unibo.alchemist.model.molecules.SimpleMolecule import it.unibo.alchemist.model.{Time => AlchemistTime, _} import it.unibo.alchemist.model.scafi.ScafiIncarnationForAlchemist import it.unibo.alchemist.model.scafi.ScafiIncarnationForAlchemist.{ContextImpl, _} +import it.unibo.alchemist.model.scafi.nodes.SimpleNodeManager import it.unibo.alchemist.scala.PimpMyAlchemist._ import it.unibo.scafi.space.Point3D import org.apache.commons.math3.random.RandomGenerator diff --git a/alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/implementations/actions/SendScafiMessage.scala b/alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/scafi/actions/SendScafiMessage.scala similarity index 85% rename from alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/implementations/actions/SendScafiMessage.scala rename to alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/scafi/actions/SendScafiMessage.scala index f8bbeffd3f..77165e5827 100644 --- a/alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/implementations/actions/SendScafiMessage.scala +++ b/alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/scafi/actions/SendScafiMessage.scala @@ -1,19 +1,20 @@ /* - * Copyright (C) 2010-2019, Danilo Pianini and contributors - * listed in the main project's alchemist/build.gradle.kts file. + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the * GNU General Public License, with a linking exception, * as described in the file LICENSE in the Alchemist distribution's top directory. */ -package it.unibo.alchemist.model.implementations.actions +package it.unibo.alchemist.model.scafi.actions -import it.unibo.alchemist.model.{Node, Position, Reaction, ScafiIncarnationUtils} -import it.unibo.alchemist.model.ScafiIncarnationUtils._ -import it.unibo.alchemist.model.implementations.nodes.ScafiDevice +import it.unibo.alchemist.model.{Node, Position, Reaction} +import it.unibo.alchemist.model.incarnations.ScafiIncarnationUtils import it.unibo.alchemist.model._ import it.unibo.alchemist.model.actions.AbstractAction +import it.unibo.alchemist.model.incarnations.ScafiIncarnationUtils.runInScafiDeviceContext +import it.unibo.alchemist.model.scafi.properties.ScafiDevice import java.util.stream.Collectors import scala.jdk.CollectionConverters._ diff --git a/alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/implementations/conditions/ScafiComputationalRoundComplete.scala b/alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/scafi/conditions/ScafiComputationalRoundComplete.scala similarity index 80% rename from alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/implementations/conditions/ScafiComputationalRoundComplete.scala rename to alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/scafi/conditions/ScafiComputationalRoundComplete.scala index 06caf18dce..3cb844bda4 100644 --- a/alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/implementations/conditions/ScafiComputationalRoundComplete.scala +++ b/alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/scafi/conditions/ScafiComputationalRoundComplete.scala @@ -1,17 +1,17 @@ /* - * Copyright (C) 2010-2019, Danilo Pianini and contributors - * listed in the main project's alchemist/build.gradle.kts file. + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the * GNU General Public License, with a linking exception, * as described in the file LICENSE in the Alchemist distribution's top directory. */ -package it.unibo.alchemist.model.implementations.conditions +package it.unibo.alchemist.model.scafi.conditions -import it.unibo.alchemist.model.ScafiIncarnationUtils import it.unibo.alchemist.model.conditions.AbstractCondition -import it.unibo.alchemist.model.implementations.actions.RunScafiProgram -import it.unibo.alchemist.model.implementations.nodes.ScafiDevice +import it.unibo.alchemist.model.incarnations.ScafiIncarnationUtils +import it.unibo.alchemist.model.scafi.actions.RunScafiProgram +import it.unibo.alchemist.model.scafi.properties.ScafiDevice import it.unibo.alchemist.model.{Condition, Context, Node, Reaction} final class ScafiComputationalRoundComplete[T](val device: ScafiDevice[T], val program: RunScafiProgram[_, _]) diff --git a/alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/implementations/nodes/NodeManager.scala b/alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/scafi/nodes/NodeManager.scala similarity index 87% rename from alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/implementations/nodes/NodeManager.scala rename to alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/scafi/nodes/NodeManager.scala index 61b631ed10..ed8a088e93 100644 --- a/alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/implementations/nodes/NodeManager.scala +++ b/alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/scafi/nodes/NodeManager.scala @@ -1,11 +1,12 @@ /* - * Copyright (C) 2010-2019, Danilo Pianini and contributors listed in the main project's alchemist/build.gradle file. + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the * GNU General Public License, with a linking exception, * as described in the file LICENSE in the Alchemist distribution's top directory. */ -package it.unibo.alchemist.model.implementations.nodes +package it.unibo.alchemist.model.scafi.nodes import it.unibo.alchemist.model.Node import it.unibo.alchemist.model.molecules.SimpleMolecule diff --git a/alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/implementations/nodes/ScafiDevice.scala b/alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/scafi/properties/ScafiDevice.scala similarity index 88% rename from alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/implementations/nodes/ScafiDevice.scala rename to alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/scafi/properties/ScafiDevice.scala index 169b1a861f..5d2542b310 100644 --- a/alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/implementations/nodes/ScafiDevice.scala +++ b/alchemist-incarnation-scafi/src/main/scala/it/unibo/alchemist/model/scafi/properties/ScafiDevice.scala @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2022, Danilo Pianini and contributors + * Copyright (C) 2010-2026, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -7,11 +7,12 @@ * as described in the file LICENSE in the Alchemist distribution's top directory. */ -package it.unibo.alchemist.model.implementations.nodes +package it.unibo.alchemist.model.scafi.properties +import it.unibo.alchemist.model.scafi.actions.{RunScafiProgram, SendScafiMessage} import it.unibo.alchemist.model.{Node, NodeProperty} -import it.unibo.alchemist.model.implementations.actions.{RunScafiProgram, SendScafiMessage} import org.slf4j.LoggerFactory + import scala.jdk.CollectionConverters._ class ScafiDevice[E](node: Node[E]) extends NodeProperty[E] { diff --git a/alchemist-incarnation-scafi/src/test/scala/it/unibo/alchemist/scafi/test/TestScafiIncarnation.scala b/alchemist-incarnation-scafi/src/test/scala/it/unibo/alchemist/scafi/test/TestScafiIncarnation.scala index ff7b68d9fd..e7d44b713b 100644 --- a/alchemist-incarnation-scafi/src/test/scala/it/unibo/alchemist/scafi/test/TestScafiIncarnation.scala +++ b/alchemist-incarnation-scafi/src/test/scala/it/unibo/alchemist/scafi/test/TestScafiIncarnation.scala @@ -8,7 +8,7 @@ package it.unibo.alchemist.scafi.test -import it.unibo.alchemist.model.ScafiIncarnation +import it.unibo.alchemist.model.incarnations.ScafiIncarnation import it.unibo.alchemist.model.positions.Euclidean2DPosition import it.unibo.alchemist.model.environments.Continuous2DEnvironment import it.unibo.alchemist.model.reactions.Event diff --git a/alchemist-kotlinscript/build.gradle.kts b/alchemist-kotlinscript/build.gradle.kts new file mode 100644 index 0000000000..9921a6a12f --- /dev/null +++ b/alchemist-kotlinscript/build.gradle.kts @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +import Libs.alchemist + +plugins { + id("kotlin-jvm-convention") +} + +dependencies { + rootProject.subprojects.filter { "incarnation" in it.name }.forEach { + implementation(it) + } + implementation(alchemist("cognitive-agents")) + implementation(alchemist("loading")) + implementation(alchemist("maps")) + implementation(kotlin("script-runtime")) + implementation(kotlin("scripting-common")) + implementation(kotlin("scripting-jvm")) + implementation(kotlin("scripting-jvm-host")) +} diff --git a/alchemist-kotlinscript/src/main/kotlin/it/unibo/alchemist/boundary/modelproviders/KotlinDslProvider.kt b/alchemist-kotlinscript/src/main/kotlin/it/unibo/alchemist/boundary/modelproviders/KotlinDslProvider.kt new file mode 100644 index 0000000000..5eb34f88ab --- /dev/null +++ b/alchemist-kotlinscript/src/main/kotlin/it/unibo/alchemist/boundary/modelproviders/KotlinDslProvider.kt @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary.modelproviders + +import it.unibo.alchemist.boundary.AlchemistLoaderProvider +import it.unibo.alchemist.boundary.Loader +import it.unibo.alchemist.kotlinscript.AlchemistScript +import java.io.InputStream +import java.io.Reader +import java.net.URL +import kotlin.script.experimental.api.ResultValue +import kotlin.script.experimental.api.ScriptDiagnostic +import kotlin.script.experimental.api.ScriptEvaluationConfiguration +import kotlin.script.experimental.api.valueOrThrow +import kotlin.script.experimental.host.toScriptSource +import kotlin.script.experimental.jvm.baseClassLoader +import kotlin.script.experimental.jvm.jvm +import kotlin.script.experimental.jvmhost.BasicJvmScriptingHost +import kotlin.script.experimental.jvmhost.createJvmCompilationConfigurationFromTemplate + +/** + * Provider for loading Alchemist simulations from Kotlin DSL scripts. + */ +object KotlinDslProvider : AlchemistLoaderProvider { + override val fileExtensions: Regex = "(?i)kts".toRegex() + + private val host = BasicJvmScriptingHost() + private val compilationConfiguration = createJvmCompilationConfigurationFromTemplate() + private val baseClassLoader = this::class.java.classLoader + + /** + * Evaluation configuration for script execution. + */ + private val evaluationConfiguration = ScriptEvaluationConfiguration { + jvm { + baseClassLoader(this@KotlinDslProvider.baseClassLoader) + } + } + override fun from(input: String): Loader { + val result = host.eval(input.toScriptSource(), compilationConfiguration, evaluationConfiguration) + val errors = result.reports.filter { it.severity == ScriptDiagnostic.Severity.ERROR } + require(errors.isEmpty()) { errors.joinToString("\n") { it.message } } + return when (val resultValue = result.valueOrThrow().returnValue) { + is ResultValue.Value -> { + val value = resultValue.value + check(value is Loader) { + "Script must return a Loader; got ${value?.let { "$it: ${it::class.qualifiedName}" }}" + } + value + } + is ResultValue.Error -> { + throw resultValue.error + } + is ResultValue.Unit -> + error("Script returned Unit; expected a Loader (use 'simulation { ... }' as the last statement)") + is ResultValue.NotEvaluated -> { + error("Script was not evaluated") + } + } + } + + override fun from(input: Reader): Loader = from(input.readText()) + + override fun from(input: InputStream): Loader = from(input.reader()) + + override fun from(input: URL): Loader = from(input.openStream()) +} diff --git a/alchemist-kotlinscript/src/main/kotlin/it/unibo/alchemist/kotlinscript/AlchemistCompilationConfiguration.kt b/alchemist-kotlinscript/src/main/kotlin/it/unibo/alchemist/kotlinscript/AlchemistCompilationConfiguration.kt new file mode 100644 index 0000000000..8c610037fa --- /dev/null +++ b/alchemist-kotlinscript/src/main/kotlin/it/unibo/alchemist/kotlinscript/AlchemistCompilationConfiguration.kt @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.kotlinscript + +import it.unibo.alchemist.boundary.kotlindsl.SimulationContext +import it.unibo.alchemist.model.incarnations.ProtelisIncarnation +import it.unibo.alchemist.model.maps.environments.OSMEnvironment +import kotlin.script.experimental.api.ScriptAcceptedLocation +import kotlin.script.experimental.api.ScriptCompilationConfiguration +import kotlin.script.experimental.api.acceptedLocations +import kotlin.script.experimental.api.compilerOptions +import kotlin.script.experimental.api.defaultImports +import kotlin.script.experimental.api.hostConfiguration +import kotlin.script.experimental.api.ide +import kotlin.script.experimental.jvm.dependenciesFromClassContext +import kotlin.script.experimental.jvm.jvm + +/** + * Compilation configuration for Alchemist scripts. + */ +object AlchemistCompilationConfiguration : ScriptCompilationConfiguration({ + val classes = listOf( + ProtelisIncarnation::class, + OSMEnvironment::class, + ) + val importsFromClasses = classes + .mapNotNull { it.qualifiedName?.substringBeforeLast('.') } + .distinct() + .map { "$it.*" } + defaultImports( + *importsFromClasses.toTypedArray(), + "it.unibo.alchemist.model.*", + "it.unibo.alchemist.model.deployments.*", + "it.unibo.alchemist.model.incarnations.*", + "it.unibo.alchemist.model.actions.*", + "it.unibo.alchemist.model.conditions.*", + "it.unibo.alchemist.model.environments.*", + "it.unibo.alchemist.model.geometry.*", + "it.unibo.alchemist.model.layers.*", + "it.unibo.alchemist.model.linkingrules.*", + "it.unibo.alchemist.model.maps.actions.*", + "it.unibo.alchemist.model.maps.deployments.*", + "it.unibo.alchemist.model.maps.environments.*", + "it.unibo.alchemist.model.movestrategies.*", + "it.unibo.alchemist.model.neighborhoods.*", + "it.unibo.alchemist.model.nodes.*", + "it.unibo.alchemist.model.positions.*", + "it.unibo.alchemist.model.positionfilters.*", + "it.unibo.alchemist.model.properties.*", + "it.unibo.alchemist.model.routes.*", + "it.unibo.alchemist.model.reactions.*", + "it.unibo.alchemist.model.terminators.*", + "it.unibo.alchemist.model.timedistributions.*", + "it.unibo.alchemist.model.times.*", + "it.unibo.alchemist.boundary.properties.*", + "it.unibo.alchemist.boundary.exporters.*", + "it.unibo.alchemist.boundary.extractors.*", + "it.unibo.alchemist.boundary.kotlindsl.*", + "it.unibo.alchemist.boundary.launchers.*", + "it.unibo.alchemist.boundary.statistic.*", + "it.unibo.alchemist.boundary.exportfilters.*", + "it.unibo.alchemist.boundary.variables.*", + ) + hostConfiguration + compilerOptions.append("-Xcontext-parameters") + ide { + acceptedLocations(ScriptAcceptedLocation.Everywhere) + } + jvm { + dependenciesFromClassContext(AlchemistScript::class, wholeClasspath = true) + dependenciesFromClassContext(ProtelisIncarnation::class, wholeClasspath = true) + dependenciesFromClassContext(SimulationContext::class, wholeClasspath = true) + } +}) { + // See: https://docs.oracle.com/javase/8/docs/platform/serialization/spec/input.html + @Suppress("UnusedPrivateFunction") + private fun readResolve(): Any = AlchemistCompilationConfiguration +} diff --git a/alchemist-kotlinscript/src/main/kotlin/it/unibo/alchemist/kotlinscript/AlchemistScript.kt b/alchemist-kotlinscript/src/main/kotlin/it/unibo/alchemist/kotlinscript/AlchemistScript.kt new file mode 100644 index 0000000000..e0108ce32b --- /dev/null +++ b/alchemist-kotlinscript/src/main/kotlin/it/unibo/alchemist/kotlinscript/AlchemistScript.kt @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.kotlinscript + +import kotlin.script.experimental.annotations.KotlinScript + +/** + * Base interface for Alchemist Kotlin DSL scripts. + */ +@KotlinScript( + displayName = "Alchemist Kotlin DSL", + fileExtension = "alchemist.kts", + compilationConfiguration = AlchemistCompilationConfiguration::class, +) +interface AlchemistScript diff --git a/alchemist-kotlinscript/src/main/kotlin/it/unibo/alchemist/kotlinscript/AlchemistScriptHost.kt b/alchemist-kotlinscript/src/main/kotlin/it/unibo/alchemist/kotlinscript/AlchemistScriptHost.kt new file mode 100644 index 0000000000..a8ee4c4729 --- /dev/null +++ b/alchemist-kotlinscript/src/main/kotlin/it/unibo/alchemist/kotlinscript/AlchemistScriptHost.kt @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.kotlinscript + +import it.unibo.alchemist.boundary.Loader +import java.io.File +import kotlin.script.experimental.api.ResultValue +import kotlin.script.experimental.api.ScriptDiagnostic +import kotlin.script.experimental.api.ScriptEvaluationConfiguration +import kotlin.script.experimental.api.valueOrNull +import kotlin.script.experimental.host.toScriptSource +import kotlin.script.experimental.jvmhost.BasicJvmScriptingHost + +/** + * Host entry point for executing an Alchemist Kotlin script. + * + * The application expects exactly one command-line argument: the path to a + * Kotlin script file (usually with extension `.alchemist.kts`) that evaluates to + * an instance of [Loader]. The returned loader's launcher will be used to + * launch the simulation. + * + * @param args command-line arguments; must contain exactly one element which is + * the path to the script file to execute. + * @throws IllegalArgumentException if the number of arguments is not exactly one. + */ +fun main(vararg args: String) { + require(args.size == 1) { "usage: " } + + val scriptFile = File(args[0]) + val result = BasicJvmScriptingHost().eval( + scriptFile.toScriptSource(), + AlchemistCompilationConfiguration, + ScriptEvaluationConfiguration { +// jvm { mainArguments(scriptArgs) } + }, + ) + result.reports + .filter { it.severity > ScriptDiagnostic.Severity.DEBUG } + .forEach { d -> System.err.println("${d.severity}: ${d.message}") } + val eval = result.valueOrNull() + val returned = (eval?.returnValue as? ResultValue.Value)?.value + check(returned is Loader) { + "The script should return a Loader, but it returned ${returned?.javaClass ?: "nothing"}" + } + returned.launcher.launch(returned) +} diff --git a/alchemist-api/.attach_pid3210525 b/alchemist-kotlinscript/src/main/resources/META-INF/kotlin/script/templates/it.unibo.alchemist.kotlinscript.AlchemistScript similarity index 100% rename from alchemist-api/.attach_pid3210525 rename to alchemist-kotlinscript/src/main/resources/META-INF/kotlin/script/templates/it.unibo.alchemist.kotlinscript.AlchemistScript diff --git a/alchemist-loading/build.gradle.kts b/alchemist-loading/build.gradle.kts index f7d25a6b9c..b3077f26e2 100644 --- a/alchemist-loading/build.gradle.kts +++ b/alchemist-loading/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2023, Danilo Pianini and contributors + * Copyright (C) 2010-2026, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -10,23 +10,23 @@ import Libs.alchemist import Libs.incarnation -/* - * Copyright (C) 2010-2019) Danilo Pianini and contributors listed in the main project"s alchemist/build.gradle file. - * - * This file is part of Alchemist) and is distributed under the terms of the - * GNU General Public License) with a linking exception) - * as described in the file LICENSE in the Alchemist distribution"s top directory. - */ plugins { id("kotlin-jvm-convention") } dependencies { + ksp(alchemist("factories-generator")) + api(alchemist("api")) api(alchemist("implementationbase")) implementation(alchemist("engine")) implementation(alchemist("euclidean-geometry")) + implementation(kotlin("reflect")) + implementation(kotlin("script-runtime")) + implementation(kotlin("scripting-common")) + implementation(kotlin("scripting-jvm")) + implementation(kotlin("scripting-jvm-host")) implementation(libs.apache.commons.lang3) implementation(libs.arrow.core) implementation(libs.dsiutils) @@ -46,12 +46,23 @@ dependencies { runtimeOnly(libs.scala.compiler) testImplementation(alchemist("engine")) + testImplementation(alchemist("kotlinscript")) testImplementation(alchemist("maps")) + testImplementation(alchemist("test")) + testImplementation(incarnation("sapere")) + testImplementation(incarnation("protelis")) testImplementation(libs.appdirs) testImplementation(libs.caffeine) testImplementation(libs.embedmongo) - testRuntimeOnly(incarnation("sapere")) - testRuntimeOnly(incarnation("protelis")) +} + +kotlin { + sourceSets.main { + kotlin.srcDir("build/generated/ksp/main/kotlin") + } + sourceSets.test { + kotlin.srcDir("build/generated/ksp/test/kotlin") + } } tasks.withType { @@ -68,6 +79,7 @@ tasks.withType { compilerOptions { freeCompilerArgs.addAll( "-opt-in=kotlin.time.ExperimentalTime", + "-Xcontext-parameters", ) } } diff --git a/alchemist-loading/src/main/java/it/unibo/alchemist/boundary/Variable.java b/alchemist-loading/src/main/java/it/unibo/alchemist/boundary/Variable.java deleted file mode 100644 index 44bccc1cd5..0000000000 --- a/alchemist-loading/src/main/java/it/unibo/alchemist/boundary/Variable.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (C) 2010-2023, Danilo Pianini and contributors - * listed, for each module, in the respective subproject's build.gradle.kts file. - * - * This file is part of Alchemist, and is distributed under the terms of the - * GNU General Public License, with a linking exception, - * as described in the file LICENSE in the Alchemist distribution's top directory. - */ - -package it.unibo.alchemist.boundary; - -import javax.annotation.Nonnull; -import java.io.Serializable; -import java.util.Iterator; -import java.util.stream.Stream; - -/** - * A variable simulation value that provides a range of values for batches, and - * a default value for single-shot runs. - * - * @param value typ of the variable - */ -public interface Variable extends Serializable, Iterable { - - @Nonnull - @Override - default Iterator iterator() { - return stream().iterator(); - } - - /** - * @return the number of different values this {@link Variable} may yield - */ - default long steps() { - return stream().count(); - } - - /** - * @return the default value for this {@link Variable} - */ - V getDefault(); - - /** - * @return all values of this variable as {@link Stream}. - */ - Stream stream(); - -} diff --git a/alchemist-loading/src/main/java/it/unibo/alchemist/boundary/variables/ArbitraryVariable.java b/alchemist-loading/src/main/java/it/unibo/alchemist/boundary/variables/ArbitraryVariable.java deleted file mode 100644 index b07094672d..0000000000 --- a/alchemist-loading/src/main/java/it/unibo/alchemist/boundary/variables/ArbitraryVariable.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (C) 2010-2023, Danilo Pianini and contributors - * listed, for each module, in the respective subproject's build.gradle.kts file. - * - * This file is part of Alchemist, and is distributed under the terms of the - * GNU General Public License, with a linking exception, - * as described in the file LICENSE in the Alchemist distribution's top directory. - */ - -package it.unibo.alchemist.boundary.variables; - -import org.apache.commons.lang3.ArrayUtils; -import org.danilopianini.util.ImmutableListSet; -import org.danilopianini.util.ListSet; - -import java.io.Serial; -import java.io.Serializable; -import java.util.stream.Stream; - -/** - * A variable spanning over an arbitrary set of values. - */ -public final class ArbitraryVariable extends AbstractPrintableVariable { - - @Serial - private static final long serialVersionUID = 1L; - private final Serializable def; - private final ListSet vals; - - private ArbitraryVariable(final ListSet values, final Serializable def) { - this.def = def; - vals = values; - } - - /** - * @param def - * the default value - * @param values - * all the values this variable may yield - */ - public ArbitraryVariable(final Serializable def, final double... values) { - this(ImmutableListSet.of(ArrayUtils.toObject(values)), def); - } - - /** - * @param def - * the default value - * @param values - * all the values this variable may yield - */ - public ArbitraryVariable(final Serializable def, final Iterable values) { - this(ImmutableListSet.copyOf(values), def); - } - - @Override - public Serializable getDefault() { - return def; - } - - @Override - public Stream stream() { - return vals.stream().map(it -> (Serializable) it); - } - -} diff --git a/alchemist-loading/src/main/java/it/unibo/alchemist/boundary/variables/Flag.java b/alchemist-loading/src/main/java/it/unibo/alchemist/boundary/variables/Flag.java deleted file mode 100644 index 67a482b6d5..0000000000 --- a/alchemist-loading/src/main/java/it/unibo/alchemist/boundary/variables/Flag.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2010-2023, Danilo Pianini and contributors - * listed, for each module, in the respective subproject's build.gradle.kts file. - * - * This file is part of Alchemist, and is distributed under the terms of the - * GNU General Public License, with a linking exception, - * as described in the file LICENSE in the Alchemist distribution's top directory. - */ - -package it.unibo.alchemist.boundary.variables; - -import java.io.Serial; -import java.util.stream.Stream; - -/** - * This variable is a flag. Being booleans not a valid data type in charts, this - * variable just outputs 0 and 1. This is equivalent to a {@link LinearVariable} - * with two samples ranging from 0 to 1. - */ -public final class Flag extends AbstractPrintableVariable { - - @Serial - private static final long serialVersionUID = 1L; - private final boolean defVal; - - /** - * @param def - * the default value - */ - public Flag(final boolean def) { - this.defVal = def; - } - - @Override - public Boolean getDefault() { - return defVal; - } - - @Override - public Stream stream() { - return Stream.of(true, false); - } - -} diff --git a/alchemist-loading/src/main/java/it/unibo/alchemist/boundary/variables/GeometricVariable.java b/alchemist-loading/src/main/java/it/unibo/alchemist/boundary/variables/GeometricVariable.java index 0293e2cccf..db83aaa7fa 100644 --- a/alchemist-loading/src/main/java/it/unibo/alchemist/boundary/variables/GeometricVariable.java +++ b/alchemist-loading/src/main/java/it/unibo/alchemist/boundary/variables/GeometricVariable.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2023, Danilo Pianini and contributors + * Copyright (C) 2010-2026, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -11,7 +11,9 @@ import org.apache.commons.math3.util.FastMath; +import javax.annotation.Nonnull; import java.io.Serial; +import java.util.Objects; import java.util.stream.Collectors; import java.util.stream.IntStream; import java.util.stream.Stream; @@ -72,7 +74,7 @@ public Double getDefault() { } @Override - public Stream stream() { + public @Nonnull Stream stream() { return IntStream.range(0, maxSamples) .mapToDouble(s -> min * FastMath.pow(max / min, (double) s / Math.max(1, maxSamples - 1))) .boxed(); @@ -83,4 +85,17 @@ public String toString() { return '[' + stream().map(Object::toString).collect(Collectors.joining(",")) + ']'; } + @Override + public boolean equals(final Object obj) { + return obj instanceof final GeometricVariable other + && def == other.def + && maxSamples == other.maxSamples + && min == other.min + && max == other.max; + } + + @Override + public int hashCode() { + return Objects.hash(def, min, max, maxSamples); + } } diff --git a/alchemist-loading/src/main/java/it/unibo/alchemist/boundary/variables/LinearVariable.java b/alchemist-loading/src/main/java/it/unibo/alchemist/boundary/variables/LinearVariable.java deleted file mode 100644 index 07ed8f1926..0000000000 --- a/alchemist-loading/src/main/java/it/unibo/alchemist/boundary/variables/LinearVariable.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (C) 2010-2023, Danilo Pianini and contributors - * listed, for each module, in the respective subproject's build.gradle.kts file. - * - * This file is part of Alchemist, and is distributed under the terms of the - * GNU General Public License, with a linking exception, - * as described in the file LICENSE in the Alchemist distribution's top directory. - */ - -package it.unibo.alchemist.boundary.variables; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.Serial; -import java.util.stream.DoubleStream; -import java.util.stream.Stream; - -/** - * This class represents a linear variable, namely a variable whose values span - * linearly between minimum and maximum. - */ -public final class LinearVariable extends AbstractPrintableVariable { - - @Serial - private static final long serialVersionUID = 2462199794377640948L; - private static final Logger L = LoggerFactory.getLogger(LinearVariable.class); - private final double min; - private final double max; - private final double step; - private final double def; - - /** - * @param def default value - * @param min minimum (inclusive) - * @param max maximum (inclusive) - * @param step number of steps - */ - public LinearVariable(final double def, final double min, final double max, final double step) { - if (max < min) { - throw new IllegalArgumentException("The maximum value is smaller than the minimum."); - } - if (def > max || def < min) { - L.warn("The provided default value for a linear variable ({}) is out of bounds: [{}, {}]", def, min, max); - } - this.min = min; - this.max = max; - this.step = step; - this.def = def; - } - - @Override - public Double getDefault() { - return def; - } - - @Override - public long steps() { - final long num = (long) Math.ceil((max - min) / step); - if (min + step * num <= max) { - return num + 1; - } - return num; - } - - @Override - public Stream stream() { - return DoubleStream.iterate(min, x -> x + step).limit(steps()).boxed(); - } - -} diff --git a/alchemist-loading/src/main/java/it/unibo/alchemist/boundary/variables/NumericConstant.java b/alchemist-loading/src/main/java/it/unibo/alchemist/boundary/variables/NumericConstant.java deleted file mode 100644 index 567d409516..0000000000 --- a/alchemist-loading/src/main/java/it/unibo/alchemist/boundary/variables/NumericConstant.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2010-2023, Danilo Pianini and contributors - * listed, for each module, in the respective subproject's build.gradle.kts file. - * - * This file is part of Alchemist, and is distributed under the terms of the - * GNU General Public License, with a linking exception, - * as described in the file LICENSE in the Alchemist distribution's top directory. - */ - -package it.unibo.alchemist.boundary.variables; - -import it.unibo.alchemist.boundary.DependentVariable; - -import java.io.Serial; -import java.util.Map; - -/** - * A numeric constant. - */ -public final class NumericConstant implements DependentVariable { - - @Serial - private static final long serialVersionUID = 1L; - private final Number internal; - - /** - * @param n the number - */ - public NumericConstant(final Number n) { - internal = n; - } - - @Override - public Number getWith(final Map variables) { - return internal; - } - -} diff --git a/alchemist-loading/src/main/java/it/unibo/alchemist/model/deployments/Circle.java b/alchemist-loading/src/main/java/it/unibo/alchemist/model/deployments/Circle.java index 8d34438e40..e903ea03e3 100644 --- a/alchemist-loading/src/main/java/it/unibo/alchemist/model/deployments/Circle.java +++ b/alchemist-loading/src/main/java/it/unibo/alchemist/model/deployments/Circle.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2023, Danilo Pianini and contributors + * Copyright (C) 2010-2025, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the diff --git a/alchemist-loading/src/main/java/it/unibo/alchemist/model/deployments/GeometricGradientRectangle.java b/alchemist-loading/src/main/java/it/unibo/alchemist/model/deployments/GeometricGradientRectangle.java index aee38e8ea6..4f7cb8eb4b 100644 --- a/alchemist-loading/src/main/java/it/unibo/alchemist/model/deployments/GeometricGradientRectangle.java +++ b/alchemist-loading/src/main/java/it/unibo/alchemist/model/deployments/GeometricGradientRectangle.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2023, Danilo Pianini and contributors + * Copyright (C) 2010-2025, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the diff --git a/alchemist-loading/src/main/java/it/unibo/alchemist/model/deployments/Point.java b/alchemist-loading/src/main/java/it/unibo/alchemist/model/deployments/Point.java index d4f6fa7bd2..54c82a98af 100644 --- a/alchemist-loading/src/main/java/it/unibo/alchemist/model/deployments/Point.java +++ b/alchemist-loading/src/main/java/it/unibo/alchemist/model/deployments/Point.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2023, Danilo Pianini and contributors + * Copyright (C) 2010-2026, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -41,6 +41,42 @@ public Point(final Environment environment, final double x, final double y positionMaker = environment::makePosition; } + /** + * @param environment + * The {@link Environment} + * @param x + * x coordinate + * @param y + * y coordinate + */ + public Point(final Environment environment, final int x, final int y) { + this(environment, (double) x, (double) y); + } + + /** + * @param environment + * The {@link Environment} + * @param x + * x coordinate + * @param y + * y coordinate + */ + public Point(final Environment environment, final double x, final int y) { + this(environment, x, (double) y); + } + + /** + * @param environment + * The {@link Environment} + * @param x + * x coordinate + * @param y + * y coordinate + */ + public Point(final Environment environment, final int x, final double y) { + this(environment, (double) x, y); + } + @Override public Stream

stream() { return Stream.of(positionMaker.apply(x, y)); diff --git a/alchemist-loading/src/main/java/it/unibo/alchemist/model/deployments/Rectangle.java b/alchemist-loading/src/main/java/it/unibo/alchemist/model/deployments/Rectangle.java index 50f4d2f6fb..413c9604cb 100644 --- a/alchemist-loading/src/main/java/it/unibo/alchemist/model/deployments/Rectangle.java +++ b/alchemist-loading/src/main/java/it/unibo/alchemist/model/deployments/Rectangle.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2023, Danilo Pianini and contributors + * Copyright (C) 2010-2025, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the diff --git a/alchemist-loading/src/main/java/it/unibo/alchemist/model/positionfilters/Rectangle.java b/alchemist-loading/src/main/java/it/unibo/alchemist/model/positionfilters/Rectangle.java deleted file mode 100644 index 96685b2726..0000000000 --- a/alchemist-loading/src/main/java/it/unibo/alchemist/model/positionfilters/Rectangle.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2010-2023, Danilo Pianini and contributors - * listed, for each module, in the respective subproject's build.gradle.kts file. - * - * This file is part of Alchemist, and is distributed under the terms of the - * GNU General Public License, with a linking exception, - * as described in the file LICENSE in the Alchemist distribution's top directory. - */ - -package it.unibo.alchemist.model.positionfilters; - -import it.unibo.alchemist.model.Position2D; - -import java.awt.geom.Rectangle2D; - -import static java.lang.Math.abs; -import static java.lang.Math.min; - -/** - * A Rectangle. - * - * @param

position type - */ -public class Rectangle

> extends Abstract2DShape

{ - - /** - * @param x - * start x point - * @param y - * start y point - * @param w - * width - * @param h - * height - */ - public Rectangle(final double x, final double y, final double w, final double h) { - super(new Rectangle2D.Double(min(x, x + w), min(y, y + h), abs(w), abs(h))); - } - -} diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/AlchemistLoaderProvider.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/AlchemistLoaderProvider.kt new file mode 100644 index 0000000000..a1936ac090 --- /dev/null +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/AlchemistLoaderProvider.kt @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2010-2025, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary + +import java.io.InputStream +import java.io.Reader +import java.net.URL + +/** + * Provider interface for loading Alchemist simulations from various input sources. + */ +interface AlchemistLoaderProvider : Extensions { + + /** + * Creates a [Loader] from a string input. + * + * @param input The input string containing the simulation configuration. + * @return A [Loader] instance. + */ + fun from(input: String): Loader + + /** + * Creates a [Loader] from a [Reader] input. + * + * @param input The reader containing the simulation configuration. + * @return A [Loader] instance. + */ + fun from(input: Reader): Loader = from(input.readText()) + + /** + * Creates a [Loader] from an [InputStream] input. + * + * @param input The input stream containing the simulation configuration. + * @return A [Loader] instance. + */ + fun from(input: InputStream): Loader = from(input.reader()) + + /** + * Creates a [Loader] from a [URL] input. + * + * @param input The URL pointing to the simulation configuration. + * @return A [Loader] instance. + */ + fun from(input: URL): Loader = from(input.openStream()) +} diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/AlchemistModelProvider.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/AlchemistModelProvider.kt index 5a1dc02d4e..10215365a1 100644 --- a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/AlchemistModelProvider.kt +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/AlchemistModelProvider.kt @@ -16,11 +16,7 @@ import java.net.URL /** * Translates inputs to a Map representing the Alchemist model. */ -interface AlchemistModelProvider { - /** - * A [Regex] matching the file extensions supported by this provider. - */ - val fileExtensions: Regex +interface AlchemistModelProvider : Extensions { /** * Reads [input] from a [String]. diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/Extensions.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/Extensions.kt new file mode 100644 index 0000000000..32f9befeb1 --- /dev/null +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/Extensions.kt @@ -0,0 +1,20 @@ +/* + * Copyright (C) 2010-2025, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary + +/** + * Interface for extensions that provide file extension matching. + */ +interface Extensions { + /** + * A [Regex] matching the file extensions supported. + */ + val fileExtensions: Regex +} diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/LoadAlchemist.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/LoadAlchemist.kt index 70ff3a74de..b2972d0119 100644 --- a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/LoadAlchemist.kt +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/LoadAlchemist.kt @@ -72,16 +72,28 @@ object LoadAlchemist { */ @JvmStatic @JvmOverloads - fun from(url: URL, overrides: List = emptyList()): Loader = - from(url, modelForExtension(url.path.takeLastWhile { it != '.' }), overrides) + fun from(url: URL, overrides: List = emptyList()): Loader { + val ext = url.path.takeLastWhile { it != '.' } + return if (ext.equals("kts", ignoreCase = true)) { + loaderProviderFor(ext).from(url.openStream()) + } else { + from(url, modelForExtension(ext), overrides) + } + } /** * Load from a [file] with overrides. */ @JvmStatic @JvmOverloads - fun from(file: File, overrides: List = emptyList()): Loader = - from(file.inputStream(), modelForExtension(file.extension), overrides) + fun from(file: File, overrides: List = emptyList()): Loader { + val ext = file.extension + return if (ext.equals("kts", ignoreCase = true)) { + loaderProviderFor(ext).from(file.inputStream()) + } else { + from(file.inputStream(), modelForExtension(ext), overrides) + } + } /** * Load from a [string] with overrides. @@ -91,8 +103,14 @@ object LoadAlchemist { fun from(string: String, overrides: List = emptyList()): Loader = from(File(string), overrides) @JvmStatic - private fun modelForExtension(extension: String) = ClassPathScanner - .subTypesOf(extractPackageFrom()) + private fun modelForExtension(extension: String) = loadForExtension(extension) + + @JvmStatic + private fun loaderProviderFor(extension: String) = loadForExtension(extension) + + @JvmStatic + private inline fun loadForExtension(extension: String) = ClassPathScanner + .subTypesOf(extractPackageFrom()) .mapNotNull { it.kotlin.objectInstance } .filter { it.fileExtensions.matches(extension) } .also { require(it.size == 1) { "None or conflicting loaders for extension $extension: $it" } } diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/Loader.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/Loader.kt index bcedb5a930..5c4a53786f 100644 --- a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/Loader.kt +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/Loader.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2023, Danilo Pianini and contributors + * Copyright (C) 2010-2026, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/Variable.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/Variable.kt new file mode 100644 index 0000000000..b3afbcfe20 --- /dev/null +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/Variable.kt @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary + +import java.io.Serializable +import java.util.stream.Stream +import javax.annotation.Nonnull + +/** + * A variable simulation value that provides a range of values for batches, and + * a default value for single-shot runs. + * + * @param value typ of the variable + */ +interface Variable : + Serializable, + Iterable { + + @Nonnull + override fun iterator(): MutableIterator = stream().iterator() + + /** + * @return the number of different values this [Variable] may yield + */ + fun steps(): Long = stream().count() + + /** + * @return the default value for this [Variable] + */ + val default: V + + /** + * @return all values of this variable as [java.util.stream.Stream]. + */ + fun stream(): Stream +} diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/exporters/CSVExporter.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/exporters/CSVExporter.kt index 047eef6405..6599ebbbd4 100644 --- a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/exporters/CSVExporter.kt +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/exporters/CSVExporter.kt @@ -63,10 +63,9 @@ constructor( } val path = if (exportPath.endsWith(File.separator)) exportPath else "${exportPath}${File.separator}" val time = if (appendTime) "${System.currentTimeMillis()}" else "" - val filePrefix = - listOf(fileNameRoot, variablesDescriptor, time) - .filter(String::isNotBlank) - .joinToString(separator = "_") + val filePrefix = listOf(fileNameRoot, variablesDescriptor, time) + .filter(String::isNotBlank) + .joinToString(separator = "_") require(filePrefix.isNotEmpty()) { "No fileNameRoot provided for exporting data, no variables in the environment, and timestamp unset:" + "the file name would be empty. Please provide a file name." @@ -97,37 +96,36 @@ constructor( } override fun exportData(environment: Environment, reaction: Actionable?, time: Time, step: Long) { - val line: String = - dataExtractors.joinToString(separator = " ") { extractor -> - val data = extractor.extractDataAsText(environment, reaction, time, step) - val names = extractor.columnNames - when { - data.size <= 1 -> data.values.joinToString(" ") - // Labels and keys match - data.size == names.size && data.keys.containsAll(names) -> - names.joinToString(" ") { - requireNotNull(data[it]) { - BugReporting.reportBug( - "Bug in ${this::class.simpleName}", - mapOf("key" to it, "data" to data), - ) - } - } - // If the labels do not match keys, require predictable iteration order - else -> { - require(data.hasPredictableIteration) { + val line: String = dataExtractors.joinToString(separator = " ") { extractor -> + val data = extractor.extractDataAsText(environment, reaction, time, step) + val names = extractor.columnNames + when { + data.size <= 1 -> data.values.joinToString(" ") + // Labels and keys match + data.size == names.size && data.keys.containsAll(names) -> + names.joinToString(" ") { + requireNotNull(data[it]) { BugReporting.reportBug( - """ - Extractor "${extractor::class.simpleName}" is likely bugged: - 1. the set of labels $names does not match the keys ${data.keys}, but iteration may fail as - 2. it returned a map with non-predictable iteration order of type ${data::class.simpleName}" - """.trimIndent(), + "Bug in ${this::class.simpleName}", + mapOf("key" to it, "data" to data), ) } - data.values.joinToString(" ") } + // If the labels do not match keys, require predictable iteration order + else -> { + require(data.hasPredictableIteration) { + BugReporting.reportBug( + """ + Extractor "${extractor::class.simpleName}" is likely bugged: + 1. the set of labels $names does not match the keys ${data.keys}, but iteration may fail as + 2. it returned a map with non-predictable iteration order of type ${data::class.simpleName}" + """.trimIndent(), + ) + } + data.values.joinToString(" ") } } + } outputPrintStream.println(line) } diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/AbstractAggregatingDoubleExporter.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/AbstractAggregatingDoubleExtractor.kt similarity index 95% rename from alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/AbstractAggregatingDoubleExporter.kt rename to alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/AbstractAggregatingDoubleExtractor.kt index 328c120a6c..9c01b44b5c 100644 --- a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/AbstractAggregatingDoubleExporter.kt +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/AbstractAggregatingDoubleExtractor.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2025, Danilo Pianini and contributors + * Copyright (C) 2010-2026, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -25,13 +25,13 @@ import org.apache.commons.math3.stat.descriptive.UnivariateStatistic * extracts data from the environment, filters it, and then aggregates it. * Available aggregators can be found at this [site](http://bit.ly/40MWWvt). */ -abstract class AbstractAggregatingDoubleExporter +abstract class AbstractAggregatingDoubleExtractor @JvmOverloads constructor( private val filter: ExportFilter = CommonFilters.NOFILTER.filteringPolicy, aggregatorNames: List, precision: Int? = null, -) : AbstractDoubleExporter(precision) { +) : AbstractDoubleExtractor(precision) { constructor( filter: String?, aggregatorNames: List, diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/AbstractDoubleExporter.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/AbstractDoubleExtractor.kt similarity index 97% rename from alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/AbstractDoubleExporter.kt rename to alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/AbstractDoubleExtractor.kt index 819ae8f9d0..bedab00481 100644 --- a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/AbstractDoubleExporter.kt +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/AbstractDoubleExtractor.kt @@ -20,7 +20,7 @@ import java.util.Locale * Provided a [precision] representing the significant digits, formats doubles accordingly, using [Locale.ENGLISH]. * If `null` is provided, returns the default conversion to string. */ -abstract class AbstractDoubleExporter +abstract class AbstractDoubleExtractor @JvmOverloads constructor(val precision: Int? = null) : Extractor { init { diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/ExecutionTime.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/ExecutionTime.kt index 057d54e923..9e8a38cdf6 100644 --- a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/ExecutionTime.kt +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/ExecutionTime.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2023, Danilo Pianini and contributors + * Copyright (C) 2010-2026, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -19,7 +19,7 @@ import it.unibo.alchemist.model.Time */ class ExecutionTime @JvmOverloads -constructor(precision: Int? = null) : AbstractDoubleExporter(precision) { +constructor(precision: Int? = null) : AbstractDoubleExtractor(precision) { private companion object { private const val NANOS_TO_SEC: Double = 1e9 } diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/MeanSquaredError.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/MeanSquaredError.kt index 7ff3b31ad7..adaeb0a9dd 100644 --- a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/MeanSquaredError.kt +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/MeanSquaredError.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2023, Danilo Pianini and contributors + * Copyright (C) 2010-2026, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -37,7 +37,7 @@ constructor( localValueMolecule: String, localValueProperty: String = "", precision: Int? = null, -) : AbstractDoubleExporter(precision) { +) : AbstractDoubleExtractor(precision) { constructor( incarnation: Incarnation, localCorrectValueMolecule: String, diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/MoleculeReader.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/MoleculeReader.kt index 41b2434785..018ab92994 100644 --- a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/MoleculeReader.kt +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/MoleculeReader.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2023, Danilo Pianini and contributors + * Copyright (C) 2010-2026, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -21,14 +21,14 @@ import kotlin.math.min /** * Reads the value of a molecule and logs it. * - * @property moleculeName + * @param moleculeName * the target molecule - * @property property + * @param property * the target property - * @property incarnation + * @param incarnation * the target incarnation - * @property filter - * the [ExportFilter] to use + * @param filter + * the [FilteringPolicy] to use * @param aggregatorNames * the names of the [org.apache.commons.math3.stat.descriptive.UnivariateStatistic] to use for * aggregating data. If an empty list is passed, then the values @@ -44,7 +44,7 @@ constructor( private val filter: ExportFilter, aggregatorNames: List, precision: Int? = null, -) : AbstractAggregatingDoubleExporter(filter, aggregatorNames, precision) { +) : AbstractAggregatingDoubleExtractor(filter, aggregatorNames, precision) { private companion object { private const val SHORT_NAME_MAX_LENGTH = 5 } diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/NetworkCentroid.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/NetworkCentroid.kt index 25ad0f2ed2..8be413230f 100644 --- a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/NetworkCentroid.kt +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/NetworkCentroid.kt @@ -26,7 +26,7 @@ class NetworkCentroid : Extractor { time: Time, step: Long, ): Map = when (environment.nodeCount) { - 0 -> columnNames.associate { it to NaN } + 0 -> columnNames.associateWith { NaN } else -> environment.networkHub().toList().mapIndexed { index, value -> columnNames[index] to value diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/NodeDegree.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/NodeDegree.kt index 2dce769345..6004eb8844 100644 --- a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/NodeDegree.kt +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/NodeDegree.kt @@ -1,3 +1,12 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + package it.unibo.alchemist.boundary.extractors import it.unibo.alchemist.boundary.ExportFilter @@ -14,7 +23,7 @@ import it.unibo.alchemist.model.Time class NodeDegree @JvmOverloads constructor(filter: ExportFilter, aggregators: List, precision: Int = 2) : - AbstractAggregatingDoubleExporter(filter, aggregators, precision) { + AbstractAggregatingDoubleExtractor(filter, aggregators, precision) { override val columnName: String = NAME override fun getData( diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/NodesPositions.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/NodesPositions.kt index a683bf29c5..f63ec8d5a4 100644 --- a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/NodesPositions.kt +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/NodesPositions.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2024, Danilo Pianini and contributors + * Copyright (C) 2010-2026, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -20,7 +20,7 @@ import it.unibo.alchemist.model.Time * * Note: this exporter is not designed to handle changes in the environment topology like node removal or addition. */ -class NodesPositions>(private val environment: Environment) : AbstractDoubleExporter() { +class NodesPositions>(private val environment: Environment) : AbstractDoubleExtractor() { override val columnNames: List by lazy { (0 until environment.nodeCount).flatMap { nodeId -> (0 until environment.dimensions).map { dimensionIndex -> diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/SubnetworksDiameter.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/SubnetworksDiameter.kt index 158d8c95fd..b7a48b80e0 100644 --- a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/SubnetworksDiameter.kt +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/SubnetworksDiameter.kt @@ -1,3 +1,12 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + package it.unibo.alchemist.boundary.extractors import it.unibo.alchemist.boundary.ExportFilter @@ -18,7 +27,7 @@ constructor( filter: ExportFilter, aggregators: List, precision: Int = 2, -) : AbstractAggregatingDoubleExporter(filter, aggregators, precision) { +) : AbstractAggregatingDoubleExtractor(filter, aggregators, precision) { private companion object { private const val NAME: String = "subnetworks-diameter" } diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/Time.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/Time.kt index ca48d37500..51cfd1b2e1 100644 --- a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/Time.kt +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/extractors/Time.kt @@ -18,7 +18,7 @@ import it.unibo.alchemist.model.Time */ class Time @JvmOverloads -constructor(precision: Int? = null) : AbstractDoubleExporter(precision) { +constructor(precision: Int? = null) : AbstractDoubleExtractor(precision) { override val columnNames = listOf(NAME) override fun extractData( diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/ActionableContext.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/ActionableContext.kt new file mode 100644 index 0000000000..44dbed682e --- /dev/null +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/ActionableContext.kt @@ -0,0 +1,37 @@ +package it.unibo.alchemist.boundary.kotlindsl + +import it.unibo.alchemist.model.Action +import it.unibo.alchemist.model.Actionable +import it.unibo.alchemist.model.Condition + +/** + * DSL entry-point for configuring an [Actionable] by attaching [Action]s and [Condition]s. + * + * This object is intended to be used with Kotlin context receivers, so that the target [Actionable] instance + * is implicitly available in the current scope. + * + * Both [action] and [condition] mutate the current [Actionable] by appending the provided element to its internal + * collections. Ordering is preserved and duplicates are allowed. + */ +object ActionableContext { + + /** + * Appends the given [Action] to the current [Actionable]. + * + * @param action the action to add. + */ + context(actionable: Actionable) + fun action(action: Action) { + actionable.actions += action + } + + /** + * Appends the given [Condition] to the current [Actionable]. + * + * @param condition the condition to add. + */ + context(actionable: Actionable) + fun condition(condition: Condition) { + actionable.conditions += condition + } +} diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/AlchemistKotlinDSL.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/AlchemistKotlinDSL.kt new file mode 100644 index 0000000000..acd407425c --- /dev/null +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/AlchemistKotlinDSL.kt @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary.kotlindsl + +import it.unibo.alchemist.boundary.Loader +import it.unibo.alchemist.model.GeoPosition +import it.unibo.alchemist.model.Incarnation +import it.unibo.alchemist.model.Position +import it.unibo.alchemist.model.positions.Euclidean2DPosition + +/** + * Creates an Alchemist [Loader] using the Kotlin DSL. + * + * The returned [Loader] encapsulates the scenario definition provided in [block] and can later be queried + * (optionally with variable bindings) to obtain a fully configured simulation instance. + * + * The [block] is executed with the provided [incarnation] available as a context receiver, and with a + * [SimulationContext] receiver, enabling the definition of the environment, deployments, exporters/monitors, + * launcher, and scenario variables. + * + * @param T the concentration type used by the simulation. + * @param P the position type used by the environment. + * @param I the specific incarnation type. + * @param incarnation the incarnation used to create domain-specific objects (molecules, nodes, reactions, etc.). + * @param block the DSL block defining the scenario. + * @return a [Loader] that can build the simulation described by [block]. + */ +fun , I : Incarnation> simulation( + incarnation: I, + block: context(I) SimulationContext.() -> Unit, +): Loader = DSLLoader(incarnation, block) + +/** + * Convenience overload of [simulation] for scenarios running in a 2D Euclidean space. + * + * This function only constrains the position type to [Euclidean2DPosition] and otherwise delegates to [simulation]. + * + * @param T the concentration type used by the simulation. + * @param I the specific incarnation type. + * @param incarnation the incarnation used to create domain-specific objects. + * @param block the DSL block defining the scenario. + * @return a [Loader] that can build the simulation described by [block]. + */ +fun > simulation2D( + incarnation: I, + block: context(I) SimulationContext.() -> Unit, +) = simulation(incarnation, block) + +/** + * Convenience overload of [simulation] for scenarios running on geographical coordinates. + * + * This function only constrains the position type to [GeoPosition] and otherwise delegates to [simulation]. + * + * @param T the concentration type used by the simulation. + * @param I the specific incarnation type. + * @param incarnation the incarnation used to create domain-specific objects. + * @param block the DSL block defining the scenario. + * @return a [Loader] that can build the simulation described by [block]. + */ +fun > simulationOnMap( + incarnation: I, + block: context(I) SimulationContext.() -> Unit, +) = simulation(incarnation, block) diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/ContentContext.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/ContentContext.kt new file mode 100644 index 0000000000..67c3c84a39 --- /dev/null +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/ContentContext.kt @@ -0,0 +1,100 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary.kotlindsl + +import it.unibo.alchemist.model.Incarnation +import it.unibo.alchemist.model.Molecule +import it.unibo.alchemist.model.Node + +/** + * DSL utilities for defining the initial contents of a [Node]. + * + * This context provides helpers to: + * - build concentrations using the current [Incarnation]; + * - assign concentrations to a [Node] using the unary minus operator. + * + * The API is based on Kotlin context receivers: the required [Incarnation] and/or [Node] are expected to be + * available in the current context. + */ +object ContentContext { + + /** + * Assigns the given [concentration] to this [Molecule] on the current [Node]. + * + * Context receivers: + * - [incarnation]: used to create concentrations by default when none is provided. + * - [node]: the target [Node] that will receive the concentration. + * + * @receiver the molecule to which the concentration will be assigned + * @param concentration the concentration value to assign; when omitted, a fresh + * concentration instance is created via [Incarnation.createConcentration]. + */ + context(incarnation: Incarnation, node: Node) + operator fun Molecule.invoke(concentration: T = incarnation.createConcentration()) = + node.setConcentration(this, concentration) + + /** + * Create the [Molecule] identified by this string using the current [Incarnation] + * and assign it the provided [concentration] on the current [Node]. + * + * Context receivers: + * - [incarnation]: used to create the molecule and, by default, the concentration. + * - [node]: the target [Node] that will receive the concentration. + * + * @receiver the molecule name (string) to create + * @param concentration the concentration value to assign; when omitted, a fresh + * concentration instance is created via [Incarnation.createConcentration]. + */ + context(incarnation: Incarnation, node: Node) + operator fun String.invoke(concentration: T = incarnation.createConcentration()) = + incarnation.createMolecule(this)(concentration) + + /** + * Creates a concentration value using the current [Incarnation]. + * + * This is a convenience wrapper around [Incarnation.createConcentration] to keep DSL code concise. + * + * @param origin an optional value used by the [Incarnation] to derive the concentration. + * @return a concentration instance of type [T]. + */ + context(incarnation: Incarnation) + fun concentrationOf(origin: Any?): T = incarnation.createConcentration(origin) + + /** + * Assigns a default concentration for this [Molecule] to the current [Node]. + * + * This operator invokes the parameterless molecule invoker, which in turn + * creates a default concentration via [Incarnation.createConcentration] and assigns + * it to the current [Node]. + * + * Context receivers: + * - [incarnation]: used to create the default concentration + * - [Node]: the target node + * + * @receiver the molecule whose default concentration will be set on the current node + */ + context(incarnation: Incarnation, _: Node) + operator fun Molecule.unaryMinus() = this() + + /** + * Create a [Molecule] using its name and assign a default concentration to the current [Node]. + * + * This is equivalent to calling the string-based invoker with no explicit concentration + * and therefore creates and assigns a default concentration via the current [Incarnation]. + * + * Context receivers: + * - [incarnation]: used to create the molecule and its default concentration + * - [Node]: the target node + * + * @receiver the molecule name to create and set with its default concentration + */ + context(incarnation: Incarnation, _: Node) + operator fun String.unaryMinus() = this() +} diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/DSLLoader.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/DSLLoader.kt new file mode 100644 index 0000000000..f39778df8c --- /dev/null +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/DSLLoader.kt @@ -0,0 +1,187 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary.kotlindsl + +import it.unibo.alchemist.boundary.DependentVariable +import it.unibo.alchemist.boundary.Exporter +import it.unibo.alchemist.boundary.Extractor +import it.unibo.alchemist.boundary.Launcher +import it.unibo.alchemist.boundary.Loader +import it.unibo.alchemist.boundary.OutputMonitor +import it.unibo.alchemist.boundary.Variable +import it.unibo.alchemist.boundary.exporters.GlobalExporter +import it.unibo.alchemist.boundary.launchers.DefaultLauncher +import it.unibo.alchemist.core.Engine +import it.unibo.alchemist.core.Simulation +import it.unibo.alchemist.model.Environment +import it.unibo.alchemist.model.Incarnation +import it.unibo.alchemist.model.Node +import it.unibo.alchemist.model.Position +import it.unibo.alchemist.model.environments.EmptyEnvironment +import java.io.Serializable +import kotlin.properties.ReadOnlyProperty +import org.apache.commons.math3.random.MersenneTwister +import org.apache.commons.math3.random.RandomGenerator +import org.slf4j.LoggerFactory + +internal class DSLLoader, I : Incarnation>( + private val incarnation: I, + private val simulationConfiguration: context(I) SimulationContext.() -> Unit, +) : Loader { + + private val logger = LoggerFactory.getLogger("Alchemist Kotlin DSL Loader") + override var constants: Map = emptyMap() + override val remoteDependencies: List get() = emptyList() + override var launcher: Launcher = DefaultLauncher() + override val dependentVariables: Map> = emptyMap() + override var variables: Map> = emptyMap() + val defaultEnvironment = getWithTyped(emptyMap()) + + @Suppress("UNCHECKED_CAST") + override fun > getWith(values: Map): Simulation = + (if (values.isEmpty()) defaultEnvironment else getWithTyped(values)) as Simulation + + private fun getWithTyped(values: Map): Simulation { + logger.debug("Creating simulation with variables: {}", values) + val loader = this + var theEnvironment: Environment = EmptyEnvironment(incarnation) + val exporters = mutableListOf>() + val monitors = mutableListOf>() + val instancedVariables: Map by lazy { + variables.mapValues { + values.getOrDefault(it.key, it.value.default) + } + } + context(incarnation) { + object : SimulationContext { + + var launcherHasNotBeenSet = true + var environmentHasNotBeenSet = true + lateinit var simulationRNG: RandomGenerator + lateinit var scenarioRNG: RandomGenerator + + override fun > environment( + environment: E, + environmentConfiguration: context(E) EnvironmentContext.() -> Unit, + ) { + if (!this::simulationRNG.isInitialized) { + simulationRNG = MersenneTwister(0L) + } + if (!this::scenarioRNG.isInitialized) { + scenarioRNG = MersenneTwister(0L) + } + check(environmentHasNotBeenSet) { + "Only one environment can be set, currently set: $theEnvironment" + } + theEnvironment = environment + environmentHasNotBeenSet = false + context(environment, simulationRNG) { + check(contextOf() == simulationRNG) + EnvironmentContext { deploymentsConfiguration -> + check(contextOf() == simulationRNG) + context(scenarioRNG) { + DeploymentsContext { deployment, nodeFactory, block -> + check(contextOf() == scenarioRNG) + deployment.forEach { currentNodePosition -> + context(simulationRNG) { + check(contextOf() == simulationRNG) + val node: Node = nodeFactory(currentNodePosition) + context(node) { + object : DeploymentContext { + override val position: P get() = currentNodePosition + }.block() + } + environment.addNode(node, currentNodePosition) + } + } + }.deploymentsConfiguration() + } + }.environmentConfiguration() + } + } + + override fun exportWith(exporter: Exporter, block: ExporterContext.() -> Unit) { + val extractors = mutableListOf>() + object : ExporterContext { + override fun Extractor<*>.unaryMinus() { + extractors += this + } + }.block() + exporter.bindDataExtractors(extractors) + exporters += exporter + } + + override fun scenarioRandomGenerator(randomGenerator: RandomGenerator) { + checkSeedCanBeSet() + scenarioRNG = randomGenerator + } + + override fun simulationRandomGenerator(randomGenerator: RandomGenerator) { + checkSeedCanBeSet() + simulationRNG = randomGenerator + } + + override fun monitor(monitor: OutputMonitor) { + monitors += monitor + } + + override fun launcher(launcher: Launcher) { + check(launcherHasNotBeenSet) { + "Only one launcher can be set, currently set: ${loader.launcher}" + } + launcherHasNotBeenSet = false + loader.launcher = launcher + } + + override fun variable(variable: Variable) = + VariableDelegateFactory { _, property -> + var registeredVariable = variables[property.name] + if (registeredVariable == null) { + logger.debug("Registering variable '{}' with definition: {}", property.name, variable) + variables += property.name to variable + registeredVariable = variable + } + check(registeredVariable == variable) { + "Error: variable '${property.name}' was defined multiple times. " + + "The first definition binds to: $registeredVariable, " + + "while the second definition attempts to bind to: $variable." + } + ReadOnlyProperty { _, _ -> + @Suppress("UNCHECKED_CAST") + instancedVariables[property.name] as V + } + } + + fun checkSeedCanBeSet() { + check(environmentHasNotBeenSet) { + "Seeds must be set before the environment is defined to preserve reproducibility" + } + } + }.simulationConfiguration() + } + check(variables.keys.containsAll(values.keys)) { + val undefinedVariables = values.keys - variables.keys + """ + The following variables provided in input have no corresponding variable defined in the simulation context: + $undefinedVariables + The available variables are: ${variables.keys} + """.trimIndent() + } + exporters.forEach { exporter -> + exporter.bindVariables(instancedVariables) + } + val theSimulation: Simulation = Engine(theEnvironment) + if (exporters.isNotEmpty()) { + theSimulation.addOutputMonitor(GlobalExporter(exporters)) + } + monitors.forEach { monitor -> theSimulation.addOutputMonitor(monitor) } + return theSimulation + } +} diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/DeploymentContext.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/DeploymentContext.kt new file mode 100644 index 0000000000..38be43c3c3 --- /dev/null +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/DeploymentContext.kt @@ -0,0 +1,169 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary.kotlindsl + +import it.unibo.alchemist.model.Environment +import it.unibo.alchemist.model.Incarnation +import it.unibo.alchemist.model.Node +import it.unibo.alchemist.model.NodeProperty +import it.unibo.alchemist.model.Position +import it.unibo.alchemist.model.Reaction +import it.unibo.alchemist.model.TimeDistribution +import org.apache.commons.math3.random.RandomGenerator + +/** + * DSL scope for configuring a single node during a deployment. + * + * A [DeploymentContext] is typically entered once per deployed position, and provides: + * - the target [position] being deployed; + * - utilities to create and attach reactions (optionally configuring actions/conditions); + * - utilities to initialize node contents and attach [NodeProperty] instances. + * + * Most operations rely on Kotlin context receivers, so the relevant [Incarnation], [Environment], + * [RandomGenerator], and [Node] instances are expected to be available in the surrounding scope. + * + * @param T the concentration type used by the simulation. + * @param P the position type used by the environment. + */ +interface DeploymentContext> { + + /** + * The position where the node is being deployed. + * + * This is the position currently produced by the deployment strategy and that will be passed to + * the environment insertion logic. + */ + val position: P + + /** + * Enters a [TimeDistributionContext] bound to the provided [timeDistribution]. + * + * The [block] is executed with [timeDistribution] as a context receiver, enabling reaction definition + * utilities that share this distribution. + * + * @param timeDistribution the time distribution to use for reactions configured inside [block]. + * @param block the configuration block for defining reactions sharing [timeDistribution]. + */ + fun > timeDistribution( + timeDistribution: TimeDistributionType, + block: context(TimeDistributionType) TimeDistributionContext.() -> Unit, + ) { + context(timeDistribution) { + object : TimeDistributionContext { }.block() + } + } + + /** + * Enters a [TimeDistributionContext] using a time distribution derived from [parameter]. + * + * If [parameter] is already a [TimeDistribution], it is used as-is. Otherwise, a new distribution is created + * via [Incarnation.createTimeDistribution], passing [parameter] through to the incarnation. + * + * @param parameter either a concrete [TimeDistribution] instance, an incarnation-specific descriptor, or `null`. + * @param block the configuration block for defining reactions sharing the selected time distribution. + */ + @Suppress("UNCHECKED_CAST") + context( + incarnation: Incarnation, + randomGenerator: RandomGenerator, + environment: Environment, + node: Node + ) + fun withTimeDistribution( + parameter: Any? = null, + block: context(TimeDistribution) TimeDistributionContext.() -> Unit, + ) = timeDistribution( + parameter as? TimeDistribution ?: makeTimeDistribution(parameter), + block, + ) + + /** + * Convenience utility to create and register a reaction on the current node. + * + * A time distribution is obtained through [withTimeDistribution], using [timeDistribution] as parameter. + * The reaction is then created via [Incarnation.createReaction], using [program] as an incarnation-specific + * descriptor (or `null` to delegate the choice to the incarnation), and finally registered on the node. + * + * The optional [block] can be used to attach actions and conditions through [ActionableContext]. + * + * @param program an incarnation-specific reaction/program descriptor, possibly `null`. + * @param timeDistribution + * either a concrete [TimeDistribution] instance, an incarnation-specific descriptor, or `null`. + * @param block an optional configuration block for actions and conditions. + */ + context( + incarnation: Incarnation, + randomGenerator: RandomGenerator, + environment: Environment, + node: Node + ) + fun program( + program: String? = null, + timeDistribution: Any? = null, + block: context(Reaction) ActionableContext.() -> Unit = { }, + ) = withTimeDistribution(timeDistribution) { + program(program, block) + } + + /** + * Configures the initial contents of the current node. + * + * The [block] is executed with the current [Incarnation] available as a context receiver and with + * [ContentContext] as receiver, enabling concise content creation and assignment utilities. + * + * @param block the configuration block for node contents. + */ + context(_: Incarnation, _: Node) + fun contents(block: context(Incarnation) ContentContext.() -> Unit) { + ContentContext.block() + } + + /** + * Attaches a [NodeProperty] to the current node. + * + * @param property the property instance to add to the node. + */ + context(node: Node) + fun nodeProperty(property: NodeProperty) { + node.addProperty(property) + } + + private companion object { + + context( + incarnation: Incarnation, + randomGenerator: RandomGenerator, + environment: Environment, + node: Node + ) + private fun > makeTimeDistribution(parameter: Any? = null): TimeDistribution = + incarnation.createTimeDistribution( + randomGenerator, + environment, + node, + parameter, + ) + + context( + incarnation: Incarnation, + randomGenerator: RandomGenerator, + environment: Environment, + node: Node, + timeDistribution: TimeDistribution + ) + private fun > makeReaction(descriptor: String?): Reaction = incarnation.createReaction( + randomGenerator, + environment, + node, + timeDistribution, + null, + ) + } +} diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/DeploymentsContext.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/DeploymentsContext.kt new file mode 100644 index 0000000000..30a36ab4c1 --- /dev/null +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/DeploymentsContext.kt @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary.kotlindsl + +import it.unibo.alchemist.model.Deployment +import it.unibo.alchemist.model.Environment +import it.unibo.alchemist.model.Incarnation +import it.unibo.alchemist.model.Node +import it.unibo.alchemist.model.Position +import org.apache.commons.math3.random.RandomGenerator + +/** + * DSL scope for instantiating and configuring nodes produced by a [Deployment]. + * + * A [Deployment] enumerates a set of positions. For each produced position, an implementation of this context is + * expected to: + * - create a [Node] (either through a caller-provided factory or via an [Incarnation]); + * - enter a [DeploymentContext] to configure node contents, reactions, and properties; + * - (typically) insert the configured node into the current [Environment]. + * + * This interface is based on Kotlin context receivers: the relevant [RandomGenerator] and [Environment] (and, in the + * overload that creates nodes via incarnation, also the [Incarnation]) must be available in the surrounding scope. + */ +fun interface DeploymentsContext> { + + /** + * Deploys nodes according to the provided [deployment], creating each node through [nodeFactory] and + * configuring it through [block]. + * + * The [block] is invoked once per deployed position, after the node has been created and while a suitable DSL scope + * is active. Within [block], a [DeploymentContext] is provided as receiver, and the current [RandomGenerator] and + * the created [Node] are available as context receivers. + * + * @param deployment the deployment strategy producing the positions where nodes should be created. + * @param nodeFactory a factory used to create a node for each deployed position. + * @param block an optional per-node configuration block. + */ + context(randomGenerator: RandomGenerator) + fun deploy( + deployment: Deployment

, + nodeFactory: (P) -> Node, + block: context(RandomGenerator, Node) DeploymentContext.() -> Unit, + ) + + /** + * Deploys nodes according to the provided [deployment], creating each node via the current [incarnation] and + * optionally configuring it through [block]. + * + * Node creation is delegated to [Incarnation.createNode], using the current [randomGenerator] and [environment]. + * The optional [nodeParameter] is forwarded to the incarnation and its meaning depends on the concrete incarnation. + * + * @param deployment the deployment strategy producing the positions where nodes should be created. + * @param nodeParameter an optional incarnation-specific node descriptor, possibly `null`. + * @param block an optional per-node configuration block. + */ + context(incarnation: Incarnation, randomGenerator: RandomGenerator, environment: Environment) + fun deploy( + deployment: Deployment

, + nodeParameter: String? = null, + block: context(RandomGenerator, Node) DeploymentContext.() -> Unit = {}, + ) = deploy(deployment, { incarnation.createNode(randomGenerator, environment, nodeParameter) }, block) +} diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/EnvironmentContext.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/EnvironmentContext.kt new file mode 100644 index 0000000000..9808abe362 --- /dev/null +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/EnvironmentContext.kt @@ -0,0 +1,131 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary.kotlindsl + +import it.unibo.alchemist.model.Environment +import it.unibo.alchemist.model.GlobalReaction +import it.unibo.alchemist.model.Incarnation +import it.unibo.alchemist.model.Layer +import it.unibo.alchemist.model.LinkingRule +import it.unibo.alchemist.model.Molecule +import it.unibo.alchemist.model.Position +import it.unibo.alchemist.model.TerminationPredicate +import it.unibo.alchemist.model.TimeDistribution +import it.unibo.alchemist.model.linkingrules.CombinedLinkingRule +import it.unibo.alchemist.model.linkingrules.NoLinks +import org.apache.commons.math3.random.RandomGenerator + +/** + * DSL scope for configuring an [Environment] within a simulation scenario. + * + * This context groups environment-level configuration concerns, including: + * - deploying nodes through a [DeploymentsContext]; + * - registering global reactions; + * - registering layers (molecule → [Layer] mappings); + * - configuring the environment network model ([LinkingRule]); + * - registering termination predicates. + * + * Most operations rely on Kotlin context receivers: the relevant [Environment] (and, when applicable, + * the [Incarnation] and/or [RandomGenerator]) must be available in the surrounding scope. + * + * @param T the concentration type used by the simulation. + * @param P the position type used by the environment. + */ +fun interface EnvironmentContext> { + + /** + * Enters the node deployment DSL. + * + * The provided [deploymentsConfiguration] is executed + * with a [RandomGenerator] available as a context receiver and with + * [DeploymentsContext] as receiver, allowing the scenario to create and configure nodes produced by + * one or more [it.unibo.alchemist.model.Deployment] strategies. + * + * Implementations are expected to ensure a consistent usage of random generators for reproducibility. + * + * @param deploymentsConfiguration the deployment configuration block. + */ + fun deployments(deploymentsConfiguration: context(RandomGenerator) DeploymentsContext.() -> Unit) + + /** + * Registers a [GlobalReaction] in the current [Environment] and optionally configures it. + * + * The [block], if provided, is executed with [globalReaction] as a context receiver and with + * [ActionableContext] as receiver, enabling the addition of actions and conditions. + * + * The [timeDistribution] parameter is currently not used by this function. The expectation is that + * the provided [globalReaction] is already configured with the intended scheduling strategy (if any), + * or that the distribution is otherwise bound externally. + * + * @param timeDistribution a time distribution associated with the global program; currently ignored. + * @param globalReaction the global reaction to register. + * @param block an optional configuration block for actions and conditions. + */ + context(environment: Environment) + fun globalProgram( + timeDistribution: TimeDistribution, + globalReaction: GlobalReaction, + block: context(GlobalReaction) ActionableContext.() -> Unit = {}, + ) { + context(globalReaction) { + ActionableContext.block() + } + environment.addGlobalReaction(globalReaction) + } + + /** + * Registers a [Layer] associated with the given [molecule] in the current [Environment]. + * + * Layers are used to provide environment-wide values (e.g., fields or maps) that can be queried by nodes + * or reactions via the associated molecule. + * + * @param molecule the molecule acting as key for the layer. + * @param layer the layer instance to register. + */ + context(environment: Environment) + fun layer(molecule: Molecule, layer: Layer) = environment.addLayer(molecule, layer) + + /** + * Registers a [Layer] associated with a molecule identified by [molecule] in the current [Environment]. + * + * The molecule is created via [Incarnation.createMolecule]. The meaning of a `null` molecule name, if any, + * depends on the concrete incarnation. + * + * @param molecule the molecule name, possibly `null` (incarnation-dependent semantics). + * @param layer the layer instance to register. + */ + context(incarnation: Incarnation, environment: Environment) + fun layer(molecule: String? = null, layer: Layer) = layer(incarnation.createMolecule(molecule), layer) + + /** + * Configures (or extends) the environment network model by adding the provided [model]. + * + * The current linking rule is updated as follows: + * - if the environment currently uses [NoLinks], it is replaced with [model]; + * - if the environment currently uses [CombinedLinkingRule], [model] is appended to its sub-rules; + * - otherwise, the existing rule and [model] are combined into a new [CombinedLinkingRule]. + * + * @param model the linking rule to set or append. + */ + context(environment: Environment) + fun networkModel(model: LinkingRule) = when (val currentRule = environment.linkingRule) { + is NoLinks -> environment.linkingRule = model + is CombinedLinkingRule -> environment.linkingRule = CombinedLinkingRule(currentRule.subRules + model) + else -> environment.linkingRule = CombinedLinkingRule(listOf(environment.linkingRule, model)) + } + + /** + * Registers a [TerminationPredicate] in the current [Environment]. + * + * @param terminator the termination predicate to add. + */ + context(environment: Environment) + fun terminator(terminator: TerminationPredicate) = environment.addTerminator(terminator) +} diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/ExporterContext.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/ExporterContext.kt new file mode 100644 index 0000000000..7fb2537787 --- /dev/null +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/ExporterContext.kt @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary.kotlindsl + +import it.unibo.alchemist.boundary.Extractor +import it.unibo.alchemist.model.Position + +/** + * DSL scope for configuring exporters by collecting [Extractor] instances. + * + * Implementations of this context are expected to translate unary-minus applications on extractors into + * registrations/collection operations (e.g., adding the extractor to a list that will later be bound to + * an exporter). + * + * The type parameters are carried to keep the DSL aligned with the simulation types, even though this + * context only deals with extractors at the boundary layer. + * + * @param T the concentration type used by the simulation. + * @param P the position type used by the environment. + */ +interface ExporterContext> { + + /** + * Registers this [Extractor] in the current exporter configuration. + * + * This operator is intended to provide concise DSL syntax, where applying unary minus to an extractor + * means "include this extractor among those used by the exporter". + */ + operator fun Extractor<*>.unaryMinus() +} diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/PositionBasedFilterExtensions.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/PositionBasedFilterExtensions.kt new file mode 100644 index 0000000000..8fa353ffc6 --- /dev/null +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/PositionBasedFilterExtensions.kt @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary.kotlindsl + +import it.unibo.alchemist.model.Position +import it.unibo.alchemist.model.PositionBasedFilter + +/** + * Enables the Kotlin `in` operator for [PositionBasedFilter] instances. + * + * This is a convenience extension that allows writing `position in filter` instead of + * `filter.contains(position)`, even when the filter is available with a star-projected type. + * + * Since [PositionBasedFilter] is generic in the position type, this operator performs an unchecked cast to + * [PositionBasedFilter]<[P]>. The caller is responsible for ensuring that the runtime filter expects positions + * compatible with [P]; otherwise, the underlying implementation may throw at runtime or behave unexpectedly. + * + * @param P the position type. + * @param position the position being tested for inclusion. + * @return `true` if [position] is contained in this filter, `false` otherwise. + */ +@Suppress("UNCHECKED_CAST") +operator fun

> PositionBasedFilter<*>.contains(position: P): Boolean = + (this as PositionBasedFilter

).contains(position) diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/SimulationContext.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/SimulationContext.kt new file mode 100644 index 0000000000..6eeabe53de --- /dev/null +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/SimulationContext.kt @@ -0,0 +1,138 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary.kotlindsl + +import it.unibo.alchemist.boundary.Exporter +import it.unibo.alchemist.boundary.Launcher +import it.unibo.alchemist.boundary.OutputMonitor +import it.unibo.alchemist.boundary.Variable +import it.unibo.alchemist.model.Environment +import it.unibo.alchemist.model.Incarnation +import it.unibo.alchemist.model.Position +import java.io.Serializable +import org.apache.commons.math3.random.MersenneTwister +import org.apache.commons.math3.random.RandomGenerator + +/** + * Top-level DSL scope for defining a simulation scenario. + * + * A [SimulationContext] is responsible for collecting all scenario components that are needed to build a runnable + * simulation, including: + * - the [Environment] and its configuration (deployments, layers, global programs, network model, terminators); + * - exporters and output monitors; + * - the [Launcher] used to run the simulation; + * - scenario variables, exposed as delegated read-only properties. + * + * Implementations typically distinguish between two random generators: + * - a *scenario* generator, used while constructing the scenario (e.g., during deployments or initialization); + * - a *simulation* generator, used for components that require randomness tied to simulation execution. + * + * @param T the concentration type used by the simulation. + * @param P the position type used by the environment. + */ +interface SimulationContext> { + + /** + * Sets the simulation [environment] and configures it through [environmentConfiguration]. + * + * The [environmentConfiguration] is executed with the provided environment as a context receiver, + * and with an [EnvironmentContext] + * as receiver, enabling environment-level configuration (deployments, layers, global programs, linking rules, + * terminators). + * + * @param environment the environment instance to use for the simulation. + * @param environmentConfiguration the environment configuration block. + */ + fun > environment( + environment: E, + environmentConfiguration: context(E) EnvironmentContext.() -> Unit, + ) + + /** + * Registers an [Exporter] and configures which [it.unibo.alchemist.boundary.Extractor] instances it should use. + * + * The [block] is executed with an [ExporterContext] receiver, typically allowing extractors to be collected via + * unary-minus notation and then bound to the exporter. + * + * @param exporter the exporter to register. + * @param block the exporter configuration block. + */ + fun exportWith(exporter: Exporter, block: ExporterContext.() -> Unit) + + /** + * Sets the random generator used during scenario construction. + * + * The scenario random generator is meant for operations that happen while building the scenario configuration, + * such as deployments and initialization steps performed before the simulation starts. + * + * @param randomGenerator the random generator to use for scenario construction. + */ + fun scenarioRandomGenerator(randomGenerator: RandomGenerator) + + /** + * Sets the scenario random generator to a [MersenneTwister] initialized with [seed]. + * + * This is a convenience method equivalent to calling [scenarioRandomGenerator] with a new [MersenneTwister]. + * + * @param seed the seed to initialize the generator. + */ + fun scenarioSeed(seed: Long) = scenarioRandomGenerator(MersenneTwister(seed)) + + /** + * Sets the random generator used for simulation-related components. + * + * This generator is intended for components created as part of the scenario that require randomness associated + * with simulation execution (e.g., reactions/time distributions or other simulation-time behaviors), + * depending on the implementation. + * + * @param randomGenerator the random generator to use for simulation-related components. + */ + fun simulationRandomGenerator(randomGenerator: RandomGenerator) + + /** + * Sets the simulation random generator to a [MersenneTwister] initialized with [seed]. + * + * This is a convenience method equivalent to calling [simulationRandomGenerator] with a new [MersenneTwister]. + * + * @param seed the seed to initialize the generator. + */ + fun simulationSeed(seed: Long) = simulationRandomGenerator(MersenneTwister(seed)) + + /** + * Registers an [OutputMonitor] to observe the simulation execution. + * + * @param monitor the monitor to add. + */ + fun monitor(monitor: OutputMonitor) + + /** + * Sets the [Launcher] used to run the simulation. + * + * @param launcher the launcher to use. + */ + fun launcher(launcher: Launcher) + + /** + * Declares a scenario [Variable] and returns a read-only property delegate that provides its value. + * + * Implementations typically associate the variable with the name of the delegated property and resolve its value + * from the runtime-provided variable map, falling back to [Variable.default] when no override is provided. + * + * @param variable the variable definition. + * @return a property delegate providing the resolved variable value. + */ + fun variable(variable: Variable): VariableDelegateFactory + + /** + * Creates a concentration value using the current [Incarnation]. + */ + context(incarnation: Incarnation) + fun concentrationOf(concentration: Any?): T = incarnation.createConcentration(concentration) +} diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/SimulationContextExtensions.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/SimulationContextExtensions.kt new file mode 100644 index 0000000000..8d8bdcaf7f --- /dev/null +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/SimulationContextExtensions.kt @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary.kotlindsl + +import it.unibo.alchemist.model.Incarnation +import it.unibo.alchemist.model.environments.Continuous2DEnvironment +import it.unibo.alchemist.model.environments.continuous2DEnvironment +import it.unibo.alchemist.model.positions.Euclidean2DPosition + +/** + * Convenience overload that installs a default [Continuous2DEnvironment] and configures it via [block]. + * + * This function is available only when an [Incarnation] for [Euclidean2DPosition] is in scope, and it delegates to + * [SimulationContext.environment] by creating a new environment through [continuous2DEnvironment]. + * + * @param block the environment configuration block executed with the created environment as a context receiver. + */ +context(_: Incarnation) +fun SimulationContext.environment( + block: context(Continuous2DEnvironment) EnvironmentContext.() -> Unit, +) = environment(continuous2DEnvironment(), block) diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/TerminatorsContext.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/TerminatorsContext.kt new file mode 100644 index 0000000000..4948d2e4e9 --- /dev/null +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/TerminatorsContext.kt @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary.kotlindsl + +import it.unibo.alchemist.model.Environment +import it.unibo.alchemist.model.Position +import it.unibo.alchemist.model.TerminationPredicate + +/** + * DSL utilities for registering [TerminationPredicate] instances in an [Environment]. + * + * This context is meant to be used with Kotlin context receivers, requiring an [Environment] to be available + * in the surrounding scope. The unary minus operator provides a compact notation for adding terminators. + */ +object TerminatorsContext { + + /** + * Registers this [TerminationPredicate] into the current [Environment]. + * + * This operator enables concise DSL statements by interpreting `-predicate` as + * "add this predicate as a terminator to the current environment". + * + * @receiver the termination predicate to register. + */ + context(environment: Environment) + operator fun > TerminationPredicate.unaryMinus() = environment.addTerminator(this) +} diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/TimeDistributionContext.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/TimeDistributionContext.kt new file mode 100644 index 0000000000..6276819caa --- /dev/null +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/TimeDistributionContext.kt @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary.kotlindsl + +import it.unibo.alchemist.model.Environment +import it.unibo.alchemist.model.Incarnation +import it.unibo.alchemist.model.Node +import it.unibo.alchemist.model.Position +import it.unibo.alchemist.model.Reaction +import it.unibo.alchemist.model.TimeDistribution +import org.apache.commons.math3.random.RandomGenerator + +/** + * DSL scope for defining one or more [Reaction]s that share a common [TimeDistribution]. + * + * This scope is meant to be used via Kotlin context receivers: a [TimeDistribution] (and, for some operations, + * additional objects such as [Node], [Incarnation], [Environment], and [RandomGenerator]) must be available + * in the surrounding context. + * + * The provided helpers support two common workflows: + * - registering an already-built [Reaction] on the current [Node]; + * - creating a [Reaction] from an incarnation-specific program descriptor and registering it on the current [Node]. + * + * In both cases, an optional configuration block can be provided to attach [it.unibo.alchemist.model.Action]s + * and [it.unibo.alchemist.model.Condition]s via [ActionableContext]. + */ +interface TimeDistributionContext> { + + /** + * Provides access to the current [TimeDistribution] context receiver. + * + * This property mainly exists to allow explicit access to the time distribution from within nested DSL blocks, + * without having to refer to the context receiver name directly. + */ + context(timeDistribution: TimeDistribution) + val timeDistribution: TimeDistribution get() = timeDistribution + + /** + * Registers an existing [reaction] on the current [Node] and optionally configures it. + * + * The [block], if provided, is executed in a scope where: + * - the [reaction] is available as a context receiver, and + * - [ActionableContext] is the receiver, enabling the addition of actions and conditions. + * + * After the configuration block is executed, the reaction is added to the current node via [Node.addReaction]. + * + * @param reaction the reaction to configure and register. + * @param block an optional configuration block for actions and conditions. + */ + context(node: Node) + fun > program(reaction: R, block: context(R) ActionableContext.() -> Unit = { }) { + context(reaction) { + ActionableContext.block() + } + node.addReaction(reaction) + } + + /** + * Creates a [Reaction] from an incarnation-specific program descriptor and registers it on the current [Node]. + * + * The [program] parameter is forwarded to [Incarnation.createReaction] and its meaning depends on the + * concrete incarnation in use. A `null` descriptor delegates the choice of the program to the incarnation. + * + * The created reaction uses the current [timeDistribution] context receiver, and is created within the + * current [environment], using the provided [randomGenerator], and targeting the current [node]. + * + * The optional [block] is applied as described in [program]([Reaction], block) before the reaction is added + * to the node. + * + * @param program the incarnation-specific reaction/program descriptor, possibly `null`. + * @param block an optional configuration block for actions and conditions. + */ + context( + incarnation: Incarnation, + randomGenerator: RandomGenerator, + environment: Environment, + node: Node, + timeDistribution: TimeDistribution + ) + fun program(program: String?, block: context(Reaction) ActionableContext.() -> Unit = { }) = program( + incarnation.createReaction(randomGenerator, environment, node, timeDistribution, program), + block, + ) +} diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/VariableDelegateFactory.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/VariableDelegateFactory.kt new file mode 100644 index 0000000000..22ea30db41 --- /dev/null +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/kotlindsl/VariableDelegateFactory.kt @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary.kotlindsl + +import java.io.Serializable +import kotlin.properties.ReadOnlyProperty +import kotlin.reflect.KProperty + +/** + * Factory for variable delegates, which are used to implement the `by variable(...)` syntax in the DSL. + */ +fun interface VariableDelegateFactory { + + /** + * Provides a delegate for a variable property. + */ + operator fun provideDelegate(thisRef: Any?, property: KProperty<*>): ReadOnlyProperty +} diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/loader/LoadingSystem.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/loader/LoadingSystem.kt index cb079c2bcc..4b53e86492 100644 --- a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/loader/LoadingSystem.kt +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/loader/LoadingSystem.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2023, Danilo Pianini and contributors + * Copyright (C) 2010-2026, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -13,7 +13,7 @@ import it.unibo.alchemist.boundary.Exporter import it.unibo.alchemist.boundary.Loader import it.unibo.alchemist.boundary.exporters.GlobalExporter import it.unibo.alchemist.boundary.loader.LoadingSystemLogger.logger -import it.unibo.alchemist.boundary.loader.syntax.DocumentRoot +import it.unibo.alchemist.boundary.loader.syntax.AlchemistYamlSyntax import it.unibo.alchemist.core.Engine import it.unibo.alchemist.core.Simulation import it.unibo.alchemist.model.Deployment @@ -70,23 +70,23 @@ internal abstract class LoadingSystem(private val originalContext: Context, priv root = SimulationModel.inject(context, root) logger.debug("Complete simulation model: {}", root) // SEEDS - val (scenarioRNG, simulationRNG) = SimulationModel.visitSeeds(context, root[DocumentRoot.seeds]) + val (scenarioRNG, simulationRNG) = SimulationModel.visitSeeds(context, root[AlchemistYamlSyntax.seeds]) setCurrentRandomGenerator(simulationRNG) // INCARNATION - val incarnation = SimulationModel.visitIncarnation(root[DocumentRoot.incarnation]) + val incarnation = SimulationModel.visitIncarnation(root[AlchemistYamlSyntax.incarnation]) contextualize(incarnation) registerImplicit(incarnation::createMolecule) registerImplicit(incarnation::createConcentration) // ENVIRONMENT val environment: Environment = - SimulationModel.visitEnvironment(incarnation, context, root[DocumentRoot.environment]) + SimulationModel.visitEnvironment(incarnation, context, root[AlchemistYamlSyntax.environment]) logger.info("Created environment: {}", environment) contextualize(environment) // GLOBAL PROGRAMS loadGlobalProgramsOnEnvironment(simulationRNG, incarnation, environment, root) // LAYERS val layers: List>> = - SimulationModel.visitLayers(incarnation, context, root[DocumentRoot.layers]) + SimulationModel.visitLayers(incarnation, context, root[AlchemistYamlSyntax.layers]) layers .groupBy { it.first } .mapValues { (_, pair) -> pair.map { it.second } } @@ -101,19 +101,19 @@ internal abstract class LoadingSystem(private val originalContext: Context, priv } // LINKING RULE val linkingRule = - SimulationModel.visitLinkingRule(context, root.getOrEmptyMap(DocumentRoot.LINKING_RULES)) + SimulationModel.visitLinkingRule(context, root.getOrEmptyMap(AlchemistYamlSyntax.LINKING_RULES)) environment.linkingRule = linkingRule contextualize(linkingRule) // MONITORS - val monitors = SimulationModel.visitOutputMonitors(context, root[DocumentRoot.monitors]) + val monitors = SimulationModel.visitOutputMonitors(context, root[AlchemistYamlSyntax.monitors]) // DEPLOYMENTS setCurrentRandomGenerator(scenarioRNG) - val displacementsSource = root.getOrEmpty(DocumentRoot.deployments) + val displacementsSource = root.getOrEmpty(AlchemistYamlSyntax.deployments) val deploymentDescriptors: List> = SimulationModel.visitRecursively( context, displacementsSource, - syntax = DocumentRoot.Deployment, + syntax = AlchemistYamlSyntax.Deployment, ) { element -> (element as? Map<*, *>)?.let { _ -> setCurrentRandomGenerator(scenarioRNG) @@ -124,10 +124,12 @@ internal abstract class LoadingSystem(private val originalContext: Context, priv } } setCurrentRandomGenerator(simulationRNG) - val terminators: List> = - SimulationModel.visitRecursively(context, root.getOrEmpty(DocumentRoot.terminate)) { terminator -> - (terminator as? Map<*, *>)?.let { SimulationModel.visitBuilding(context, it) } - } + val terminators: List> = SimulationModel.visitRecursively( + context, + root.getOrEmpty(AlchemistYamlSyntax.terminate), + ) { terminator -> + (terminator as? Map<*, *>)?.let { SimulationModel.visitBuilding(context, it) } + } terminators.forEach(environment::addTerminator) if (deploymentDescriptors.isEmpty()) { logger.warn("There are no displacements in the specification, the environment won't have any node") @@ -135,21 +137,19 @@ internal abstract class LoadingSystem(private val originalContext: Context, priv logger.debug("Deployment descriptors: {}", deploymentDescriptors) } // EXPORTS - val exporters = - SimulationModel.visitRecursively>( - context, - root.getOrEmpty(DocumentRoot.export), - ) { - SimulationModel.visitSingleExporter(incarnation, context, it) - } + val exporters = SimulationModel.visitRecursively>( + context, + root.getOrEmpty(AlchemistYamlSyntax.export), + ) { + SimulationModel.visitSingleExporter(incarnation, context, it) + } exporters.forEach { it.bindVariables(variableValues) } // ENGINE - val engineDescriptor = root[DocumentRoot.engine] - val engine: Simulation = - SimulationModel - .visitBuilding>(context, engineDescriptor) - ?.getOrThrow() - ?: Engine(environment) + val engineDescriptor = root[AlchemistYamlSyntax.engine] + val engine: Simulation = SimulationModel + .visitBuilding>(context, engineDescriptor) + ?.getOrThrow() + ?: Engine(environment) // Attach monitors monitors.forEach(engine::addOutputMonitor) // Attach data exporters @@ -165,29 +165,30 @@ internal abstract class LoadingSystem(private val originalContext: Context, priv environment: Environment, descriptor: Map<*, *>, ) { - val environmentDescriptor = descriptor[DocumentRoot.environment] + val environmentDescriptor = descriptor[AlchemistYamlSyntax.environment] if (environmentDescriptor is Map<*, *>) { - val programDescriptor = environmentDescriptor.getOrEmpty(DocumentRoot.Environment.GLOBAL_PROGRAMS) - val globalPrograms = - SimulationModel.visitRecursively( - context, - programDescriptor, - DocumentRoot.Environment.GlobalProgram, - ) { program -> - requireNotNull(program) { - "null is not a valid program in $descriptor." + - DocumentRoot.Environment.GlobalProgram.guide - } - (program as? Map<*, *>)?.let { - SimulationModel - .visitProgram(randomGenerator, incarnation, environment, null, context, it) - ?.onSuccess { (_, actionable) -> - if (actionable is GlobalReaction) { - environment.addGlobalReaction(actionable) - } + val programDescriptor = environmentDescriptor.getOrEmpty( + AlchemistYamlSyntax.Environment.GLOBAL_PROGRAMS, + ) + val globalPrograms = SimulationModel.visitRecursively( + context, + programDescriptor, + AlchemistYamlSyntax.Environment.GlobalProgram, + ) { program -> + requireNotNull(program) { + "null is not a valid program in $descriptor." + + AlchemistYamlSyntax.Environment.GlobalProgram.guide + } + (program as? Map<*, *>)?.let { + SimulationModel + .visitProgram(randomGenerator, incarnation, environment, null, context, it) + ?.onSuccess { (_, actionable) -> + if (actionable is GlobalReaction) { + environment.addGlobalReaction(actionable) } - } + } } + } logger.debug("Global programs: {}", globalPrograms) } } @@ -224,15 +225,15 @@ internal abstract class LoadingSystem(private val originalContext: Context, priv nodePosition: P, descriptor: Map<*, *>, ) { - val programDescriptor = descriptor.getOrEmpty(DocumentRoot.Deployment.programs) + val programDescriptor = descriptor.getOrEmpty(AlchemistYamlSyntax.Deployment.programs) val programs = SimulationModel.visitRecursively( context, programDescriptor, - DocumentRoot.Deployment.Program, + AlchemistYamlSyntax.Deployment.Program, ) { program -> requireNotNull(program) { - "null is not a valid program in $descriptor. ${DocumentRoot.Deployment.Program.guide}" + "null is not a valid program in $descriptor. ${AlchemistYamlSyntax.Deployment.Program.guide}" } (program as? Map<*, *>)?.let { SimulationModel @@ -258,11 +259,11 @@ internal abstract class LoadingSystem(private val originalContext: Context, priv descriptor: Map<*, *>, ) { logger.debug("Processing deployment: {} with descriptor: {}", deployment, descriptor) - val nodeDescriptor = descriptor[DocumentRoot.Deployment.nodes] - if (descriptor.containsKey(DocumentRoot.Deployment.nodes)) { + val nodeDescriptor = descriptor[AlchemistYamlSyntax.Deployment.nodes] + if (descriptor.containsKey(AlchemistYamlSyntax.Deployment.nodes)) { requireNotNull(nodeDescriptor) { "Invalid node type descriptor: $nodeDescriptor" } if (nodeDescriptor is Map<*, *>) { - DocumentRoot.JavaType.validateDescriptor(nodeDescriptor) + AlchemistYamlSyntax.JavaType.validateDescriptor(nodeDescriptor) } } // ADDITIONAL LINKING RULES diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/loader/SimulationModel.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/loader/SimulationModel.kt index 79f3a37277..91d77fb7cd 100644 --- a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/loader/SimulationModel.kt +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/loader/SimulationModel.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2023, Danilo Pianini and contributors + * Copyright (C) 2010-2026, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -23,14 +23,14 @@ import it.unibo.alchemist.boundary.extractors.MoleculeReader import it.unibo.alchemist.boundary.extractors.Time import it.unibo.alchemist.boundary.launchers.DefaultLauncher import it.unibo.alchemist.boundary.loader.LoadingSystemLogger.logger -import it.unibo.alchemist.boundary.loader.syntax.DocumentRoot -import it.unibo.alchemist.boundary.loader.syntax.DocumentRoot.DependentVariable.formula as formulaKey -import it.unibo.alchemist.boundary.loader.syntax.DocumentRoot.DependentVariable.language as languageKey -import it.unibo.alchemist.boundary.loader.syntax.DocumentRoot.DependentVariable.timeout as timeoutKey -import it.unibo.alchemist.boundary.loader.syntax.DocumentRoot.Deployment.Program as ProgramSyntax -import it.unibo.alchemist.boundary.loader.syntax.DocumentRoot.Environment.GlobalProgram as GlobalProgramSyntax -import it.unibo.alchemist.boundary.loader.syntax.DocumentRoot.JavaType -import it.unibo.alchemist.boundary.loader.syntax.DocumentRoot.Layer as LayerSyntax +import it.unibo.alchemist.boundary.loader.syntax.AlchemistYamlSyntax +import it.unibo.alchemist.boundary.loader.syntax.AlchemistYamlSyntax.DependentVariable.formula as formulaKey +import it.unibo.alchemist.boundary.loader.syntax.AlchemistYamlSyntax.DependentVariable.language as languageKey +import it.unibo.alchemist.boundary.loader.syntax.AlchemistYamlSyntax.DependentVariable.timeout as timeoutKey +import it.unibo.alchemist.boundary.loader.syntax.AlchemistYamlSyntax.Deployment.Program as ProgramSyntax +import it.unibo.alchemist.boundary.loader.syntax.AlchemistYamlSyntax.Environment.GlobalProgram as GlobalProgramSyntax +import it.unibo.alchemist.boundary.loader.syntax.AlchemistYamlSyntax.JavaType +import it.unibo.alchemist.boundary.loader.syntax.AlchemistYamlSyntax.Layer as LayerSyntax import it.unibo.alchemist.boundary.loader.syntax.SyntaxElement import it.unibo.alchemist.boundary.loader.util.JVMConstructor import it.unibo.alchemist.boundary.loader.util.NamedParametersConstructor @@ -69,7 +69,7 @@ import org.apache.commons.math3.random.RandomGenerator */ private typealias Seeds = Pair private typealias ReactionComponentFunction = - (RandomGenerator, Environment, Node?, TimeDistribution, Actionable, Any?) -> R + (RandomGenerator, Environment, Node?, Actionable, Any?) -> R /* * UTILITY FUNCTIONS @@ -123,7 +123,7 @@ private fun Any?.removeKeysRecursively(keys: Set): Any? = when (this) { is String -> this is Map<*, *> -> { val isAnObjectToBuild = - listOf(JavaType, DocumentRoot.DependentVariable, DocumentRoot.Variable) + listOf(JavaType, AlchemistYamlSyntax.DependentVariable, AlchemistYamlSyntax.Variable) .any { it.validateDescriptor(this) } when { isAnObjectToBuild -> this @@ -176,8 +176,8 @@ internal object SimulationModel { * Converts an alchemist model defined as a Map into a loadable simulation environment and relative exports. */ fun fromMap(root: Map): Loader { - require(DocumentRoot.validateDescriptor(root)) { - "Invalid simulation descriptor: $root.\n" + DocumentRoot.validDescriptors.first() + require(AlchemistYamlSyntax.validateDescriptor(root)) { + "Invalid simulation descriptor: $root.\n" + AlchemistYamlSyntax.validDescriptors.first() } val context = Context() var previousSize: Int? = null @@ -185,11 +185,11 @@ internal object SimulationModel { val collectedNonFatalFailures = mutableMapOf>() while (context.constants.size != previousSize) { previousSize = context.constants.size - val stillToTry = injectedRoot[DocumentRoot.variables]?.removeKeysRecursively(context.constants.keys) + val stillToTry = injectedRoot[AlchemistYamlSyntax.variables]?.removeKeysRecursively(context.constants.keys) visitNamedRecursively( context = context, root = stillToTry ?: emptyMap(), - syntax = DocumentRoot.DependentVariable, + syntax = AlchemistYamlSyntax.DependentVariable, forceSuccess = false, ) { name, element -> val evaluationAsConstant = visitConstant(name, context, element) @@ -209,13 +209,13 @@ internal object SimulationModel { } logger.info("{} constants: {}", context.constants.size, context.constants) val constantsNames = context.constants.keys - val varsWithoutConsts = injectedRoot[DocumentRoot.variables].removeKeysRecursively(constantsNames) + val varsWithoutConsts = injectedRoot[AlchemistYamlSyntax.variables].removeKeysRecursively(constantsNames) // Dependent variables val dependentVariables: Map> = visitNamedRecursively( context = context, root = varsWithoutConsts, - syntax = DocumentRoot.DependentVariable, + syntax = AlchemistYamlSyntax.DependentVariable, forceSuccess = false, ) { name, element -> visitDependentVariableRegistering(name, context, element) @@ -224,11 +224,11 @@ internal object SimulationModel { injectedRoot = inject(context, injectedRoot) // Real variables val variablesLeft = - injectedRoot[DocumentRoot.variables].removeKeysRecursively(constantsNames + dependentVariables.keys) + injectedRoot[AlchemistYamlSyntax.variables].removeKeysRecursively(constantsNames + dependentVariables.keys) variablesLeft?.validateVariableConsistencyRecursively(errors = collectedNonFatalFailures) val variables: Map> = visitVariables(context, variablesLeft) logger.info("Variables: {}", variables) - var launcherDescriptor = injectedRoot[DocumentRoot.launcher] + var launcherDescriptor = injectedRoot[AlchemistYamlSyntax.launcher] val isJvmConstructorWithoutType = launcherDescriptor is Map<*, *> && launcherDescriptor.containsKey(JavaType.parameters) && @@ -241,7 +241,7 @@ internal object SimulationModel { val remoteDependencies = visitRecursively( context, - injectedRoot[DocumentRoot.REMOTE_DEPENDENCIES] ?: emptyMap(), + injectedRoot[AlchemistYamlSyntax.REMOTE_DEPENDENCIES] ?: emptyMap(), ) { visitBuilding(context, it) } logger.info("Remote dependencies: {}", remoteDependencies) return object : LoadingSystem(context, injectedRoot) { @@ -253,7 +253,7 @@ internal object SimulationModel { } } - internal fun

, T : Any?> visitIncarnation(root: Any?): Incarnation = + internal fun

, T> visitIncarnation(root: Any?): Incarnation = SupportedIncarnations.get(root.toString()).orElseThrow { IllegalArgumentException( "Invalid incarnation descriptor: $root. " + @@ -261,7 +261,7 @@ internal object SimulationModel { ) } - internal fun

, T : Any?> visitLinkingRule(localContext: Context, root: Any?): LinkingRule { + internal fun

, T> visitLinkingRule(localContext: Context, root: Any?): LinkingRule { val linkingRules = visitRecursively(localContext, root, JavaType) { element -> visitBuilding>(localContext, element) @@ -410,7 +410,7 @@ internal object SimulationModel { } private fun

> visitFilter(context: Context, element: Map<*, *>): List> { - val filterKey = DocumentRoot.Deployment.Filter.FILTER + val filterKey = AlchemistYamlSyntax.Deployment.Filter.FILTER val positionBasedFilters = visitRecursively(context, element[filterKey] ?: emptyList()) { shape -> visitBuilding>(context, shape) @@ -425,10 +425,10 @@ internal object SimulationModel { root: Map<*, *>, ): List>, Molecule, () -> T>> { logger.debug("Visiting contents: {}", root) - val allContents = root[DocumentRoot.Deployment.contents] ?: emptyList() + val allContents = root[AlchemistYamlSyntax.Deployment.contents] ?: emptyList() return visitRecursively(context, allContents) { element -> logger.debug("Visiting as content: {}", element) - val moleculeKey = DocumentRoot.Deployment.Contents.molecule + val moleculeKey = AlchemistYamlSyntax.Deployment.Contents.molecule (element as? Map<*, *>)?.takeIf { element.containsKey(moleculeKey) }?.let { contentDescriptor -> logger.debug("Found content descriptor: {}", contentDescriptor) val filters = visitFilter

(context, element) @@ -440,7 +440,7 @@ internal object SimulationModel { } val molecule = incarnation.createMolecule(moleculeElement?.toString()) logger.debug("Molecule: {}", molecule) - val concentrationKey = DocumentRoot.Deployment.Contents.concentration + val concentrationKey = AlchemistYamlSyntax.Deployment.Contents.concentration val concentrationMaker: () -> T = { incarnation.createConcentration(element[concentrationKey]) } @@ -454,9 +454,9 @@ internal object SimulationModel { root: Map<*, *>, ): List>, NodeProperty>> { logger.debug("Visiting properties: {}", root) - val capabilitiesKey = DocumentRoot.Deployment.properties + val capabilitiesKey = AlchemistYamlSyntax.Deployment.properties val allCapabilities = root[capabilitiesKey] ?: emptyList() - return visitRecursively(context, allCapabilities, DocumentRoot.Deployment.Property) { element -> + return visitRecursively(context, allCapabilities, AlchemistYamlSyntax.Deployment.Property) { element -> (element as? Map<*, *>)?.let { val filters = visitFilter

(context, element) val nodeProperty = @@ -544,19 +544,19 @@ internal object SimulationModel { context: Context, root: Any?, ): Result>? = when { - root is String && root.equals(DocumentRoot.Export.Data.time, ignoreCase = true) -> Result.success(Time()) + root is String && root.equals(AlchemistYamlSyntax.Export.Data.time, ignoreCase = true) -> Result.success(Time()) - root is Map<*, *> && DocumentRoot.Export.Data.validateDescriptor(root) -> { - val molecule = root[DocumentRoot.Export.Data.molecule]?.toString() + root is Map<*, *> && AlchemistYamlSyntax.Export.Data.validateDescriptor(root) -> { + val molecule = root[AlchemistYamlSyntax.Export.Data.molecule]?.toString() if (molecule == null) { visitBuilding>(context, root) } else { - val property = root[DocumentRoot.Export.Data.property]?.toString() + val property = root[AlchemistYamlSyntax.Export.Data.property]?.toString() val filter: ExportFilter = - root[DocumentRoot.Export.Data.VALUE_FILTER]?.let { CommonFilters.fromString(it.toString()) } + root[AlchemistYamlSyntax.Export.Data.VALUE_FILTER]?.let { CommonFilters.fromString(it.toString()) } ?: CommonFilters.NOFILTER.filteringPolicy val precision: Int? = - when (val digits = root[DocumentRoot.Export.Data.precision]) { + when (val digits = root[AlchemistYamlSyntax.Export.Data.precision]) { null -> null is Byte -> digits.toInt() is Short -> digits.toInt() @@ -582,7 +582,7 @@ internal object SimulationModel { val aggregators: List = visitRecursively( context, - root[DocumentRoot.Export.Data.aggregators] ?: emptyList(), + root[AlchemistYamlSyntax.Export.Data.aggregators] ?: emptyList(), ) { require(it is CharSequence) { "Invalid aggregator $it:${it?.let { it::class.simpleName }}. Must be a String." @@ -601,17 +601,16 @@ internal object SimulationModel { context: Context, root: Any?, ): Result>? = when { - root is Map<*, *> && DocumentRoot.Export.validateDescriptor(root) -> { + root is Map<*, *> && AlchemistYamlSyntax.Export.validateDescriptor(root) -> { val exporter = visitBuilding>(context, root)?.getOrThrow() ?: cantBuildWith>(root) val dataExtractors = - visitRecursively(context, root[DocumentRoot.Export.data]) { + visitRecursively(context, root[AlchemistYamlSyntax.Export.data]) { visitExportData(incarnation, context, it) } exporter.bindDataExtractors(dataExtractors) Result.success(exporter) } - else -> null } @@ -637,7 +636,7 @@ internal object SimulationModel { } fun

, T> visitOutputMonitors(context: Context, root: Any?): List> = - visitRecursively(context, root ?: emptyList(), DocumentRoot.Monitor) { origin -> + visitRecursively(context, root ?: emptyList(), AlchemistYamlSyntax.Monitor) { origin -> (origin as? Map<*, *>)?.let { _ -> visitBuilding>(context, origin) } @@ -708,7 +707,7 @@ internal object SimulationModel { ): Result? { fun create(withParameter: Any?, makeWith: ReactionComponentFunction): Result = runCatching { - makeWith(simulationRNG, environment, node, timeDistribution, actionable, withParameter) + makeWith(simulationRNG, environment, node, actionable, withParameter) } return when (parameter) { is String -> create(parameter, incarnationFactory) @@ -790,8 +789,8 @@ internal object SimulationModel { makeDefaultRandomGenerator(0).also { logger.warn( "No seeds specified, defaulting to 0 for both {} and {}", - DocumentRoot.Seeds.scenario, - DocumentRoot.Seeds.simulation, + AlchemistYamlSyntax.Seeds.scenario, + AlchemistYamlSyntax.Seeds.simulation, ) } is Map<*, *> -> { @@ -799,7 +798,7 @@ internal object SimulationModel { require(stringKeys.size == root.keys.size) { "Illegal seeds sub-keys: ${root.keys - stringKeys.toSet()}. Valid keys are: $stringKeys" } - val validKeys = DocumentRoot.Seeds.validKeys + val validKeys = AlchemistYamlSyntax.Seeds.validKeys val nonPrivateKeys = stringKeys.filterNot { it.startsWith("_") } require(nonPrivateKeys.all { it in validKeys }) { "Illegal seeds sub-keys: ${nonPrivateKeys - validKeys.toSet()}. Valid keys are: $validKeys" @@ -811,15 +810,15 @@ internal object SimulationModel { } else { 0 } - visitRandomGenerator(context, valueOf(DocumentRoot.Seeds.scenario)) to + visitRandomGenerator(context, valueOf(AlchemistYamlSyntax.Seeds.scenario)) to visitRandomGenerator( context, - valueOf(DocumentRoot.Seeds.simulation), + valueOf(AlchemistYamlSyntax.Seeds.simulation), ) } else -> throw IllegalArgumentException( - "Not a valid ${DocumentRoot.seeds} section: $root. Expected " + - DocumentRoot.Seeds.validKeys.map { it to "" }, + "Not a valid ${AlchemistYamlSyntax.seeds} section: $root. Expected " + + AlchemistYamlSyntax.Seeds.validKeys.map { it to "" }, ) } @@ -840,11 +839,11 @@ internal object SimulationModel { private fun visitVariables(context: Context, root: Any?): Map> = visitNamedRecursively( context, root, - syntax = DocumentRoot.Variable, + syntax = AlchemistYamlSyntax.Variable, ) { name, element -> (element as? Map<*, *>?) ?.takeIfNotAConstant(name, context) - ?.takeIf { DocumentRoot.Variable.validateDescriptor(element) } + ?.takeIf { AlchemistYamlSyntax.Variable.validateDescriptor(element) } ?.let { _ -> fun Any?.toDouble(): Double = coerceToDouble(context) val variable = @@ -858,10 +857,10 @@ internal object SimulationModel { runCatching { // Must be a linear variable, or else fail LinearVariable( - element[DocumentRoot.Variable.default].toDouble(), - element[DocumentRoot.Variable.min].toDouble(), - element[DocumentRoot.Variable.max].toDouble(), - element[DocumentRoot.Variable.step].toDouble(), + element[AlchemistYamlSyntax.Variable.default].toDouble(), + element[AlchemistYamlSyntax.Variable.min].toDouble(), + element[AlchemistYamlSyntax.Variable.max].toDouble(), + element[AlchemistYamlSyntax.Variable.step].toDouble(), ) } } diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/loader/syntax/Syntax.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/loader/syntax/AlchemistYamlSyntax.kt similarity index 94% rename from alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/loader/syntax/Syntax.kt rename to alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/loader/syntax/AlchemistYamlSyntax.kt index da974eb0ac..7a36498f0d 100644 --- a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/loader/syntax/Syntax.kt +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/loader/syntax/AlchemistYamlSyntax.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2023, Danilo Pianini and contributors + * Copyright (C) 2010-2026, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -9,9 +9,7 @@ package it.unibo.alchemist.boundary.loader.syntax -import kotlin.reflect.KProperty - -internal object DocumentRoot : SyntaxElement { +internal object AlchemistYamlSyntax : SyntaxElement { object JavaType : SyntaxElement { val type by OwnName val parameters by OwnName @@ -228,11 +226,7 @@ internal object DocumentRoot : SyntaxElement { optional(*validKeys.toTypedArray()) }, ) -} -internal object OwnName { - operator fun getValue(thisRef: Any?, property: KProperty<*>): String = property.name.lowercase() + private fun validDescriptor(configuration: DescriptorBuilder.() -> Unit): SyntaxElement.ValidDescriptor = + DescriptorBuilder().apply(configuration).build() } - -private fun validDescriptor(configuration: DescriptorBuilder.() -> Unit): SyntaxElement.ValidDescriptor = - DescriptorBuilder().apply(configuration).build() diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/loader/syntax/OwnName.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/loader/syntax/OwnName.kt new file mode 100644 index 0000000000..75704266d2 --- /dev/null +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/loader/syntax/OwnName.kt @@ -0,0 +1,16 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary.loader.syntax + +import kotlin.reflect.KProperty + +internal object OwnName { + operator fun getValue(thisRef: Any?, property: KProperty<*>): String = property.name.lowercase() +} diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/loader/util/JVMConstructor.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/loader/util/JVMConstructor.kt index 629a7c0d46..0c6a113f4b 100644 --- a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/loader/util/JVMConstructor.kt +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/loader/util/JVMConstructor.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2023, Danilo Pianini and contributors + * Copyright (C) 2010-2026, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -14,190 +14,17 @@ import it.unibo.alchemist.util.ClassPathScanner import java.lang.reflect.Constructor import java.lang.reflect.Modifier import kotlin.reflect.KClass -import kotlin.reflect.KParameter import kotlin.reflect.full.valueParameters import kotlin.reflect.jvm.jvmErasure -import net.pearx.kasechange.splitToWords import org.danilopianini.jirf.CreationResult import org.danilopianini.jirf.Factory import org.danilopianini.jirf.InstancingImpossibleException import org.slf4j.LoggerFactory -/** - * A [JVMConstructor] whose [parameters] are an ordered list (common case for any JVM language). - */ -class OrderedParametersConstructor(type: String, val parameters: List<*> = emptyList()) : JVMConstructor(type) { - override fun parametersFor(target: KClass, factory: Factory): List<*> = parameters - - override fun toString(): String = "$typeName${parameters.joinToString(prefix = "(", postfix = ")")}" -} - -private typealias OrderedParameters = List - -/** - * A [JVMConstructor] whose parameters are named - * and hence stored in a [parametersMap] - * (no pure Java class works with named parameters now, Kotlin-only). - */ -class NamedParametersConstructor(type: String, val parametersMap: Map<*, *> = emptyMap()) : - JVMConstructor(type) { - private fun List.description() = joinToString(prefix = "\n- ", separator = "\n- ") { - it.namedParametersDescriptor() - } - - private inline infix fun Boolean.and(then: () -> Boolean): Boolean = if (this) then() else false - - private fun List.allLowerCase() = map { it.lowercase() } - - private fun String?.couldBeInterpretedAs(name: String?): Boolean = - equals(name, ignoreCase = true) || this?.splitToWords()?.allLowerCase() == name?.splitToWords()?.allLowerCase() - - override fun parametersFor(target: KClass, factory: Factory): List<*> { - val providedNames = parametersMap.map { it.key.toString() } - val singletons = factory.singletonObjects.keys - val constructorsWithOrderedParameters = - target.constructors.map { constructor -> - constructor.valueParameters.filterNot { it.type.jvmErasure.java in singletons }.sortedBy { it.index } - } - val usableConstructors: Map> = - constructorsWithOrderedParameters - .mapNotNull { parameters -> - if (providedNames.size <= parameters.size) { - // Parameter count must be compatible (as many or less parameters provided) - val (optional, mandatory) = parameters.partition { it.isOptional } - val mandatoryNames = mandatory.map { it.name } - val requiredOptionals by lazy { - optional - .take( - providedNames.size - mandatory.size, - ).map { it.name } - } - - fun verifyParameterMatch(matchMethod: (List).(List) -> Boolean) = - providedNames.matchMethod(mandatoryNames) and - { providedNames.matchMethod(requiredOptionals) } - // Check for exact name match - val exactMatch = verifyParameterMatch(List::containsAll) - if (exactMatch) { - parameters to emptyMap() - } else { - // Check for similar-enough non-ambiguous matches: kebab-case, snake_case, etc. - // convertedNames is a map between the actual parameter name and the provided name - val convertedNames = - providedNames - .mapNotNull { providedName -> - parameters - .filter { it.name.couldBeInterpretedAs(providedName) } - .takeIf { it.size == 1 } - ?.first() - ?.name - ?.let { it to providedName } - }.toMap() - val worksIfNamesAreReplaced = - convertedNames.keys.containsAll(mandatoryNames) and { - convertedNames.keys.containsAll(requiredOptionals) - } - if (worksIfNamesAreReplaced) { - parameters to convertedNames.filter { it.key != it.value } - } else { - null - } - } - } else { - null - } - }.toMap() - // If at least one constructor is a perfect match, discard the ones requiring name replacement. - val preferredMatch = - usableConstructors - .filterValues { replacements -> replacements.isEmpty() } - .takeIf { it.isNotEmpty() } - ?: usableConstructors - require(preferredMatch.isNotEmpty()) { - """ - No constructor available for ${target.simpleName} with named parameters $providedNames. - Note: Due to the way Kotlin's @JvmOverloads works, all the optional parameters that precede the ones - §of interest must be provided. - Available constructors have the following *named* parameters: - """.trimIndent().replace(Regex("\\R§"), " ") + - constructorsWithOrderedParameters.description() - } - require(preferredMatch.size == 1) { - """ - |Ambiguous constructors resolution for ${target.simpleName} with named parameters $providedNames. - |${ usableConstructors.keys.joinToString("\n|") { "Match: ${it.namedParametersDescriptor()}" } } - |Available constructors have the following *named* parameters: - """.trimMargin() + constructorsWithOrderedParameters.description() - } - val (selectedConstructor, replacements) = preferredMatch.toList().first() - if (replacements.isNotEmpty()) { - logger.warn( - "Alchemist had to replace some parameter names to match the constructor signature or {}: {}", - target.simpleName, - replacements, - ) - } - return selectedConstructor - .filter { parametersMap.containsKey(replacements.getOrDefault(it.name, it.name)) } - .map { parametersMap[replacements.getOrDefault(it.name, it.name)] } - } - - private fun Collection.namedParametersDescriptor() = "$size-ary constructor: " + - filter { it.name != null }.joinToString { - "${it.name}:${it.type.jvmErasure.simpleName}${if (it.isOptional) "" else "" }" - } - - override fun toString(): String = "$typeName($parametersMap)" - - private companion object { - @JvmStatic - private val logger = LoggerFactory.getLogger(NamedParametersConstructor::class.java) - } -} - -internal data class TypeSearch(val typeName: String, val targetType: Class) { - private val packageName: String? = typeName.substringBeforeLast('.', "").takeIf { it.isNotEmpty() } - private val isQualified get() = packageName != null - - val subTypes: Collection> by lazy { - val compatibleTypes: List> = - when (packageName) { - null -> - when { - targetType.packageName.startsWith("it.unibo.alchemist") -> - ClassPathScanner.subTypesOf(targetType, "it.unibo.alchemist") - else -> ClassPathScanner.subTypesOf(targetType) - } - else -> ClassPathScanner.subTypesOf(targetType, packageName) - } - when { - // The target type cannot be instanced, just return its concrete subclasses - Modifier.isAbstract(targetType.modifiers) -> compatibleTypes - // The target type can be instanced, return it and all its concrete subclasses - else -> mutableSetOf(targetType).apply { addAll(compatibleTypes) } - } - } - - val perfectMatches: List> by lazy { - subtypes(ignoreCase = false) - } - - val subOptimalMatches: List> by lazy { - subtypes(ignoreCase = true) - } - - private fun subtypes(ignoreCase: Boolean) = - subTypes.filter { typeName.equals(if (isQualified) it.name else it.simpleName, ignoreCase = ignoreCase) } - - companion object { - inline fun typeNamed(name: String) = TypeSearch(name, T::class.java) - } -} - /** * A constructor for a JVM class of type [typeName]. */ -sealed class JVMConstructor(val typeName: String) { +internal sealed class JVMConstructor(val typeName: String) { /** * provided a [target] class, extracts the parameters as an ordered list. */ diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/loader/util/NamedParametersConstructor.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/loader/util/NamedParametersConstructor.kt new file mode 100644 index 0000000000..5e2bfff4dd --- /dev/null +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/loader/util/NamedParametersConstructor.kt @@ -0,0 +1,140 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary.loader.util + +import kotlin.collections.get +import kotlin.reflect.KClass +import kotlin.reflect.KParameter +import kotlin.reflect.full.valueParameters +import kotlin.reflect.jvm.jvmErasure +import net.pearx.kasechange.splitToWords +import org.danilopianini.jirf.Factory +import org.slf4j.LoggerFactory + +/** + * A [JVMConstructor] whose parameters are named + * and hence stored in a [parametersMap] + * (no pure Java class works with named parameters now, Kotlin-only). + */ +internal class NamedParametersConstructor(type: String, val parametersMap: Map<*, *> = emptyMap()) : + JVMConstructor(type) { + private fun List.description() = joinToString(prefix = "\n- ", separator = "\n- ") { + it.namedParametersDescriptor() + } + + private inline infix fun Boolean.and(then: () -> Boolean): Boolean = if (this) then() else false + + private fun List.allLowerCase() = map { it.lowercase() } + + private fun String?.couldBeInterpretedAs(name: String?): Boolean = + equals(name, ignoreCase = true) || this?.splitToWords()?.allLowerCase() == name?.splitToWords()?.allLowerCase() + + override fun parametersFor(target: KClass, factory: Factory): List<*> { + val providedNames = parametersMap.map { it.key.toString() } + val singletons = factory.singletonObjects.keys + val constructorsWithOrderedParameters = + target.constructors.map { constructor -> + constructor.valueParameters.filterNot { it.type.jvmErasure.java in singletons }.sortedBy { it.index } + } + val usableConstructors: Map> = + constructorsWithOrderedParameters + .mapNotNull { parameters -> + if (providedNames.size <= parameters.size) { + // Parameter count must be compatible (as many or less parameters provided) + val (optional, mandatory) = parameters.partition { it.isOptional } + val mandatoryNames = mandatory.map { it.name } + val requiredOptionals by lazy { + optional + .take( + providedNames.size - mandatory.size, + ).map { it.name } + } + + fun verifyParameterMatch(matchMethod: (List).(List) -> Boolean) = + providedNames.matchMethod(mandatoryNames) and + { providedNames.matchMethod(requiredOptionals) } + // Check for exact name match + val exactMatch = verifyParameterMatch(List::containsAll) + if (exactMatch) { + parameters to emptyMap() + } else { + // Check for similar-enough non-ambiguous matches: kebab-case, snake_case, etc. + // convertedNames is a map between the actual parameter name and the provided name + val convertedNames = + providedNames + .mapNotNull { providedName -> + parameters + .filter { it.name.couldBeInterpretedAs(providedName) } + .takeIf { it.size == 1 } + ?.first() + ?.name + ?.let { it to providedName } + }.toMap() + val worksIfNamesAreReplaced = + convertedNames.keys.containsAll(mandatoryNames) and { + convertedNames.keys.containsAll(requiredOptionals) + } + if (worksIfNamesAreReplaced) { + parameters to convertedNames.filter { it.key != it.value } + } else { + null + } + } + } else { + null + } + }.toMap() + // If at least one constructor is a perfect match, discard the ones requiring name replacement. + val preferredMatch = + usableConstructors + .filterValues { replacements -> replacements.isEmpty() } + .takeIf { it.isNotEmpty() } + ?: usableConstructors + require(preferredMatch.isNotEmpty()) { + """ + No constructor available for ${target.simpleName} with named parameters $providedNames. + Note: Due to the way Kotlin's @JvmOverloads works, all the optional parameters that precede the ones + §of interest must be provided. + Available constructors have the following *named* parameters: + """.trimIndent().replace(Regex("\\R§"), " ") + + constructorsWithOrderedParameters.description() + } + require(preferredMatch.size == 1) { + """ + |Ambiguous constructors resolution for ${target.simpleName} with named parameters $providedNames. + |${ usableConstructors.keys.joinToString("\n|") { "Match: ${it.namedParametersDescriptor()}" } } + |Available constructors have the following *named* parameters: + """.trimMargin() + constructorsWithOrderedParameters.description() + } + val (selectedConstructor, replacements) = preferredMatch.toList().first() + if (replacements.isNotEmpty()) { + logger.warn( + "Alchemist had to replace some parameter names to match the constructor signature or {}: {}", + target.simpleName, + replacements, + ) + } + return selectedConstructor + .filter { parametersMap.containsKey(replacements.getOrDefault(it.name, it.name)) } + .map { parametersMap[replacements.getOrDefault(it.name, it.name)] } + } + + private fun Collection.namedParametersDescriptor() = "$size-ary constructor: " + + filter { it.name != null }.joinToString { + "${it.name}:${it.type.jvmErasure.simpleName}${if (it.isOptional) "" else "" }" + } + + override fun toString(): String = "$typeName($parametersMap)" + + private companion object { + @JvmStatic + private val logger = LoggerFactory.getLogger(NamedParametersConstructor::class.java) + } +} diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/loader/util/OrderedParameters.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/loader/util/OrderedParameters.kt new file mode 100644 index 0000000000..cbd43aabc1 --- /dev/null +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/loader/util/OrderedParameters.kt @@ -0,0 +1,14 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary.loader.util + +import kotlin.reflect.KParameter + +internal typealias OrderedParameters = List diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/loader/util/OrderedParametersConstructor.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/loader/util/OrderedParametersConstructor.kt new file mode 100644 index 0000000000..d20c6f954b --- /dev/null +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/loader/util/OrderedParametersConstructor.kt @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary.loader.util + +import kotlin.reflect.KClass +import org.danilopianini.jirf.Factory + +/** + * A [JVMConstructor] whose [parameters] are an ordered list (common case for any JVM language). + */ +internal class OrderedParametersConstructor(type: String, val parameters: List<*> = emptyList()) : + JVMConstructor(type) { + override fun parametersFor(target: KClass, factory: Factory): List<*> = parameters + + override fun toString(): String = "$typeName${parameters.joinToString(prefix = "(", postfix = ")")}" +} diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/loader/util/TypeSearch.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/loader/util/TypeSearch.kt new file mode 100644 index 0000000000..6ec701642e --- /dev/null +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/loader/util/TypeSearch.kt @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary.loader.util + +import it.unibo.alchemist.util.ClassPathScanner +import java.lang.reflect.Modifier + +internal data class TypeSearch(val typeName: String, val targetType: Class) { + private val packageName: String? = typeName.substringBeforeLast('.', "").takeIf { it.isNotEmpty() } + private val isQualified get() = packageName != null + + val subTypes: Collection> by lazy { + val compatibleTypes: List> = + when (packageName) { + null -> + when { + targetType.packageName.startsWith("it.unibo.alchemist") -> + ClassPathScanner.subTypesOf(targetType, "it.unibo.alchemist") + else -> ClassPathScanner.subTypesOf(targetType) + } + else -> ClassPathScanner.subTypesOf(targetType, packageName) + } + when { + // The target type cannot be instanced, just return its concrete subclasses + Modifier.isAbstract(targetType.modifiers) -> compatibleTypes + // The target type can be instanced, return it and all its concrete subclasses + else -> mutableSetOf(targetType).apply { addAll(compatibleTypes) } + } + } + + val perfectMatches: List> by lazy { + subtypes(ignoreCase = false) + } + + val subOptimalMatches: List> by lazy { + subtypes(ignoreCase = true) + } + + private fun subtypes(ignoreCase: Boolean) = + subTypes.filter { typeName.equals(if (isQualified) it.name else it.simpleName, ignoreCase = ignoreCase) } + + companion object { + inline fun typeNamed(name: String) = TypeSearch(name, T::class.java) + } +} diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/variables/ArbitraryVariable.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/variables/ArbitraryVariable.kt new file mode 100644 index 0000000000..607eca7fb1 --- /dev/null +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/variables/ArbitraryVariable.kt @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ +package it.unibo.alchemist.boundary.variables + +import java.io.Serial +import java.io.Serializable + +/** + * A variable that can take any value from an arbitrary, finite set. + * + * This implementation stores values in an immutable ordered set. Values and + * the default are non-nullable: an [ArbitraryVariable] always contains at + * least a default value and a (possibly empty) set of candidate values. + * + * @property values the set of allowed values (non-nullable) + * @property default the default value (non-nullable) + */ +data class ArbitraryVariable(override val default: Serializable, private val values: List) : + AbstractPrintableVariable() { + + init { + require(values.distinct() == values) { + "Values must be distinct: found duplicates in $values" + } + } + + /** + * Convenience constructor: build from a default value and a vararg of doubles. + * @param default the default value + * @param values values to include in the set + */ + constructor(default: Serializable, vararg values: Double) : this( + default, + values.toList(), + ) + + /** + * Construct from a default value and any iterable collection of values. + * @param default the default value + * @param values iterable containing the allowed values + */ + constructor(default: Serializable, values: Iterable) : this(default, values.toList()) + + override fun stream() = values.stream() + + private companion object { + @Serial + private const val serialVersionUID = 1L + } +} diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/variables/Flag.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/variables/Flag.kt new file mode 100644 index 0000000000..8223f5e35c --- /dev/null +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/variables/Flag.kt @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ +package it.unibo.alchemist.boundary.variables + +import java.io.Serial +import java.util.stream.Stream + +/** + * A boolean flag variable. Charts typically accept numeric values, but the + * semantic value of this variable is boolean; use `true` and `false` as the + * two possible outputs. The default value is provided at construction. + * + * This is equivalent in behavior to a [LinearVariable] with two samples + * between 0 and 1, but keeps the boolean semantics. + * + * @param default the default boolean value + */ +data class Flag(override val default: Boolean) : AbstractPrintableVariable() { + + override fun stream(): Stream = Stream.of(true, false) + + private companion object { + @Serial + private const val serialVersionUID = 1L + } +} diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/variables/JSR223Variable.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/variables/JSR223Variable.kt index 55709122ed..11cfe7804a 100644 --- a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/variables/JSR223Variable.kt +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/variables/JSR223Variable.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2023, Danilo Pianini and contributors + * Copyright (C) 2010-2026, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -10,7 +10,7 @@ package it.unibo.alchemist.boundary.variables import it.unibo.alchemist.boundary.DependentVariable -import it.unibo.alchemist.boundary.loader.syntax.DocumentRoot +import it.unibo.alchemist.boundary.loader.syntax.AlchemistYamlSyntax import javax.script.Bindings import javax.script.ScriptEngineManager import javax.script.ScriptException @@ -83,7 +83,7 @@ constructor( because it reached its ${timeout}ms timeout. This is usually a sign that something is looping. Either make the script run faster, or allow for a longer time by specifiying a different - `${DocumentRoot.DependentVariable.timeout}`. + `${AlchemistYamlSyntax.DependentVariable.timeout}`. """.trimIndent().replace(Regex("\\R"), "") else -> """ diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/variables/LinearVariable.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/variables/LinearVariable.kt new file mode 100644 index 0000000000..bb2fa26d87 --- /dev/null +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/variables/LinearVariable.kt @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary.variables + +import java.util.stream.DoubleStream +import java.util.stream.Stream +import kotlin.math.ceil +import org.slf4j.Logger +import org.slf4j.LoggerFactory + +/** + * A variable that spans linearly between a minimum and a maximum value. + * + * This is represented as a sequence of values starting at [min], incrementing by + * [step], and not exceeding [max]. The [default] parameter is the default value for + * the variable (it is not constrained to be exactly one of the generated steps). + * + * Note: kept as a data class for convenient structural equality and debugging; + * the implementation preserves the original behavior of the prior class. + * + * @property default default value + * @property min minimum value (inclusive) + * @property max maximum value (inclusive) + * @property step step increment between successive values + */ +data class LinearVariable(override val default: Double, val min: Double, val max: Double, val step: Double) : + AbstractPrintableVariable() { + + init { + require(max > min) { "The maximum value is smaller than the minimum in $this." } + if (default !in min..max) { + LOGGER.warn("Default value {} of linear variable is out of bounds: [{}, {}]", default, min, max) + } + } + + override fun steps(): Long { + val steps = ceil((max - min) / step).toLong() + if (min + step * steps <= max) { + return steps + 1 + } + return steps + } + + override fun stream(): Stream = DoubleStream.iterate(min) { x: Double -> x + step }.limit(steps()).boxed() + + private companion object { + private val LOGGER: Logger = LoggerFactory.getLogger(LinearVariable::class.java) + } +} diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/variables/NumericConstant.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/variables/NumericConstant.kt new file mode 100644 index 0000000000..52db864058 --- /dev/null +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/boundary/variables/NumericConstant.kt @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary.variables + +import it.unibo.alchemist.boundary.DependentVariable +import java.io.Serial + +/** + * A numeric constant variable that always evaluates to the same [value]. + * + * This class is a lightweight implementation of [DependentVariable] that + * represents a fixed numeric value. Nullability has been removed: a + * numeric constant must hold a non-null [Number]. + * + * @param value the numeric value returned by this variable + */ +data class NumericConstant(val value: Number) : DependentVariable { + override fun getWith(variables: Map): Number = value + + private companion object { + @Serial + private const val serialVersionUID = 1L + } +} diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/model/deployments/CircularArc.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/model/deployments/CircularArc.kt index 988d74fb83..14598784af 100644 --- a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/model/deployments/CircularArc.kt +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/model/deployments/CircularArc.kt @@ -1,3 +1,12 @@ +/* + * Copyright (C) 2010-2025, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + package it.unibo.alchemist.model.deployments import it.unibo.alchemist.model.Deployment diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/model/deployments/CloseToAlreadyDeployed.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/model/deployments/CloseToAlreadyDeployed.kt index 3c7de791cc..2ee71abe18 100644 --- a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/model/deployments/CloseToAlreadyDeployed.kt +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/model/deployments/CloseToAlreadyDeployed.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2023, Danilo Pianini and contributors + * Copyright (C) 2010-2025, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/model/deployments/GraphStreamDeployment.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/model/deployments/GraphStreamDeployment.kt index 85f85a0afd..550b05be93 100644 --- a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/model/deployments/GraphStreamDeployment.kt +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/model/deployments/GraphStreamDeployment.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2023, Danilo Pianini and contributors + * Copyright (C) 2010-2025, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/model/deployments/Grid.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/model/deployments/Grid.kt index 7808f7530f..a5b72a3feb 100644 --- a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/model/deployments/Grid.kt +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/model/deployments/Grid.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2022, Danilo Pianini and contributors + * Copyright (C) 2010-2026, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -45,10 +45,10 @@ import org.apache.commons.math3.random.RandomGenerator * @param yShift * how shifted should be positions along columns */ -open class Grid +open class Grid

> @JvmOverloads constructor( - private val environment: Environment<*, *>, + private val environment: Environment<*, P>, private val randomGenerator: RandomGenerator, private val xStart: Double, private val yStart: Double, @@ -60,8 +60,8 @@ constructor( private val yRand: Double = 0.0, private val xShift: Double = 0.0, private val yShift: Double = 0.0, -) : Deployment> { - override fun stream(): Stream> { +) : Deployment

{ + override fun stream(): Stream

{ val positions = (0 until stepCount(yStart, yEnd, yStep)) .map { yn -> diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/model/deployments/Polygon.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/model/deployments/Polygon.kt index 949d2b1576..43451cb7fb 100644 --- a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/model/deployments/Polygon.kt +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/model/deployments/Polygon.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2023, Danilo Pianini and contributors + * Copyright (C) 2010-2025, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/model/deployments/SpecificPositions.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/model/deployments/SpecificPositions.kt index 857c24a4be..ea5ffd81db 100644 --- a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/model/deployments/SpecificPositions.kt +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/model/deployments/SpecificPositions.kt @@ -1,5 +1,6 @@ /* - * Copyright (C) 2010-2019, Danilo Pianini and contributors listed in the main project's alchemist/build.gradle file. + * Copyright (C) 2010-2025, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the * GNU General Public License, with a linking exception, diff --git a/alchemist-loading/src/main/kotlin/it/unibo/alchemist/model/positionfilters/Rectangle.kt b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/model/positionfilters/Rectangle.kt new file mode 100644 index 0000000000..4dc28d6a8e --- /dev/null +++ b/alchemist-loading/src/main/kotlin/it/unibo/alchemist/model/positionfilters/Rectangle.kt @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.model.positionfilters + +import it.unibo.alchemist.model.Position2D +import java.awt.geom.Rectangle2D +import kotlin.math.abs +import kotlin.math.min + +/** + * A Rectangle. + * + * @param x + * start x point + * @param y + * start y point + * @param w + * width + * @param h + * height + * @param

position type +

*/ +class Rectangle

>(x: Double, y: Double, w: Double, h: Double) : + Abstract2DShape

(Rectangle2D.Double(min(x, x + w), min(y, y + h), abs(w), abs(h))) diff --git a/alchemist-loading/src/test/java/it/unibo/alchemist/model/TestYAMLLoader.java b/alchemist-loading/src/test/java/it/unibo/alchemist/model/TestYAMLLoader.java index a3fed962e2..2239b2a69a 100644 --- a/alchemist-loading/src/test/java/it/unibo/alchemist/model/TestYAMLLoader.java +++ b/alchemist-loading/src/test/java/it/unibo/alchemist/model/TestYAMLLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2023, Danilo Pianini and contributors + * Copyright (C) 2010-2026, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -22,10 +22,10 @@ import org.kaikikm.threadresloader.ResourceLoader; import java.io.InputStream; +import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.Set; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -91,7 +91,7 @@

> void testLayers() { final var simulation = testNoVar("synthetic/testlayer.yml"); @SuppressWarnings("unchecked") final Environment environment = (Environment) simulation.getEnvironment(); - final Set> layers = environment.getLayers(); + final Collection> layers = environment.getLayers().values(); assertFalse(layers.isEmpty()); assertEquals(2, layers.size()); assertEquals(2L, layers.stream() diff --git a/alchemist-loading/src/test/java/it/unibo/alchemist/model/deployments/TestGrid.java b/alchemist-loading/src/test/java/it/unibo/alchemist/model/deployments/TestGrid.java index 336a0d43f9..58340728fd 100644 --- a/alchemist-loading/src/test/java/it/unibo/alchemist/model/deployments/TestGrid.java +++ b/alchemist-loading/src/test/java/it/unibo/alchemist/model/deployments/TestGrid.java @@ -39,7 +39,7 @@ private static MersenneTwister randomGenerator() { @Test void testVerticalLine() { test(10, 1, 9.9); - assertEquals(10L, new Grid(environment(), randomGenerator(), 0, 0, 1, 10, 1, 1, 0, 0).stream().count()); + assertEquals(10L, new Grid<>(environment(), randomGenerator(), 0, 0, 1, 10, 1, 1, 0, 0).stream().count()); } /** @@ -81,7 +81,7 @@ void test10x10() { void testbug73() { assertEquals( 20L * 20, - new Grid(environment(), randomGenerator(), 0, 0, 20, 20, 1, 1, 0.8, 0.8) + new Grid<>(environment(), randomGenerator(), 0, 0, 20, 20, 1, 1, 0.8, 0.8) .stream().distinct().count() ); } @@ -97,7 +97,7 @@ void test10x10negative() { private void test(final long expected, final double x, final double y) { assertEquals( expected, - new Grid( + new Grid<>( environment(), new MersenneTwister(), 0, diff --git a/alchemist-loading/src/test/java/it/unibo/alchemist/model/nodes/TestNode.java b/alchemist-loading/src/test/java/it/unibo/alchemist/model/nodes/TestNode.java index fa3520f9e0..6fafd311a6 100644 --- a/alchemist-loading/src/test/java/it/unibo/alchemist/model/nodes/TestNode.java +++ b/alchemist-loading/src/test/java/it/unibo/alchemist/model/nodes/TestNode.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2023, Danilo Pianini and contributors + * Copyright (C) 2010-2025, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -15,8 +15,10 @@ /** * Generic node for testing purposes. + * + * @param concentration type */ -public final class TestNode extends GenericNode { +public final class TestNode extends GenericNode { @Serial private static final long serialVersionUID = 1L; @@ -24,13 +26,14 @@ public final class TestNode extends GenericNode { /** * @param environment the environment */ - public TestNode(final Environment environment) { + public TestNode(final Environment environment) { super(environment); } + @SuppressWarnings("unchecked") @Override - protected Object createT() { - return new Object(); + protected T createT() { + return (T) new Object(); } } diff --git a/alchemist-loading/src/test/kotlin/it/unibo/alchemist/boundary/kotlindsl/KotlinDslProviderTest.kt b/alchemist-loading/src/test/kotlin/it/unibo/alchemist/boundary/kotlindsl/KotlinDslProviderTest.kt new file mode 100644 index 0000000000..9e320a8aa4 --- /dev/null +++ b/alchemist-loading/src/test/kotlin/it/unibo/alchemist/boundary/kotlindsl/KotlinDslProviderTest.kt @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary.kotlindsl + +import it.unibo.alchemist.boundary.LoadAlchemist +import it.unibo.alchemist.boundary.kotlindsl.TestComparators.shouldEqual +import java.nio.file.Files +import java.util.stream.Stream +import kotlin.io.path.writeText +import org.junit.jupiter.api.Assertions.assertNotNull +import org.junit.jupiter.api.Test +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.Arguments +import org.junit.jupiter.params.provider.MethodSource +import org.kaikikm.threadresloader.ResourceLoader + +class KotlinDslProviderTest { + + @Test + fun `a simple textual Kotlin DSL script should load`() { + val script = """ + simulation2D(SAPEREIncarnation()) { + environment { + networkModel(ConnectWithinDistance(5.0)) + deployments { + deploy(point(0.0, 0.0)) + deploy(point(0.0, 1.0)) + } + } + } + """.trimIndent() + val path = Files.createTempFile("dsl-test-", ".alchemist.kts") + path.writeText(script) + val loader = LoadAlchemist.from(path.toFile()) + assertNotNull(loader) + } + + @ParameterizedTest(name = "{0} should match {1}") + @MethodSource("equivalenceCases") + fun `Kotlin DSL resources should match YAML equivalents`(ktsResource: String, ymlResource: String) { + val url = requireNotNull(ResourceLoader.getResource(ktsResource)) { + "Resource $ktsResource not found on test classpath" + } + LoadAlchemist.from(url).shouldEqual(ymlResource, steps = 100L) + } + + companion object { + @JvmStatic + fun equivalenceCases(): Stream = Stream.of( + Arguments.of("dsl/kts/12-layers.alchemist.kts", "dsl/yml/12-layers.yml"), + Arguments.of("dsl/kts/14-exporters.alchemist.kts", "dsl/yml/14-exporters.yml"), + Arguments.of("dsl/kts/15-variables.alchemist.kts", "dsl/yml/15-variables.yml"), + Arguments.of("dsl/kts/18-properties.alchemist.kts", "dsl/yml/18-properties.yml"), + Arguments.of("dsl/kts/19-performance.alchemist.kts", "dsl/yml/19-performance.yml"), + ) + } +} diff --git a/alchemist-loading/src/test/kotlin/it/unibo/alchemist/boundary/kotlindsl/LoaderFactory.kt b/alchemist-loading/src/test/kotlin/it/unibo/alchemist/boundary/kotlindsl/LoaderFactory.kt new file mode 100644 index 0000000000..dbe7018fed --- /dev/null +++ b/alchemist-loading/src/test/kotlin/it/unibo/alchemist/boundary/kotlindsl/LoaderFactory.kt @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ +package it.unibo.alchemist.boundary.kotlindsl + +import it.unibo.alchemist.boundary.LoadAlchemist +import it.unibo.alchemist.boundary.Loader +import org.kaikikm.threadresloader.ResourceLoader + +/** + * Factory for creating and loading DSL and YAML loaders for testing. + */ +object LoaderFactory { + + /** + * Loads a DSL loader from a resource path. + */ + fun loadDsl(dslCode: String): Loader = throw NotImplementedError("Not implemented yet $dslCode") + + /** + * Loads a YAML loader from a resource path. + */ + fun loadYaml(yamlResource: String): Loader = LoadAlchemist.from(ResourceLoader.getResource(yamlResource)!!) + + /** + * Loads both DSL and YAML loaders for comparison. + */ + fun loadBoth(dslCode: String, yamlResource: String): Pair = + Pair(loadDsl(dslCode), loadYaml(yamlResource)) +} diff --git a/alchemist-loading/src/test/kotlin/it/unibo/alchemist/boundary/kotlindsl/TestComparators.kt b/alchemist-loading/src/test/kotlin/it/unibo/alchemist/boundary/kotlindsl/TestComparators.kt new file mode 100644 index 0000000000..870df9d85d --- /dev/null +++ b/alchemist-loading/src/test/kotlin/it/unibo/alchemist/boundary/kotlindsl/TestComparators.kt @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ +package it.unibo.alchemist.boundary.kotlindsl + +import it.unibo.alchemist.boundary.Loader +import it.unibo.alchemist.model.Position +import it.unibo.alchemist.test.equalsForSteps + +/** + * Main test comparison class that handles static and runtime comparisons + * + * This class provides an interface for comparing DSL and YAML loaders + * with the option to include runtime behavior testing. + */ +object TestComparators { + + /** + * Compares a DSL loader with a YAML loader. + * + * @param other The DSL loader to compare. + * @param yamlResource The YAML resource path to compare against. + * @param steps The number of steps for runtime comparison (only used if includeRuntime is true). + * Exactly one of steps, targetTime, or stableForSteps must be provided. + */ + fun > Loader.shouldEqual(yamlResource: String, steps: Long = 0L) { + val yamlLoader = LoaderFactory.loadYaml(yamlResource) + // Always perform static comparison + getDefault().equalsForSteps(yamlLoader.getDefault(), steps) + } +} diff --git a/alchemist-loading/src/test/kotlin/it/unibo/alchemist/boundary/kotlindsl/TestContents.kt b/alchemist-loading/src/test/kotlin/it/unibo/alchemist/boundary/kotlindsl/TestContents.kt new file mode 100644 index 0000000000..7d504d7ab1 --- /dev/null +++ b/alchemist-loading/src/test/kotlin/it/unibo/alchemist/boundary/kotlindsl/TestContents.kt @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary.kotlindsl + +import it.unibo.alchemist.model.deployments.point +import it.unibo.alchemist.model.incarnations.SAPEREIncarnation +import it.unibo.alchemist.model.sapere.molecules.LsaMolecule +import org.junit.jupiter.api.Test + +class TestContents { + + @Test + fun testAll() { + val loader = simulation2D(SAPEREIncarnation()) { + environment { + deployments { + deploy(point(0.0, 0.0)) { + contents { + "test"(listOf(LsaMolecule("1"))) + } + } + } + } + } + + loader.launch(loader.launcher) + } +} diff --git a/alchemist-loading/src/test/kotlin/it/unibo/alchemist/boundary/kotlindsl/TestDSLLoading.kt b/alchemist-loading/src/test/kotlin/it/unibo/alchemist/boundary/kotlindsl/TestDSLLoading.kt new file mode 100644 index 0000000000..c3f0ea9635 --- /dev/null +++ b/alchemist-loading/src/test/kotlin/it/unibo/alchemist/boundary/kotlindsl/TestDSLLoading.kt @@ -0,0 +1,312 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary.kotlindsl + +import another.location.SimpleMonitor +import it.unibo.alchemist.boundary.exporters.CSVExporter +import it.unibo.alchemist.boundary.exportfilters.CommonFilters +import it.unibo.alchemist.boundary.extractors.Time +import it.unibo.alchemist.boundary.extractors.moleculeReader +import it.unibo.alchemist.boundary.variables.GeometricVariable +import it.unibo.alchemist.boundary.variables.LinearVariable +import it.unibo.alchemist.jakta.timedistributions.JaktaTimeDistribution +import it.unibo.alchemist.model.Environment +import it.unibo.alchemist.model.deployments.circle +import it.unibo.alchemist.model.deployments.grid +import it.unibo.alchemist.model.deployments.point +import it.unibo.alchemist.model.incarnations.ProtelisIncarnation +import it.unibo.alchemist.model.incarnations.SAPEREIncarnation +import it.unibo.alchemist.model.layers.StepLayer +import it.unibo.alchemist.model.linkingrules.ConnectWithinDistance +import it.unibo.alchemist.model.maps.actions.reproduceGPSTrace +import it.unibo.alchemist.model.maps.deployments.FromGPSTrace +import it.unibo.alchemist.model.maps.environments.oSMEnvironment +import it.unibo.alchemist.model.positionfilters.Rectangle +import it.unibo.alchemist.model.positions.Euclidean2DPosition +import it.unibo.alchemist.model.reactions.event +import it.unibo.alchemist.model.terminators.AfterTime +import it.unibo.alchemist.model.terminators.StableForSteps +import it.unibo.alchemist.model.timedistributions.DiracComb +import it.unibo.alchemist.model.timedistributions.exponentialTime +import it.unibo.alchemist.model.timedistributions.weibullTime +import it.unibo.alchemist.model.times.DoubleTime +import it.unibo.alchemist.test.globalTestReaction +import org.apache.commons.math3.random.RandomGenerator +import org.junit.jupiter.api.Test + +class TestDSLLoading { + + @Test + fun `verify that the base syntax of the Kotlin DSL compiles and builds without throwing exceptions`() { + simulation(ProtelisIncarnation()) { + environment { } + }.let { it.launcher.launch(it) } + simulation2D(SAPEREIncarnation()) { + val rate: Double by variable(GeometricVariable(2.0, 0.1, 10.0, 9)) + val size: Double by variable(LinearVariable(5.0, 1.0, 10.0, 1.0)) + environment { + val mSize = -size + val sourceStart = mSize / 10.0 + val sourceSize = size / 5.0 + terminator(AfterTime(DoubleTime(1.0))) + networkModel(ConnectWithinDistance(0.5)) + deployments { + deploy(makePerturbedGridForTesting()) { + if (position in Rectangle(sourceStart, sourceStart, sourceSize, sourceSize)) { + contents { + -"token, 0, []" + } + } + program( + "{token, N, L} --> {token, N, L} *{token, N+#D, L add [#NODE;]}", + rate, + ) + program("{token, N, L}{token, def: N2>=N, L2} --> {token, N, L}") + } + } + } + } + simulation(ProtelisIncarnation()) { + exportWith(CSVExporter("test_export_interval", 4.0)) { + -Time() + -moleculeReader( + "default_module:default_program", + null, + CommonFilters.NOFILTER.filteringPolicy, + emptyList(), + ) + } + } + simulation2D(ProtelisIncarnation()) { + environment { + globalProgram(DiracComb(1.0), globalTestReaction(DiracComb(1.0))) + } + } + simulation2D(ProtelisIncarnation()) { + environment { + layer("A", StepLayer(2.0, 2.0, 100, 0)) + layer("B", StepLayer(-2.0, -2.0, 0, 100)) + deployments { + deploy( + grid( + -5.0, + -5.0, + 5.0, + 5.0, + 0.25, + 0.1, + 0.1, + ), + ) { + contents { + -"a" + } + } + } + } + } + simulation2D(SAPEREIncarnation()) { + monitor(SimpleMonitor()) + } + simulationOnMap(SAPEREIncarnation()) { + environment(oSMEnvironment("vcm.pbf", false)) { + terminator(StableForSteps(5, 100)) + deployments { + val gps = FromGPSTrace( + 7, + "gpsTrace", + true, + "AlignToSimulationTime", + ) + deploy(gps) { + withTimeDistribution(15) { + program(event()) { + ActionableContext.action( + reproduceGPSTrace( + "gpsTrace", + true, + "AlignToSimulationTime", + ), + ) + } + } + } + } + } + } + simulation2D(SAPEREIncarnation()) { + environment { + networkModel(ConnectWithinDistance(0.5)) + deployments { + deploy(makePerturbedGridForTesting()) { + if (position in Rectangle(-0.5, -0.5, 1.0, 1.0)) { + contents { + -"token, 0, []" + } + } + timeDistribution(DiracComb(0.5)) { + program("{token, N, L} --> {token, N, L} *{token, N+#D, L add [#NODE;]}") + } + program("{token, N, L}{token, def: N2>=N, L2} --> {token, N, L}") + } + } + } + } + simulation2D(ProtelisIncarnation()) { + environment { + deployments { + deploy(point(1.5, 0.5)) { + timeDistribution( + JaktaTimeDistribution( + sense = weibullTime(1.0, 1.0), + deliberate = DiracComb(0.1), + act = exponentialTime(1.0), + ), + ) { + program("1 + 1") + } + } + } + } + } + simulation2D(SAPEREIncarnation()) { + environment { + networkModel(ConnectWithinDistance(0.5)) + deployments { + val token = "token" + deploy(makePerturbedGridForTesting()) { + contents { + if (position in Rectangle(-0.5, -0.5, 1.0, 1.0)) { + -token + } + } + program( + "{token} --> {firing}", + timeDistribution = 1, + ) + program("{firing} --> +{token}") + } + } + } + } + simulation2D(SAPEREIncarnation()) { + environment { + networkModel(ConnectWithinDistance(0.5)) + deployments { + val hello = "hello" + deploy(makePerturbedGridForTesting()) { + contents { + -hello + if (position in Rectangle(-1.0, -1.0, 2.0, 2.0)) { + -"token" + } + } + } + } + } + } + simulationOnMap(ProtelisIncarnation()) { + environment(oSMEnvironment("vcm.pbf", false)) { + terminator(StableForSteps(5, 100)) + deployments { + deploy(FromGPSTrace(7, "gpsTrace", true, "AlignToSimulationTime")) { + program(timeDistribution = 15) { + action( + reproduceGPSTrace( + "gpsTrace", + true, + "AlignToSimulationTime", + ), + ) + } + } + } + } + } + simulation2D(SAPEREIncarnation()) { + environment { + deployments { + val p = point(0.0, 0.0) + deploy(p) + } + } + } + simulation2D(SAPEREIncarnation()) { + environment { + networkModel(ConnectWithinDistance(5.0)) + deployments { + deploy(point(0.0, 0.0)) + deploy(point(0.0, 1.0)) + } + } + } + simulation2D(SAPEREIncarnation()) { + simulationSeed(10L) + scenarioSeed(20L) + environment { + networkModel(ConnectWithinDistance(0.5)) + deployments { + deploy( + circle( + 10, + 0.0, + 0.0, + 10.0, + ), + ) + } + } + } + simulation2D(SAPEREIncarnation()) { + environment { + networkModel(ConnectWithinDistance(0.5)) + deployments { + val grid = grid( + -5.0, + -5.0, + 5.0, + 5.0, + 0.25, + 0.25, + 0.0, + 0.0, + ) + deploy(grid) + } + } + } + simulation2D(SAPEREIncarnation()) { + environment { + networkModel(ConnectWithinDistance(0.5)) + deployments { + val hello = "hello" + deploy(makePerturbedGridForTesting()) { + contents { + -hello + } + } + } + } + } + } + companion object { + context(_: RandomGenerator, _: Environment<*, Euclidean2DPosition>) + fun makePerturbedGridForTesting() = grid( + -5.0, + -5.0, + 5.0, + 5.0, + 0.25, + 0.25, + 0.1, + 0.1, + ) + } +} diff --git a/alchemist-loading/src/test/kotlin/it/unibo/alchemist/boundary/kotlindsl/TestDeployments.kt b/alchemist-loading/src/test/kotlin/it/unibo/alchemist/boundary/kotlindsl/TestDeployments.kt new file mode 100644 index 0000000000..13086dc9aa --- /dev/null +++ b/alchemist-loading/src/test/kotlin/it/unibo/alchemist/boundary/kotlindsl/TestDeployments.kt @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary.kotlindsl + +import it.unibo.alchemist.model.deployments.grid +import it.unibo.alchemist.model.deployments.point +import it.unibo.alchemist.model.incarnations.SAPEREIncarnation +import org.junit.jupiter.api.Test + +class TestDeployments { + + @Test + fun testDeployments() { + val loader = simulation2D(SAPEREIncarnation()) { + environment { + deployments { + val p = point(0.0, 0.0) + deploy(p) + } + } + } + loader.launch(loader.launcher) + } + + @Test + fun testMultipleDeployments() { + val loader = simulation2D(SAPEREIncarnation()) { + environment { + deployments { + val point = point(0.0, 0.0) + deploy(point) + deploy(point(1.0, 1.0)) + } + } + } + loader.launch(loader.launcher) + } + + @Test + fun testGridDeployment() { + val loader = simulation2D(SAPEREIncarnation()) { + environment { + deployments { + val grid = grid( + 1.0, + 1.0, + 5.0, + 5.0, + 1.0, + 1.0, + ) + deploy(grid) + } + } + } + loader.launch(loader.launcher) + } +} diff --git a/alchemist-loading/src/test/kotlin/it/unibo/alchemist/boundary/kotlindsl/TestSimulations.kt b/alchemist-loading/src/test/kotlin/it/unibo/alchemist/boundary/kotlindsl/TestSimulations.kt new file mode 100644 index 0000000000..5c84eac3ba --- /dev/null +++ b/alchemist-loading/src/test/kotlin/it/unibo/alchemist/boundary/kotlindsl/TestSimulations.kt @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary.kotlindsl + +import it.unibo.alchemist.model.incarnations.SAPEREIncarnation +import it.unibo.alchemist.model.linkingrules.ConnectWithinDistance +import org.junit.jupiter.api.Test + +class TestSimulations { + + @Test + fun testIncarnation() { + val loader = simulation2D(SAPEREIncarnation()) { } + loader.launch(loader.launcher) + } + + @Test + fun testLinkingRule() { + val loader = simulation2D(SAPEREIncarnation()) { + environment { + networkModel(ConnectWithinDistance(5.0)) + } + } + loader.launch(loader.launcher) + } +} diff --git a/alchemist-loading/src/test/kotlin/it/unibo/alchemist/boundary/kotlindsl/TestVariables.kt b/alchemist-loading/src/test/kotlin/it/unibo/alchemist/boundary/kotlindsl/TestVariables.kt new file mode 100644 index 0000000000..74e712d7e1 --- /dev/null +++ b/alchemist-loading/src/test/kotlin/it/unibo/alchemist/boundary/kotlindsl/TestVariables.kt @@ -0,0 +1,101 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary.kotlindsl + +import io.kotest.assertions.throwables.shouldThrow +import io.kotest.matchers.booleans.shouldBeTrue +import io.kotest.matchers.doubles.shouldBeExactly +import io.kotest.matchers.maps.shouldNotBeEmpty +import io.kotest.matchers.shouldBe +import it.unibo.alchemist.boundary.variables.GeometricVariable +import it.unibo.alchemist.boundary.variables.LinearVariable +import it.unibo.alchemist.model.Position +import it.unibo.alchemist.model.deployments.point +import it.unibo.alchemist.model.incarnations.ProtelisIncarnation +import it.unibo.alchemist.model.incarnations.SAPEREIncarnation +import it.unibo.alchemist.model.molecules.SimpleMolecule +import it.unibo.alchemist.model.positions.Euclidean2DPosition +import it.unibo.alchemist.model.sapere.molecules.LsaMolecule +import org.junit.jupiter.api.Test + +class TestVariables { + @Test + fun

> testDefaultValue() { + val loader = simulation2D(SAPEREIncarnation()) { + val rate: Double by variable(LinearVariable(5.0, 1.0, 10.0, 1.0)) + environment { + println("Checking variable") + rate.shouldBeExactly(5.0) + } + } + loader.variables.shouldNotBeEmpty() + } + + @Test + fun

> testOverrideValue() { + var assertion = { rate: Double -> rate.shouldBeExactly(5.0) } + val loader = simulation2D(SAPEREIncarnation()) { + val rate: Double by variable(LinearVariable(5.0, 1.0, 10.0, 1.0)) + environment { + deployments { + assertion(rate) + } + } + } + loader.variables.containsKey("rate").shouldBeTrue() + assertion = { it.shouldBeExactly(20.0) } + loader.getWith, P>(mapOf("rate" to 20.0)) + } + + @Test + fun

> testDoubleDeclaration() { + simulation2D(SAPEREIncarnation()) { + val rate: Double by variable(LinearVariable(5.0, 1.0, 10.0, 1.0)) + println("First declaration of rate: $rate") + shouldThrow { + @Suppress("NoNameShadowing") // We are shadowing on purpose to test that it is not allowed + val rate: Double by variable(GeometricVariable(2.0, 1.0, 5.0, 1)) + println("This line should not be printed: $rate") + } + } + } + + @Test + fun testDependendVariable() { + val loader = simulation2D(ProtelisIncarnation()) { + val geometricVariable: Double by variable(GeometricVariable(10.0, 1.0, 1000.0, 4)) + val linearVariable: Double by variable(LinearVariable(1.0, 1.0, 2.0, 3.0)) + + val mSize = -linearVariable + val sourceStart = mSize / geometricVariable + val sourceSize = linearVariable / 5.0 + environment { + deployments { + deploy(point(0.0, 0.0)) { + contents { + "mSize"(mSize) + "sourceStart"(sourceStart) + "sourceSize"(sourceSize) + } + } + } + } + } + loader.variables.size shouldBe 2 + loader.dependentVariables.size shouldBe 0 + loader.getWith(mapOf("linearVariable" to 10.0)).apply { + environment.nodes.size shouldBe 1 + val node = environment.nodes.single() + node.getConcentration(SimpleMolecule("mSize")) shouldBe -10.0 + node.getConcentration(SimpleMolecule("sourceStart")) shouldBe -1.0 + node.getConcentration(SimpleMolecule("sourceSize")) shouldBe 2.0 + } + } +} diff --git a/alchemist-loading/src/test/kotlin/it/unibo/alchemist/boundary/properties/TestNodeProperty.kt b/alchemist-loading/src/test/kotlin/it/unibo/alchemist/boundary/properties/TestNodeProperty.kt new file mode 100644 index 0000000000..de06bc3955 --- /dev/null +++ b/alchemist-loading/src/test/kotlin/it/unibo/alchemist/boundary/properties/TestNodeProperty.kt @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.boundary.properties + +import it.unibo.alchemist.model.Environment +import it.unibo.alchemist.model.Node +import it.unibo.alchemist.model.NodeProperty +import it.unibo.alchemist.model.Position +import it.unibo.alchemist.model.properties.AbstractNodeProperty +import org.apache.commons.math3.random.RandomGenerator + +class TestNodeProperty>( + val rng: RandomGenerator, + val environment: Environment, + node: Node, + val s: String, +) : AbstractNodeProperty(node) { + override fun cloneOnNewNode(node: Node): NodeProperty = TestNodeProperty( + rng, + environment, + node, + s, + ) + + override fun toString(): String = super.toString() + "($s)" +} diff --git a/alchemist-loading/src/test/kotlin/it/unibo/alchemist/jakta/timedistributions/JaktaTimeDistribution.kt b/alchemist-loading/src/test/kotlin/it/unibo/alchemist/jakta/timedistributions/JaktaTimeDistribution.kt index e3d1ab2c22..d496cf4aff 100644 --- a/alchemist-loading/src/test/kotlin/it/unibo/alchemist/jakta/timedistributions/JaktaTimeDistribution.kt +++ b/alchemist-loading/src/test/kotlin/it/unibo/alchemist/jakta/timedistributions/JaktaTimeDistribution.kt @@ -14,19 +14,19 @@ import it.unibo.alchemist.model.Node import it.unibo.alchemist.model.Time import it.unibo.alchemist.model.TimeDistribution -data class JaktaTimeDistribution( - val sense: TimeDistribution, - val deliberate: TimeDistribution, - val act: TimeDistribution, -) : TimeDistribution { - override fun update(currentTime: Time, executed: Boolean, param: Double, environment: Environment) = +data class JaktaTimeDistribution( + val sense: TimeDistribution, + val deliberate: TimeDistribution, + val act: TimeDistribution, +) : TimeDistribution { + override fun update(currentTime: Time, executed: Boolean, param: Double, environment: Environment) = doNotUse() override fun getNextOccurence(): Time = doNotUse() override fun getRate(): Double = doNotUse() - override fun cloneOnNewNode(destination: Node, currentTime: Time): TimeDistribution = doNotUse() + override fun cloneOnNewNode(destination: Node, currentTime: Time): TimeDistribution = doNotUse() private fun doNotUse(): Nothing = error( "${this::class.simpleName} is not meant to be used directly, but to host custom time distributions" + diff --git a/alchemist-loading/src/test/kotlin/it/unibo/alchemist/test/TestKtVariable.kt b/alchemist-loading/src/test/kotlin/it/unibo/alchemist/test/TestKtVariable.kt index 9c7e97a679..d44752a1bf 100644 --- a/alchemist-loading/src/test/kotlin/it/unibo/alchemist/test/TestKtVariable.kt +++ b/alchemist-loading/src/test/kotlin/it/unibo/alchemist/test/TestKtVariable.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2023, Danilo Pianini and contributors + * Copyright (C) 2010-2026, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -57,13 +57,13 @@ class TestKtVariable> : "test 'type' keyword clashes" { loadAlchemistFromResource("regression/2022-coordination-type-clash.yml") shouldNot beNull() } - "test null values in bindings" { + "dependent variables should support null values" { val simulation = loadAlchemistFromResource("regression/2022-coordination-null-bindings.yml") simulation shouldNot beNull() val variable = simulation.variables["result"] variable shouldNot beNull() val values = variable?.toList().orEmpty() - values.forEach { it shouldBe "null" } + values.forEach { it.toString().substringBefore(" ") shouldBe "null" } } // This is a regression test, when the simulation is loaded with formula defined inside a "seed" definition diff --git a/alchemist-loading/src/test/resources/dsl/kts/11-monitors.alchemist.kts b/alchemist-loading/src/test/resources/dsl/kts/11-monitors.alchemist.kts new file mode 100644 index 0000000000..d2316338a6 --- /dev/null +++ b/alchemist-loading/src/test/resources/dsl/kts/11-monitors.alchemist.kts @@ -0,0 +1,16 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package dsl.kts +import another.location.SimpleMonitor +import it.unibo.alchemist.boundary.kotlindsl.simulation2D + +simulation2D(SAPEREIncarnation()) { + monitor(SimpleMonitor()) +} diff --git a/alchemist-loading/src/test/resources/dsl/kts/12-layers.alchemist.kts b/alchemist-loading/src/test/resources/dsl/kts/12-layers.alchemist.kts new file mode 100644 index 0000000000..b926084b51 --- /dev/null +++ b/alchemist-loading/src/test/resources/dsl/kts/12-layers.alchemist.kts @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ +package dsl.kts +import it.unibo.alchemist.boundary.kotlindsl.environment +import it.unibo.alchemist.boundary.kotlindsl.simulation2D + +simulation2D(ProtelisIncarnation()) { + environment { + layer("A", StepLayer(2.0, 2.0, concentrationOf(100), concentrationOf(0))) + layer("B", StepLayer(-2.0, -2.0, concentrationOf(0), concentrationOf(100))) + deployments { + deploy(grid(-5.0, -5.0, 5.0, 5.0, 0.25, 0.1, 0.1)) { + contents { + -"a" + } + } + } + } +} diff --git a/alchemist-loading/src/test/resources/dsl/kts/14-exporters.alchemist.kts b/alchemist-loading/src/test/resources/dsl/kts/14-exporters.alchemist.kts new file mode 100644 index 0000000000..0480b11a2d --- /dev/null +++ b/alchemist-loading/src/test/resources/dsl/kts/14-exporters.alchemist.kts @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package dsl.kts + +import it.unibo.alchemist.boundary.kotlindsl.simulation + +simulation(ProtelisIncarnation()) { + exportWith(CSVExporter("test_export_interval", 3.0)) { + - it.unibo.alchemist.boundary.extractors.Time() + - moleculeReader( + "default_module:default_program", + null, + CommonFilters.NOFILTER.filteringPolicy, + emptyList(), + ) + } +} diff --git a/alchemist-loading/src/test/resources/dsl/kts/15-variables.alchemist.kts b/alchemist-loading/src/test/resources/dsl/kts/15-variables.alchemist.kts new file mode 100644 index 0000000000..58d0b3b663 --- /dev/null +++ b/alchemist-loading/src/test/resources/dsl/kts/15-variables.alchemist.kts @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package dsl.kts + +import it.unibo.alchemist.boundary.kotlindsl.TestDSLLoading.Companion.makePerturbedGridForTesting +import it.unibo.alchemist.boundary.kotlindsl.contains +import it.unibo.alchemist.boundary.kotlindsl.environment +import it.unibo.alchemist.boundary.kotlindsl.simulation2D +import it.unibo.alchemist.model.positionfilters.Rectangle + +simulation2D(SAPEREIncarnation()) { + val rate: Double by variable(GeometricVariable(2.0, 0.1, 10.0, 9)) + val size: Double by variable(LinearVariable(5.0, 1.0, 10.0, 1.0)) + environment { + val mSize = -size + val sourceStart = mSize / 10.0 + val sourceSize = size / 5.0 + networkModel(ConnectWithinDistance(0.5)) + deployments { + deploy(makePerturbedGridForTesting()) { + if (position in Rectangle(sourceStart, sourceStart, sourceSize, sourceSize)) { + contents { + -"token, 0, []" + } + } + program("{token, N, L} --> {token, N, L} *{token, N+#D, L add [#NODE;]}", rate) + program("{token, N, L}{token, def: N2>=N, L2} --> {token, N, L}") + } + } + } +} diff --git a/alchemist-loading/src/test/resources/dsl/kts/18-properties.alchemist.kts b/alchemist-loading/src/test/resources/dsl/kts/18-properties.alchemist.kts new file mode 100644 index 0000000000..ea091bf075 --- /dev/null +++ b/alchemist-loading/src/test/resources/dsl/kts/18-properties.alchemist.kts @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package dsl.kts + +import it.unibo.alchemist.boundary.kotlindsl.contains +import it.unibo.alchemist.boundary.kotlindsl.environment +import it.unibo.alchemist.boundary.kotlindsl.simulation2D +import it.unibo.alchemist.model.positionfilters.Rectangle + +simulation2D(SAPEREIncarnation()) { + environment { + deployments { + deploy(circle(1000, 0.0, 0.0, 15.0)) { + if (position in Rectangle(-3.0, -3.0, 2.0, 2.0)) { + nodeProperty(testNodeProperty("a")) + } + if (position in Rectangle(3.0, 3.0, 2.0, 2.0)) { + nodeProperty(testNodeProperty("b")) + } + } + } + } +} + diff --git a/alchemist-loading/src/test/resources/dsl/kts/19-performance.alchemist.kts b/alchemist-loading/src/test/resources/dsl/kts/19-performance.alchemist.kts new file mode 100644 index 0000000000..5f3f062cd6 --- /dev/null +++ b/alchemist-loading/src/test/resources/dsl/kts/19-performance.alchemist.kts @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package dsl.kts +import another.location.SimpleMonitor +import it.unibo.alchemist.boundary.extractors.Time +import it.unibo.alchemist.boundary.kotlindsl.environment +import it.unibo.alchemist.boundary.kotlindsl.simulation2D +import it.unibo.alchemist.model.positionfilters.Rectangle +import kotlin.collections.emptyList + +simulation2D(SAPEREIncarnation()) { + simulationSeed(24L) + scenarioSeed(42L) + val rate: Double by variable(GeometricVariable(2.0, 0.1, 10.0, 9)) + val size: Double by variable(LinearVariable(5.0, 1.0, 10.0, 1.0)) + environment { + networkModel(ConnectWithinDistance(0.5)) + val mSize = -size + val sourceStart = mSize / 10.0 + val sourceSize = size / 5.0 + monitor(SimpleMonitor()) + deployments { + deploy(circle(200, 0.0, 0.0, 20.0)) { + contents { + - "basemolecule" + if (position in Rectangle(-5.0, -5.0, 10.0, 10.0)) { + - "centermolecule" + } + program("{basemolecule} --> {processed}", 1.0) + program("{processed} --> +{basemolecule}") } + } + deploy(grid(mSize, mSize, size, size, 0.25, 0.25, 0.1, 0.1)) { + contents { + - "gridmolecule" + if (position in Rectangle(sourceStart, sourceStart, sourceSize, sourceSize)) { + -"token, 0, []" + } + if (position in Rectangle(-2.0, -2.0, 4.0, 4.0)) { + -"filteredmolecule" + } + } + program("{token, N, L} --> {token, N, L} *{token, N+#D, L add [#NODE;]}", rate) + program("{token, N, L}{token, def: N2>=N, L2} --> {token, N, L}") + if (position in Rectangle(-1.0, -1.0, 2.0, 2.0)) { + program("{filteredmolecule} --> {active}", 0.5) + } + } + } + } + exportWith(CSVExporter("performance_test", 1.0)) { + -Time() + -moleculeReader("token", null, CommonFilters.NOFILTER.filteringPolicy, emptyList()) + } +} diff --git a/alchemist-loading/src/test/resources/dsl/yml/01-nodes.yml b/alchemist-loading/src/test/resources/dsl/yml/01-nodes.yml new file mode 100644 index 0000000000..b64b375972 --- /dev/null +++ b/alchemist-loading/src/test/resources/dsl/yml/01-nodes.yml @@ -0,0 +1,11 @@ +incarnation: sapere + +network-model: + type: ConnectWithinDistance + parameters: [5] + +deployments: + - type: Point + parameters: [0, 0] + - type: Point + parameters: [0, 1] diff --git a/alchemist-loading/src/test/resources/dsl/yml/02-manynodes.yml b/alchemist-loading/src/test/resources/dsl/yml/02-manynodes.yml new file mode 100644 index 0000000000..e8e3a10ff2 --- /dev/null +++ b/alchemist-loading/src/test/resources/dsl/yml/02-manynodes.yml @@ -0,0 +1,13 @@ +incarnation: sapere + +seeds: + scenario: 20 + simulation: 10 + +network-model: + type: ConnectWithinDistance + parameters: [0.5] + +deployments: + type: Circle + parameters: [10, 0, 0, 10] diff --git a/alchemist-loading/src/test/resources/dsl/yml/03-grid.yml b/alchemist-loading/src/test/resources/dsl/yml/03-grid.yml new file mode 100644 index 0000000000..010565ebae --- /dev/null +++ b/alchemist-loading/src/test/resources/dsl/yml/03-grid.yml @@ -0,0 +1,9 @@ +incarnation: sapere + +network-model: + type: ConnectWithinDistance + parameters: [0.5] + +deployments: + type: Grid + parameters: [-5, -5, 5, 5, 0.25, 0.25, 0, 0] \ No newline at end of file diff --git a/alchemist-loading/src/test/resources/dsl/yml/05-content.yml b/alchemist-loading/src/test/resources/dsl/yml/05-content.yml new file mode 100644 index 0000000000..d065057d75 --- /dev/null +++ b/alchemist-loading/src/test/resources/dsl/yml/05-content.yml @@ -0,0 +1,11 @@ +incarnation: sapere + +network-model: + type: ConnectWithinDistance + parameters: [0.5] + +deployments: + type: Grid + parameters: [-5, -5, 5, 5, 0.25, 0.25, 0.1, 0.1] + contents: + molecule: hello diff --git a/alchemist-loading/src/test/resources/dsl/yml/06-filters.yml b/alchemist-loading/src/test/resources/dsl/yml/06-filters.yml new file mode 100644 index 0000000000..dedebd5496 --- /dev/null +++ b/alchemist-loading/src/test/resources/dsl/yml/06-filters.yml @@ -0,0 +1,16 @@ +incarnation: sapere + +network-model: + type: ConnectWithinDistance + parameters: [0.5] + +deployments: + type: Grid + parameters: [-5, -5, 5, 5, 0.25, 0.25, 0.1, 0.1] + contents: + - molecule: hello + - in: + type: Rectangle + parameters: [-1, -1, 2, 2] + + molecule: token diff --git a/alchemist-loading/src/test/resources/dsl/yml/07-program.yml b/alchemist-loading/src/test/resources/dsl/yml/07-program.yml new file mode 100644 index 0000000000..c8f7425be8 --- /dev/null +++ b/alchemist-loading/src/test/resources/dsl/yml/07-program.yml @@ -0,0 +1,19 @@ +incarnation: sapere + +network-model: + type: ConnectWithinDistance + parameters: [0.5] + +deployments: + type: Grid + parameters: [-5, -5, 5, 5, 0.25, 0.25, 0.1, 0.1] + contents: + in: + type: Rectangle + parameters: [-0.5, -0.5, 1, 1] + molecule: token + programs: + - time-distribution: 1 + program: > + {token} --> {firing} + - program: "{firing} --> +{token}" diff --git a/alchemist-loading/src/test/resources/dsl/yml/08-protelisprogram.yml b/alchemist-loading/src/test/resources/dsl/yml/08-protelisprogram.yml new file mode 100644 index 0000000000..58186119d1 --- /dev/null +++ b/alchemist-loading/src/test/resources/dsl/yml/08-protelisprogram.yml @@ -0,0 +1,25 @@ +incarnation: protelis + +deployments: + - type: Point + parameters: [ 1.5, 0.5 ] + programs: + - time-distribution: + type: JaktaTimeDistribution + # Recursive construction of other types + parameters: + sense: + type: WeibullTime + parameters: [1.0, 1.0] + deliberate: + type: DiracComb + parameters: 0.1 + act: + type: ExponentialTime + parameters: 1.0 + program: | + 1 + 1 + +#terminate: +# - type: AfterTime +# parameters: [ 0 ] diff --git a/alchemist-loading/src/test/resources/dsl/yml/09-timedistribution.yml b/alchemist-loading/src/test/resources/dsl/yml/09-timedistribution.yml new file mode 100644 index 0000000000..e7a83147e8 --- /dev/null +++ b/alchemist-loading/src/test/resources/dsl/yml/09-timedistribution.yml @@ -0,0 +1,23 @@ +incarnation: sapere + +network-model: + type: ConnectWithinDistance + parameters: [0.5] + +_send: &grad + - time-distribution: + type: DiracComb + parameters: [0.5] + program: "{token, N, L} --> {token, N, L} *{token, N+#D, L add [#NODE;]}" + - program: > + {token, N, L}{token, def: N2>=N, L2} --> {token, N, L} + +deployments: + type: Grid + parameters: [-5, -5, 5, 5, 0.25, 0.25, 0.1, 0.1] + contents: + in: + type: Rectangle + parameters: [-0.5, -0.5, 1, 1] + molecule: token, 0, [] + programs: *grad \ No newline at end of file diff --git a/alchemist-loading/src/test/resources/dsl/yml/10-environment.yml b/alchemist-loading/src/test/resources/dsl/yml/10-environment.yml new file mode 100755 index 0000000000..120ac55610 --- /dev/null +++ b/alchemist-loading/src/test/resources/dsl/yml/10-environment.yml @@ -0,0 +1,25 @@ +environment: + type: OSMEnvironment + parameters: ["vcm.pbf", false] # Requires the file vcm.pbf in the classpath! + +incarnation: sapere + +_pools: + - pool: &move + - time-distribution: 15 + type: Event + actions: + - type: ReproduceGPSTrace + parameters: ["gpsTrace", true, "AlignToSimulationTime"] + +deployments: + - type: FromGPSTrace + parameters: [7, "gpsTrace", true, "AlignToSimulationTime"] + programs: + - *move + +terminate: + type: StableForSteps + parameters: + equalIntervals: 5 + checkInterval: 100 diff --git a/alchemist-loading/src/test/resources/dsl/yml/11-monitors.yml b/alchemist-loading/src/test/resources/dsl/yml/11-monitors.yml new file mode 100644 index 0000000000..0d148b8d91 --- /dev/null +++ b/alchemist-loading/src/test/resources/dsl/yml/11-monitors.yml @@ -0,0 +1,4 @@ +incarnation: sapere + +monitors: + - type: another.location.SimpleMonitor \ No newline at end of file diff --git a/alchemist-loading/src/test/resources/dsl/yml/12-layers.yml b/alchemist-loading/src/test/resources/dsl/yml/12-layers.yml new file mode 100644 index 0000000000..e18d04c92f --- /dev/null +++ b/alchemist-loading/src/test/resources/dsl/yml/12-layers.yml @@ -0,0 +1,19 @@ +incarnation: protelis + +environment: + type: Continuous2DEnvironment + parameters: [] + +layers: + - type: StepLayer + parameters: [2, 2, 100, 0] + molecule: A + - type: StepLayer + parameters: [-2, -2, 0, 100] + molecule: B + +deployments: + - type: Grid + parameters: [-5, -5, 5, 5, 0.25, 0.1, 0.1] + contents: + molecule: a \ No newline at end of file diff --git a/alchemist-loading/src/test/resources/dsl/yml/13-globalreaction.yml b/alchemist-loading/src/test/resources/dsl/yml/13-globalreaction.yml new file mode 100644 index 0000000000..c1e030c6c2 --- /dev/null +++ b/alchemist-loading/src/test/resources/dsl/yml/13-globalreaction.yml @@ -0,0 +1,9 @@ +incarnation: protelis + +environment: + type: Continuous2DEnvironment + global-programs: + - time-distribution: + type: DiracComb + parameters: [1.0] + type: GlobalTestReaction diff --git a/alchemist-loading/src/test/resources/dsl/yml/14-exporters.yml b/alchemist-loading/src/test/resources/dsl/yml/14-exporters.yml new file mode 100644 index 0000000000..768b46c188 --- /dev/null +++ b/alchemist-loading/src/test/resources/dsl/yml/14-exporters.yml @@ -0,0 +1,9 @@ +incarnation: protelis +export: + - type: CSVExporter + parameters: + fileNameRoot: "test_export_interval" + interval: 3.0 + data: + - time + - molecule: "default_module:default_program" diff --git a/alchemist-loading/src/test/resources/dsl/yml/15-variables.yml b/alchemist-loading/src/test/resources/dsl/yml/15-variables.yml new file mode 100644 index 0000000000..35eb15c1ac --- /dev/null +++ b/alchemist-loading/src/test/resources/dsl/yml/15-variables.yml @@ -0,0 +1,35 @@ +incarnation: sapere + +variables: + rate: &rate + type: GeometricVariable + parameters: [2, 0.1, 10, 9] + size: &size + type: LinearVariable + parameters: [5, 1, 10, 1] + mSize: &mSize + formula: -size + sourceStart: &sourceStart + formula: mSize / 10 + sourceSize: &sourceSize + formula: size / 5 + +network-model: + type: ConnectWithinDistance + parameters: [0.5] + +_send: &grad + - time-distribution: *rate + program: "{token, N, L} --> {token, N, L} *{token, N+#D, L add [#NODE;]}" + - program: > + {token, N, L}{token, def: N2>=N, L2} --> {token, N, L} + +deployments: + type: Grid + parameters: [*mSize, *mSize, *size, *size, 0.25, 0.25, 0.1, 0.1] + contents: + - in: + type: Rectangle + parameters: [*sourceStart, *sourceStart, *sourceSize, *sourceSize] + molecule: token, 0, [] + programs: *grad diff --git a/alchemist-loading/src/test/resources/dsl/yml/16-programsfilters.yml b/alchemist-loading/src/test/resources/dsl/yml/16-programsfilters.yml new file mode 100644 index 0000000000..86e1159b7d --- /dev/null +++ b/alchemist-loading/src/test/resources/dsl/yml/16-programsfilters.yml @@ -0,0 +1,22 @@ +incarnation: sapere + +network-model: + type: ConnectWithinDistance + parameters: [0.5] + +deployments: + type: Grid + parameters: [-5, -5, 5, 5, 0.25, 0.25, 0.1, 0.1] + contents: + in: + type: Rectangle + parameters: [-0.5, -0.5, 1, 1] + molecule: token + programs: + - time-distribution: 1 + in: + type: Rectangle + parameters: [ -0.5, -0.5, 1, 1 ] + program: > + {token} --> {firing} + - program: "{firing} --> +{token}" diff --git a/alchemist-loading/src/test/resources/dsl/yml/17-customnodes.yml b/alchemist-loading/src/test/resources/dsl/yml/17-customnodes.yml new file mode 100644 index 0000000000..1c5a5a3706 --- /dev/null +++ b/alchemist-loading/src/test/resources/dsl/yml/17-customnodes.yml @@ -0,0 +1,7 @@ +incarnation: sapere + +deployments: + type: Circle + parameters: [10, 0, 0, 5] + nodes: + type: it.unibo.alchemist.model.nodes.TestNode diff --git a/alchemist-loading/src/test/resources/dsl/yml/18-properties.yml b/alchemist-loading/src/test/resources/dsl/yml/18-properties.yml new file mode 100644 index 0000000000..5bcb8f217f --- /dev/null +++ b/alchemist-loading/src/test/resources/dsl/yml/18-properties.yml @@ -0,0 +1,18 @@ +incarnation: sapere + +deployments: + - type: Circle + parameters: [1000, 0, 0, 15] + properties: + - type: TestNodeProperty + parameters: ["a"] + in: + type: Rectangle + parameters: [-3, -3, 2, 2] + - type: TestNodeProperty + parameters: [ "b" ] + in: + type: Rectangle + parameters: [3, 3, 2, 2] + + diff --git a/alchemist-loading/src/test/resources/dsl/yml/19-performance.yml b/alchemist-loading/src/test/resources/dsl/yml/19-performance.yml new file mode 100644 index 0000000000..6e0f1d2fbc --- /dev/null +++ b/alchemist-loading/src/test/resources/dsl/yml/19-performance.yml @@ -0,0 +1,76 @@ +incarnation: sapere + +seeds: + scenario: 42 + simulation: 24 + +network-model: + type: ConnectWithinDistance + parameters: [0.5] + +environment: + type: Continuous2DEnvironment + parameters: [] + +variables: + rate: &rate + type: GeometricVariable + parameters: [2, 0.1, 10, 9] + size: &size + type: LinearVariable + parameters: [5, 1, 10, 1] + mSize: &mSize + formula: -size + sourceStart: &sourceStart + formula: mSize / 10 + sourceSize: &sourceSize + formula: size / 5 + +monitors: + - type: another.location.SimpleMonitor + +export: + - type: CSVExporter + parameters: + fileNameRoot: "performance_test" + interval: 1.0 + data: + - time + - molecule: "token" + +deployments: + - type: Circle + parameters: [200, 0, 0, 20] + contents: + - molecule: basemolecule + - in: + type: Rectangle + parameters: [-5, -5, 10, 10] + molecule: centermolecule + programs: + - time-distribution: 1 + program: "{basemolecule} --> {processed}" + - program: "{processed} --> +{basemolecule}" + - type: Grid + parameters: [*mSize, *mSize, *size, *size, 0.25, 0.25, 0.1, 0.1] + contents: + - molecule: gridmolecule + - in: + type: Rectangle + parameters: [*sourceStart, *sourceStart, *sourceSize, *sourceSize] + molecule: token, 0, [] + - in: + type: Rectangle + parameters: [-2, -2, 4, 4] + molecule: filteredmolecule + programs: + - time-distribution: *rate + program: "{token, N, L} --> {token, N, L} *{token, N+#D, L add [#NODE;]}" + - program: > + {token, N, L}{token, def: N2>=N, L2} --> {token, N, L} + - time-distribution: 0.5 + in: + type: Rectangle + parameters: [-1, -1, 2, 2] + program: "{filteredmolecule} --> {active}" + diff --git a/alchemist-loading/src/test/resources/dsl/yml/20-move.yml b/alchemist-loading/src/test/resources/dsl/yml/20-move.yml new file mode 100644 index 0000000000..fa8cb62689 --- /dev/null +++ b/alchemist-loading/src/test/resources/dsl/yml/20-move.yml @@ -0,0 +1,22 @@ +incarnation: sapere +environment: { type: OSMEnvironment } +network-model: { type: ConnectWithinDistance, parameters: [1000] } +_venice_lagoon: &lagoon + [[45.2038121, 12.2504425], [45.2207426, 12.2641754], [45.2381516, 12.2806549], + [45.2570053, 12.2895813], [45.276336, 12.2957611], [45.3029049, 12.2991943], + [45.3212544, 12.3046875], [45.331875, 12.3040009], [45.3453893, 12.3040009], + [45.3502151, 12.3156738], [45.3622776, 12.3232269], [45.3719259, 12.3300934], + [45.3830193, 12.3348999], [45.395557, 12.3445129], [45.3998964, 12.3300934], + [45.4018249, 12.3136139], [45.4105023, 12.3122406], [45.4167685, 12.311554], + [45.4278531, 12.3012543], [45.4408627, 12.2902679], [45.4355628, 12.2772217], + [45.4206242, 12.2703552], [45.3994143, 12.2744751], [45.3738553, 12.2676086], + [45.3579354, 12.2614288], [45.3429763, 12.2497559], [45.3198059, 12.2408295], + [45.2975921, 12.2346497], [45.2802014, 12.2408295], [45.257972, 12.233963], + [45.2038121, 12.2504425]] +deployments: + type: Polygon + parameters: [500, *lagoon] + programs: + - time-distribution: 10 + type: Event + actions: { type: BrownianMove, parameters: [0.0005]} \ No newline at end of file diff --git a/alchemist-loading/src/test/resources/regression/2022-coordination-null-bindings.yml b/alchemist-loading/src/test/resources/regression/2022-coordination-null-bindings.yml index 56253e7ebb..566d79cf04 100644 --- a/alchemist-loading/src/test/resources/regression/2022-coordination-null-bindings.yml +++ b/alchemist-loading/src/test/resources/regression/2022-coordination-null-bindings.yml @@ -6,13 +6,13 @@ variables: kotlin: &k language: kotlin # Once bugged due to: https://youtrack.jetbrains.com/issue/KT-51213 - formula: base.toString() + formula: base.toString() + " kotlin" groovy: &g language: groovy - formula: base.toString() + formula: base.toString() + " groovy" scala: &s language: scala - formula: if (base == null) "null" else base.toString() + formula: (if (base == null) "null" else base.toString()) + " scala" result: type: ArbitraryVariable parameters: [*k, [*g, *s, *k]] diff --git a/alchemist-loading/src/test/resources/synthetic/convoluted_variables.yml b/alchemist-loading/src/test/resources/synthetic/convoluted_variables.yml index 5cce51e942..11f00f56f1 100644 --- a/alchemist-loading/src/test/resources/synthetic/convoluted_variables.yml +++ b/alchemist-loading/src/test/resources/synthetic/convoluted_variables.yml @@ -12,7 +12,7 @@ variables: default: 0 speed: &speed type: ArbitraryVariable - parameters: [0.1, [0.1, 0.1, 1]] + parameters: [0.1, [0.1, 0.11, 1]] latencies: formula: "[0.001, 0.01, 0.1, 1]" tolerances: diff --git a/alchemist-maps/build.gradle.kts b/alchemist-maps/build.gradle.kts index 0b45f11e5f..29c74442dd 100644 --- a/alchemist-maps/build.gradle.kts +++ b/alchemist-maps/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2022, Danilo Pianini and contributors + * Copyright (C) 2010-2025, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -15,6 +15,7 @@ plugins { } dependencies { + ksp(alchemist("factories-generator")) api(alchemist("api")) implementation(alchemist("implementationbase")) diff --git a/alchemist-physics/build.gradle.kts b/alchemist-physics/build.gradle.kts index a2a01bad46..bf59170f29 100644 --- a/alchemist-physics/build.gradle.kts +++ b/alchemist-physics/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2022, Danilo Pianini and contributors + * Copyright (C) 2010-2025, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -14,6 +14,7 @@ plugins { } dependencies { + ksp(alchemist("factories-generator")) api(alchemist("api")) api(alchemist("euclidean-geometry")) implementation(alchemist("implementationbase")) diff --git a/alchemist-physics/src/main/kotlin/it/unibo/alchemist/model/physics/actions/HeadTowardRandomDirection.kt b/alchemist-physics/src/main/kotlin/it/unibo/alchemist/model/physics/actions/HeadTowardRandomDirection.kt index 609242c4a6..985777b0a4 100644 --- a/alchemist-physics/src/main/kotlin/it/unibo/alchemist/model/physics/actions/HeadTowardRandomDirection.kt +++ b/alchemist-physics/src/main/kotlin/it/unibo/alchemist/model/physics/actions/HeadTowardRandomDirection.kt @@ -9,7 +9,6 @@ package it.unibo.alchemist.model.physics.actions -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings import it.unibo.alchemist.model.Action import it.unibo.alchemist.model.Context import it.unibo.alchemist.model.Node @@ -51,10 +50,8 @@ class HeadTowardRandomDirection( */ override fun getContext() = Context.LOCAL - @SuppressFBWarnings("SA_LOCAL_SELF_ASSIGNMENT") private fun Euclidean2DPosition.asAngle() = atan2(y, x) - @SuppressFBWarnings("SA_LOCAL_SELF_ASSIGNMENT") private fun Double.toDirection() = Euclidean2DPosition(cos(this), sin(this)) private companion object { diff --git a/alchemist-physics/src/main/kotlin/it/unibo/alchemist/model/physics/reactions/PhysicsUpdate.kt b/alchemist-physics/src/main/kotlin/it/unibo/alchemist/model/physics/reactions/PhysicsUpdate.kt index d778ba8e08..b306fdf1b7 100644 --- a/alchemist-physics/src/main/kotlin/it/unibo/alchemist/model/physics/reactions/PhysicsUpdate.kt +++ b/alchemist-physics/src/main/kotlin/it/unibo/alchemist/model/physics/reactions/PhysicsUpdate.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2023, Danilo Pianini and contributors + * Copyright (C) 2010-2025, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -31,11 +31,12 @@ class PhysicsUpdate( * The environment to update. */ val environment: Dynamics2DEnvironment, - override val timeDistribution: TimeDistribution, + override val timeDistribution: TimeDistribution = DiracComb(DEFAULT_RATE), ) : GlobalReaction { + constructor( environment: Dynamics2DEnvironment, - updateRate: Double = 30.0, + updateRate: Double, ) : this(environment, DiracComb(updateRate)) override val outboundDependencies: ListSet = ListSet.of(PhysicsDependency) @@ -64,4 +65,8 @@ class PhysicsUpdate( override fun update(currentTime: Time, hasBeenExecuted: Boolean, environment: Environment) = Unit override fun initializationComplete(atTime: Time, environment: Environment) = Unit + + private companion object { + const val DEFAULT_RATE = 30.0 + } } diff --git a/alchemist-physics/src/test/kotlin/it/unibo/alchemist/model/physics/environments/TestEuclideanPhysics2DEnvironment.kt b/alchemist-physics/src/test/kotlin/it/unibo/alchemist/model/physics/environments/TestEuclideanPhysics2DEnvironment.kt index c7f30784f9..f74d9f1a7d 100644 --- a/alchemist-physics/src/test/kotlin/it/unibo/alchemist/model/physics/environments/TestEuclideanPhysics2DEnvironment.kt +++ b/alchemist-physics/src/test/kotlin/it/unibo/alchemist/model/physics/environments/TestEuclideanPhysics2DEnvironment.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2023, Danilo Pianini and contributors + * Copyright (C) 2010-2026, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -9,7 +9,6 @@ package it.unibo.alchemist.model.physics.environments -import it.unibo.alchemist.model.Incarnation import it.unibo.alchemist.model.Node import it.unibo.alchemist.model.Node.Companion.asProperty import it.unibo.alchemist.model.SupportedIncarnations @@ -32,13 +31,10 @@ class TestEuclideanPhysics2DEnvironment { private lateinit var node2: Node private lateinit var node3: Node - private fun createCircleNode( - incarnation: Incarnation, - environment: Physics2DEnvironment, - radius: Double, - ) = GenericNode(incarnation, environment).apply { - addProperty(CircularArea(environment, this, radius)) - } + private fun createCircleNode(environment: Physics2DEnvironment, radius: Double) = + GenericNode(environment).apply { + addProperty(CircularArea(environment, this, radius)) + } private fun getNodeRadius(node: Node): Double = node.asProperty>().shape.radius @@ -47,9 +43,9 @@ class TestEuclideanPhysics2DEnvironment { val incarnation = SupportedIncarnations.get("protelis").orElseThrow() environment = ContinuousPhysics2DEnvironment(incarnation) environment.linkingRule = NoLinks() - node1 = createCircleNode(incarnation, environment, DEFAULT_SHAPE_SIZE / 2) - node2 = createCircleNode(incarnation, environment, DEFAULT_SHAPE_SIZE / 2) - node3 = createCircleNode(incarnation, environment, DEFAULT_SHAPE_SIZE / 2) + node1 = createCircleNode(environment, DEFAULT_SHAPE_SIZE / 2) + node2 = createCircleNode(environment, DEFAULT_SHAPE_SIZE / 2) + node3 = createCircleNode(environment, DEFAULT_SHAPE_SIZE / 2) } @Test diff --git a/alchemist-smartcam/build.gradle.kts b/alchemist-smartcam/build.gradle.kts index 0f432bbdb9..de06d07436 100644 --- a/alchemist-smartcam/build.gradle.kts +++ b/alchemist-smartcam/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2022, Danilo Pianini and contributors + * Copyright (C) 2010-2025, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -15,12 +15,11 @@ plugins { } dependencies { + ksp(alchemist("factories-generator")) api(alchemist("api")) - implementation(alchemist("euclidean-geometry")) implementation(alchemist("implementationbase")) implementation(alchemist("physics")) - testImplementation(incarnation("protelis")) testImplementation(alchemist("loading")) } diff --git a/alchemist-swingui/src/main/java/it/unibo/alchemist/boundary/swingui/effect/impl/AbstractDrawLayers.java b/alchemist-swingui/src/main/java/it/unibo/alchemist/boundary/swingui/effect/impl/AbstractDrawLayers.java index fe92c127d4..e02301943b 100644 --- a/alchemist-swingui/src/main/java/it/unibo/alchemist/boundary/swingui/effect/impl/AbstractDrawLayers.java +++ b/alchemist-swingui/src/main/java/it/unibo/alchemist/boundary/swingui/effect/impl/AbstractDrawLayers.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2022, Danilo Pianini and contributors + * Copyright (C) 2010-2026, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -100,7 +100,7 @@ protected > void draw( if (layerFilter && molecule != null && environment.getLayer(molecule) != null) { toDraw.add(environment.getLayer(molecule)); } else { - toDraw.addAll(environment.getLayers()); + toDraw.addAll(environment.getLayers().values()); } if (!toDraw.isEmpty()) { drawLayers(toDraw, environment, graphics2D, wormhole); diff --git a/alchemist-test/build.gradle.kts b/alchemist-test/build.gradle.kts index 1fb653fa15..e473fd5898 100644 --- a/alchemist-test/build.gradle.kts +++ b/alchemist-test/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2022, Danilo Pianini and contributors + * Copyright (C) 2010-2025, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -9,20 +9,12 @@ import Libs.alchemist -/* - * Copyright (C) 2010-2020, Danilo Pianini and contributors - * listed in the main project's alchemist/build.gradle.kts file. - * - * This file is part of Alchemist, and is distributed under the terms of the - * GNU General Public License, with a linking exception, - * as described in the file LICENSE in the Alchemist distribution's top directory. - */ - plugins { id("kotlin-jvm-convention") } dependencies { + ksp(alchemist("factories-generator")) api(alchemist("api")) api(alchemist("engine")) api(alchemist("loading")) diff --git a/alchemist-test/src/main/kotlin/it/unibo/alchemist/test/Assertions.kt b/alchemist-test/src/main/kotlin/it/unibo/alchemist/test/Assertions.kt new file mode 100644 index 0000000000..1d4596127e --- /dev/null +++ b/alchemist-test/src/main/kotlin/it/unibo/alchemist/test/Assertions.kt @@ -0,0 +1,152 @@ +/* + * Copyright (C) 2010-2026, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + +package it.unibo.alchemist.test + +import it.unibo.alchemist.boundary.OutputMonitor +import it.unibo.alchemist.core.Simulation +import it.unibo.alchemist.model.Action +import it.unibo.alchemist.model.Actionable +import it.unibo.alchemist.model.Condition +import it.unibo.alchemist.model.Environment +import it.unibo.alchemist.model.LinkingRule +import it.unibo.alchemist.model.Node +import it.unibo.alchemist.model.NodeProperty +import it.unibo.alchemist.model.Position +import it.unibo.alchemist.model.Time +import it.unibo.alchemist.model.TimeDistribution +import it.unibo.alchemist.test.AlchemistTesting.runInCurrentThread +import java.util.concurrent.CyclicBarrier +import java.util.concurrent.TimeUnit +import kotlin.test.assertContentEquals +import org.junit.jupiter.api.Assertions.assertEquals + +private fun Iterable.ebeEquals(other: Iterable, elementComparator: (T, T) -> Unit) { + val thisList = this.toList() + val otherList = other.toList() + assertEquals(otherList.size, thisList.size) + otherList.zip(thisList).forEach { (expected, actual) -> + elementComparator(expected, actual) + } +} + +infix fun Condition<*>.shouldEqual(other: Condition<*>) { + assertEquals(other::class, this::class, "Condition types don't match") + assertEquals(other.context, context, "Condition contexts don't match") + assertEquals(other.isValid, isValid, "Condition validity doesn't match") + assertEquals(other.propensityContribution, propensityContribution) + assertEquals(other.inboundDependencies, inboundDependencies) +} + +infix fun Action<*>.shouldEqual(other: Action<*>) { + assertEquals(other::class, this::class, "Action types don't match") + assertEquals(other.context, context, "Action contexts don't match") + assertEquals(other.outboundDependencies, outboundDependencies) +} + +infix fun TimeDistribution<*>.shouldEqual(other: TimeDistribution<*>) { + assertEquals(other::class, this::class, "TimeDistribution types don't match") + assertEquals(other.rate, rate) + assertEquals(other.nextOccurence, nextOccurence) +} + +infix fun Actionable<*>.shouldEqual(other: Actionable<*>) { + assertEquals(other::class, this::class, "Actionable types don't match") + assertEquals(other.inboundDependencies, inboundDependencies) + assertEquals(other.outboundDependencies, outboundDependencies) + assertEquals(other.rate, rate) + assertEquals(other.tau, tau) + timeDistribution shouldEqual other.timeDistribution + conditions.ebeEquals(other.conditions) { expected, actual -> actual shouldEqual expected } + actions.ebeEquals(other.actions) { expected, actual -> actual shouldEqual expected } +} + +infix fun NodeProperty<*>.shouldEqual(other: NodeProperty<*>) { + assertEquals(other::class, this::class, "NodeProperty types don't match") +} + +infix fun Node<*>.shouldEqual(other: Node<*>) { + assertEquals(other.id, id) + assertEquals(other.moleculeCount, moleculeCount) + assertEquals(other.contents, contents) + assertEquals(other.properties.size, properties.size) + properties.ebeEquals(other.properties) { expected, actual -> actual shouldEqual expected } + reactions.ebeEquals(other.reactions) { expected, actual -> actual shouldEqual expected } +} + +infix fun LinkingRule<*, *>.shouldEqual(other: LinkingRule<*, *>) { + assertEquals(other::class, this::class, "LinkingRule types don't match") + assertEquals(other.isLocallyConsistent, isLocallyConsistent) +} + +infix fun > Environment.shouldEqual(other: Environment) { + assertEquals(other::class, this::class, "Environment types don't match") + assertContentEquals(other.size, size, "Environment sizes don't match") + assertContentEquals(other.sizeInDistanceUnits, sizeInDistanceUnits) + assertEquals(other.incarnation::class, incarnation::class) + assertEquals(other.dimensions, dimensions) + assertEquals(other.isTerminated, isTerminated) + assertContentEquals(other.sizeInDistanceUnits, sizeInDistanceUnits) + linkingRule shouldEqual other.linkingRule + val positions = nodes.sortedBy { it.id }.map { getPosition(it) } + val otherPositions = other.sortedBy { it.id }.map { getPosition(it) } + positions.ebeEquals(otherPositions) { expected, actual -> assertEquals(expected, actual) } + nodes.ebeEquals(other.nodes) { expected, actual -> + actual shouldEqual expected + } + globalReactions.ebeEquals(other.globalReactions) { expected, actual -> actual shouldEqual expected } + layers.toList().sortedBy { (molecule, _) -> molecule.toString() }.ebeEquals( + other.layers.toList().sortedBy { (molecule, _) -> molecule.toString() }, + ) { expected, actual -> + assertEquals(expected.first, actual.first, "Layer molecules don't match") + positions.forEach { position -> + assertEquals( + expected.second.getValue(position), + actual.second.getValue(position), + "Layer values at position $position don't match", + ) + } + } +} + +fun > Simulation.equalsForSteps(other: Simulation, steps: Long) { + assertEquals(other::class, this::class, "Simulation types don't match") + outputMonitors.sortedBy { + it::class.simpleName + }.ebeEquals(other.outputMonitors.sortedBy { it::class.simpleName }) { expected, actual -> + assertEquals(expected::class, actual::class, "OutputMonitor types don't match") + } + val expectedThread = Thread(null, other, "Alchemist-Test-Expected") + val actualThread = Thread.currentThread() + val syncMonitor = object : OutputMonitor { + val barrier = CyclicBarrier(2) + override fun stepDone(environment: Environment, reaction: Actionable?, time: Time, step: Long) { + barrier.await(1, TimeUnit.SECONDS) + if (barrier.isBroken) { + error("Barrier broken while waiting for step $step to complete") + } + if (Thread.currentThread() == actualThread) { + assertEquals(other.time, this@equalsForSteps.time) + assertEquals(other.step, this@equalsForSteps.step) + this@equalsForSteps.environment shouldEqual other.environment + } + if (environment.simulation.step >= steps) { + environment.simulation.terminate() + } + barrier.await(1, TimeUnit.SECONDS) + } + } + addOutputMonitor(syncMonitor) + other.addOutputMonitor(syncMonitor) + expectedThread.start() + other.play() + runInCurrentThread() + error.map { throw it } + other.error.map { throw it } +} diff --git a/alchemist-test/src/main/kotlin/it/unibo/alchemist/test/GlobalTestReaction.kt b/alchemist-test/src/main/kotlin/it/unibo/alchemist/test/GlobalTestReaction.kt index daca33f6a1..168c472ee2 100644 --- a/alchemist-test/src/main/kotlin/it/unibo/alchemist/test/GlobalTestReaction.kt +++ b/alchemist-test/src/main/kotlin/it/unibo/alchemist/test/GlobalTestReaction.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2022, Danilo Pianini and contributors + * Copyright (C) 2010-2025, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -20,7 +20,7 @@ import it.unibo.alchemist.model.TimeDistribution import org.danilopianini.util.ListSet import org.danilopianini.util.ListSets -class GlobalTestReaction(override val timeDistribution: TimeDistribution, val environment: Environment) : +class GlobalTestReaction(val environment: Environment, override val timeDistribution: TimeDistribution) : GlobalReaction { override fun compareTo(other: Actionable): Int = tau.compareTo(other.tau) diff --git a/alchemist-web-renderer/build.gradle.kts b/alchemist-web-renderer/build.gradle.kts index 2015342b55..68174d7d84 100644 --- a/alchemist-web-renderer/build.gradle.kts +++ b/alchemist-web-renderer/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2022, Danilo Pianini and contributors + * Copyright (C) 2010-2026, Danilo Pianini and contributors * listed, for each module, in the respective subproject's build.gradle.kts file. * * This file is part of Alchemist, and is distributed under the terms of the @@ -10,7 +10,6 @@ import Libs.alchemist import Libs.incarnation import com.google.devtools.ksp.gradle.KspAATask -import dev.detekt.gradle.Detekt plugins { id("kotlin-multiplatform-convention") @@ -85,9 +84,3 @@ publishing.publications.withType().configureEach { } } } - -// exclude files in build from Detekt -tasks.withType().configureEach { - exclude("**/boundary/graphql/client/**") - exclude("**/io/kotest/**") -} diff --git a/build.gradle.kts b/build.gradle.kts index e5e1cb9871..dcaf7b7a20 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -10,6 +10,7 @@ import Libs.alchemist import Libs.incarnation import com.github.spotbugs.snom.SpotBugsTask +import dev.detekt.gradle.Detekt import it.unibo.alchemist.build.id import it.unibo.alchemist.build.isInCI import it.unibo.alchemist.build.isMac @@ -71,6 +72,17 @@ allprojects { } } + // STATIC ANALYSIS + + tasks.withType().configureEach { + exclude { fileTree -> + val absolutePath = fileTree.file.absolutePath + listOf("build", "generated") + .map { "${File.separator}$it${File.separator}" } + .any { it in absolutePath } + } + } + // PUBLISHING tasks.withType().configureEach { diff --git a/buildSrc/src/main/kotlin/Libs.kt b/buildSrc/src/main/kotlin/Libs.kt index 3ec1b7b8ad..3372f68665 100644 --- a/buildSrc/src/main/kotlin/Libs.kt +++ b/buildSrc/src/main/kotlin/Libs.kt @@ -13,7 +13,6 @@ import kotlin.String /** * Statically defined libraries used by the project. */ -@Suppress("UndocumentedPublicProperty") object Libs { /** diff --git a/buildSrc/src/main/kotlin/kotlin-jvm-convention.gradle.kts b/buildSrc/src/main/kotlin/kotlin-jvm-convention.gradle.kts index 3261aca5aa..72de86b01b 100644 --- a/buildSrc/src/main/kotlin/kotlin-jvm-convention.gradle.kts +++ b/buildSrc/src/main/kotlin/kotlin-jvm-convention.gradle.kts @@ -1,3 +1,12 @@ +/* + * Copyright (C) 2010-2025, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ + import Libs.alchemist import it.unibo.alchemist.build.catalog import org.jetbrains.kotlin.gradle.dsl.JvmDefaultMode @@ -15,6 +24,7 @@ plugins { id("dokka-convention") id("kotlin-static-analysis-convention") id("org.danilopianini.gradle-java-qa") + id("com.google.devtools.ksp") id("power-assert-convention") } @@ -51,6 +61,7 @@ java { kotlin { compilerOptions { jvmDefault.set(JvmDefaultMode.ENABLE) + freeCompilerArgs.add("-Xcontext-parameters") // Enable context receivers } } diff --git a/buildSrc/src/main/kotlin/kotlin-multiplatform-convention.gradle.kts b/buildSrc/src/main/kotlin/kotlin-multiplatform-convention.gradle.kts index c9869794f9..2a55186632 100644 --- a/buildSrc/src/main/kotlin/kotlin-multiplatform-convention.gradle.kts +++ b/buildSrc/src/main/kotlin/kotlin-multiplatform-convention.gradle.kts @@ -27,6 +27,7 @@ kotlin { jvm { compilerOptions { jvmDefault.set(JvmDefaultMode.ENABLE) + freeCompilerArgs.add("-Xcontext-parameters") // Enable context receivers } } diff --git a/buildSrc/src/main/kotlin/kotlin-static-analysis-convention.gradle.kts b/buildSrc/src/main/kotlin/kotlin-static-analysis-convention.gradle.kts index 71e9819af5..fbe0d7bbb3 100644 --- a/buildSrc/src/main/kotlin/kotlin-static-analysis-convention.gradle.kts +++ b/buildSrc/src/main/kotlin/kotlin-static-analysis-convention.gradle.kts @@ -24,8 +24,15 @@ private val kmpGenerationTasks get(): TaskCollection = tasks.matching { ta } } +private val kspTasks get(): TaskCollection = tasks.matching { task -> + task.name.startsWith("ksp") +} tasks.withType().configureEach { dependsOn(kmpGenerationTasks) + dependsOn(kspTasks) + excludeGenerated() + exclude("**/build/generated/**") + exclude("**/generated/**") } tasks.allVerificationTasks.configureEach { excludeGenerated() } diff --git a/dokka-cache/ch.qos.logback/logback-classic/1.5.21.list b/dokka-cache/ch.qos.logback/logback-classic/1.5.21.list new file mode 100644 index 0000000000..eacb1257cb --- /dev/null +++ b/dokka-cache/ch.qos.logback/logback-classic/1.5.21.list @@ -0,0 +1,29 @@ +module:ch.qos.logback.classic +ch.qos.logback.classic +ch.qos.logback.classic.boolex +ch.qos.logback.classic.encoder +ch.qos.logback.classic.filter +ch.qos.logback.classic.helpers +ch.qos.logback.classic.html +ch.qos.logback.classic.joran +ch.qos.logback.classic.joran.action +ch.qos.logback.classic.joran.sanity +ch.qos.logback.classic.joran.serializedModel +ch.qos.logback.classic.jul +ch.qos.logback.classic.layout +ch.qos.logback.classic.log4j +ch.qos.logback.classic.model +ch.qos.logback.classic.model.processor +ch.qos.logback.classic.model.util +ch.qos.logback.classic.net +ch.qos.logback.classic.net.server +ch.qos.logback.classic.pattern +ch.qos.logback.classic.pattern.color +ch.qos.logback.classic.selector +ch.qos.logback.classic.selector.servlet +ch.qos.logback.classic.servlet +ch.qos.logback.classic.sift +ch.qos.logback.classic.spi +ch.qos.logback.classic.turbo +ch.qos.logback.classic.tyler +ch.qos.logback.classic.util diff --git a/dokka-cache/com.google.devtools.ksp/symbol-processing-api/2.3.2.list b/dokka-cache/com.google.devtools.ksp/symbol-processing-api/2.3.2.list new file mode 100644 index 0000000000..a3c54d253d --- /dev/null +++ b/dokka-cache/com.google.devtools.ksp/symbol-processing-api/2.3.2.list @@ -0,0 +1,8 @@ +$dokka.format:javadoc-v1 +$dokka.linkExtension:html +$dokka.location:com.google.devtools.ksp.processing/Dependencies.Companion///PointingToDeclaration/com/google/devtools/ksp/processing/Dependencies.Companion.html +com.google.devtools.ksp +com.google.devtools.ksp.processing +com.google.devtools.ksp.symbol +com.google.devtools.ksp.visitor + diff --git a/dokka-cache/it.unibo.alchemist/alchemist-api/42.3.18.list b/dokka-cache/it.unibo.alchemist/alchemist-api/42.3.18.list new file mode 100644 index 0000000000..b08805adc4 --- /dev/null +++ b/dokka-cache/it.unibo.alchemist/alchemist-api/42.3.18.list @@ -0,0 +1,287 @@ +$dokka.format:html-v1 +$dokka.linkExtension:html +$dokka.location:it.unibo.alchemist.boundary////PointingToDeclaration/alchemist-api/it.unibo.alchemist.boundary/index.html +$dokka.location:it.unibo.alchemist.boundary/OutputMonitor///PointingToDeclaration/alchemist-api/it.unibo.alchemist.boundary/-output-monitor/index.html +$dokka.location:it.unibo.alchemist.boundary/OutputMonitor/finished/#it.unibo.alchemist.model.Environment#it.unibo.alchemist.model.Time#long/PointingToDeclaration/alchemist-api/it.unibo.alchemist.boundary/-output-monitor/finished.html +$dokka.location:it.unibo.alchemist.boundary/OutputMonitor/initialized/#it.unibo.alchemist.model.Environment/PointingToDeclaration/alchemist-api/it.unibo.alchemist.boundary/-output-monitor/initialized.html +$dokka.location:it.unibo.alchemist.boundary/OutputMonitor/stepDone/#it.unibo.alchemist.model.Environment#it.unibo.alchemist.model.Actionable#it.unibo.alchemist.model.Time#long/PointingToDeclaration/alchemist-api/it.unibo.alchemist.boundary/-output-monitor/step-done.html +$dokka.location:it.unibo.alchemist.core////PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/index.html +$dokka.location:it.unibo.alchemist.core/DependencyGraph///PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/-dependency-graph/index.html +$dokka.location:it.unibo.alchemist.core/DependencyGraph/addNeighbor/#it.unibo.alchemist.model.Node#it.unibo.alchemist.model.Node/PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/-dependency-graph/add-neighbor.html +$dokka.location:it.unibo.alchemist.core/DependencyGraph/createDependencies/#it.unibo.alchemist.model.Actionable/PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/-dependency-graph/create-dependencies.html +$dokka.location:it.unibo.alchemist.core/DependencyGraph/globalInputContextReactions/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/-dependency-graph/global-input-context-reactions.html +$dokka.location:it.unibo.alchemist.core/DependencyGraph/outboundDependencies/#it.unibo.alchemist.model.Actionable/PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/-dependency-graph/outbound-dependencies.html +$dokka.location:it.unibo.alchemist.core/DependencyGraph/removeDependencies/#it.unibo.alchemist.model.Actionable/PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/-dependency-graph/remove-dependencies.html +$dokka.location:it.unibo.alchemist.core/DependencyGraph/removeNeighbor/#it.unibo.alchemist.model.Node#it.unibo.alchemist.model.Node/PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/-dependency-graph/remove-neighbor.html +$dokka.location:it.unibo.alchemist.core/Scheduler///PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/-scheduler/index.html +$dokka.location:it.unibo.alchemist.core/Scheduler/addReaction/#it.unibo.alchemist.model.Actionable/PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/-scheduler/add-reaction.html +$dokka.location:it.unibo.alchemist.core/Scheduler/getNext/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/-scheduler/get-next.html +$dokka.location:it.unibo.alchemist.core/Scheduler/removeReaction/#it.unibo.alchemist.model.Actionable/PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/-scheduler/remove-reaction.html +$dokka.location:it.unibo.alchemist.core/Scheduler/updateReaction/#it.unibo.alchemist.model.Actionable/PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/-scheduler/update-reaction.html +$dokka.location:it.unibo.alchemist.core/Simulation///PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/-simulation/index.html +$dokka.location:it.unibo.alchemist.core/Simulation/addOutputMonitor/#it.unibo.alchemist.boundary.OutputMonitor/PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/-simulation/add-output-monitor.html +$dokka.location:it.unibo.alchemist.core/Simulation/getEnvironment/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/-simulation/get-environment.html +$dokka.location:it.unibo.alchemist.core/Simulation/getError/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/-simulation/get-error.html +$dokka.location:it.unibo.alchemist.core/Simulation/getOutputMonitors/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/-simulation/get-output-monitors.html +$dokka.location:it.unibo.alchemist.core/Simulation/getStatus/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/-simulation/get-status.html +$dokka.location:it.unibo.alchemist.core/Simulation/getStep/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/-simulation/get-step.html +$dokka.location:it.unibo.alchemist.core/Simulation/getTime/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/-simulation/get-time.html +$dokka.location:it.unibo.alchemist.core/Simulation/goToStep/#long/PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/-simulation/go-to-step.html +$dokka.location:it.unibo.alchemist.core/Simulation/goToTime/#it.unibo.alchemist.model.Time/PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/-simulation/go-to-time.html +$dokka.location:it.unibo.alchemist.core/Simulation/neighborAdded/#it.unibo.alchemist.model.Node#it.unibo.alchemist.model.Node/PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/-simulation/neighbor-added.html +$dokka.location:it.unibo.alchemist.core/Simulation/neighborRemoved/#it.unibo.alchemist.model.Node#it.unibo.alchemist.model.Node/PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/-simulation/neighbor-removed.html +$dokka.location:it.unibo.alchemist.core/Simulation/nodeAdded/#it.unibo.alchemist.model.Node/PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/-simulation/node-added.html +$dokka.location:it.unibo.alchemist.core/Simulation/nodeMoved/#it.unibo.alchemist.model.Node/PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/-simulation/node-moved.html +$dokka.location:it.unibo.alchemist.core/Simulation/nodeRemoved/#it.unibo.alchemist.model.Node#it.unibo.alchemist.model.Neighborhood/PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/-simulation/node-removed.html +$dokka.location:it.unibo.alchemist.core/Simulation/pause/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/-simulation/pause.html +$dokka.location:it.unibo.alchemist.core/Simulation/play/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/-simulation/play.html +$dokka.location:it.unibo.alchemist.core/Simulation/reactionAdded/#it.unibo.alchemist.model.Actionable/PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/-simulation/reaction-added.html +$dokka.location:it.unibo.alchemist.core/Simulation/reactionRemoved/#it.unibo.alchemist.model.Actionable/PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/-simulation/reaction-removed.html +$dokka.location:it.unibo.alchemist.core/Simulation/removeOutputMonitor/#it.unibo.alchemist.boundary.OutputMonitor/PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/-simulation/remove-output-monitor.html +$dokka.location:it.unibo.alchemist.core/Simulation/schedule/#org.jooq.lambda.fi.lang.CheckedRunnable/PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/-simulation/schedule.html +$dokka.location:it.unibo.alchemist.core/Simulation/terminate/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/-simulation/terminate.html +$dokka.location:it.unibo.alchemist.core/Simulation/waitFor/#it.unibo.alchemist.core.Status#long#java.util.concurrent.TimeUnit/PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/-simulation/wait-for.html +$dokka.location:it.unibo.alchemist.core/Status.INIT///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-api/it.unibo.alchemist.core/-status/-i-n-i-t/index.html +$dokka.location:it.unibo.alchemist.core/Status.PAUSED///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-api/it.unibo.alchemist.core/-status/-p-a-u-s-e-d/index.html +$dokka.location:it.unibo.alchemist.core/Status.READY///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-api/it.unibo.alchemist.core/-status/-r-e-a-d-y/index.html +$dokka.location:it.unibo.alchemist.core/Status.RUNNING///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-api/it.unibo.alchemist.core/-status/-r-u-n-n-i-n-g/index.html +$dokka.location:it.unibo.alchemist.core/Status.TERMINATED///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-api/it.unibo.alchemist.core/-status/-t-e-r-m-i-n-a-t-e-d/index.html +$dokka.location:it.unibo.alchemist.core/Status///PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/-status/index.html +$dokka.location:it.unibo.alchemist.core/Status/isReachableFrom/#it.unibo.alchemist.core.Status/PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/-status/is-reachable-from.html +$dokka.location:it.unibo.alchemist.core/Status/valueOf/#java.lang.String/PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/-status/value-of.html +$dokka.location:it.unibo.alchemist.core/Status/values/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.core/-status/values.html +$dokka.location:it.unibo.alchemist.model.geometry////PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/index.html +$dokka.location:it.unibo.alchemist.model.geometry/Shape///PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-shape/index.html +$dokka.location:it.unibo.alchemist.model.geometry/Shape/centroid/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-shape/centroid.html +$dokka.location:it.unibo.alchemist.model.geometry/Shape/contains/#TypeParam(bounds=[it.unibo.alchemist.model.geometry.Vector[^]])/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-shape/contains.html +$dokka.location:it.unibo.alchemist.model.geometry/Shape/diameter/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-shape/diameter.html +$dokka.location:it.unibo.alchemist.model.geometry/Shape/intersects/#it.unibo.alchemist.model.geometry.Shape[TypeParam(bounds=[it.unibo.alchemist.model.geometry.Vector[^]]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.Transformation[TypeParam(bounds=[it.unibo.alchemist.model.geometry.Vector[^^]])]])]/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-shape/intersects.html +$dokka.location:it.unibo.alchemist.model.geometry/Shape/radius/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-shape/radius.html +$dokka.location:it.unibo.alchemist.model.geometry/Shape/transformed/#kotlin.Function1[TypeParam(bounds=[it.unibo.alchemist.model.geometry.Transformation[TypeParam(bounds=[it.unibo.alchemist.model.geometry.Vector[^^]])]]),kotlin.Unit]/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-shape/transformed.html +$dokka.location:it.unibo.alchemist.model.geometry/Transformation///PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-transformation/index.html +$dokka.location:it.unibo.alchemist.model.geometry/Transformation/origin/#TypeParam(bounds=[it.unibo.alchemist.model.geometry.Vector[^]])/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-transformation/origin.html +$dokka.location:it.unibo.alchemist.model.geometry/Vector///PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-vector/index.html +$dokka.location:it.unibo.alchemist.model.geometry/Vector/angleBetween/#TypeParam(bounds=[it.unibo.alchemist.model.geometry.Vector[^]])/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-vector/angle-between.html +$dokka.location:it.unibo.alchemist.model.geometry/Vector/coerceAtLeast/#kotlin.Double/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-vector/coerce-at-least.html +$dokka.location:it.unibo.alchemist.model.geometry/Vector/coerceAtMost/#kotlin.Double/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-vector/coerce-at-most.html +$dokka.location:it.unibo.alchemist.model.geometry/Vector/coerceIn/#kotlin.Double#kotlin.Double/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-vector/coerce-in.html +$dokka.location:it.unibo.alchemist.model.geometry/Vector/coordinates/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-vector/coordinates.html +$dokka.location:it.unibo.alchemist.model.geometry/Vector/dimensions/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-vector/dimensions.html +$dokka.location:it.unibo.alchemist.model.geometry/Vector/distanceTo/#TypeParam(bounds=[it.unibo.alchemist.model.geometry.Vector[^]])/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-vector/distance-to.html +$dokka.location:it.unibo.alchemist.model.geometry/Vector/div/#kotlin.Double/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-vector/div.html +$dokka.location:it.unibo.alchemist.model.geometry/Vector/dot/#TypeParam(bounds=[it.unibo.alchemist.model.geometry.Vector[^]])/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-vector/dot.html +$dokka.location:it.unibo.alchemist.model.geometry/Vector/fromCoordinates/#kotlin.DoubleArray/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-vector/from-coordinates.html +$dokka.location:it.unibo.alchemist.model.geometry/Vector/get/#kotlin.Int/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-vector/get.html +$dokka.location:it.unibo.alchemist.model.geometry/Vector/magnitude/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-vector/magnitude.html +$dokka.location:it.unibo.alchemist.model.geometry/Vector/minus/#TypeParam(bounds=[it.unibo.alchemist.model.geometry.Vector[^]])/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-vector/minus.html +$dokka.location:it.unibo.alchemist.model.geometry/Vector/normal/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-vector/normal.html +$dokka.location:it.unibo.alchemist.model.geometry/Vector/normalized/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-vector/normalized.html +$dokka.location:it.unibo.alchemist.model.geometry/Vector/plus/#TypeParam(bounds=[it.unibo.alchemist.model.geometry.Vector[^]])/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-vector/plus.html +$dokka.location:it.unibo.alchemist.model.geometry/Vector/resized/#kotlin.Double/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-vector/resized.html +$dokka.location:it.unibo.alchemist.model.geometry/Vector/times/#kotlin.Double/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-vector/times.html +$dokka.location:it.unibo.alchemist.model.geometry/Vector/zero/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-vector/zero.html +$dokka.location:it.unibo.alchemist.model.geometry/Vector2D.Companion///PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-vector2-d/-companion/index.html +$dokka.location:it.unibo.alchemist.model.geometry/Vector2D.Companion/zCross/#it.unibo.alchemist.model.geometry.Vector2D[*]#it.unibo.alchemist.model.geometry.Vector2D[*]/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-vector2-d/-companion/z-cross.html +$dokka.location:it.unibo.alchemist.model.geometry/Vector2D///PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-vector2-d/index.html +$dokka.location:it.unibo.alchemist.model.geometry/Vector2D/asAngle/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-vector2-d/as-angle.html +$dokka.location:it.unibo.alchemist.model.geometry/Vector2D/component1/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-vector2-d/component1.html +$dokka.location:it.unibo.alchemist.model.geometry/Vector2D/component2/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-vector2-d/component2.html +$dokka.location:it.unibo.alchemist.model.geometry/Vector2D/dot/#TypeParam(bounds=[it.unibo.alchemist.model.geometry.Vector2D[^]])/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-vector2-d/dot.html +$dokka.location:it.unibo.alchemist.model.geometry/Vector2D/isInRectangle/#it.unibo.alchemist.model.geometry.Vector2D[*]#kotlin.Double#kotlin.Double/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-vector2-d/is-in-rectangle.html +$dokka.location:it.unibo.alchemist.model.geometry/Vector2D/minus/#kotlin.Pair[kotlin.Double,kotlin.Double]/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-vector2-d/minus.html +$dokka.location:it.unibo.alchemist.model.geometry/Vector2D/newFrom/#kotlin.Double#kotlin.Double/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-vector2-d/new-from.html +$dokka.location:it.unibo.alchemist.model.geometry/Vector2D/normalized/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-vector2-d/normalized.html +$dokka.location:it.unibo.alchemist.model.geometry/Vector2D/plus/#kotlin.Pair[kotlin.Double,kotlin.Double]/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-vector2-d/plus.html +$dokka.location:it.unibo.alchemist.model.geometry/Vector2D/surrounding/#kotlin.Double#kotlin.Int/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-vector2-d/surrounding.html +$dokka.location:it.unibo.alchemist.model.geometry/Vector2D/surroundingPointAt/#TypeParam(bounds=[it.unibo.alchemist.model.geometry.Vector2D[^]])#kotlin.Double/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-vector2-d/surrounding-point-at.html +$dokka.location:it.unibo.alchemist.model.geometry/Vector2D/surroundingPointAt/#kotlin.Double#kotlin.Double/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-vector2-d/surrounding-point-at.html +$dokka.location:it.unibo.alchemist.model.geometry/Vector2D/x/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-vector2-d/x.html +$dokka.location:it.unibo.alchemist.model.geometry/Vector2D/y/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model.geometry/-vector2-d/y.html +$dokka.location:it.unibo.alchemist.model////PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/index.html +$dokka.location:it.unibo.alchemist.model/Action///PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-action/index.html +$dokka.location:it.unibo.alchemist.model/Action/cloneAction/#it.unibo.alchemist.model.Node#it.unibo.alchemist.model.Reaction/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-action/clone-action.html +$dokka.location:it.unibo.alchemist.model/Action/execute/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-action/execute.html +$dokka.location:it.unibo.alchemist.model/Action/getContext/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-action/get-context.html +$dokka.location:it.unibo.alchemist.model/Action/getOutboundDependencies/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-action/get-outbound-dependencies.html +$dokka.location:it.unibo.alchemist.model/Actionable///PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-actionable/index.html +$dokka.location:it.unibo.alchemist.model/Actionable/actions/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-actionable/actions.html +$dokka.location:it.unibo.alchemist.model/Actionable/canExecute/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-actionable/can-execute.html +$dokka.location:it.unibo.alchemist.model/Actionable/conditions/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-actionable/conditions.html +$dokka.location:it.unibo.alchemist.model/Actionable/execute/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-actionable/execute.html +$dokka.location:it.unibo.alchemist.model/Actionable/inboundDependencies/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-actionable/inbound-dependencies.html +$dokka.location:it.unibo.alchemist.model/Actionable/initializationComplete/#it.unibo.alchemist.model.Time#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),*]/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-actionable/initialization-complete.html +$dokka.location:it.unibo.alchemist.model/Actionable/outboundDependencies/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-actionable/outbound-dependencies.html +$dokka.location:it.unibo.alchemist.model/Actionable/rate/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-actionable/rate.html +$dokka.location:it.unibo.alchemist.model/Actionable/tau/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-actionable/tau.html +$dokka.location:it.unibo.alchemist.model/Actionable/timeDistribution/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-actionable/time-distribution.html +$dokka.location:it.unibo.alchemist.model/Actionable/update/#it.unibo.alchemist.model.Time#kotlin.Boolean#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),*]/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-actionable/update.html +$dokka.location:it.unibo.alchemist.model/BenchmarkableEnvironment///PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-benchmarkable-environment/index.html +$dokka.location:it.unibo.alchemist.model/BenchmarkableEnvironment/enableBenchmark/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-benchmarkable-environment/enable-benchmark.html +$dokka.location:it.unibo.alchemist.model/BenchmarkableEnvironment/getBenchmarkResult/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-benchmarkable-environment/get-benchmark-result.html +$dokka.location:it.unibo.alchemist.model/Concentration///PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-concentration/index.html +$dokka.location:it.unibo.alchemist.model/Concentration/getContent/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-concentration/get-content.html +$dokka.location:it.unibo.alchemist.model/Condition///PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-condition/index.html +$dokka.location:it.unibo.alchemist.model/Condition/cloneCondition/#it.unibo.alchemist.model.Node#it.unibo.alchemist.model.Reaction/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-condition/clone-condition.html +$dokka.location:it.unibo.alchemist.model/Condition/getContext/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-condition/get-context.html +$dokka.location:it.unibo.alchemist.model/Condition/getInboundDependencies/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-condition/get-inbound-dependencies.html +$dokka.location:it.unibo.alchemist.model/Condition/getNode/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-condition/get-node.html +$dokka.location:it.unibo.alchemist.model/Condition/getPropensityContribution/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-condition/get-propensity-contribution.html +$dokka.location:it.unibo.alchemist.model/Condition/isValid/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-condition/is-valid.html +$dokka.location:it.unibo.alchemist.model/Condition/reactionReady/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-condition/reaction-ready.html +$dokka.location:it.unibo.alchemist.model/Context.GLOBAL///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-api/it.unibo.alchemist.model/-context/-g-l-o-b-a-l/index.html +$dokka.location:it.unibo.alchemist.model/Context.LOCAL///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-api/it.unibo.alchemist.model/-context/-l-o-c-a-l/index.html +$dokka.location:it.unibo.alchemist.model/Context.NEIGHBORHOOD///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-api/it.unibo.alchemist.model/-context/-n-e-i-g-h-b-o-r-h-o-o-d/index.html +$dokka.location:it.unibo.alchemist.model/Context///PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-context/index.html +$dokka.location:it.unibo.alchemist.model/Context/getWider/#it.unibo.alchemist.model.Context#it.unibo.alchemist.model.Context/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-context/get-wider.html +$dokka.location:it.unibo.alchemist.model/Context/valueOf/#java.lang.String/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-context/value-of.html +$dokka.location:it.unibo.alchemist.model/Context/values/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-context/values.html +$dokka.location:it.unibo.alchemist.model/Dependency///PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-dependency/index.html +$dokka.location:it.unibo.alchemist.model/Dependency/EVERYTHING/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-dependency/-e-v-e-r-y-t-h-i-n-g.html +$dokka.location:it.unibo.alchemist.model/Dependency/EVERY_MOLECULE/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-dependency/-e-v-e-r-y_-m-o-l-e-c-u-l-e.html +$dokka.location:it.unibo.alchemist.model/Dependency/MOVEMENT/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-dependency/-m-o-v-e-m-e-n-t.html +$dokka.location:it.unibo.alchemist.model/Dependency/dependsOn/#it.unibo.alchemist.model.Dependency/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-dependency/depends-on.html +$dokka.location:it.unibo.alchemist.model/Dependency/makesDependent/#it.unibo.alchemist.model.Dependency/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-dependency/makes-dependent.html +$dokka.location:it.unibo.alchemist.model/Environment///PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-environment/index.html +$dokka.location:it.unibo.alchemist.model/Environment/addGlobalReaction/#it.unibo.alchemist.model.GlobalReaction[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-environment/add-global-reaction.html +$dokka.location:it.unibo.alchemist.model/Environment/addLayer/#it.unibo.alchemist.model.Molecule#it.unibo.alchemist.model.Layer[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])]/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-environment/add-layer.html +$dokka.location:it.unibo.alchemist.model/Environment/addNode/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-environment/add-node.html +$dokka.location:it.unibo.alchemist.model/Environment/addTerminator/#it.unibo.alchemist.model.TerminationPredicate[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])]/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-environment/add-terminator.html +$dokka.location:it.unibo.alchemist.model/Environment/addTerminator/#kotlin.Function1[it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])],kotlin.Boolean]/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-environment/add-terminator.html +$dokka.location:it.unibo.alchemist.model/Environment/dimensions/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-environment/dimensions.html +$dokka.location:it.unibo.alchemist.model/Environment/getDistanceBetweenNodes/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-environment/get-distance-between-nodes.html +$dokka.location:it.unibo.alchemist.model/Environment/getLayer/#it.unibo.alchemist.model.Molecule/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-environment/get-layer.html +$dokka.location:it.unibo.alchemist.model/Environment/getNeighborhood/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-environment/get-neighborhood.html +$dokka.location:it.unibo.alchemist.model/Environment/getNodeByID/#kotlin.Int/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-environment/get-node-by-i-d.html +$dokka.location:it.unibo.alchemist.model/Environment/getNodesWithinRange/#TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])#kotlin.Double/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-environment/get-nodes-within-range.html +$dokka.location:it.unibo.alchemist.model/Environment/getNodesWithinRange/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#kotlin.Double/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-environment/get-nodes-within-range.html +$dokka.location:it.unibo.alchemist.model/Environment/getPosition/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-environment/get-position.html +$dokka.location:it.unibo.alchemist.model/Environment/globalReactions/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-environment/global-reactions.html +$dokka.location:it.unibo.alchemist.model/Environment/incarnation/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-environment/incarnation.html +$dokka.location:it.unibo.alchemist.model/Environment/isTerminated/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-environment/is-terminated.html +$dokka.location:it.unibo.alchemist.model/Environment/layers/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-environment/layers.html +$dokka.location:it.unibo.alchemist.model/Environment/linkingRule/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-environment/linking-rule.html +$dokka.location:it.unibo.alchemist.model/Environment/makePosition/#kotlin.DoubleArray/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-environment/make-position.html +$dokka.location:it.unibo.alchemist.model/Environment/makePosition/#kotlin.Number/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-environment/make-position.html +$dokka.location:it.unibo.alchemist.model/Environment/makePosition/#kotlin.collections.List[kotlin.Number]/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-environment/make-position.html +$dokka.location:it.unibo.alchemist.model/Environment/moveNodeToPosition/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-environment/move-node-to-position.html +$dokka.location:it.unibo.alchemist.model/Environment/nodeCount/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-environment/node-count.html +$dokka.location:it.unibo.alchemist.model/Environment/nodes/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-environment/nodes.html +$dokka.location:it.unibo.alchemist.model/Environment/offset/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-environment/offset.html +$dokka.location:it.unibo.alchemist.model/Environment/removeGlobalReaction/#it.unibo.alchemist.model.GlobalReaction[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-environment/remove-global-reaction.html +$dokka.location:it.unibo.alchemist.model/Environment/removeNode/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-environment/remove-node.html +$dokka.location:it.unibo.alchemist.model/Environment/simulation/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-environment/simulation.html +$dokka.location:it.unibo.alchemist.model/Environment/simulationOrNull/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-environment/simulation-or-null.html +$dokka.location:it.unibo.alchemist.model/Environment/size/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-environment/size.html +$dokka.location:it.unibo.alchemist.model/Environment/sizeInDistanceUnits/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-environment/size-in-distance-units.html +$dokka.location:it.unibo.alchemist.model/EnvironmentWithObstacles///PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-environment-with-obstacles/index.html +$dokka.location:it.unibo.alchemist.model/EnvironmentWithObstacles/addObstacle/#TypeParam(bounds=[it.unibo.alchemist.model.Obstacle[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^], it.unibo.alchemist.model.geometry.Vector[^^]])]])/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-environment-with-obstacles/add-obstacle.html +$dokka.location:it.unibo.alchemist.model/EnvironmentWithObstacles/intersectsObstacle/#TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])#TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-environment-with-obstacles/intersects-obstacle.html +$dokka.location:it.unibo.alchemist.model/EnvironmentWithObstacles/next/#TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])#TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-environment-with-obstacles/next.html +$dokka.location:it.unibo.alchemist.model/EnvironmentWithObstacles/obstacles/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-environment-with-obstacles/obstacles.html +$dokka.location:it.unibo.alchemist.model/EnvironmentWithObstacles/removeObstacle/#TypeParam(bounds=[it.unibo.alchemist.model.Obstacle[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^], it.unibo.alchemist.model.geometry.Vector[^^]])]])/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-environment-with-obstacles/remove-obstacle.html +$dokka.location:it.unibo.alchemist.model/EuclideanEnvironment///PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-euclidean-environment/index.html +$dokka.location:it.unibo.alchemist.model/EuclideanEnvironment/moveNode/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-euclidean-environment/move-node.html +$dokka.location:it.unibo.alchemist.model/EuclideanEnvironment/origin/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-euclidean-environment/origin.html +$dokka.location:it.unibo.alchemist.model/GeoPosition///PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-geo-position/index.html +$dokka.location:it.unibo.alchemist.model/GeoPosition/getCoordinate/#int/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-geo-position/get-coordinate.html +$dokka.location:it.unibo.alchemist.model/GeoPosition/getLatitude/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-geo-position/get-latitude.html +$dokka.location:it.unibo.alchemist.model/GeoPosition/getLongitude/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-geo-position/get-longitude.html +$dokka.location:it.unibo.alchemist.model/GeoPosition/minus/#it.unibo.alchemist.model.GeoPosition/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-geo-position/minus.html +$dokka.location:it.unibo.alchemist.model/GeoPosition/plus/#it.unibo.alchemist.model.GeoPosition/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-geo-position/plus.html +$dokka.location:it.unibo.alchemist.model/GlobalReaction///PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-global-reaction/index.html +$dokka.location:it.unibo.alchemist.model/Incarnation///PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-incarnation/index.html +$dokka.location:it.unibo.alchemist.model/Incarnation/createAction/#org.apache.commons.math3.random.RandomGenerator#it.unibo.alchemist.model.Environment#it.unibo.alchemist.model.Node#it.unibo.alchemist.model.TimeDistribution#it.unibo.alchemist.model.Actionable#java.lang.Object/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-incarnation/create-action.html +$dokka.location:it.unibo.alchemist.model/Incarnation/createConcentration/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-incarnation/create-concentration.html +$dokka.location:it.unibo.alchemist.model/Incarnation/createConcentration/#java.lang.Object/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-incarnation/create-concentration.html +$dokka.location:it.unibo.alchemist.model/Incarnation/createCondition/#org.apache.commons.math3.random.RandomGenerator#it.unibo.alchemist.model.Environment#it.unibo.alchemist.model.Node#it.unibo.alchemist.model.TimeDistribution#it.unibo.alchemist.model.Actionable#java.lang.Object/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-incarnation/create-condition.html +$dokka.location:it.unibo.alchemist.model/Incarnation/createMolecule/#java.lang.String/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-incarnation/create-molecule.html +$dokka.location:it.unibo.alchemist.model/Incarnation/createNode/#org.apache.commons.math3.random.RandomGenerator#it.unibo.alchemist.model.Environment#java.lang.Object/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-incarnation/create-node.html +$dokka.location:it.unibo.alchemist.model/Incarnation/createReaction/#org.apache.commons.math3.random.RandomGenerator#it.unibo.alchemist.model.Environment#it.unibo.alchemist.model.Node#it.unibo.alchemist.model.TimeDistribution#java.lang.Object/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-incarnation/create-reaction.html +$dokka.location:it.unibo.alchemist.model/Incarnation/createTimeDistribution/#org.apache.commons.math3.random.RandomGenerator#it.unibo.alchemist.model.Environment#it.unibo.alchemist.model.Node#java.lang.Object/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-incarnation/create-time-distribution.html +$dokka.location:it.unibo.alchemist.model/Incarnation/getProperty/#it.unibo.alchemist.model.Node#it.unibo.alchemist.model.Molecule#java.lang.String/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-incarnation/get-property.html +$dokka.location:it.unibo.alchemist.model/Layer///PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-layer/index.html +$dokka.location:it.unibo.alchemist.model/Layer/getValue/#P/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-layer/get-value.html +$dokka.location:it.unibo.alchemist.model/LinkingRule///PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-linking-rule/index.html +$dokka.location:it.unibo.alchemist.model/LinkingRule/computeNeighborhood/#it.unibo.alchemist.model.Node#it.unibo.alchemist.model.Environment/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-linking-rule/compute-neighborhood.html +$dokka.location:it.unibo.alchemist.model/LinkingRule/isLocallyConsistent/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-linking-rule/is-locally-consistent.html +$dokka.location:it.unibo.alchemist.model/Molecule///PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-molecule/index.html +$dokka.location:it.unibo.alchemist.model/Molecule/getName/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-molecule/get-name.html +$dokka.location:it.unibo.alchemist.model/Neighborhood///PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-neighborhood/index.html +$dokka.location:it.unibo.alchemist.model/Neighborhood/add/#it.unibo.alchemist.model.Node/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-neighborhood/add.html +$dokka.location:it.unibo.alchemist.model/Neighborhood/contains/#it.unibo.alchemist.model.Node/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-neighborhood/contains.html +$dokka.location:it.unibo.alchemist.model/Neighborhood/getCenter/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-neighborhood/get-center.html +$dokka.location:it.unibo.alchemist.model/Neighborhood/getNeighbors/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-neighborhood/get-neighbors.html +$dokka.location:it.unibo.alchemist.model/Neighborhood/isEmpty/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-neighborhood/is-empty.html +$dokka.location:it.unibo.alchemist.model/Neighborhood/remove/#it.unibo.alchemist.model.Node/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-neighborhood/remove.html +$dokka.location:it.unibo.alchemist.model/Neighborhood/size/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-neighborhood/size.html +$dokka.location:it.unibo.alchemist.model/Node.Companion///PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-node/-companion/index.html +$dokka.location:it.unibo.alchemist.model/Node.Companion/asProperty/it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-node/-companion/as-property.html +$dokka.location:it.unibo.alchemist.model/Node.Companion/asPropertyOrNull/it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-node/-companion/as-property-or-null.html +$dokka.location:it.unibo.alchemist.model/Node///PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-node/index.html +$dokka.location:it.unibo.alchemist.model/Node/addProperty/#it.unibo.alchemist.model.NodeProperty[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-node/add-property.html +$dokka.location:it.unibo.alchemist.model/Node/addReaction/#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-node/add-reaction.html +$dokka.location:it.unibo.alchemist.model/Node/asProperty/#java.lang.Class[TypeParam(bounds=[it.unibo.alchemist.model.NodeProperty[TypeParam(bounds=[kotlin.Any?])]])]/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-node/as-property.html +$dokka.location:it.unibo.alchemist.model/Node/asProperty/#kotlin.reflect.KClass[TypeParam(bounds=[it.unibo.alchemist.model.NodeProperty[TypeParam(bounds=[kotlin.Any?])]])]/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-node/as-property.html +$dokka.location:it.unibo.alchemist.model/Node/asPropertyOrNull/#java.lang.Class[TypeParam(bounds=[it.unibo.alchemist.model.NodeProperty[TypeParam(bounds=[kotlin.Any?])]])]/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-node/as-property-or-null.html +$dokka.location:it.unibo.alchemist.model/Node/asPropertyOrNull/#kotlin.reflect.KClass[TypeParam(bounds=[it.unibo.alchemist.model.NodeProperty[TypeParam(bounds=[kotlin.Any?])]])]/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-node/as-property-or-null.html +$dokka.location:it.unibo.alchemist.model/Node/cloneNode/#it.unibo.alchemist.model.Time/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-node/clone-node.html +$dokka.location:it.unibo.alchemist.model/Node/contains/#it.unibo.alchemist.model.Molecule/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-node/contains.html +$dokka.location:it.unibo.alchemist.model/Node/contents/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-node/contents.html +$dokka.location:it.unibo.alchemist.model/Node/equals/#kotlin.Any?/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-node/equals.html +$dokka.location:it.unibo.alchemist.model/Node/getConcentration/#it.unibo.alchemist.model.Molecule/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-node/get-concentration.html +$dokka.location:it.unibo.alchemist.model/Node/hashCode/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-node/hash-code.html +$dokka.location:it.unibo.alchemist.model/Node/id/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-node/id.html +$dokka.location:it.unibo.alchemist.model/Node/moleculeCount/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-node/molecule-count.html +$dokka.location:it.unibo.alchemist.model/Node/properties/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-node/properties.html +$dokka.location:it.unibo.alchemist.model/Node/reactions/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-node/reactions.html +$dokka.location:it.unibo.alchemist.model/Node/removeConcentration/#it.unibo.alchemist.model.Molecule/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-node/remove-concentration.html +$dokka.location:it.unibo.alchemist.model/Node/removeReaction/#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-node/remove-reaction.html +$dokka.location:it.unibo.alchemist.model/Node/setConcentration/#it.unibo.alchemist.model.Molecule#TypeParam(bounds=[kotlin.Any?])/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-node/set-concentration.html +$dokka.location:it.unibo.alchemist.model/NodeProperty///PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-node-property/index.html +$dokka.location:it.unibo.alchemist.model/NodeProperty/cloneOnNewNode/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-node-property/clone-on-new-node.html +$dokka.location:it.unibo.alchemist.model/NodeProperty/node/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-node-property/node.html +$dokka.location:it.unibo.alchemist.model/Obstacle///PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-obstacle/index.html +$dokka.location:it.unibo.alchemist.model/Obstacle/id/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-obstacle/id.html +$dokka.location:it.unibo.alchemist.model/Obstacle/nearestIntersection/#TypeParam(bounds=[it.unibo.alchemist.model.geometry.Vector[^]])#TypeParam(bounds=[it.unibo.alchemist.model.geometry.Vector[^]])/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-obstacle/nearest-intersection.html +$dokka.location:it.unibo.alchemist.model/Obstacle/next/#TypeParam(bounds=[it.unibo.alchemist.model.geometry.Vector[^]])#TypeParam(bounds=[it.unibo.alchemist.model.geometry.Vector[^]])/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-obstacle/next.html +$dokka.location:it.unibo.alchemist.model/Position///PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-position/index.html +$dokka.location:it.unibo.alchemist.model/Position/boundingBox/#kotlin.Double/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-position/bounding-box.html +$dokka.location:it.unibo.alchemist.model/Position/coordinates/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-position/coordinates.html +$dokka.location:it.unibo.alchemist.model/Position/dimensions/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-position/dimensions.html +$dokka.location:it.unibo.alchemist.model/Position/distanceTo/#TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-position/distance-to.html +$dokka.location:it.unibo.alchemist.model/Position/getCoordinate/#kotlin.Int/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-position/get-coordinate.html +$dokka.location:it.unibo.alchemist.model/Position/minus/#kotlin.DoubleArray/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-position/minus.html +$dokka.location:it.unibo.alchemist.model/Position/plus/#kotlin.DoubleArray/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-position/plus.html +$dokka.location:it.unibo.alchemist.model/Position2D///PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-position2-d/index.html +$dokka.location:it.unibo.alchemist.model/Position2D/getCoordinate/#kotlin.Int/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-position2-d/get-coordinate.html +$dokka.location:it.unibo.alchemist.model/Position2D/x/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-position2-d/x.html +$dokka.location:it.unibo.alchemist.model/Position2D/y/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-position2-d/y.html +$dokka.location:it.unibo.alchemist.model/Reaction///PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-reaction/index.html +$dokka.location:it.unibo.alchemist.model/Reaction/cloneOnNewNode/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Time/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-reaction/clone-on-new-node.html +$dokka.location:it.unibo.alchemist.model/Reaction/inputContext/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-reaction/input-context.html +$dokka.location:it.unibo.alchemist.model/Reaction/node/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-reaction/node.html +$dokka.location:it.unibo.alchemist.model/Reaction/outputContext/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-reaction/output-context.html +$dokka.location:it.unibo.alchemist.model/TerminationPredicate///PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-termination-predicate/index.html +$dokka.location:it.unibo.alchemist.model/TerminationPredicate/invoke/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])]/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-termination-predicate/invoke.html +$dokka.location:it.unibo.alchemist.model/TerminationPredicate/or/#it.unibo.alchemist.model.TerminationPredicate[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])]/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-termination-predicate/or.html +$dokka.location:it.unibo.alchemist.model/TerminationPredicate/test/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])]/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-termination-predicate/test.html +$dokka.location:it.unibo.alchemist.model/Time.Companion///PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-time/-companion/index.html +$dokka.location:it.unibo.alchemist.model/Time.Companion/INFINITY/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-time/-companion/-i-n-f-i-n-i-t-y.html +$dokka.location:it.unibo.alchemist.model/Time.Companion/NEGATIVE_INFINITY/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-time/-companion/-n-e-g-a-t-i-v-e_-i-n-f-i-n-i-t-y.html +$dokka.location:it.unibo.alchemist.model/Time.Companion/ZERO/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-time/-companion/-z-e-r-o.html +$dokka.location:it.unibo.alchemist.model/Time///PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-time/index.html +$dokka.location:it.unibo.alchemist.model/Time/isFinite/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-time/is-finite.html +$dokka.location:it.unibo.alchemist.model/Time/isInfinite/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-time/is-infinite.html +$dokka.location:it.unibo.alchemist.model/Time/minus/#it.unibo.alchemist.model.Time/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-time/minus.html +$dokka.location:it.unibo.alchemist.model/Time/plus/#it.unibo.alchemist.model.Time/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-time/plus.html +$dokka.location:it.unibo.alchemist.model/Time/times/#kotlin.Double/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-time/times.html +$dokka.location:it.unibo.alchemist.model/Time/toDouble/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-time/to-double.html +$dokka.location:it.unibo.alchemist.model/TimeDistribution///PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-time-distribution/index.html +$dokka.location:it.unibo.alchemist.model/TimeDistribution/cloneOnNewNode/#it.unibo.alchemist.model.Node#it.unibo.alchemist.model.Time/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-time-distribution/clone-on-new-node.html +$dokka.location:it.unibo.alchemist.model/TimeDistribution/getNextOccurence/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-time-distribution/get-next-occurence.html +$dokka.location:it.unibo.alchemist.model/TimeDistribution/getRate/#/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-time-distribution/get-rate.html +$dokka.location:it.unibo.alchemist.model/TimeDistribution/update/#it.unibo.alchemist.model.Time#boolean#double#it.unibo.alchemist.model.Environment/PointingToDeclaration/alchemist-api/it.unibo.alchemist.model/-time-distribution/update.html +it.unibo.alchemist.boundary +it.unibo.alchemist.core +it.unibo.alchemist.model +it.unibo.alchemist.model.geometry diff --git a/dokka-cache/it.unibo.alchemist/alchemist-cognitive-agents/42.3.18.list b/dokka-cache/it.unibo.alchemist/alchemist-cognitive-agents/42.3.18.list new file mode 100644 index 0000000000..34d7d9b3e7 --- /dev/null +++ b/dokka-cache/it.unibo.alchemist/alchemist-cognitive-agents/42.3.18.list @@ -0,0 +1,585 @@ +$dokka.format:html-v1 +$dokka.linkExtension:html +$dokka.location:it.unibo.alchemist.model.cognitive.actions////PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractGroupSteeringAction///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-group-steering-action/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractGroupSteeringAction/AbstractGroupSteeringAction/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-group-steering-action/-abstract-group-steering-action.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractLayerAction///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-layer-action/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractLayerAction/AbstractLayerAction/#it.unibo.alchemist.model.environments.Euclidean2DEnvironment[kotlin.Number]#it.unibo.alchemist.model.Reaction[kotlin.Number]#it.unibo.alchemist.model.cognitive.PedestrianProperty[kotlin.Number]#it.unibo.alchemist.model.Molecule/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-layer-action/-abstract-layer-action.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractLayerAction/cloneAction/#it.unibo.alchemist.model.Node[kotlin.Number]#it.unibo.alchemist.model.Reaction[kotlin.Number]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-layer-action/clone-action.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractNavigationAction///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-navigation-action/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractNavigationAction/AbstractNavigationAction/#it.unibo.alchemist.model.environments.EnvironmentWithGraph[*,TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.Transformation[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^], it.unibo.alchemist.model.geometry.Vector[^^]])]]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexShape[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^], it.unibo.alchemist.model.geometry.Vector[^^]]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.Transformation[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^^], it.unibo.alchemist.model.geometry.Vector[^^^]])]])]]),TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-navigation-action/-abstract-navigation-action.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractNavigationAction/currentRoom/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-navigation-action/current-room.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractNavigationAction/desiredPosition/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-navigation-action/desired-position.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractNavigationAction/doorsInSight/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-navigation-action/doors-in-sight.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractNavigationAction/environment/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-navigation-action/environment.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractNavigationAction/moveToFinal/#TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-navigation-action/move-to-final.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractNavigationAction/navigatingNode/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-navigation-action/navigating-node.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractNavigationAction/pedestrianPosition/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-navigation-action/pedestrian-position.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractNavigationAction/update/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-navigation-action/update.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractSteeringAction///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-steering-action/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractSteeringAction/AbstractSteeringAction/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-steering-action/-abstract-steering-action.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractSteeringAction/cloneAction/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-steering-action/clone-action.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractSteeringAction/getNextPosition/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-steering-action/get-next-position.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractSteeringAction/maxWalk/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-steering-action/max-walk.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractSteeringAction/nextPosition/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-steering-action/next-position.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractSteeringActionWithTarget///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-steering-action-with-target/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractSteeringActionWithTarget/AbstractSteeringActionWithTarget/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-steering-action-with-target/-abstract-steering-action-with-target.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractSteeringActionWithTarget/AbstractSteeringActionWithTarget/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.movestrategies.TargetSelectionStrategy[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-steering-action-with-target/-abstract-steering-action-with-target.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractSteeringActionWithTarget/nextPosition/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-steering-action-with-target/next-position.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractSteeringActionWithTarget/target/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-steering-action-with-target/target.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentArrive///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-arrive/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentArrive/CognitiveAgentArrive/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#kotlin.Double#kotlin.Double#TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-arrive/-cognitive-agent-arrive.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentArrive/CognitiveAgentArrive/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#kotlin.Double#kotlin.Double#kotlin.Number/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-arrive/-cognitive-agent-arrive.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentArrive/cloneAction/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-arrive/clone-action.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentArrive/maxWalk/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-arrive/max-walk.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentAvoidLayer///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-avoid-layer/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentAvoidLayer/CognitiveAgentAvoidLayer/#it.unibo.alchemist.model.environments.Euclidean2DEnvironment[kotlin.Number]#it.unibo.alchemist.model.Reaction[kotlin.Number]#it.unibo.alchemist.model.cognitive.PedestrianProperty[kotlin.Number]#it.unibo.alchemist.model.Molecule#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-avoid-layer/-cognitive-agent-avoid-layer.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentAvoidLayer/cloneAction/#it.unibo.alchemist.model.Node[kotlin.Number]#it.unibo.alchemist.model.Reaction[kotlin.Number]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-avoid-layer/clone-action.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentAvoidLayer/nextPosition/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-avoid-layer/next-position.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentCohesion///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-cohesion/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentCohesion/CognitiveAgentCohesion/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-cohesion/-cognitive-agent-cohesion.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentCohesion/cloneAction/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-cohesion/clone-action.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentCohesion/group/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-cohesion/group.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentCohesion/nextPosition/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-cohesion/next-position.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentCombineSteering///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-combine-steering/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentCombineSteering/CognitiveAgentCombineSteering/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#kotlin.collections.List[it.unibo.alchemist.model.cognitive.SteeringAction[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]]#it.unibo.alchemist.model.cognitive.SteeringStrategy[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-combine-steering/-cognitive-agent-combine-steering.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentCombineSteering/cloneAction/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-combine-steering/clone-action.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentCombineSteering/nextPosition/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-combine-steering/next-position.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentExplore///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-explore/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentExplore/CognitiveAgentExplore/#it.unibo.alchemist.model.environments.Euclidean2DEnvironmentWithGraph[*,TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.geometry.ConvexPolygon,it.unibo.alchemist.model.geometry.navigationgraph.Euclidean2DPassage]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-explore/-cognitive-agent-explore.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentFlee///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-flee/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentFlee/CognitiveAgentFlee/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-flee/-cognitive-agent-flee.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentFlee/cloneAction/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-flee/clone-action.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentFlee/nextPosition/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-flee/next-position.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentFollowLayer///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-follow-layer/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentFollowLayer/CognitiveAgentFollowLayer/#it.unibo.alchemist.model.environments.Euclidean2DEnvironment[kotlin.Number]#it.unibo.alchemist.model.Reaction[kotlin.Number]#it.unibo.alchemist.model.cognitive.PedestrianProperty[kotlin.Number]#it.unibo.alchemist.model.Molecule/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-follow-layer/-cognitive-agent-follow-layer.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentFollowLayer/cloneAction/#it.unibo.alchemist.model.Node[kotlin.Number]#it.unibo.alchemist.model.Reaction[kotlin.Number]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-follow-layer/clone-action.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentFollowLayer/nextPosition/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-follow-layer/next-position.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentFollowRoute///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-follow-route/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentFollowRoute/CognitiveAgentFollowRoute/#it.unibo.alchemist.model.environments.Euclidean2DEnvironmentWithGraph[*,TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.geometry.ConvexPolygon,it.unibo.alchemist.model.geometry.navigationgraph.Euclidean2DPassage]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#kotlin.Number/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-follow-route/-cognitive-agent-follow-route.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentFollowScalarField///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-follow-scalar-field/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentFollowScalarField/CognitiveAgentFollowScalarField/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position2D[^], it.unibo.alchemist.model.geometry.Vector2D[^]])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#TypeParam(bounds=[it.unibo.alchemist.model.Position2D[^], it.unibo.alchemist.model.geometry.Vector2D[^]])?#kotlin.Function1[TypeParam(bounds=[it.unibo.alchemist.model.Position2D[^], it.unibo.alchemist.model.geometry.Vector2D[^]]),kotlin.Double]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-follow-scalar-field/-cognitive-agent-follow-scalar-field.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentFollowScalarField/cloneAction/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-follow-scalar-field/clone-action.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentFollowScalarField/nextPosition/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-follow-scalar-field/next-position.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentGoalOrientedExplore///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-goal-oriented-explore/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentGoalOrientedExplore/CognitiveAgentGoalOrientedExplore/#it.unibo.alchemist.model.environments.Euclidean2DEnvironmentWithGraph[*,TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.geometry.ConvexPolygon,it.unibo.alchemist.model.geometry.navigationgraph.Euclidean2DPassage]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#kotlin.Number/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-goal-oriented-explore/-cognitive-agent-goal-oriented-explore.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentNavigationAction2D.Companion///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-navigation-action2-d/-companion/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentNavigationAction2D.Companion/DEFAULT_WALL_REPULSION_FACTOR/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-navigation-action2-d/-companion/-d-e-f-a-u-l-t_-w-a-l-l_-r-e-p-u-l-s-i-o-n_-f-a-c-t-o-r.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentNavigationAction2D///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-navigation-action2-d/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentNavigationAction2D/CognitiveAgentNavigationAction2D/#it.unibo.alchemist.model.environments.Euclidean2DEnvironmentWithGraph[*,TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.geometry.ConvexPolygon,it.unibo.alchemist.model.geometry.navigationgraph.Euclidean2DPassage]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-navigation-action2-d/-cognitive-agent-navigation-action2-d.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentNavigationAction2D/cloneAction/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-navigation-action2-d/clone-action.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentNavigationAction2D/crossDoor/#it.unibo.alchemist.model.geometry.navigationgraph.Euclidean2DPassage/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-navigation-action2-d/cross-door.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentNavigationAction2D/environment/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-navigation-action2-d/environment.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentNavigationAction2D/nextPosition/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-navigation-action2-d/next-position.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentObstacleAvoidance///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-obstacle-avoidance/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentObstacleAvoidance/CognitiveAgentObstacleAvoidance/#it.unibo.alchemist.model.environments.Environment2DWithObstacles[TypeParam(bounds=[it.unibo.alchemist.model.Obstacle2D[it.unibo.alchemist.model.positions.Euclidean2DPosition]]),TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.reactions.SteeringBehavior[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-obstacle-avoidance/-cognitive-agent-obstacle-avoidance.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentObstacleAvoidance/cloneAction/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-obstacle-avoidance/clone-action.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentObstacleAvoidance/nextPosition/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-obstacle-avoidance/next-position.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentPursue///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-pursue/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentPursue/CognitiveAgentPursue/#it.unibo.alchemist.model.environments.Euclidean2DEnvironmentWithGraph[*,TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.geometry.ConvexPolygon,it.unibo.alchemist.model.geometry.navigationgraph.Euclidean2DPassage]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#kotlin.Number/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-pursue/-cognitive-agent-pursue.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentReachDestination///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-reach-destination/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentReachDestination/CognitiveAgentReachDestination/#it.unibo.alchemist.model.environments.Euclidean2DEnvironmentWithGraph[*,TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.geometry.ConvexPolygon,it.unibo.alchemist.model.geometry.navigationgraph.Euclidean2DPassage]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#kotlin.Number/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-reach-destination/-cognitive-agent-reach-destination.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentReachKnownDestination///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-reach-known-destination/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentReachKnownDestination/CognitiveAgentReachKnownDestination/#it.unibo.alchemist.model.environments.Euclidean2DEnvironmentWithGraph[*,TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.geometry.ConvexPolygon,it.unibo.alchemist.model.geometry.navigationgraph.Euclidean2DPassage]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#kotlin.Number/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-reach-known-destination/-cognitive-agent-reach-known-destination.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentSeek///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-seek/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentSeek/CognitiveAgentSeek/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-seek/-cognitive-agent-seek.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentSeek/CognitiveAgentSeek/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#kotlin.Number/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-seek/-cognitive-agent-seek.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentSeek/cloneAction/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-seek/clone-action.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentSeek2D///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-seek2-d/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentSeek2D/CognitiveAgentSeek2D/#it.unibo.alchemist.model.EuclideanEnvironment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position2D[^], it.unibo.alchemist.model.geometry.Vector2D[^]])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#TypeParam(bounds=[it.unibo.alchemist.model.Position2D[^], it.unibo.alchemist.model.geometry.Vector2D[^]])/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-seek2-d/-cognitive-agent-seek2-d.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentSeek2D/CognitiveAgentSeek2D/#it.unibo.alchemist.model.EuclideanEnvironment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position2D[^], it.unibo.alchemist.model.geometry.Vector2D[^]])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#kotlin.Number#kotlin.Number/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-seek2-d/-cognitive-agent-seek2-d.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentSeek2D/cloneAction/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-seek2-d/clone-action.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentSeek2D/nextPosition/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-seek2-d/next-position.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentSeek2D/target/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-seek2-d/target.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentSeparation///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-separation/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentSeparation/CognitiveAgentSeparation/#it.unibo.alchemist.model.physics.environments.Physics2DEnvironment[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-separation/-cognitive-agent-separation.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentSeparation/cloneAction/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-separation/clone-action.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentSeparation/environment/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-separation/environment.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentSeparation/group/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-separation/group.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentSeparation/nextPosition/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-separation/next-position.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentWander///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-wander/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentWander/CognitiveAgentWander/#it.unibo.alchemist.model.physics.environments.Physics2DEnvironment[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#org.apache.commons.math3.random.RandomGenerator#kotlin.Double#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-wander/-cognitive-agent-wander.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentWander/cloneAction/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-wander/clone-action.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentWander/nextPosition/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-wander/next-position.html +$dokka.location:it.unibo.alchemist.model.cognitive.actions/NavigationAction2D///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-navigation-action2-d/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.conditions////PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.conditions/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.conditions/WantToEscape///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.conditions/-want-to-escape/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.conditions/WantToEscape/WantToEscape/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.conditions/-want-to-escape/-want-to-escape.html +$dokka.location:it.unibo.alchemist.model.cognitive.conditions/WantToEscape/context/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.conditions/-want-to-escape/context.html +$dokka.location:it.unibo.alchemist.model.cognitive.conditions/WantToEscape/getContext/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.conditions/-want-to-escape/get-context.html +$dokka.location:it.unibo.alchemist.model.cognitive.conditions/WantToEscape/getPropensityContribution/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.conditions/-want-to-escape/get-propensity-contribution.html +$dokka.location:it.unibo.alchemist.model.cognitive.conditions/WantToEscape/isValid/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.conditions/-want-to-escape/is-valid.html +$dokka.location:it.unibo.alchemist.model.cognitive.conditions/WantToEscape/propensityContribution/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.conditions/-want-to-escape/propensity-contribution.html +$dokka.location:it.unibo.alchemist.model.cognitive.environments////PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.environments/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.environments/EnvironmentWithDynamics///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.environments/-environment-with-dynamics/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.environments/EnvironmentWithDynamics/EnvironmentWithDynamics/#it.unibo.alchemist.model.Incarnation[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition]#kotlin.String?#kotlin.Double#kotlin.Double#kotlin.Double#kotlin.Int#kotlin.Int#it.unibo.alchemist.model.physics.environments.Physics2DEnvironment[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.environments/-environment-with-dynamics/-environment-with-dynamics.html +$dokka.location:it.unibo.alchemist.model.cognitive.environments/EnvironmentWithDynamics/addGlobalReaction/#it.unibo.alchemist.model.GlobalReaction[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.environments/-environment-with-dynamics/add-global-reaction.html +$dokka.location:it.unibo.alchemist.model.cognitive.environments/EnvironmentWithDynamics/addNode/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.positions.Euclidean2DPosition/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.environments/-environment-with-dynamics/add-node.html +$dokka.location:it.unibo.alchemist.model.cognitive.environments/EnvironmentWithDynamics/getPosition/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.environments/-environment-with-dynamics/get-position.html +$dokka.location:it.unibo.alchemist.model.cognitive.environments/EnvironmentWithDynamics/getVelocity/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.environments/-environment-with-dynamics/get-velocity.html +$dokka.location:it.unibo.alchemist.model.cognitive.environments/EnvironmentWithDynamics/makePosition/#kotlin.DoubleArray/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.environments/-environment-with-dynamics/make-position.html +$dokka.location:it.unibo.alchemist.model.cognitive.environments/EnvironmentWithDynamics/makePosition/#kotlin.Number/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.environments/-environment-with-dynamics/make-position.html +$dokka.location:it.unibo.alchemist.model.cognitive.environments/EnvironmentWithDynamics/makePosition/#kotlin.collections.List[kotlin.Number]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.environments/-environment-with-dynamics/make-position.html +$dokka.location:it.unibo.alchemist.model.cognitive.environments/EnvironmentWithDynamics/moveNode/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.positions.Euclidean2DPosition/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.environments/-environment-with-dynamics/move-node.html +$dokka.location:it.unibo.alchemist.model.cognitive.environments/EnvironmentWithDynamics/origin/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.environments/-environment-with-dynamics/origin.html +$dokka.location:it.unibo.alchemist.model.cognitive.environments/EnvironmentWithDynamics/setVelocity/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.positions.Euclidean2DPosition/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.environments/-environment-with-dynamics/set-velocity.html +$dokka.location:it.unibo.alchemist.model.cognitive.environments/EnvironmentWithDynamics/updatePhysics/#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.environments/-environment-with-dynamics/update-physics.html +$dokka.location:it.unibo.alchemist.model.cognitive.environments/ImageEnvironmentWithGraph///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.environments/-image-environment-with-graph/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.environments/ImageEnvironmentWithGraph/ImageEnvironmentWithGraph/#it.unibo.alchemist.model.Incarnation[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition]#kotlin.String#kotlin.Double#kotlin.Double#kotlin.Double#kotlin.Int#kotlin.Int/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.environments/-image-environment-with-graph/-image-environment-with-graph.html +$dokka.location:it.unibo.alchemist.model.cognitive.environments/ImageEnvironmentWithGraph/graph/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.environments/-image-environment-with-graph/graph.html +$dokka.location:it.unibo.alchemist.model.cognitive.groups////PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.groups/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.groups/Alone///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.groups/-alone/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.groups/Alone/Alone/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.groups/-alone/-alone.html +$dokka.location:it.unibo.alchemist.model.cognitive.groups/Family///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.groups/-family/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.groups/Family/Family/#java.util.Comparator[it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.groups/-family/-family.html +$dokka.location:it.unibo.alchemist.model.cognitive.groups/Family/leader/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.groups/-family/leader.html +$dokka.location:it.unibo.alchemist.model.cognitive.groups/Friends///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.groups/-friends/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.groups/Friends/Friends/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.groups/-friends/-friends.html +$dokka.location:it.unibo.alchemist.model.cognitive.groups/GenericGroup///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.groups/-generic-group/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.groups/GenericGroup/GenericGroup/#kotlin.collections.List[TypeParam(bounds=[it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.groups/-generic-group/-generic-group.html +$dokka.location:it.unibo.alchemist.model.cognitive.groups/GenericGroup/addMember/#TypeParam(bounds=[it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]])/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.groups/-generic-group/add-member.html +$dokka.location:it.unibo.alchemist.model.cognitive.groups/GenericGroup/removeMember/#TypeParam(bounds=[it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]])/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.groups/-generic-group/remove-member.html +$dokka.location:it.unibo.alchemist.model.cognitive.groups/GroupFactory///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.groups/-group-factory/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.groups/GroupFactory/family/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.groups/-group-factory/family.html +$dokka.location:it.unibo.alchemist.model.cognitive.groups/GroupFactory/friends/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.groups/-group-factory/friends.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive////PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic.Companion///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/-companion/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic.Companion/advancedLogisticSigma/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/-companion/advanced-logistic-sigma.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic.Companion/advancedLogisticTau/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/-companion/advanced-logistic-tau.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic.Companion/affectiveBiasingOmega/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/-companion/affective-biasing-omega.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic.Companion/amplifyingEvacuationOmega/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/-companion/amplifying-evacuation-omega.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic.Companion/amplifyingFeelingOmega/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/-companion/amplifying-feeling-omega.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic.Companion/amplifyingIntentionOmega/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/-companion/amplifying-intention-omega.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic.Companion/bodyEta/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/-companion/body-eta.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic.Companion/inhibitingFeelingOmega/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/-companion/inhibiting-feeling-omega.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic.Companion/inhibitingIntentionOmega/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/-companion/inhibiting-intention-omega.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic.Companion/inhibitingWalkRandOmega/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/-companion/inhibiting-walk-rand-omega.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic.Companion/logisticSigma/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/-companion/logistic-sigma.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic.Companion/logisticTau/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/-companion/logistic-tau.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic.Companion/mentalEta/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/-companion/mental-eta.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic.Companion/persistingOmega/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/-companion/persisting-omega.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic.Companion/sensingOmega/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/-companion/sensing-omega.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic/AbstractCognitiveCharacteristic/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/-abstract-cognitive-characteristic.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic/combinationFunction/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/combination-function.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic/level/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/level.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/BeliefDanger///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-belief-danger/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/BeliefDanger/BeliefDanger/#kotlin.Function0[kotlin.Double]#kotlin.Function0[kotlin.Double]#kotlin.Function0[kotlin.collections.List[it.unibo.alchemist.model.cognitive.CognitiveModel]]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-belief-danger/-belief-danger.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/BeliefDanger/combinationFunction/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-belief-danger/combination-function.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/BodyCognitiveCharacteristic///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-body-cognitive-characteristic/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/BodyCognitiveCharacteristic/BodyCognitiveCharacteristic/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-body-cognitive-characteristic/-body-cognitive-characteristic.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/BodyCognitiveCharacteristic/update/#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-body-cognitive-characteristic/update.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/CognitiveCharacteristic///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-cognitive-characteristic/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/CognitiveCharacteristic/level/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-cognitive-characteristic/level.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/CognitiveCharacteristic/update/#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-cognitive-characteristic/update.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/CognitiveSpec///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-cognitive-spec/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/CognitiveSpec/advancedLogisticSigma/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-cognitive-spec/advanced-logistic-sigma.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/CognitiveSpec/advancedLogisticTau/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-cognitive-spec/advanced-logistic-tau.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/CognitiveSpec/affectiveBiasingOmega/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-cognitive-spec/affective-biasing-omega.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/CognitiveSpec/amplifyingEvacuationOmega/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-cognitive-spec/amplifying-evacuation-omega.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/CognitiveSpec/amplifyingFeelingOmega/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-cognitive-spec/amplifying-feeling-omega.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/CognitiveSpec/amplifyingIntentionOmega/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-cognitive-spec/amplifying-intention-omega.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/CognitiveSpec/bodyEta/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-cognitive-spec/body-eta.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/CognitiveSpec/inhibitingFeelingOmega/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-cognitive-spec/inhibiting-feeling-omega.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/CognitiveSpec/inhibitingIntentionOmega/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-cognitive-spec/inhibiting-intention-omega.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/CognitiveSpec/inhibitingWalkRandOmega/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-cognitive-spec/inhibiting-walk-rand-omega.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/CognitiveSpec/logisticSigma/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-cognitive-spec/logistic-sigma.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/CognitiveSpec/logisticTau/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-cognitive-spec/logistic-tau.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/CognitiveSpec/mentalEta/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-cognitive-spec/mental-eta.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/CognitiveSpec/persistingOmega/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-cognitive-spec/persisting-omega.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/CognitiveSpec/sensingOmega/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-cognitive-spec/sensing-omega.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/DesireEvacuate///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-desire-evacuate/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/DesireEvacuate/DesireEvacuate/#kotlin.Double#kotlin.Function0[kotlin.Double]#kotlin.Function0[kotlin.Double]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-desire-evacuate/-desire-evacuate.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/DesireEvacuate/combinationFunction/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-desire-evacuate/combination-function.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/DesireWalkRandomly///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-desire-walk-randomly/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/DesireWalkRandomly/DesireWalkRandomly/#kotlin.Double#kotlin.Function0[kotlin.Double]#kotlin.Function0[kotlin.Double]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-desire-walk-randomly/-desire-walk-randomly.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/DesireWalkRandomly/combinationFunction/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-desire-walk-randomly/combination-function.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/Fear///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-fear/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/Fear/Fear/#kotlin.Function0[kotlin.Double]#kotlin.Function0[kotlin.Double]#kotlin.Function0[kotlin.collections.List[it.unibo.alchemist.model.cognitive.CognitiveModel]]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-fear/-fear.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/Fear/combinationFunction/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-fear/combination-function.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/IntentionEvacuate///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-intention-evacuate/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/IntentionEvacuate/IntentionEvacuate/#kotlin.Function0[kotlin.Double]#kotlin.Function0[kotlin.Double]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-intention-evacuate/-intention-evacuate.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/IntentionEvacuate/combinationFunction/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-intention-evacuate/combination-function.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/IntentionWalkRandomly///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-intention-walk-randomly/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/IntentionWalkRandomly/IntentionWalkRandomly/#kotlin.Function0[kotlin.Double]#kotlin.Function0[kotlin.Double]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-intention-walk-randomly/-intention-walk-randomly.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/IntentionWalkRandomly/combinationFunction/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-intention-walk-randomly/combination-function.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/MentalCognitiveCharacteristic///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-mental-cognitive-characteristic/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/MentalCognitiveCharacteristic/MentalCognitiveCharacteristic/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-mental-cognitive-characteristic/-mental-cognitive-characteristic.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/MentalCognitiveCharacteristic/update/#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-mental-cognitive-characteristic/update.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual////PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Age.ADULT///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-age/-a-d-u-l-t/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Age.CHILD///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-age/-c-h-i-l-d/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Age.Companion///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-age/-companion/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Age.Companion/ADULT_THRESHOLD/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-age/-companion/-a-d-u-l-t_-t-h-r-e-s-h-o-l-d.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Age.Companion/CHILD_THRESHOLD/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-age/-companion/-c-h-i-l-d_-t-h-r-e-s-h-o-l-d.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Age.Companion/fromAny/#kotlin.Any/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-age/-companion/from-any.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Age.Companion/fromString/#kotlin.String/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-age/-companion/from-string.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Age.Companion/fromYears/#kotlin.Int/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-age/-companion/from-years.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Age.ELDERLY///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-age/-e-l-d-e-r-l-y/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Age///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-age/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Age/entries/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-age/entries.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Age/valueOf/#kotlin.String/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-age/value-of.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Age/values/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-age/values.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Characteristic///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-characteristic/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Compliance///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-compliance/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Compliance/Compliance/#it.unibo.alchemist.model.cognitive.impact.individual.Age#it.unibo.alchemist.model.cognitive.impact.individual.Gender/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-compliance/-compliance.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Compliance/level/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-compliance/level.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/ComplianceSpec///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-compliance-spec/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/ComplianceSpec/adultFemale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-compliance-spec/adult-female.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/ComplianceSpec/adultMale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-compliance-spec/adult-male.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/ComplianceSpec/childFemale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-compliance-spec/child-female.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/ComplianceSpec/childMale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-compliance-spec/child-male.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/ComplianceSpec/elderlyFemale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-compliance-spec/elderly-female.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/ComplianceSpec/elderlyMale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-compliance-spec/elderly-male.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Gender.Companion///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-gender/-companion/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Gender.Companion/fromString/#kotlin.String/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-gender/-companion/from-string.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Gender.FEMALE///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-gender/-f-e-m-a-l-e/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Gender.MALE///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-gender/-m-a-l-e/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Gender///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-gender/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Gender/entries/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-gender/entries.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Gender/valueOf/#kotlin.String/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-gender/value-of.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Gender/values/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-gender/values.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitude///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitude/HelpAttitude/#it.unibo.alchemist.model.cognitive.impact.individual.Age#it.unibo.alchemist.model.cognitive.impact.individual.Gender/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude/-help-attitude.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitude/level/#it.unibo.alchemist.model.cognitive.impact.individual.Age#it.unibo.alchemist.model.cognitive.impact.individual.Gender#kotlin.Boolean/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude/level.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.AdultFemale///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-adult-female/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.AdultFemale/adultFemale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-adult-female/adult-female.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.AdultFemale/adultMale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-adult-female/adult-male.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.AdultFemale/childFemale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-adult-female/child-female.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.AdultFemale/childMale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-adult-female/child-male.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.AdultFemale/elderlyFemale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-adult-female/elderly-female.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.AdultFemale/elderlyMale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-adult-female/elderly-male.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.AdultMale///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-adult-male/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.AdultMale/adultFemale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-adult-male/adult-female.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.AdultMale/adultMale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-adult-male/adult-male.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.AdultMale/childFemale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-adult-male/child-female.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.AdultMale/childMale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-adult-male/child-male.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.AdultMale/elderlyFemale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-adult-male/elderly-female.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.AdultMale/elderlyMale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-adult-male/elderly-male.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.ElderlyFemale///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-elderly-female/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.ElderlyFemale/adultFemale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-elderly-female/adult-female.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.ElderlyFemale/adultMale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-elderly-female/adult-male.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.ElderlyFemale/childFemale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-elderly-female/child-female.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.ElderlyFemale/childMale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-elderly-female/child-male.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.ElderlyFemale/elderlyFemale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-elderly-female/elderly-female.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.ElderlyFemale/elderlyMale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-elderly-female/elderly-male.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.ElderlyMale///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-elderly-male/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.ElderlyMale/adultFemale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-elderly-male/adult-female.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.ElderlyMale/adultMale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-elderly-male/adult-male.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.ElderlyMale/childFemale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-elderly-male/child-female.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.ElderlyMale/childMale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-elderly-male/child-male.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.ElderlyMale/elderlyFemale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-elderly-male/elderly-female.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.ElderlyMale/elderlyMale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-elderly-male/elderly-male.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Speed.Companion///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-speed/-companion/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Speed.Companion/default/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-speed/-companion/default.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Speed///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-speed/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Speed/Speed/#it.unibo.alchemist.model.cognitive.impact.individual.Age#it.unibo.alchemist.model.cognitive.impact.individual.Gender#org.apache.commons.math3.random.RandomGenerator/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-speed/-speed.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Speed/running/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-speed/running.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Speed/walking/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-speed/walking.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/SpeedSpec///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-speed-spec/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/SpeedSpec/adultFemale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-speed-spec/adult-female.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/SpeedSpec/adultMale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-speed-spec/adult-male.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/SpeedSpec/childFemale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-speed-spec/child-female.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/SpeedSpec/childMale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-speed-spec/child-male.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/SpeedSpec/default/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-speed-spec/default.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/SpeedSpec/elderlyFemale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-speed-spec/elderly-female.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/SpeedSpec/elderlyMale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-speed-spec/elderly-male.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/SpeedSpec/variance/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-speed-spec/variance.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact////PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact//PARAMETERS_FILE/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact/-p-a-r-a-m-e-t-e-r-s_-f-i-l-e.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact/ImpactModel///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact/-impact-model/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact/ImpactModel/ImpactModel/#kotlin.Double#kotlin.Function0[kotlin.collections.List[it.unibo.alchemist.model.cognitive.CognitiveModel]]#kotlin.Function0[kotlin.Double]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact/-impact-model/-impact-model.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact/ImpactModel/dangerBelief/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact/-impact-model/danger-belief.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact/ImpactModel/escapeIntention/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact/-impact-model/escape-intention.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact/ImpactModel/fear/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact/-impact-model/fear.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact/ImpactModel/remainIntention/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact/-impact-model/remain-intention.html +$dokka.location:it.unibo.alchemist.model.cognitive.impact/ImpactModel/update/#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact/-impact-model/update.html +$dokka.location:it.unibo.alchemist.model.cognitive.navigation////PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.navigation/DynamicallyPursue///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-dynamically-pursue/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.navigation/DynamicallyPursue/DynamicallyPursue/#it.unibo.alchemist.model.cognitive.NavigationAction[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition,it.unibo.alchemist.model.geometry.Euclidean2DTransformation,TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexShape[it.unibo.alchemist.model.positions.Euclidean2DPosition,it.unibo.alchemist.model.geometry.Euclidean2DTransformation]]),TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.geometry.ConvexPolygon,it.unibo.alchemist.model.geometry.navigationgraph.Euclidean2DPassage]#it.unibo.alchemist.model.positions.Euclidean2DPosition/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-dynamically-pursue/-dynamically-pursue.html +$dokka.location:it.unibo.alchemist.model.cognitive.navigation/DynamicallyPursue/setDestination/#it.unibo.alchemist.model.positions.Euclidean2DPosition#kotlin.Boolean/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-dynamically-pursue/set-destination.html +$dokka.location:it.unibo.alchemist.model.cognitive.navigation/Explore.Companion///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-explore/-companion/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.navigation/Explore.Companion/DEFAULT_IMPASSE_WEIGHT/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-explore/-companion/-d-e-f-a-u-l-t_-i-m-p-a-s-s-e_-w-e-i-g-h-t.html +$dokka.location:it.unibo.alchemist.model.cognitive.navigation/Explore///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-explore/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.navigation/Explore/Explore/#it.unibo.alchemist.model.cognitive.NavigationAction[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition,it.unibo.alchemist.model.geometry.Euclidean2DTransformation,TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexShape[it.unibo.alchemist.model.positions.Euclidean2DPosition,it.unibo.alchemist.model.geometry.Euclidean2DTransformation]]),TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.geometry.ConvexPolygon,it.unibo.alchemist.model.geometry.navigationgraph.Euclidean2DPassage]#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-explore/-explore.html +$dokka.location:it.unibo.alchemist.model.cognitive.navigation/Explore/action/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-explore/action.html +$dokka.location:it.unibo.alchemist.model.cognitive.navigation/Explore/inNewRoom/#it.unibo.alchemist.model.geometry.ConvexPolygon/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-explore/in-new-room.html +$dokka.location:it.unibo.alchemist.model.cognitive.navigation/FollowRoute///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-follow-route/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.navigation/FollowRoute/FollowRoute/#it.unibo.alchemist.model.cognitive.NavigationAction[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition,it.unibo.alchemist.model.geometry.Euclidean2DTransformation,TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexShape[it.unibo.alchemist.model.positions.Euclidean2DPosition,it.unibo.alchemist.model.geometry.Euclidean2DTransformation]]),TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.geometry.ConvexPolygon,it.unibo.alchemist.model.geometry.navigationgraph.Euclidean2DPassage]#kotlin.collections.List[it.unibo.alchemist.model.positions.Euclidean2DPosition]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-follow-route/-follow-route.html +$dokka.location:it.unibo.alchemist.model.cognitive.navigation/FollowRoute/inNewRoom/#it.unibo.alchemist.model.geometry.ConvexPolygon/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-follow-route/in-new-room.html +$dokka.location:it.unibo.alchemist.model.cognitive.navigation/FollowRoute/inUnexpectedNewRoom/#it.unibo.alchemist.model.geometry.ConvexPolygon#it.unibo.alchemist.model.geometry.ConvexPolygon#it.unibo.alchemist.model.geometry.ConvexPolygon/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-follow-route/in-unexpected-new-room.html +$dokka.location:it.unibo.alchemist.model.cognitive.navigation/GoalOrientedExploration///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-goal-oriented-exploration/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.navigation/GoalOrientedExploration/GoalOrientedExploration/#it.unibo.alchemist.model.cognitive.NavigationAction[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition,it.unibo.alchemist.model.geometry.Euclidean2DTransformation,TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexShape[it.unibo.alchemist.model.positions.Euclidean2DPosition,it.unibo.alchemist.model.geometry.Euclidean2DTransformation]]),TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.geometry.ConvexPolygon,it.unibo.alchemist.model.geometry.navigationgraph.Euclidean2DPassage]#kotlin.collections.List[it.unibo.alchemist.model.positions.Euclidean2DPosition]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-goal-oriented-exploration/-goal-oriented-exploration.html +$dokka.location:it.unibo.alchemist.model.cognitive.navigation/GoalOrientedExploration/inNewRoom/#it.unibo.alchemist.model.geometry.ConvexPolygon/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-goal-oriented-exploration/in-new-room.html +$dokka.location:it.unibo.alchemist.model.cognitive.navigation/Pursue///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-pursue/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.navigation/Pursue/Pursue/#it.unibo.alchemist.model.cognitive.NavigationAction[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition,it.unibo.alchemist.model.geometry.Euclidean2DTransformation,TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexShape[it.unibo.alchemist.model.positions.Euclidean2DPosition,it.unibo.alchemist.model.geometry.Euclidean2DTransformation]]),TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.geometry.ConvexPolygon,it.unibo.alchemist.model.geometry.navigationgraph.Euclidean2DPassage]#it.unibo.alchemist.model.positions.Euclidean2DPosition/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-pursue/-pursue.html +$dokka.location:it.unibo.alchemist.model.cognitive.navigation/Pursue/inNewRoom/#it.unibo.alchemist.model.geometry.ConvexPolygon/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-pursue/in-new-room.html +$dokka.location:it.unibo.alchemist.model.cognitive.navigation/ReachDestination///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-reach-destination/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.navigation/ReachDestination/ReachDestination/#it.unibo.alchemist.model.cognitive.NavigationAction[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition,it.unibo.alchemist.model.geometry.Euclidean2DTransformation,TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexShape[it.unibo.alchemist.model.positions.Euclidean2DPosition,it.unibo.alchemist.model.geometry.Euclidean2DTransformation]]),TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.geometry.ConvexPolygon,it.unibo.alchemist.model.geometry.navigationgraph.Euclidean2DPassage]#kotlin.collections.List[it.unibo.alchemist.model.positions.Euclidean2DPosition]#kotlin.collections.List[it.unibo.alchemist.model.positions.Euclidean2DPosition]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-reach-destination/-reach-destination.html +$dokka.location:it.unibo.alchemist.model.cognitive.navigation/ReachDestination/inNewRoom/#it.unibo.alchemist.model.geometry.ConvexPolygon/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-reach-destination/in-new-room.html +$dokka.location:it.unibo.alchemist.model.cognitive.navigation/ReachKnownDestination///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-reach-known-destination/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.navigation/ReachKnownDestination/ReachKnownDestination/#it.unibo.alchemist.model.cognitive.NavigationAction[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition,it.unibo.alchemist.model.geometry.Euclidean2DTransformation,TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexShape[it.unibo.alchemist.model.positions.Euclidean2DPosition,it.unibo.alchemist.model.geometry.Euclidean2DTransformation]]),TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.geometry.ConvexPolygon,it.unibo.alchemist.model.geometry.navigationgraph.Euclidean2DPassage]#kotlin.collections.List[it.unibo.alchemist.model.positions.Euclidean2DPosition]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-reach-known-destination/-reach-known-destination.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties////PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Cognitive///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-cognitive/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Cognitive/Cognitive/#it.unibo.alchemist.model.physics.PhysicsEnvironment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.Transformation[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^], it.unibo.alchemist.model.geometry.Vector[^^]])]]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.GeometricShapeFactory[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^], it.unibo.alchemist.model.geometry.Vector[^^]]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.Transformation[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^^], it.unibo.alchemist.model.geometry.Vector[^^^]])]])]])]#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Molecule?/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-cognitive/-cognitive.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Cognitive/cloneOnNewNode/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-cognitive/clone-on-new-node.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Cognitive/cognitiveModel/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-cognitive/cognitive-model.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Cognitive/danger/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-cognitive/danger.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Cognitive/node/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-cognitive/node.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Cognitive/toString/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-cognitive/to-string.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Cognitive2D///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-cognitive2-d/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Cognitive2D/Cognitive2D/#it.unibo.alchemist.model.physics.environments.Physics2DEnvironment[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Molecule?/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-cognitive2-d/-cognitive2-d.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/CognitivePedestrian///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-cognitive-pedestrian/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/CognitivePedestrian/CognitivePedestrian/#org.apache.commons.math3.random.RandomGenerator#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-cognitive-pedestrian/-cognitive-pedestrian.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/CognitivePedestrian/speed/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-cognitive-pedestrian/speed.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/HeterogeneousPedestrian///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-heterogeneous-pedestrian/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/HeterogeneousPedestrian/HeterogeneousPedestrian/#org.apache.commons.math3.random.RandomGenerator#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-heterogeneous-pedestrian/-heterogeneous-pedestrian.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/HeterogeneousPedestrian/runningSpeed/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-heterogeneous-pedestrian/running-speed.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/HeterogeneousPedestrian/toString/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-heterogeneous-pedestrian/to-string.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/HeterogeneousPedestrian/walkingSpeed/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-heterogeneous-pedestrian/walking-speed.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Human///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-human/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Human/Human/#org.apache.commons.math3.random.RandomGenerator#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.impact.individual.Age#it.unibo.alchemist.model.cognitive.impact.individual.Gender#it.unibo.alchemist.model.cognitive.impact.individual.Speed#kotlin.Double#it.unibo.alchemist.model.cognitive.impact.individual.HelpAttitude/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-human/-human.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Human/Human/#org.apache.commons.math3.random.RandomGenerator#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#kotlin.Any#kotlin.String#it.unibo.alchemist.model.cognitive.impact.individual.Speed#kotlin.Double#it.unibo.alchemist.model.cognitive.impact.individual.HelpAttitude/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-human/-human.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Human/age/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-human/age.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Human/cloneOnNewNode/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-human/clone-on-new-node.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Human/compliance/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-human/compliance.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Human/gender/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-human/gender.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Human/helpAttitude/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-human/help-attitude.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Human/node/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-human/node.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Human/speed/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-human/speed.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Human/toString/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-human/to-string.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Orienting.Companion///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-orienting/-companion/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Orienting.Companion/pathExists/org.jgrapht.Graph[TypeParam(bounds=[kotlin.Any?]),*]#TypeParam(bounds=[kotlin.Any?])#TypeParam(bounds=[kotlin.Any?])/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-orienting/-companion/path-exists.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Orienting///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-orienting/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Orienting/Orienting/#org.apache.commons.math3.random.RandomGenerator#it.unibo.alchemist.model.environments.EnvironmentWithGraph[*,TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.Transformation[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^], it.unibo.alchemist.model.geometry.Vector[^^]])]]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexShape[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^], it.unibo.alchemist.model.geometry.Vector[^^]]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.Transformation[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^^], it.unibo.alchemist.model.geometry.Vector[^^^]])]])]]),org.jgrapht.graph.DefaultEdge]#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#kotlin.Double#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-orienting/-orienting.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Orienting/cognitiveMap/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-orienting/cognitive-map.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Orienting/createLandmarkIn/#TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexShape[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^], it.unibo.alchemist.model.geometry.Vector[^^]]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.Transformation[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^^], it.unibo.alchemist.model.geometry.Vector[^^^]])]])]])/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-orienting/create-landmark-in.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Orienting/environment/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-orienting/environment.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Orienting/knowledgeDegree/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-orienting/knowledge-degree.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Orienting/node/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-orienting/node.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Orienting/randomGenerator/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-orienting/random-generator.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Orienting/toString/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-orienting/to-string.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Orienting/volatileMemory/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-orienting/volatile-memory.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Orienting2D///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-orienting2-d/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Orienting2D/Orienting2D/#it.unibo.alchemist.model.environments.Euclidean2DEnvironmentWithGraph[*,TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexPolygon]),org.jgrapht.graph.DefaultEdge]#org.apache.commons.math3.random.RandomGenerator#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#kotlin.Double#kotlin.Double#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-orienting2-d/-orienting2-d.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Orienting2D/cloneOnNewNode/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-orienting2-d/clone-on-new-node.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Orienting2D/createLandmarkIn/#TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexPolygon])/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-orienting2-d/create-landmark-in.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Orienting2D/environment/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-orienting2-d/environment.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Orienting2D/knowledgeDegree/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-orienting2-d/knowledge-degree.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Orienting2D/node/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-orienting2-d/node.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Pedestrian///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-pedestrian/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Pedestrian/Pedestrian/#org.apache.commons.math3.random.RandomGenerator#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#kotlin.Double#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-pedestrian/-pedestrian.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Pedestrian/cloneOnNewNode/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-pedestrian/clone-on-new-node.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Pedestrian/node/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-pedestrian/node.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Pedestrian/runningSpeed/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-pedestrian/running-speed.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Pedestrian/speed/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-pedestrian/speed.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Pedestrian/toString/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-pedestrian/to-string.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Pedestrian/walkingSpeed/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-pedestrian/walking-speed.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Perceptive///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-perceptive/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Perceptive/Perceptive/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.physics.InfluenceSphere[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-perceptive/-perceptive.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Perceptive/cloneOnNewNode/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-perceptive/clone-on-new-node.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Perceptive/fieldOfView/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-perceptive/field-of-view.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Perceptive/node/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-perceptive/node.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Perceptive2D.Companion///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-perceptive2-d/-companion/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Perceptive2D.Companion/DEFAULT_FIELD_OF_VIEW_APERTURE/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-perceptive2-d/-companion/-d-e-f-a-u-l-t_-f-i-e-l-d_-o-f_-v-i-e-w_-a-p-e-r-t-u-r-e.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Perceptive2D.Companion/DEFAULT_FIELD_OF_VIEW_DEPTH/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-perceptive2-d/-companion/-d-e-f-a-u-l-t_-f-i-e-l-d_-o-f_-v-i-e-w_-d-e-p-t-h.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Perceptive2D///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-perceptive2-d/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Perceptive2D/Perceptive2D/#it.unibo.alchemist.model.physics.environments.Physics2DEnvironment[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.physics.InfluenceSphere2D[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-perceptive2-d/-perceptive2-d.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Perceptive2D/cloneOnNewNode/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-perceptive2-d/clone-on-new-node.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Perceptive2D/environment/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-perceptive2-d/environment.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Perceptive2D/fieldOfView/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-perceptive2-d/field-of-view.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Perceptive2D/node/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-perceptive2-d/node.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/PhysicalPedestrian2D///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-physical-pedestrian2-d/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/PhysicalPedestrian2D/PhysicalPedestrian2D/#org.apache.commons.math3.random.RandomGenerator#it.unibo.alchemist.model.physics.environments.Physics2DEnvironment[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-physical-pedestrian2-d/-physical-pedestrian2-d.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/PhysicalPedestrian2D/avoid/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-physical-pedestrian2-d/avoid.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/PhysicalPedestrian2D/avoidanceForces/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-physical-pedestrian2-d/avoidance-forces.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/PhysicalPedestrian2D/checkAndPossiblyFall/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-physical-pedestrian2-d/check-and-possibly-fall.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/PhysicalPedestrian2D/cloneOnNewNode/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-physical-pedestrian2-d/clone-on-new-node.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/PhysicalPedestrian2D/comfortArea/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-physical-pedestrian2-d/comfort-area.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/PhysicalPedestrian2D/comfortRay/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-physical-pedestrian2-d/comfort-ray.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/PhysicalPedestrian2D/environment/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-physical-pedestrian2-d/environment.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/PhysicalPedestrian2D/fallenAgentAvoidanceForces/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-physical-pedestrian2-d/fallen-agent-avoidance-forces.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/PhysicalPedestrian2D/isFallen/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-physical-pedestrian2-d/is-fallen.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/PhysicalPedestrian2D/node/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-physical-pedestrian2-d/node.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/PhysicalPedestrian2D/onFall/#kotlin.Function1[it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])],kotlin.Unit]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-physical-pedestrian2-d/on-fall.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/PhysicalPedestrian2D/physicalForces/#it.unibo.alchemist.model.physics.PhysicsEnvironment[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition,it.unibo.alchemist.model.geometry.Euclidean2DTransformation,it.unibo.alchemist.model.geometry.Euclidean2DShapeFactory]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-physical-pedestrian2-d/physical-forces.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/PhysicalPedestrian2D/rectangleOfInfluence/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-physical-pedestrian2-d/rectangle-of-influence.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/PhysicalPedestrian2D/repulse/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-physical-pedestrian2-d/repulse.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/PhysicalPedestrian2D/repulsionForces/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-physical-pedestrian2-d/repulsion-forces.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/PhysicalPedestrian2D/shouldFall/#kotlin.collections.List[it.unibo.alchemist.model.positions.Euclidean2DPosition]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-physical-pedestrian2-d/should-fall.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/PhysicalPedestrian2D/toString/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-physical-pedestrian2-d/to-string.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/RunningPedestrian///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-running-pedestrian/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/RunningPedestrian/RunningPedestrian/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-running-pedestrian/-running-pedestrian.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/RunningPedestrian/cloneOnNewNode/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-running-pedestrian/clone-on-new-node.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/RunningPedestrian/node/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-running-pedestrian/node.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/RunningPedestrian/runningSpeed/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-running-pedestrian/running-speed.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Social///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-social/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Social/Social/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.Group[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-social/-social.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Social/cloneOnNewNode/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-social/clone-on-new-node.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Social/group/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-social/group.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Social/node/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-social/node.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/Social/toString/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-social/to-string.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/WalkingPedestrian///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-walking-pedestrian/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/WalkingPedestrian/WalkingPedestrian/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-walking-pedestrian/-walking-pedestrian.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/WalkingPedestrian/cloneOnNewNode/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-walking-pedestrian/clone-on-new-node.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/WalkingPedestrian/node/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-walking-pedestrian/node.html +$dokka.location:it.unibo.alchemist.model.cognitive.properties/WalkingPedestrian/walkingSpeed/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-walking-pedestrian/walking-speed.html +$dokka.location:it.unibo.alchemist.model.cognitive.reactions////PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.reactions/BlendedSteering///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-blended-steering/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.reactions/BlendedSteering/BlendedSteering/#it.unibo.alchemist.model.environments.Euclidean2DEnvironment[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.TimeDistribution[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-blended-steering/-blended-steering.html +$dokka.location:it.unibo.alchemist.model.cognitive.reactions/CognitiveBehavior///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-cognitive-behavior/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.reactions/CognitiveBehavior/CognitiveBehavior/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.TimeDistribution[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-cognitive-behavior/-cognitive-behavior.html +$dokka.location:it.unibo.alchemist.model.cognitive.reactions/CognitiveBehavior/cloneOnNewNode/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Time/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-cognitive-behavior/clone-on-new-node.html +$dokka.location:it.unibo.alchemist.model.cognitive.reactions/NavigationPrioritizedSteering///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-navigation-prioritized-steering/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.reactions/NavigationPrioritizedSteering/NavigationPrioritizedSteering/#it.unibo.alchemist.model.environments.Euclidean2DEnvironmentWithGraph[*,TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexPolygon]),*]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.TimeDistribution[TypeParam(bounds=[kotlin.Any?])]#kotlin.Double#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-navigation-prioritized-steering/-navigation-prioritized-steering.html +$dokka.location:it.unibo.alchemist.model.cognitive.reactions/NavigationPrioritizedSteeringWithPhysics///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-navigation-prioritized-steering-with-physics/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.reactions/NavigationPrioritizedSteeringWithPhysics/NavigationPrioritizedSteeringWithPhysics/#it.unibo.alchemist.model.physics.environments.EuclideanPhysics2DEnvironmentWithGraph[*,TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexPolygon]),*]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.TimeDistribution[TypeParam(bounds=[kotlin.Any?])]#kotlin.Double#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-navigation-prioritized-steering-with-physics/-navigation-prioritized-steering-with-physics.html +$dokka.location:it.unibo.alchemist.model.cognitive.reactions/NavigationPrioritizedSteeringWithPhysics/steerStrategy/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-navigation-prioritized-steering-with-physics/steer-strategy.html +$dokka.location:it.unibo.alchemist.model.cognitive.reactions/PhysicalBlendedSteering///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-physical-blended-steering/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.reactions/PhysicalBlendedSteering/PhysicalBlendedSteering/#it.unibo.alchemist.model.physics.environments.Dynamics2DEnvironment[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.TimeDistribution[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-physical-blended-steering/-physical-blended-steering.html +$dokka.location:it.unibo.alchemist.model.cognitive.reactions/PhysicalBlendedSteering/environment/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-physical-blended-steering/environment.html +$dokka.location:it.unibo.alchemist.model.cognitive.reactions/PhysicalBlendedSteering/execute/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-physical-blended-steering/execute.html +$dokka.location:it.unibo.alchemist.model.cognitive.reactions/PhysicalBlendedSteering/steerStrategy/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-physical-blended-steering/steer-strategy.html +$dokka.location:it.unibo.alchemist.model.cognitive.reactions/PrioritySteering///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-priority-steering/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.reactions/PrioritySteering/PrioritySteering/#it.unibo.alchemist.model.environments.Euclidean2DEnvironment[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.TimeDistribution[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-priority-steering/-priority-steering.html +$dokka.location:it.unibo.alchemist.model.cognitive.reactions/SteeringBehavior///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-steering-behavior/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.reactions/SteeringBehavior/SteeringBehavior/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.TimeDistribution[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.SteeringStrategy[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-steering-behavior/-steering-behavior.html +$dokka.location:it.unibo.alchemist.model.cognitive.reactions/SteeringBehavior/cloneOnNewNode/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Time/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-steering-behavior/clone-on-new-node.html +$dokka.location:it.unibo.alchemist.model.cognitive.reactions/SteeringBehavior/execute/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-steering-behavior/execute.html +$dokka.location:it.unibo.alchemist.model.cognitive.reactions/SteeringBehavior/steerActions/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-steering-behavior/steer-actions.html +$dokka.location:it.unibo.alchemist.model.cognitive.reactions/SteeringBehavior/steerStrategy/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-steering-behavior/steer-strategy.html +$dokka.location:it.unibo.alchemist.model.cognitive.steering////PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.steering/DistanceWeighted///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-distance-weighted/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.steering/DistanceWeighted/DistanceWeighted/#it.unibo.alchemist.model.environments.Euclidean2DEnvironment[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-distance-weighted/-distance-weighted.html +$dokka.location:it.unibo.alchemist.model.cognitive.steering/Filtered///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-filtered/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.steering/Filtered/Filtered/#it.unibo.alchemist.model.cognitive.SteeringStrategy[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]#kotlin.Function1[kotlin.collections.List[it.unibo.alchemist.model.cognitive.SteeringAction[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]],kotlin.collections.List[it.unibo.alchemist.model.cognitive.SteeringAction[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]]]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-filtered/-filtered.html +$dokka.location:it.unibo.alchemist.model.cognitive.steering/Filtered/computeNextPosition/#kotlin.collections.List[it.unibo.alchemist.model.cognitive.SteeringAction[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-filtered/compute-next-position.html +$dokka.location:it.unibo.alchemist.model.cognitive.steering/Nearest///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-nearest/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.steering/Nearest/Nearest/#it.unibo.alchemist.model.environments.Euclidean2DEnvironment[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-nearest/-nearest.html +$dokka.location:it.unibo.alchemist.model.cognitive.steering/SinglePrevalent.Companion///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-single-prevalent/-companion/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.steering/SinglePrevalent.Companion/DEFAULT_ALPHA/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-single-prevalent/-companion/-d-e-f-a-u-l-t_-a-l-p-h-a.html +$dokka.location:it.unibo.alchemist.model.cognitive.steering/SinglePrevalent.Companion/DEFAULT_DELTA/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-single-prevalent/-companion/-d-e-f-a-u-l-t_-d-e-l-t-a.html +$dokka.location:it.unibo.alchemist.model.cognitive.steering/SinglePrevalent.Companion/DEFAULT_MAX_WALK_RATIO/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-single-prevalent/-companion/-d-e-f-a-u-l-t_-m-a-x_-w-a-l-k_-r-a-t-i-o.html +$dokka.location:it.unibo.alchemist.model.cognitive.steering/SinglePrevalent.Companion/DEFAULT_TOLERANCE_ANGLE/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-single-prevalent/-companion/-d-e-f-a-u-l-t_-t-o-l-e-r-a-n-c-e_-a-n-g-l-e.html +$dokka.location:it.unibo.alchemist.model.cognitive.steering/SinglePrevalent///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-single-prevalent/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.steering/SinglePrevalent/SinglePrevalent/#it.unibo.alchemist.model.environments.Euclidean2DEnvironmentWithGraph[*,TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexPolygon]),*]#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#kotlin.Function1[kotlin.collections.List[it.unibo.alchemist.model.cognitive.SteeringAction[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition]],it.unibo.alchemist.model.cognitive.NavigationAction[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition,it.unibo.alchemist.model.geometry.Euclidean2DTransformation,*,*,TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexPolygon]),*]]#kotlin.Double#kotlin.Double#kotlin.Function0[kotlin.Double]#kotlin.Double#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-single-prevalent/-single-prevalent.html +$dokka.location:it.unibo.alchemist.model.cognitive.steering/SinglePrevalent/computeNextPosition/#kotlin.collections.List[it.unibo.alchemist.model.cognitive.SteeringAction[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition]]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-single-prevalent/compute-next-position.html +$dokka.location:it.unibo.alchemist.model.cognitive.steering/Sum///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-sum/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.steering/Sum/Sum/#it.unibo.alchemist.model.physics.environments.Physics2DEnvironment[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.SteeringStrategy[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-sum/-sum.html +$dokka.location:it.unibo.alchemist.model.cognitive.steering/Sum/computeNextPosition/#it.unibo.alchemist.model.positions.Euclidean2DPosition/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-sum/compute-next-position.html +$dokka.location:it.unibo.alchemist.model.cognitive.steering/Sum/node/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-sum/node.html +$dokka.location:it.unibo.alchemist.model.cognitive.steering/Sum/nonPhysicalStrategy/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-sum/non-physical-strategy.html +$dokka.location:it.unibo.alchemist.model.cognitive.steering/TypeBased///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-type-based/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.steering/TypeBased/TypeBased/#it.unibo.alchemist.model.environments.Euclidean2DEnvironment[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#java.util.LinkedHashMap[kotlin.reflect.KClass[it.unibo.alchemist.model.cognitive.SteeringAction[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition]],kotlin.Double]#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-type-based/-type-based.html +$dokka.location:it.unibo.alchemist.model.cognitive.steering/Weighted///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-weighted/index.html +$dokka.location:it.unibo.alchemist.model.cognitive.steering/Weighted/Weighted/#it.unibo.alchemist.model.environments.Euclidean2DEnvironment[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#kotlin.Function1[it.unibo.alchemist.model.cognitive.SteeringAction[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition],kotlin.Double]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-weighted/-weighted.html +$dokka.location:it.unibo.alchemist.model.cognitive.steering/Weighted/computeNextPosition/#kotlin.collections.List[it.unibo.alchemist.model.cognitive.SteeringAction[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition]]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-weighted/compute-next-position.html +$dokka.location:it.unibo.alchemist.model.cognitive.steering/Weighted/computeTarget/#kotlin.collections.List[it.unibo.alchemist.model.cognitive.SteeringAction[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition]]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-weighted/compute-target.html +$dokka.location:it.unibo.alchemist.model.cognitive////PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/index.html +$dokka.location:it.unibo.alchemist.model.cognitive/CognitiveModel///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-cognitive-model/index.html +$dokka.location:it.unibo.alchemist.model.cognitive/CognitiveModel/dangerBelief/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-cognitive-model/danger-belief.html +$dokka.location:it.unibo.alchemist.model.cognitive/CognitiveModel/escapeIntention/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-cognitive-model/escape-intention.html +$dokka.location:it.unibo.alchemist.model.cognitive/CognitiveModel/fear/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-cognitive-model/fear.html +$dokka.location:it.unibo.alchemist.model.cognitive/CognitiveModel/remainIntention/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-cognitive-model/remain-intention.html +$dokka.location:it.unibo.alchemist.model.cognitive/CognitiveModel/update/#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-cognitive-model/update.html +$dokka.location:it.unibo.alchemist.model.cognitive/CognitiveModel/wantsToEscape/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-cognitive-model/wants-to-escape.html +$dokka.location:it.unibo.alchemist.model.cognitive/CognitiveProperty///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-cognitive-property/index.html +$dokka.location:it.unibo.alchemist.model.cognitive/CognitiveProperty/cognitiveModel/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-cognitive-property/cognitive-model.html +$dokka.location:it.unibo.alchemist.model.cognitive/CognitiveProperty/danger/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-cognitive-property/danger.html +$dokka.location:it.unibo.alchemist.model.cognitive/CognitiveProperty/influentialPeople/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-cognitive-property/influential-people.html +$dokka.location:it.unibo.alchemist.model.cognitive/Group///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-group/index.html +$dokka.location:it.unibo.alchemist.model.cognitive/Group/members/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-group/members.html +$dokka.location:it.unibo.alchemist.model.cognitive/GroupSteeringAction///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-group-steering-action/index.html +$dokka.location:it.unibo.alchemist.model.cognitive/GroupSteeringAction/group/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-group-steering-action/group.html +$dokka.location:it.unibo.alchemist.model.cognitive/GroupWithLeader///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-group-with-leader/index.html +$dokka.location:it.unibo.alchemist.model.cognitive/GroupWithLeader/leader/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-group-with-leader/leader.html +$dokka.location:it.unibo.alchemist.model.cognitive/HeterogeneousPedestrianModel///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-heterogeneous-pedestrian-model/index.html +$dokka.location:it.unibo.alchemist.model.cognitive/HeterogeneousPedestrianModel/HeterogeneousPedestrianModel/#it.unibo.alchemist.model.cognitive.impact.individual.Age#it.unibo.alchemist.model.cognitive.impact.individual.Gender#it.unibo.alchemist.model.cognitive.impact.individual.Speed#kotlin.Double#it.unibo.alchemist.model.cognitive.impact.individual.HelpAttitude/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-heterogeneous-pedestrian-model/-heterogeneous-pedestrian-model.html +$dokka.location:it.unibo.alchemist.model.cognitive/HeterogeneousPedestrianModel/age/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-heterogeneous-pedestrian-model/age.html +$dokka.location:it.unibo.alchemist.model.cognitive/HeterogeneousPedestrianModel/compliance/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-heterogeneous-pedestrian-model/compliance.html +$dokka.location:it.unibo.alchemist.model.cognitive/HeterogeneousPedestrianModel/gender/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-heterogeneous-pedestrian-model/gender.html +$dokka.location:it.unibo.alchemist.model.cognitive/HeterogeneousPedestrianModel/helpAttitude/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-heterogeneous-pedestrian-model/help-attitude.html +$dokka.location:it.unibo.alchemist.model.cognitive/HeterogeneousPedestrianModel/probabilityOfHelping/#it.unibo.alchemist.model.cognitive.HeterogeneousPedestrianModel[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.Vector[^]]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.Transformation[TypeParam(bounds=[it.unibo.alchemist.model.geometry.Vector[^^]])]])]#kotlin.Boolean/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-heterogeneous-pedestrian-model/probability-of-helping.html +$dokka.location:it.unibo.alchemist.model.cognitive/HeterogeneousPedestrianModel/speed/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-heterogeneous-pedestrian-model/speed.html +$dokka.location:it.unibo.alchemist.model.cognitive/Human2DProperty///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-human2-d-property/index.html +$dokka.location:it.unibo.alchemist.model.cognitive/HumanProperty///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-human-property/index.html +$dokka.location:it.unibo.alchemist.model.cognitive/HumanProperty/age/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-human-property/age.html +$dokka.location:it.unibo.alchemist.model.cognitive/HumanProperty/compliance/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-human-property/compliance.html +$dokka.location:it.unibo.alchemist.model.cognitive/HumanProperty/gender/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-human-property/gender.html +$dokka.location:it.unibo.alchemist.model.cognitive/HumanProperty/helpAttitude/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-human-property/help-attitude.html +$dokka.location:it.unibo.alchemist.model.cognitive/HumanProperty/probabilityOfHelping/#it.unibo.alchemist.model.cognitive.HeterogeneousPedestrianModel[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.Vector[^]]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.Transformation[TypeParam(bounds=[it.unibo.alchemist.model.geometry.Vector[^^]])]])]#kotlin.Boolean/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-human-property/probability-of-helping.html +$dokka.location:it.unibo.alchemist.model.cognitive/HumanProperty/speed/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-human-property/speed.html +$dokka.location:it.unibo.alchemist.model.cognitive/NavigationAction///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-navigation-action/index.html +$dokka.location:it.unibo.alchemist.model.cognitive/NavigationAction/crossDoor/#TypeParam(bounds=[kotlin.Any?])/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-navigation-action/cross-door.html +$dokka.location:it.unibo.alchemist.model.cognitive/NavigationAction/currentRoom/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-navigation-action/current-room.html +$dokka.location:it.unibo.alchemist.model.cognitive/NavigationAction/doorsInSight/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-navigation-action/doors-in-sight.html +$dokka.location:it.unibo.alchemist.model.cognitive/NavigationAction/environment/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-navigation-action/environment.html +$dokka.location:it.unibo.alchemist.model.cognitive/NavigationAction/moveToFinal/#TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-navigation-action/move-to-final.html +$dokka.location:it.unibo.alchemist.model.cognitive/NavigationAction/navigatingNode/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-navigation-action/navigating-node.html +$dokka.location:it.unibo.alchemist.model.cognitive/NavigationAction/orientingProperty/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-navigation-action/orienting-property.html +$dokka.location:it.unibo.alchemist.model.cognitive/NavigationAction/pedestrianPosition/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-navigation-action/pedestrian-position.html +$dokka.location:it.unibo.alchemist.model.cognitive/NavigationAction/stop/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-navigation-action/stop.html +$dokka.location:it.unibo.alchemist.model.cognitive/NavigationStrategy///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-navigation-strategy/index.html +$dokka.location:it.unibo.alchemist.model.cognitive/NavigationStrategy/action/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-navigation-strategy/action.html +$dokka.location:it.unibo.alchemist.model.cognitive/NavigationStrategy/inNewRoom/#TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexShape[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^], it.unibo.alchemist.model.geometry.Vector[^^]]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.Transformation[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^^], it.unibo.alchemist.model.geometry.Vector[^^^]])]])]])/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-navigation-strategy/in-new-room.html +$dokka.location:it.unibo.alchemist.model.cognitive/NavigationStrategy/inUnexpectedNewRoom/#TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexShape[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^], it.unibo.alchemist.model.geometry.Vector[^^]]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.Transformation[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^^], it.unibo.alchemist.model.geometry.Vector[^^^]])]])]])#TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexShape[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^], it.unibo.alchemist.model.geometry.Vector[^^]]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.Transformation[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^^], it.unibo.alchemist.model.geometry.Vector[^^^]])]])]])#TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexShape[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^], it.unibo.alchemist.model.geometry.Vector[^^]]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.Transformation[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^^], it.unibo.alchemist.model.geometry.Vector[^^^]])]])]])/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-navigation-strategy/in-unexpected-new-room.html +$dokka.location:it.unibo.alchemist.model.cognitive/NavigationStrategy/orientingCapability/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-navigation-strategy/orienting-capability.html +$dokka.location:it.unibo.alchemist.model.cognitive/NavigationStrategy2D///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-navigation-strategy2-d/index.html +$dokka.location:it.unibo.alchemist.model.cognitive/OrientingAgent///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-orienting-agent/index.html +$dokka.location:it.unibo.alchemist.model.cognitive/OrientingAgent/cognitiveMap/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-orienting-agent/cognitive-map.html +$dokka.location:it.unibo.alchemist.model.cognitive/OrientingAgent/knowledgeDegree/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-orienting-agent/knowledge-degree.html +$dokka.location:it.unibo.alchemist.model.cognitive/OrientingAgent/registerVisit/#TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexShape[TypeParam(bounds=[it.unibo.alchemist.model.geometry.Vector[^^]]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.Transformation[TypeParam(bounds=[it.unibo.alchemist.model.geometry.Vector[^^^]])]])]])/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-orienting-agent/register-visit.html +$dokka.location:it.unibo.alchemist.model.cognitive/OrientingAgent/volatileMemory/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-orienting-agent/volatile-memory.html +$dokka.location:it.unibo.alchemist.model.cognitive/OrientingAgent2D///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-orienting-agent2-d/index.html +$dokka.location:it.unibo.alchemist.model.cognitive/OrientingProperty///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-orienting-property/index.html +$dokka.location:it.unibo.alchemist.model.cognitive/OrientingProperty/cognitiveMap/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-orienting-property/cognitive-map.html +$dokka.location:it.unibo.alchemist.model.cognitive/OrientingProperty/createLandmarkIn/#TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexShape[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^], it.unibo.alchemist.model.geometry.Vector[^^]]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.Transformation[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^^], it.unibo.alchemist.model.geometry.Vector[^^^]])]])]])/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-orienting-property/create-landmark-in.html +$dokka.location:it.unibo.alchemist.model.cognitive/OrientingProperty/environment/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-orienting-property/environment.html +$dokka.location:it.unibo.alchemist.model.cognitive/OrientingProperty/knowledgeDegree/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-orienting-property/knowledge-degree.html +$dokka.location:it.unibo.alchemist.model.cognitive/OrientingProperty/registerVisit/#TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexShape[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^], it.unibo.alchemist.model.geometry.Vector[^^]]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.Transformation[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^^], it.unibo.alchemist.model.geometry.Vector[^^^]])]])]])/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-orienting-property/register-visit.html +$dokka.location:it.unibo.alchemist.model.cognitive/OrientingProperty/volatileMemory/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-orienting-property/volatile-memory.html +$dokka.location:it.unibo.alchemist.model.cognitive/PedestrianProperty///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-pedestrian-property/index.html +$dokka.location:it.unibo.alchemist.model.cognitive/PedestrianProperty/speed/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-pedestrian-property/speed.html +$dokka.location:it.unibo.alchemist.model.cognitive/PerceptiveProperty///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-perceptive-property/index.html +$dokka.location:it.unibo.alchemist.model.cognitive/PerceptiveProperty/fieldOfView/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-perceptive-property/field-of-view.html +$dokka.location:it.unibo.alchemist.model.cognitive/PerceptiveProperty/senses/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-perceptive-property/senses.html +$dokka.location:it.unibo.alchemist.model.cognitive/PhysicalSteeringStrategy///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-physical-steering-strategy/index.html +$dokka.location:it.unibo.alchemist.model.cognitive/PhysicalSteeringStrategy/computeNextPosition/#TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-physical-steering-strategy/compute-next-position.html +$dokka.location:it.unibo.alchemist.model.cognitive/PhysicalSteeringStrategy/computeNextPosition/#kotlin.collections.List[it.unibo.alchemist.model.cognitive.SteeringAction[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-physical-steering-strategy/compute-next-position.html +$dokka.location:it.unibo.alchemist.model.cognitive/PhysicalSteeringStrategy/computeTarget/#kotlin.collections.List[it.unibo.alchemist.model.cognitive.SteeringAction[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-physical-steering-strategy/compute-target.html +$dokka.location:it.unibo.alchemist.model.cognitive/PhysicalSteeringStrategy/node/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-physical-steering-strategy/node.html +$dokka.location:it.unibo.alchemist.model.cognitive/PhysicalSteeringStrategy/nonPhysicalStrategy/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-physical-steering-strategy/non-physical-strategy.html +$dokka.location:it.unibo.alchemist.model.cognitive/RunningPedestrianProperty///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-running-pedestrian-property/index.html +$dokka.location:it.unibo.alchemist.model.cognitive/RunningPedestrianProperty/runningSpeed/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-running-pedestrian-property/running-speed.html +$dokka.location:it.unibo.alchemist.model.cognitive/SocialProperty///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-social-property/index.html +$dokka.location:it.unibo.alchemist.model.cognitive/SocialProperty/group/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-social-property/group.html +$dokka.location:it.unibo.alchemist.model.cognitive/SteeringAction///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-steering-action/index.html +$dokka.location:it.unibo.alchemist.model.cognitive/SteeringAction/nextPosition/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-steering-action/next-position.html +$dokka.location:it.unibo.alchemist.model.cognitive/SteeringActionWithTarget///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-steering-action-with-target/index.html +$dokka.location:it.unibo.alchemist.model.cognitive/SteeringActionWithTarget/target/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-steering-action-with-target/target.html +$dokka.location:it.unibo.alchemist.model.cognitive/SteeringActionWithTarget/targetDistanceTo/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-steering-action-with-target/target-distance-to.html +$dokka.location:it.unibo.alchemist.model.cognitive/SteeringStrategy///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-steering-strategy/index.html +$dokka.location:it.unibo.alchemist.model.cognitive/SteeringStrategy/computeNextPosition/#kotlin.collections.List[it.unibo.alchemist.model.cognitive.SteeringAction[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])]]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-steering-strategy/compute-next-position.html +$dokka.location:it.unibo.alchemist.model.cognitive/SteeringStrategy/computeTarget/#kotlin.collections.List[it.unibo.alchemist.model.cognitive.SteeringAction[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])]]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-steering-strategy/compute-target.html +$dokka.location:it.unibo.alchemist.model.cognitive/WalkingPedestrianProperty///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-walking-pedestrian-property/index.html +$dokka.location:it.unibo.alchemist.model.cognitive/WalkingPedestrianProperty/walkingSpeed/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-walking-pedestrian-property/walking-speed.html +$dokka.location:it.unibo.alchemist.util////PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.util/index.html +$dokka.location:it.unibo.alchemist.util//lazyMutable/#kotlin.Function0[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.util/lazy-mutable.html +$dokka.location:it.unibo.alchemist.util/LazyMutable///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.util/-lazy-mutable/index.html +$dokka.location:it.unibo.alchemist.util/LazyMutable/LazyMutable/#kotlin.Function0[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.util/-lazy-mutable/-lazy-mutable.html +$dokka.location:it.unibo.alchemist.util/LazyMutable/getValue/#kotlin.Any?#kotlin.reflect.KProperty[*]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.util/-lazy-mutable/get-value.html +$dokka.location:it.unibo.alchemist.util/LazyMutable/setValue/#kotlin.Any?#kotlin.reflect.KProperty[*]#TypeParam(bounds=[kotlin.Any?])/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.util/-lazy-mutable/set-value.html +it.unibo.alchemist.model.cognitive +it.unibo.alchemist.model.cognitive.actions +it.unibo.alchemist.model.cognitive.conditions +it.unibo.alchemist.model.cognitive.environments +it.unibo.alchemist.model.cognitive.groups +it.unibo.alchemist.model.cognitive.impact +it.unibo.alchemist.model.cognitive.impact.cognitive +it.unibo.alchemist.model.cognitive.impact.individual +it.unibo.alchemist.model.cognitive.navigation +it.unibo.alchemist.model.cognitive.properties +it.unibo.alchemist.model.cognitive.reactions +it.unibo.alchemist.model.cognitive.steering +it.unibo.alchemist.util diff --git a/dokka-cache/it.unibo.alchemist/alchemist-cognitive-agents/42.4.2.list b/dokka-cache/it.unibo.alchemist/alchemist-cognitive-agents/42.4.2.list index 34d7d9b3e7..e69de29bb2 100644 --- a/dokka-cache/it.unibo.alchemist/alchemist-cognitive-agents/42.4.2.list +++ b/dokka-cache/it.unibo.alchemist/alchemist-cognitive-agents/42.4.2.list @@ -1,585 +0,0 @@ -$dokka.format:html-v1 -$dokka.linkExtension:html -$dokka.location:it.unibo.alchemist.model.cognitive.actions////PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractGroupSteeringAction///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-group-steering-action/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractGroupSteeringAction/AbstractGroupSteeringAction/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-group-steering-action/-abstract-group-steering-action.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractLayerAction///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-layer-action/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractLayerAction/AbstractLayerAction/#it.unibo.alchemist.model.environments.Euclidean2DEnvironment[kotlin.Number]#it.unibo.alchemist.model.Reaction[kotlin.Number]#it.unibo.alchemist.model.cognitive.PedestrianProperty[kotlin.Number]#it.unibo.alchemist.model.Molecule/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-layer-action/-abstract-layer-action.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractLayerAction/cloneAction/#it.unibo.alchemist.model.Node[kotlin.Number]#it.unibo.alchemist.model.Reaction[kotlin.Number]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-layer-action/clone-action.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractNavigationAction///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-navigation-action/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractNavigationAction/AbstractNavigationAction/#it.unibo.alchemist.model.environments.EnvironmentWithGraph[*,TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.Transformation[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^], it.unibo.alchemist.model.geometry.Vector[^^]])]]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexShape[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^], it.unibo.alchemist.model.geometry.Vector[^^]]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.Transformation[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^^], it.unibo.alchemist.model.geometry.Vector[^^^]])]])]]),TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-navigation-action/-abstract-navigation-action.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractNavigationAction/currentRoom/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-navigation-action/current-room.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractNavigationAction/desiredPosition/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-navigation-action/desired-position.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractNavigationAction/doorsInSight/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-navigation-action/doors-in-sight.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractNavigationAction/environment/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-navigation-action/environment.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractNavigationAction/moveToFinal/#TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-navigation-action/move-to-final.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractNavigationAction/navigatingNode/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-navigation-action/navigating-node.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractNavigationAction/pedestrianPosition/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-navigation-action/pedestrian-position.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractNavigationAction/update/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-navigation-action/update.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractSteeringAction///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-steering-action/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractSteeringAction/AbstractSteeringAction/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-steering-action/-abstract-steering-action.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractSteeringAction/cloneAction/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-steering-action/clone-action.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractSteeringAction/getNextPosition/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-steering-action/get-next-position.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractSteeringAction/maxWalk/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-steering-action/max-walk.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractSteeringAction/nextPosition/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-steering-action/next-position.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractSteeringActionWithTarget///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-steering-action-with-target/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractSteeringActionWithTarget/AbstractSteeringActionWithTarget/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-steering-action-with-target/-abstract-steering-action-with-target.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractSteeringActionWithTarget/AbstractSteeringActionWithTarget/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.movestrategies.TargetSelectionStrategy[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-steering-action-with-target/-abstract-steering-action-with-target.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractSteeringActionWithTarget/nextPosition/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-steering-action-with-target/next-position.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/AbstractSteeringActionWithTarget/target/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-abstract-steering-action-with-target/target.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentArrive///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-arrive/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentArrive/CognitiveAgentArrive/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#kotlin.Double#kotlin.Double#TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-arrive/-cognitive-agent-arrive.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentArrive/CognitiveAgentArrive/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#kotlin.Double#kotlin.Double#kotlin.Number/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-arrive/-cognitive-agent-arrive.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentArrive/cloneAction/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-arrive/clone-action.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentArrive/maxWalk/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-arrive/max-walk.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentAvoidLayer///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-avoid-layer/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentAvoidLayer/CognitiveAgentAvoidLayer/#it.unibo.alchemist.model.environments.Euclidean2DEnvironment[kotlin.Number]#it.unibo.alchemist.model.Reaction[kotlin.Number]#it.unibo.alchemist.model.cognitive.PedestrianProperty[kotlin.Number]#it.unibo.alchemist.model.Molecule#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-avoid-layer/-cognitive-agent-avoid-layer.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentAvoidLayer/cloneAction/#it.unibo.alchemist.model.Node[kotlin.Number]#it.unibo.alchemist.model.Reaction[kotlin.Number]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-avoid-layer/clone-action.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentAvoidLayer/nextPosition/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-avoid-layer/next-position.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentCohesion///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-cohesion/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentCohesion/CognitiveAgentCohesion/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-cohesion/-cognitive-agent-cohesion.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentCohesion/cloneAction/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-cohesion/clone-action.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentCohesion/group/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-cohesion/group.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentCohesion/nextPosition/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-cohesion/next-position.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentCombineSteering///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-combine-steering/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentCombineSteering/CognitiveAgentCombineSteering/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#kotlin.collections.List[it.unibo.alchemist.model.cognitive.SteeringAction[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]]#it.unibo.alchemist.model.cognitive.SteeringStrategy[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-combine-steering/-cognitive-agent-combine-steering.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentCombineSteering/cloneAction/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-combine-steering/clone-action.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentCombineSteering/nextPosition/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-combine-steering/next-position.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentExplore///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-explore/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentExplore/CognitiveAgentExplore/#it.unibo.alchemist.model.environments.Euclidean2DEnvironmentWithGraph[*,TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.geometry.ConvexPolygon,it.unibo.alchemist.model.geometry.navigationgraph.Euclidean2DPassage]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-explore/-cognitive-agent-explore.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentFlee///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-flee/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentFlee/CognitiveAgentFlee/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-flee/-cognitive-agent-flee.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentFlee/cloneAction/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-flee/clone-action.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentFlee/nextPosition/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-flee/next-position.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentFollowLayer///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-follow-layer/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentFollowLayer/CognitiveAgentFollowLayer/#it.unibo.alchemist.model.environments.Euclidean2DEnvironment[kotlin.Number]#it.unibo.alchemist.model.Reaction[kotlin.Number]#it.unibo.alchemist.model.cognitive.PedestrianProperty[kotlin.Number]#it.unibo.alchemist.model.Molecule/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-follow-layer/-cognitive-agent-follow-layer.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentFollowLayer/cloneAction/#it.unibo.alchemist.model.Node[kotlin.Number]#it.unibo.alchemist.model.Reaction[kotlin.Number]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-follow-layer/clone-action.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentFollowLayer/nextPosition/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-follow-layer/next-position.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentFollowRoute///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-follow-route/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentFollowRoute/CognitiveAgentFollowRoute/#it.unibo.alchemist.model.environments.Euclidean2DEnvironmentWithGraph[*,TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.geometry.ConvexPolygon,it.unibo.alchemist.model.geometry.navigationgraph.Euclidean2DPassage]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#kotlin.Number/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-follow-route/-cognitive-agent-follow-route.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentFollowScalarField///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-follow-scalar-field/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentFollowScalarField/CognitiveAgentFollowScalarField/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position2D[^], it.unibo.alchemist.model.geometry.Vector2D[^]])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#TypeParam(bounds=[it.unibo.alchemist.model.Position2D[^], it.unibo.alchemist.model.geometry.Vector2D[^]])?#kotlin.Function1[TypeParam(bounds=[it.unibo.alchemist.model.Position2D[^], it.unibo.alchemist.model.geometry.Vector2D[^]]),kotlin.Double]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-follow-scalar-field/-cognitive-agent-follow-scalar-field.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentFollowScalarField/cloneAction/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-follow-scalar-field/clone-action.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentFollowScalarField/nextPosition/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-follow-scalar-field/next-position.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentGoalOrientedExplore///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-goal-oriented-explore/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentGoalOrientedExplore/CognitiveAgentGoalOrientedExplore/#it.unibo.alchemist.model.environments.Euclidean2DEnvironmentWithGraph[*,TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.geometry.ConvexPolygon,it.unibo.alchemist.model.geometry.navigationgraph.Euclidean2DPassage]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#kotlin.Number/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-goal-oriented-explore/-cognitive-agent-goal-oriented-explore.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentNavigationAction2D.Companion///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-navigation-action2-d/-companion/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentNavigationAction2D.Companion/DEFAULT_WALL_REPULSION_FACTOR/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-navigation-action2-d/-companion/-d-e-f-a-u-l-t_-w-a-l-l_-r-e-p-u-l-s-i-o-n_-f-a-c-t-o-r.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentNavigationAction2D///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-navigation-action2-d/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentNavigationAction2D/CognitiveAgentNavigationAction2D/#it.unibo.alchemist.model.environments.Euclidean2DEnvironmentWithGraph[*,TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.geometry.ConvexPolygon,it.unibo.alchemist.model.geometry.navigationgraph.Euclidean2DPassage]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-navigation-action2-d/-cognitive-agent-navigation-action2-d.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentNavigationAction2D/cloneAction/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-navigation-action2-d/clone-action.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentNavigationAction2D/crossDoor/#it.unibo.alchemist.model.geometry.navigationgraph.Euclidean2DPassage/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-navigation-action2-d/cross-door.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentNavigationAction2D/environment/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-navigation-action2-d/environment.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentNavigationAction2D/nextPosition/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-navigation-action2-d/next-position.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentObstacleAvoidance///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-obstacle-avoidance/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentObstacleAvoidance/CognitiveAgentObstacleAvoidance/#it.unibo.alchemist.model.environments.Environment2DWithObstacles[TypeParam(bounds=[it.unibo.alchemist.model.Obstacle2D[it.unibo.alchemist.model.positions.Euclidean2DPosition]]),TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.reactions.SteeringBehavior[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-obstacle-avoidance/-cognitive-agent-obstacle-avoidance.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentObstacleAvoidance/cloneAction/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-obstacle-avoidance/clone-action.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentObstacleAvoidance/nextPosition/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-obstacle-avoidance/next-position.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentPursue///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-pursue/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentPursue/CognitiveAgentPursue/#it.unibo.alchemist.model.environments.Euclidean2DEnvironmentWithGraph[*,TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.geometry.ConvexPolygon,it.unibo.alchemist.model.geometry.navigationgraph.Euclidean2DPassage]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#kotlin.Number/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-pursue/-cognitive-agent-pursue.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentReachDestination///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-reach-destination/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentReachDestination/CognitiveAgentReachDestination/#it.unibo.alchemist.model.environments.Euclidean2DEnvironmentWithGraph[*,TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.geometry.ConvexPolygon,it.unibo.alchemist.model.geometry.navigationgraph.Euclidean2DPassage]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#kotlin.Number/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-reach-destination/-cognitive-agent-reach-destination.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentReachKnownDestination///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-reach-known-destination/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentReachKnownDestination/CognitiveAgentReachKnownDestination/#it.unibo.alchemist.model.environments.Euclidean2DEnvironmentWithGraph[*,TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.geometry.ConvexPolygon,it.unibo.alchemist.model.geometry.navigationgraph.Euclidean2DPassage]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#kotlin.Number/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-reach-known-destination/-cognitive-agent-reach-known-destination.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentSeek///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-seek/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentSeek/CognitiveAgentSeek/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-seek/-cognitive-agent-seek.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentSeek/CognitiveAgentSeek/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#kotlin.Number/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-seek/-cognitive-agent-seek.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentSeek/cloneAction/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-seek/clone-action.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentSeek2D///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-seek2-d/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentSeek2D/CognitiveAgentSeek2D/#it.unibo.alchemist.model.EuclideanEnvironment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position2D[^], it.unibo.alchemist.model.geometry.Vector2D[^]])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#TypeParam(bounds=[it.unibo.alchemist.model.Position2D[^], it.unibo.alchemist.model.geometry.Vector2D[^]])/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-seek2-d/-cognitive-agent-seek2-d.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentSeek2D/CognitiveAgentSeek2D/#it.unibo.alchemist.model.EuclideanEnvironment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position2D[^], it.unibo.alchemist.model.geometry.Vector2D[^]])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#kotlin.Number#kotlin.Number/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-seek2-d/-cognitive-agent-seek2-d.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentSeek2D/cloneAction/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-seek2-d/clone-action.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentSeek2D/nextPosition/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-seek2-d/next-position.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentSeek2D/target/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-seek2-d/target.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentSeparation///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-separation/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentSeparation/CognitiveAgentSeparation/#it.unibo.alchemist.model.physics.environments.Physics2DEnvironment[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-separation/-cognitive-agent-separation.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentSeparation/cloneAction/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-separation/clone-action.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentSeparation/environment/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-separation/environment.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentSeparation/group/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-separation/group.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentSeparation/nextPosition/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-separation/next-position.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentWander///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-wander/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentWander/CognitiveAgentWander/#it.unibo.alchemist.model.physics.environments.Physics2DEnvironment[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#org.apache.commons.math3.random.RandomGenerator#kotlin.Double#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-wander/-cognitive-agent-wander.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentWander/cloneAction/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-wander/clone-action.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/CognitiveAgentWander/nextPosition/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-cognitive-agent-wander/next-position.html -$dokka.location:it.unibo.alchemist.model.cognitive.actions/NavigationAction2D///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.actions/-navigation-action2-d/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.conditions////PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.conditions/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.conditions/WantToEscape///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.conditions/-want-to-escape/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.conditions/WantToEscape/WantToEscape/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.conditions/-want-to-escape/-want-to-escape.html -$dokka.location:it.unibo.alchemist.model.cognitive.conditions/WantToEscape/context/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.conditions/-want-to-escape/context.html -$dokka.location:it.unibo.alchemist.model.cognitive.conditions/WantToEscape/getContext/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.conditions/-want-to-escape/get-context.html -$dokka.location:it.unibo.alchemist.model.cognitive.conditions/WantToEscape/getPropensityContribution/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.conditions/-want-to-escape/get-propensity-contribution.html -$dokka.location:it.unibo.alchemist.model.cognitive.conditions/WantToEscape/isValid/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.conditions/-want-to-escape/is-valid.html -$dokka.location:it.unibo.alchemist.model.cognitive.conditions/WantToEscape/propensityContribution/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.conditions/-want-to-escape/propensity-contribution.html -$dokka.location:it.unibo.alchemist.model.cognitive.environments////PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.environments/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.environments/EnvironmentWithDynamics///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.environments/-environment-with-dynamics/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.environments/EnvironmentWithDynamics/EnvironmentWithDynamics/#it.unibo.alchemist.model.Incarnation[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition]#kotlin.String?#kotlin.Double#kotlin.Double#kotlin.Double#kotlin.Int#kotlin.Int#it.unibo.alchemist.model.physics.environments.Physics2DEnvironment[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.environments/-environment-with-dynamics/-environment-with-dynamics.html -$dokka.location:it.unibo.alchemist.model.cognitive.environments/EnvironmentWithDynamics/addGlobalReaction/#it.unibo.alchemist.model.GlobalReaction[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.environments/-environment-with-dynamics/add-global-reaction.html -$dokka.location:it.unibo.alchemist.model.cognitive.environments/EnvironmentWithDynamics/addNode/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.positions.Euclidean2DPosition/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.environments/-environment-with-dynamics/add-node.html -$dokka.location:it.unibo.alchemist.model.cognitive.environments/EnvironmentWithDynamics/getPosition/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.environments/-environment-with-dynamics/get-position.html -$dokka.location:it.unibo.alchemist.model.cognitive.environments/EnvironmentWithDynamics/getVelocity/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.environments/-environment-with-dynamics/get-velocity.html -$dokka.location:it.unibo.alchemist.model.cognitive.environments/EnvironmentWithDynamics/makePosition/#kotlin.DoubleArray/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.environments/-environment-with-dynamics/make-position.html -$dokka.location:it.unibo.alchemist.model.cognitive.environments/EnvironmentWithDynamics/makePosition/#kotlin.Number/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.environments/-environment-with-dynamics/make-position.html -$dokka.location:it.unibo.alchemist.model.cognitive.environments/EnvironmentWithDynamics/makePosition/#kotlin.collections.List[kotlin.Number]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.environments/-environment-with-dynamics/make-position.html -$dokka.location:it.unibo.alchemist.model.cognitive.environments/EnvironmentWithDynamics/moveNode/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.positions.Euclidean2DPosition/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.environments/-environment-with-dynamics/move-node.html -$dokka.location:it.unibo.alchemist.model.cognitive.environments/EnvironmentWithDynamics/origin/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.environments/-environment-with-dynamics/origin.html -$dokka.location:it.unibo.alchemist.model.cognitive.environments/EnvironmentWithDynamics/setVelocity/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.positions.Euclidean2DPosition/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.environments/-environment-with-dynamics/set-velocity.html -$dokka.location:it.unibo.alchemist.model.cognitive.environments/EnvironmentWithDynamics/updatePhysics/#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.environments/-environment-with-dynamics/update-physics.html -$dokka.location:it.unibo.alchemist.model.cognitive.environments/ImageEnvironmentWithGraph///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.environments/-image-environment-with-graph/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.environments/ImageEnvironmentWithGraph/ImageEnvironmentWithGraph/#it.unibo.alchemist.model.Incarnation[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition]#kotlin.String#kotlin.Double#kotlin.Double#kotlin.Double#kotlin.Int#kotlin.Int/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.environments/-image-environment-with-graph/-image-environment-with-graph.html -$dokka.location:it.unibo.alchemist.model.cognitive.environments/ImageEnvironmentWithGraph/graph/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.environments/-image-environment-with-graph/graph.html -$dokka.location:it.unibo.alchemist.model.cognitive.groups////PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.groups/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.groups/Alone///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.groups/-alone/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.groups/Alone/Alone/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.groups/-alone/-alone.html -$dokka.location:it.unibo.alchemist.model.cognitive.groups/Family///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.groups/-family/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.groups/Family/Family/#java.util.Comparator[it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.groups/-family/-family.html -$dokka.location:it.unibo.alchemist.model.cognitive.groups/Family/leader/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.groups/-family/leader.html -$dokka.location:it.unibo.alchemist.model.cognitive.groups/Friends///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.groups/-friends/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.groups/Friends/Friends/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.groups/-friends/-friends.html -$dokka.location:it.unibo.alchemist.model.cognitive.groups/GenericGroup///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.groups/-generic-group/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.groups/GenericGroup/GenericGroup/#kotlin.collections.List[TypeParam(bounds=[it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.groups/-generic-group/-generic-group.html -$dokka.location:it.unibo.alchemist.model.cognitive.groups/GenericGroup/addMember/#TypeParam(bounds=[it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]])/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.groups/-generic-group/add-member.html -$dokka.location:it.unibo.alchemist.model.cognitive.groups/GenericGroup/removeMember/#TypeParam(bounds=[it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]])/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.groups/-generic-group/remove-member.html -$dokka.location:it.unibo.alchemist.model.cognitive.groups/GroupFactory///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.groups/-group-factory/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.groups/GroupFactory/family/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.groups/-group-factory/family.html -$dokka.location:it.unibo.alchemist.model.cognitive.groups/GroupFactory/friends/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.groups/-group-factory/friends.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive////PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic.Companion///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/-companion/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic.Companion/advancedLogisticSigma/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/-companion/advanced-logistic-sigma.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic.Companion/advancedLogisticTau/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/-companion/advanced-logistic-tau.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic.Companion/affectiveBiasingOmega/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/-companion/affective-biasing-omega.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic.Companion/amplifyingEvacuationOmega/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/-companion/amplifying-evacuation-omega.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic.Companion/amplifyingFeelingOmega/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/-companion/amplifying-feeling-omega.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic.Companion/amplifyingIntentionOmega/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/-companion/amplifying-intention-omega.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic.Companion/bodyEta/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/-companion/body-eta.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic.Companion/inhibitingFeelingOmega/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/-companion/inhibiting-feeling-omega.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic.Companion/inhibitingIntentionOmega/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/-companion/inhibiting-intention-omega.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic.Companion/inhibitingWalkRandOmega/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/-companion/inhibiting-walk-rand-omega.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic.Companion/logisticSigma/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/-companion/logistic-sigma.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic.Companion/logisticTau/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/-companion/logistic-tau.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic.Companion/mentalEta/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/-companion/mental-eta.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic.Companion/persistingOmega/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/-companion/persisting-omega.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic.Companion/sensingOmega/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/-companion/sensing-omega.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic/AbstractCognitiveCharacteristic/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/-abstract-cognitive-characteristic.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic/combinationFunction/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/combination-function.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/AbstractCognitiveCharacteristic/level/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-abstract-cognitive-characteristic/level.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/BeliefDanger///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-belief-danger/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/BeliefDanger/BeliefDanger/#kotlin.Function0[kotlin.Double]#kotlin.Function0[kotlin.Double]#kotlin.Function0[kotlin.collections.List[it.unibo.alchemist.model.cognitive.CognitiveModel]]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-belief-danger/-belief-danger.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/BeliefDanger/combinationFunction/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-belief-danger/combination-function.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/BodyCognitiveCharacteristic///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-body-cognitive-characteristic/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/BodyCognitiveCharacteristic/BodyCognitiveCharacteristic/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-body-cognitive-characteristic/-body-cognitive-characteristic.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/BodyCognitiveCharacteristic/update/#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-body-cognitive-characteristic/update.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/CognitiveCharacteristic///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-cognitive-characteristic/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/CognitiveCharacteristic/level/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-cognitive-characteristic/level.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/CognitiveCharacteristic/update/#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-cognitive-characteristic/update.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/CognitiveSpec///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-cognitive-spec/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/CognitiveSpec/advancedLogisticSigma/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-cognitive-spec/advanced-logistic-sigma.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/CognitiveSpec/advancedLogisticTau/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-cognitive-spec/advanced-logistic-tau.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/CognitiveSpec/affectiveBiasingOmega/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-cognitive-spec/affective-biasing-omega.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/CognitiveSpec/amplifyingEvacuationOmega/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-cognitive-spec/amplifying-evacuation-omega.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/CognitiveSpec/amplifyingFeelingOmega/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-cognitive-spec/amplifying-feeling-omega.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/CognitiveSpec/amplifyingIntentionOmega/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-cognitive-spec/amplifying-intention-omega.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/CognitiveSpec/bodyEta/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-cognitive-spec/body-eta.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/CognitiveSpec/inhibitingFeelingOmega/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-cognitive-spec/inhibiting-feeling-omega.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/CognitiveSpec/inhibitingIntentionOmega/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-cognitive-spec/inhibiting-intention-omega.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/CognitiveSpec/inhibitingWalkRandOmega/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-cognitive-spec/inhibiting-walk-rand-omega.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/CognitiveSpec/logisticSigma/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-cognitive-spec/logistic-sigma.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/CognitiveSpec/logisticTau/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-cognitive-spec/logistic-tau.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/CognitiveSpec/mentalEta/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-cognitive-spec/mental-eta.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/CognitiveSpec/persistingOmega/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-cognitive-spec/persisting-omega.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/CognitiveSpec/sensingOmega/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-cognitive-spec/sensing-omega.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/DesireEvacuate///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-desire-evacuate/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/DesireEvacuate/DesireEvacuate/#kotlin.Double#kotlin.Function0[kotlin.Double]#kotlin.Function0[kotlin.Double]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-desire-evacuate/-desire-evacuate.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/DesireEvacuate/combinationFunction/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-desire-evacuate/combination-function.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/DesireWalkRandomly///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-desire-walk-randomly/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/DesireWalkRandomly/DesireWalkRandomly/#kotlin.Double#kotlin.Function0[kotlin.Double]#kotlin.Function0[kotlin.Double]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-desire-walk-randomly/-desire-walk-randomly.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/DesireWalkRandomly/combinationFunction/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-desire-walk-randomly/combination-function.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/Fear///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-fear/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/Fear/Fear/#kotlin.Function0[kotlin.Double]#kotlin.Function0[kotlin.Double]#kotlin.Function0[kotlin.collections.List[it.unibo.alchemist.model.cognitive.CognitiveModel]]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-fear/-fear.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/Fear/combinationFunction/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-fear/combination-function.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/IntentionEvacuate///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-intention-evacuate/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/IntentionEvacuate/IntentionEvacuate/#kotlin.Function0[kotlin.Double]#kotlin.Function0[kotlin.Double]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-intention-evacuate/-intention-evacuate.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/IntentionEvacuate/combinationFunction/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-intention-evacuate/combination-function.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/IntentionWalkRandomly///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-intention-walk-randomly/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/IntentionWalkRandomly/IntentionWalkRandomly/#kotlin.Function0[kotlin.Double]#kotlin.Function0[kotlin.Double]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-intention-walk-randomly/-intention-walk-randomly.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/IntentionWalkRandomly/combinationFunction/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-intention-walk-randomly/combination-function.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/MentalCognitiveCharacteristic///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-mental-cognitive-characteristic/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/MentalCognitiveCharacteristic/MentalCognitiveCharacteristic/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-mental-cognitive-characteristic/-mental-cognitive-characteristic.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.cognitive/MentalCognitiveCharacteristic/update/#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.cognitive/-mental-cognitive-characteristic/update.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual////PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Age.ADULT///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-age/-a-d-u-l-t/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Age.CHILD///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-age/-c-h-i-l-d/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Age.Companion///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-age/-companion/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Age.Companion/ADULT_THRESHOLD/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-age/-companion/-a-d-u-l-t_-t-h-r-e-s-h-o-l-d.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Age.Companion/CHILD_THRESHOLD/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-age/-companion/-c-h-i-l-d_-t-h-r-e-s-h-o-l-d.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Age.Companion/fromAny/#kotlin.Any/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-age/-companion/from-any.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Age.Companion/fromString/#kotlin.String/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-age/-companion/from-string.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Age.Companion/fromYears/#kotlin.Int/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-age/-companion/from-years.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Age.ELDERLY///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-age/-e-l-d-e-r-l-y/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Age///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-age/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Age/entries/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-age/entries.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Age/valueOf/#kotlin.String/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-age/value-of.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Age/values/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-age/values.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Characteristic///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-characteristic/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Compliance///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-compliance/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Compliance/Compliance/#it.unibo.alchemist.model.cognitive.impact.individual.Age#it.unibo.alchemist.model.cognitive.impact.individual.Gender/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-compliance/-compliance.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Compliance/level/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-compliance/level.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/ComplianceSpec///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-compliance-spec/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/ComplianceSpec/adultFemale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-compliance-spec/adult-female.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/ComplianceSpec/adultMale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-compliance-spec/adult-male.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/ComplianceSpec/childFemale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-compliance-spec/child-female.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/ComplianceSpec/childMale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-compliance-spec/child-male.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/ComplianceSpec/elderlyFemale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-compliance-spec/elderly-female.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/ComplianceSpec/elderlyMale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-compliance-spec/elderly-male.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Gender.Companion///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-gender/-companion/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Gender.Companion/fromString/#kotlin.String/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-gender/-companion/from-string.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Gender.FEMALE///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-gender/-f-e-m-a-l-e/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Gender.MALE///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-gender/-m-a-l-e/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Gender///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-gender/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Gender/entries/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-gender/entries.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Gender/valueOf/#kotlin.String/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-gender/value-of.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Gender/values/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-gender/values.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitude///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitude/HelpAttitude/#it.unibo.alchemist.model.cognitive.impact.individual.Age#it.unibo.alchemist.model.cognitive.impact.individual.Gender/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude/-help-attitude.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitude/level/#it.unibo.alchemist.model.cognitive.impact.individual.Age#it.unibo.alchemist.model.cognitive.impact.individual.Gender#kotlin.Boolean/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude/level.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.AdultFemale///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-adult-female/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.AdultFemale/adultFemale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-adult-female/adult-female.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.AdultFemale/adultMale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-adult-female/adult-male.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.AdultFemale/childFemale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-adult-female/child-female.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.AdultFemale/childMale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-adult-female/child-male.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.AdultFemale/elderlyFemale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-adult-female/elderly-female.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.AdultFemale/elderlyMale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-adult-female/elderly-male.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.AdultMale///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-adult-male/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.AdultMale/adultFemale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-adult-male/adult-female.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.AdultMale/adultMale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-adult-male/adult-male.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.AdultMale/childFemale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-adult-male/child-female.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.AdultMale/childMale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-adult-male/child-male.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.AdultMale/elderlyFemale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-adult-male/elderly-female.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.AdultMale/elderlyMale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-adult-male/elderly-male.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.ElderlyFemale///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-elderly-female/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.ElderlyFemale/adultFemale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-elderly-female/adult-female.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.ElderlyFemale/adultMale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-elderly-female/adult-male.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.ElderlyFemale/childFemale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-elderly-female/child-female.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.ElderlyFemale/childMale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-elderly-female/child-male.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.ElderlyFemale/elderlyFemale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-elderly-female/elderly-female.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.ElderlyFemale/elderlyMale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-elderly-female/elderly-male.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.ElderlyMale///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-elderly-male/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.ElderlyMale/adultFemale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-elderly-male/adult-female.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.ElderlyMale/adultMale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-elderly-male/adult-male.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.ElderlyMale/childFemale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-elderly-male/child-female.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.ElderlyMale/childMale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-elderly-male/child-male.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.ElderlyMale/elderlyFemale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-elderly-male/elderly-female.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec.ElderlyMale/elderlyMale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/-elderly-male/elderly-male.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/HelpAttitudeSpec///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-help-attitude-spec/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Speed.Companion///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-speed/-companion/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Speed.Companion/default/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-speed/-companion/default.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Speed///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-speed/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Speed/Speed/#it.unibo.alchemist.model.cognitive.impact.individual.Age#it.unibo.alchemist.model.cognitive.impact.individual.Gender#org.apache.commons.math3.random.RandomGenerator/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-speed/-speed.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Speed/running/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-speed/running.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/Speed/walking/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-speed/walking.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/SpeedSpec///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-speed-spec/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/SpeedSpec/adultFemale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-speed-spec/adult-female.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/SpeedSpec/adultMale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-speed-spec/adult-male.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/SpeedSpec/childFemale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-speed-spec/child-female.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/SpeedSpec/childMale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-speed-spec/child-male.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/SpeedSpec/default/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-speed-spec/default.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/SpeedSpec/elderlyFemale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-speed-spec/elderly-female.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/SpeedSpec/elderlyMale/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-speed-spec/elderly-male.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact.individual/SpeedSpec/variance/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact.individual/-speed-spec/variance.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact////PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact//PARAMETERS_FILE/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact/-p-a-r-a-m-e-t-e-r-s_-f-i-l-e.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact/ImpactModel///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact/-impact-model/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact/ImpactModel/ImpactModel/#kotlin.Double#kotlin.Function0[kotlin.collections.List[it.unibo.alchemist.model.cognitive.CognitiveModel]]#kotlin.Function0[kotlin.Double]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact/-impact-model/-impact-model.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact/ImpactModel/dangerBelief/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact/-impact-model/danger-belief.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact/ImpactModel/escapeIntention/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact/-impact-model/escape-intention.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact/ImpactModel/fear/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact/-impact-model/fear.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact/ImpactModel/remainIntention/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact/-impact-model/remain-intention.html -$dokka.location:it.unibo.alchemist.model.cognitive.impact/ImpactModel/update/#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.impact/-impact-model/update.html -$dokka.location:it.unibo.alchemist.model.cognitive.navigation////PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.navigation/DynamicallyPursue///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-dynamically-pursue/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.navigation/DynamicallyPursue/DynamicallyPursue/#it.unibo.alchemist.model.cognitive.NavigationAction[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition,it.unibo.alchemist.model.geometry.Euclidean2DTransformation,TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexShape[it.unibo.alchemist.model.positions.Euclidean2DPosition,it.unibo.alchemist.model.geometry.Euclidean2DTransformation]]),TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.geometry.ConvexPolygon,it.unibo.alchemist.model.geometry.navigationgraph.Euclidean2DPassage]#it.unibo.alchemist.model.positions.Euclidean2DPosition/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-dynamically-pursue/-dynamically-pursue.html -$dokka.location:it.unibo.alchemist.model.cognitive.navigation/DynamicallyPursue/setDestination/#it.unibo.alchemist.model.positions.Euclidean2DPosition#kotlin.Boolean/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-dynamically-pursue/set-destination.html -$dokka.location:it.unibo.alchemist.model.cognitive.navigation/Explore.Companion///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-explore/-companion/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.navigation/Explore.Companion/DEFAULT_IMPASSE_WEIGHT/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-explore/-companion/-d-e-f-a-u-l-t_-i-m-p-a-s-s-e_-w-e-i-g-h-t.html -$dokka.location:it.unibo.alchemist.model.cognitive.navigation/Explore///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-explore/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.navigation/Explore/Explore/#it.unibo.alchemist.model.cognitive.NavigationAction[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition,it.unibo.alchemist.model.geometry.Euclidean2DTransformation,TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexShape[it.unibo.alchemist.model.positions.Euclidean2DPosition,it.unibo.alchemist.model.geometry.Euclidean2DTransformation]]),TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.geometry.ConvexPolygon,it.unibo.alchemist.model.geometry.navigationgraph.Euclidean2DPassage]#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-explore/-explore.html -$dokka.location:it.unibo.alchemist.model.cognitive.navigation/Explore/action/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-explore/action.html -$dokka.location:it.unibo.alchemist.model.cognitive.navigation/Explore/inNewRoom/#it.unibo.alchemist.model.geometry.ConvexPolygon/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-explore/in-new-room.html -$dokka.location:it.unibo.alchemist.model.cognitive.navigation/FollowRoute///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-follow-route/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.navigation/FollowRoute/FollowRoute/#it.unibo.alchemist.model.cognitive.NavigationAction[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition,it.unibo.alchemist.model.geometry.Euclidean2DTransformation,TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexShape[it.unibo.alchemist.model.positions.Euclidean2DPosition,it.unibo.alchemist.model.geometry.Euclidean2DTransformation]]),TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.geometry.ConvexPolygon,it.unibo.alchemist.model.geometry.navigationgraph.Euclidean2DPassage]#kotlin.collections.List[it.unibo.alchemist.model.positions.Euclidean2DPosition]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-follow-route/-follow-route.html -$dokka.location:it.unibo.alchemist.model.cognitive.navigation/FollowRoute/inNewRoom/#it.unibo.alchemist.model.geometry.ConvexPolygon/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-follow-route/in-new-room.html -$dokka.location:it.unibo.alchemist.model.cognitive.navigation/FollowRoute/inUnexpectedNewRoom/#it.unibo.alchemist.model.geometry.ConvexPolygon#it.unibo.alchemist.model.geometry.ConvexPolygon#it.unibo.alchemist.model.geometry.ConvexPolygon/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-follow-route/in-unexpected-new-room.html -$dokka.location:it.unibo.alchemist.model.cognitive.navigation/GoalOrientedExploration///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-goal-oriented-exploration/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.navigation/GoalOrientedExploration/GoalOrientedExploration/#it.unibo.alchemist.model.cognitive.NavigationAction[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition,it.unibo.alchemist.model.geometry.Euclidean2DTransformation,TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexShape[it.unibo.alchemist.model.positions.Euclidean2DPosition,it.unibo.alchemist.model.geometry.Euclidean2DTransformation]]),TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.geometry.ConvexPolygon,it.unibo.alchemist.model.geometry.navigationgraph.Euclidean2DPassage]#kotlin.collections.List[it.unibo.alchemist.model.positions.Euclidean2DPosition]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-goal-oriented-exploration/-goal-oriented-exploration.html -$dokka.location:it.unibo.alchemist.model.cognitive.navigation/GoalOrientedExploration/inNewRoom/#it.unibo.alchemist.model.geometry.ConvexPolygon/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-goal-oriented-exploration/in-new-room.html -$dokka.location:it.unibo.alchemist.model.cognitive.navigation/Pursue///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-pursue/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.navigation/Pursue/Pursue/#it.unibo.alchemist.model.cognitive.NavigationAction[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition,it.unibo.alchemist.model.geometry.Euclidean2DTransformation,TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexShape[it.unibo.alchemist.model.positions.Euclidean2DPosition,it.unibo.alchemist.model.geometry.Euclidean2DTransformation]]),TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.geometry.ConvexPolygon,it.unibo.alchemist.model.geometry.navigationgraph.Euclidean2DPassage]#it.unibo.alchemist.model.positions.Euclidean2DPosition/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-pursue/-pursue.html -$dokka.location:it.unibo.alchemist.model.cognitive.navigation/Pursue/inNewRoom/#it.unibo.alchemist.model.geometry.ConvexPolygon/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-pursue/in-new-room.html -$dokka.location:it.unibo.alchemist.model.cognitive.navigation/ReachDestination///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-reach-destination/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.navigation/ReachDestination/ReachDestination/#it.unibo.alchemist.model.cognitive.NavigationAction[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition,it.unibo.alchemist.model.geometry.Euclidean2DTransformation,TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexShape[it.unibo.alchemist.model.positions.Euclidean2DPosition,it.unibo.alchemist.model.geometry.Euclidean2DTransformation]]),TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.geometry.ConvexPolygon,it.unibo.alchemist.model.geometry.navigationgraph.Euclidean2DPassage]#kotlin.collections.List[it.unibo.alchemist.model.positions.Euclidean2DPosition]#kotlin.collections.List[it.unibo.alchemist.model.positions.Euclidean2DPosition]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-reach-destination/-reach-destination.html -$dokka.location:it.unibo.alchemist.model.cognitive.navigation/ReachDestination/inNewRoom/#it.unibo.alchemist.model.geometry.ConvexPolygon/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-reach-destination/in-new-room.html -$dokka.location:it.unibo.alchemist.model.cognitive.navigation/ReachKnownDestination///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-reach-known-destination/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.navigation/ReachKnownDestination/ReachKnownDestination/#it.unibo.alchemist.model.cognitive.NavigationAction[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition,it.unibo.alchemist.model.geometry.Euclidean2DTransformation,TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexShape[it.unibo.alchemist.model.positions.Euclidean2DPosition,it.unibo.alchemist.model.geometry.Euclidean2DTransformation]]),TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.geometry.ConvexPolygon,it.unibo.alchemist.model.geometry.navigationgraph.Euclidean2DPassage]#kotlin.collections.List[it.unibo.alchemist.model.positions.Euclidean2DPosition]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.navigation/-reach-known-destination/-reach-known-destination.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties////PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Cognitive///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-cognitive/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Cognitive/Cognitive/#it.unibo.alchemist.model.physics.PhysicsEnvironment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.Transformation[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^], it.unibo.alchemist.model.geometry.Vector[^^]])]]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.GeometricShapeFactory[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^], it.unibo.alchemist.model.geometry.Vector[^^]]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.Transformation[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^^], it.unibo.alchemist.model.geometry.Vector[^^^]])]])]])]#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Molecule?/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-cognitive/-cognitive.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Cognitive/cloneOnNewNode/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-cognitive/clone-on-new-node.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Cognitive/cognitiveModel/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-cognitive/cognitive-model.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Cognitive/danger/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-cognitive/danger.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Cognitive/node/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-cognitive/node.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Cognitive/toString/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-cognitive/to-string.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Cognitive2D///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-cognitive2-d/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Cognitive2D/Cognitive2D/#it.unibo.alchemist.model.physics.environments.Physics2DEnvironment[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Molecule?/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-cognitive2-d/-cognitive2-d.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/CognitivePedestrian///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-cognitive-pedestrian/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/CognitivePedestrian/CognitivePedestrian/#org.apache.commons.math3.random.RandomGenerator#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-cognitive-pedestrian/-cognitive-pedestrian.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/CognitivePedestrian/speed/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-cognitive-pedestrian/speed.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/HeterogeneousPedestrian///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-heterogeneous-pedestrian/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/HeterogeneousPedestrian/HeterogeneousPedestrian/#org.apache.commons.math3.random.RandomGenerator#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-heterogeneous-pedestrian/-heterogeneous-pedestrian.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/HeterogeneousPedestrian/runningSpeed/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-heterogeneous-pedestrian/running-speed.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/HeterogeneousPedestrian/toString/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-heterogeneous-pedestrian/to-string.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/HeterogeneousPedestrian/walkingSpeed/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-heterogeneous-pedestrian/walking-speed.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Human///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-human/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Human/Human/#org.apache.commons.math3.random.RandomGenerator#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.impact.individual.Age#it.unibo.alchemist.model.cognitive.impact.individual.Gender#it.unibo.alchemist.model.cognitive.impact.individual.Speed#kotlin.Double#it.unibo.alchemist.model.cognitive.impact.individual.HelpAttitude/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-human/-human.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Human/Human/#org.apache.commons.math3.random.RandomGenerator#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#kotlin.Any#kotlin.String#it.unibo.alchemist.model.cognitive.impact.individual.Speed#kotlin.Double#it.unibo.alchemist.model.cognitive.impact.individual.HelpAttitude/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-human/-human.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Human/age/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-human/age.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Human/cloneOnNewNode/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-human/clone-on-new-node.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Human/compliance/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-human/compliance.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Human/gender/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-human/gender.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Human/helpAttitude/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-human/help-attitude.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Human/node/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-human/node.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Human/speed/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-human/speed.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Human/toString/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-human/to-string.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Orienting.Companion///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-orienting/-companion/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Orienting.Companion/pathExists/org.jgrapht.Graph[TypeParam(bounds=[kotlin.Any?]),*]#TypeParam(bounds=[kotlin.Any?])#TypeParam(bounds=[kotlin.Any?])/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-orienting/-companion/path-exists.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Orienting///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-orienting/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Orienting/Orienting/#org.apache.commons.math3.random.RandomGenerator#it.unibo.alchemist.model.environments.EnvironmentWithGraph[*,TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.Transformation[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^], it.unibo.alchemist.model.geometry.Vector[^^]])]]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexShape[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^], it.unibo.alchemist.model.geometry.Vector[^^]]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.Transformation[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^^], it.unibo.alchemist.model.geometry.Vector[^^^]])]])]]),org.jgrapht.graph.DefaultEdge]#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#kotlin.Double#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-orienting/-orienting.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Orienting/cognitiveMap/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-orienting/cognitive-map.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Orienting/createLandmarkIn/#TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexShape[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^], it.unibo.alchemist.model.geometry.Vector[^^]]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.Transformation[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^^], it.unibo.alchemist.model.geometry.Vector[^^^]])]])]])/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-orienting/create-landmark-in.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Orienting/environment/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-orienting/environment.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Orienting/knowledgeDegree/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-orienting/knowledge-degree.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Orienting/node/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-orienting/node.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Orienting/randomGenerator/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-orienting/random-generator.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Orienting/toString/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-orienting/to-string.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Orienting/volatileMemory/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-orienting/volatile-memory.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Orienting2D///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-orienting2-d/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Orienting2D/Orienting2D/#it.unibo.alchemist.model.environments.Euclidean2DEnvironmentWithGraph[*,TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexPolygon]),org.jgrapht.graph.DefaultEdge]#org.apache.commons.math3.random.RandomGenerator#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#kotlin.Double#kotlin.Double#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-orienting2-d/-orienting2-d.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Orienting2D/cloneOnNewNode/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-orienting2-d/clone-on-new-node.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Orienting2D/createLandmarkIn/#TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexPolygon])/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-orienting2-d/create-landmark-in.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Orienting2D/environment/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-orienting2-d/environment.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Orienting2D/knowledgeDegree/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-orienting2-d/knowledge-degree.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Orienting2D/node/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-orienting2-d/node.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Pedestrian///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-pedestrian/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Pedestrian/Pedestrian/#org.apache.commons.math3.random.RandomGenerator#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#kotlin.Double#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-pedestrian/-pedestrian.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Pedestrian/cloneOnNewNode/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-pedestrian/clone-on-new-node.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Pedestrian/node/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-pedestrian/node.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Pedestrian/runningSpeed/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-pedestrian/running-speed.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Pedestrian/speed/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-pedestrian/speed.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Pedestrian/toString/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-pedestrian/to-string.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Pedestrian/walkingSpeed/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-pedestrian/walking-speed.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Perceptive///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-perceptive/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Perceptive/Perceptive/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.physics.InfluenceSphere[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-perceptive/-perceptive.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Perceptive/cloneOnNewNode/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-perceptive/clone-on-new-node.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Perceptive/fieldOfView/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-perceptive/field-of-view.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Perceptive/node/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-perceptive/node.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Perceptive2D.Companion///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-perceptive2-d/-companion/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Perceptive2D.Companion/DEFAULT_FIELD_OF_VIEW_APERTURE/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-perceptive2-d/-companion/-d-e-f-a-u-l-t_-f-i-e-l-d_-o-f_-v-i-e-w_-a-p-e-r-t-u-r-e.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Perceptive2D.Companion/DEFAULT_FIELD_OF_VIEW_DEPTH/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-perceptive2-d/-companion/-d-e-f-a-u-l-t_-f-i-e-l-d_-o-f_-v-i-e-w_-d-e-p-t-h.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Perceptive2D///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-perceptive2-d/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Perceptive2D/Perceptive2D/#it.unibo.alchemist.model.physics.environments.Physics2DEnvironment[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.physics.InfluenceSphere2D[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-perceptive2-d/-perceptive2-d.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Perceptive2D/cloneOnNewNode/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-perceptive2-d/clone-on-new-node.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Perceptive2D/environment/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-perceptive2-d/environment.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Perceptive2D/fieldOfView/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-perceptive2-d/field-of-view.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Perceptive2D/node/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-perceptive2-d/node.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/PhysicalPedestrian2D///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-physical-pedestrian2-d/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/PhysicalPedestrian2D/PhysicalPedestrian2D/#org.apache.commons.math3.random.RandomGenerator#it.unibo.alchemist.model.physics.environments.Physics2DEnvironment[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-physical-pedestrian2-d/-physical-pedestrian2-d.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/PhysicalPedestrian2D/avoid/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-physical-pedestrian2-d/avoid.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/PhysicalPedestrian2D/avoidanceForces/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-physical-pedestrian2-d/avoidance-forces.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/PhysicalPedestrian2D/checkAndPossiblyFall/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-physical-pedestrian2-d/check-and-possibly-fall.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/PhysicalPedestrian2D/cloneOnNewNode/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-physical-pedestrian2-d/clone-on-new-node.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/PhysicalPedestrian2D/comfortArea/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-physical-pedestrian2-d/comfort-area.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/PhysicalPedestrian2D/comfortRay/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-physical-pedestrian2-d/comfort-ray.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/PhysicalPedestrian2D/environment/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-physical-pedestrian2-d/environment.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/PhysicalPedestrian2D/fallenAgentAvoidanceForces/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-physical-pedestrian2-d/fallen-agent-avoidance-forces.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/PhysicalPedestrian2D/isFallen/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-physical-pedestrian2-d/is-fallen.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/PhysicalPedestrian2D/node/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-physical-pedestrian2-d/node.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/PhysicalPedestrian2D/onFall/#kotlin.Function1[it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])],kotlin.Unit]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-physical-pedestrian2-d/on-fall.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/PhysicalPedestrian2D/physicalForces/#it.unibo.alchemist.model.physics.PhysicsEnvironment[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition,it.unibo.alchemist.model.geometry.Euclidean2DTransformation,it.unibo.alchemist.model.geometry.Euclidean2DShapeFactory]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-physical-pedestrian2-d/physical-forces.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/PhysicalPedestrian2D/rectangleOfInfluence/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-physical-pedestrian2-d/rectangle-of-influence.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/PhysicalPedestrian2D/repulse/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-physical-pedestrian2-d/repulse.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/PhysicalPedestrian2D/repulsionForces/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-physical-pedestrian2-d/repulsion-forces.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/PhysicalPedestrian2D/shouldFall/#kotlin.collections.List[it.unibo.alchemist.model.positions.Euclidean2DPosition]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-physical-pedestrian2-d/should-fall.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/PhysicalPedestrian2D/toString/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-physical-pedestrian2-d/to-string.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/RunningPedestrian///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-running-pedestrian/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/RunningPedestrian/RunningPedestrian/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-running-pedestrian/-running-pedestrian.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/RunningPedestrian/cloneOnNewNode/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-running-pedestrian/clone-on-new-node.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/RunningPedestrian/node/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-running-pedestrian/node.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/RunningPedestrian/runningSpeed/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-running-pedestrian/running-speed.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Social///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-social/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Social/Social/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.Group[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-social/-social.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Social/cloneOnNewNode/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-social/clone-on-new-node.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Social/group/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-social/group.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Social/node/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-social/node.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/Social/toString/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-social/to-string.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/WalkingPedestrian///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-walking-pedestrian/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/WalkingPedestrian/WalkingPedestrian/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-walking-pedestrian/-walking-pedestrian.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/WalkingPedestrian/cloneOnNewNode/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-walking-pedestrian/clone-on-new-node.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/WalkingPedestrian/node/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-walking-pedestrian/node.html -$dokka.location:it.unibo.alchemist.model.cognitive.properties/WalkingPedestrian/walkingSpeed/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.properties/-walking-pedestrian/walking-speed.html -$dokka.location:it.unibo.alchemist.model.cognitive.reactions////PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.reactions/BlendedSteering///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-blended-steering/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.reactions/BlendedSteering/BlendedSteering/#it.unibo.alchemist.model.environments.Euclidean2DEnvironment[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.TimeDistribution[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-blended-steering/-blended-steering.html -$dokka.location:it.unibo.alchemist.model.cognitive.reactions/CognitiveBehavior///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-cognitive-behavior/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.reactions/CognitiveBehavior/CognitiveBehavior/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.TimeDistribution[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-cognitive-behavior/-cognitive-behavior.html -$dokka.location:it.unibo.alchemist.model.cognitive.reactions/CognitiveBehavior/cloneOnNewNode/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Time/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-cognitive-behavior/clone-on-new-node.html -$dokka.location:it.unibo.alchemist.model.cognitive.reactions/NavigationPrioritizedSteering///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-navigation-prioritized-steering/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.reactions/NavigationPrioritizedSteering/NavigationPrioritizedSteering/#it.unibo.alchemist.model.environments.Euclidean2DEnvironmentWithGraph[*,TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexPolygon]),*]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.TimeDistribution[TypeParam(bounds=[kotlin.Any?])]#kotlin.Double#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-navigation-prioritized-steering/-navigation-prioritized-steering.html -$dokka.location:it.unibo.alchemist.model.cognitive.reactions/NavigationPrioritizedSteeringWithPhysics///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-navigation-prioritized-steering-with-physics/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.reactions/NavigationPrioritizedSteeringWithPhysics/NavigationPrioritizedSteeringWithPhysics/#it.unibo.alchemist.model.physics.environments.EuclideanPhysics2DEnvironmentWithGraph[*,TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexPolygon]),*]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.TimeDistribution[TypeParam(bounds=[kotlin.Any?])]#kotlin.Double#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-navigation-prioritized-steering-with-physics/-navigation-prioritized-steering-with-physics.html -$dokka.location:it.unibo.alchemist.model.cognitive.reactions/NavigationPrioritizedSteeringWithPhysics/steerStrategy/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-navigation-prioritized-steering-with-physics/steer-strategy.html -$dokka.location:it.unibo.alchemist.model.cognitive.reactions/PhysicalBlendedSteering///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-physical-blended-steering/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.reactions/PhysicalBlendedSteering/PhysicalBlendedSteering/#it.unibo.alchemist.model.physics.environments.Dynamics2DEnvironment[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.TimeDistribution[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-physical-blended-steering/-physical-blended-steering.html -$dokka.location:it.unibo.alchemist.model.cognitive.reactions/PhysicalBlendedSteering/environment/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-physical-blended-steering/environment.html -$dokka.location:it.unibo.alchemist.model.cognitive.reactions/PhysicalBlendedSteering/execute/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-physical-blended-steering/execute.html -$dokka.location:it.unibo.alchemist.model.cognitive.reactions/PhysicalBlendedSteering/steerStrategy/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-physical-blended-steering/steer-strategy.html -$dokka.location:it.unibo.alchemist.model.cognitive.reactions/PrioritySteering///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-priority-steering/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.reactions/PrioritySteering/PrioritySteering/#it.unibo.alchemist.model.environments.Euclidean2DEnvironment[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.TimeDistribution[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-priority-steering/-priority-steering.html -$dokka.location:it.unibo.alchemist.model.cognitive.reactions/SteeringBehavior///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-steering-behavior/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.reactions/SteeringBehavior/SteeringBehavior/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition]#it.unibo.alchemist.model.cognitive.PedestrianProperty[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.TimeDistribution[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.SteeringStrategy[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-steering-behavior/-steering-behavior.html -$dokka.location:it.unibo.alchemist.model.cognitive.reactions/SteeringBehavior/cloneOnNewNode/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Time/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-steering-behavior/clone-on-new-node.html -$dokka.location:it.unibo.alchemist.model.cognitive.reactions/SteeringBehavior/execute/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-steering-behavior/execute.html -$dokka.location:it.unibo.alchemist.model.cognitive.reactions/SteeringBehavior/steerActions/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-steering-behavior/steer-actions.html -$dokka.location:it.unibo.alchemist.model.cognitive.reactions/SteeringBehavior/steerStrategy/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.reactions/-steering-behavior/steer-strategy.html -$dokka.location:it.unibo.alchemist.model.cognitive.steering////PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.steering/DistanceWeighted///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-distance-weighted/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.steering/DistanceWeighted/DistanceWeighted/#it.unibo.alchemist.model.environments.Euclidean2DEnvironment[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-distance-weighted/-distance-weighted.html -$dokka.location:it.unibo.alchemist.model.cognitive.steering/Filtered///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-filtered/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.steering/Filtered/Filtered/#it.unibo.alchemist.model.cognitive.SteeringStrategy[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]#kotlin.Function1[kotlin.collections.List[it.unibo.alchemist.model.cognitive.SteeringAction[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]],kotlin.collections.List[it.unibo.alchemist.model.cognitive.SteeringAction[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]]]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-filtered/-filtered.html -$dokka.location:it.unibo.alchemist.model.cognitive.steering/Filtered/computeNextPosition/#kotlin.collections.List[it.unibo.alchemist.model.cognitive.SteeringAction[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-filtered/compute-next-position.html -$dokka.location:it.unibo.alchemist.model.cognitive.steering/Nearest///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-nearest/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.steering/Nearest/Nearest/#it.unibo.alchemist.model.environments.Euclidean2DEnvironment[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-nearest/-nearest.html -$dokka.location:it.unibo.alchemist.model.cognitive.steering/SinglePrevalent.Companion///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-single-prevalent/-companion/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.steering/SinglePrevalent.Companion/DEFAULT_ALPHA/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-single-prevalent/-companion/-d-e-f-a-u-l-t_-a-l-p-h-a.html -$dokka.location:it.unibo.alchemist.model.cognitive.steering/SinglePrevalent.Companion/DEFAULT_DELTA/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-single-prevalent/-companion/-d-e-f-a-u-l-t_-d-e-l-t-a.html -$dokka.location:it.unibo.alchemist.model.cognitive.steering/SinglePrevalent.Companion/DEFAULT_MAX_WALK_RATIO/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-single-prevalent/-companion/-d-e-f-a-u-l-t_-m-a-x_-w-a-l-k_-r-a-t-i-o.html -$dokka.location:it.unibo.alchemist.model.cognitive.steering/SinglePrevalent.Companion/DEFAULT_TOLERANCE_ANGLE/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-single-prevalent/-companion/-d-e-f-a-u-l-t_-t-o-l-e-r-a-n-c-e_-a-n-g-l-e.html -$dokka.location:it.unibo.alchemist.model.cognitive.steering/SinglePrevalent///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-single-prevalent/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.steering/SinglePrevalent/SinglePrevalent/#it.unibo.alchemist.model.environments.Euclidean2DEnvironmentWithGraph[*,TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexPolygon]),*]#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#kotlin.Function1[kotlin.collections.List[it.unibo.alchemist.model.cognitive.SteeringAction[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition]],it.unibo.alchemist.model.cognitive.NavigationAction[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition,it.unibo.alchemist.model.geometry.Euclidean2DTransformation,*,*,TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexPolygon]),*]]#kotlin.Double#kotlin.Double#kotlin.Function0[kotlin.Double]#kotlin.Double#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-single-prevalent/-single-prevalent.html -$dokka.location:it.unibo.alchemist.model.cognitive.steering/SinglePrevalent/computeNextPosition/#kotlin.collections.List[it.unibo.alchemist.model.cognitive.SteeringAction[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition]]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-single-prevalent/compute-next-position.html -$dokka.location:it.unibo.alchemist.model.cognitive.steering/Sum///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-sum/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.steering/Sum/Sum/#it.unibo.alchemist.model.physics.environments.Physics2DEnvironment[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.cognitive.SteeringStrategy[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-sum/-sum.html -$dokka.location:it.unibo.alchemist.model.cognitive.steering/Sum/computeNextPosition/#it.unibo.alchemist.model.positions.Euclidean2DPosition/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-sum/compute-next-position.html -$dokka.location:it.unibo.alchemist.model.cognitive.steering/Sum/node/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-sum/node.html -$dokka.location:it.unibo.alchemist.model.cognitive.steering/Sum/nonPhysicalStrategy/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-sum/non-physical-strategy.html -$dokka.location:it.unibo.alchemist.model.cognitive.steering/TypeBased///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-type-based/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.steering/TypeBased/TypeBased/#it.unibo.alchemist.model.environments.Euclidean2DEnvironment[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#java.util.LinkedHashMap[kotlin.reflect.KClass[it.unibo.alchemist.model.cognitive.SteeringAction[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition]],kotlin.Double]#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-type-based/-type-based.html -$dokka.location:it.unibo.alchemist.model.cognitive.steering/Weighted///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-weighted/index.html -$dokka.location:it.unibo.alchemist.model.cognitive.steering/Weighted/Weighted/#it.unibo.alchemist.model.environments.Euclidean2DEnvironment[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#kotlin.Function1[it.unibo.alchemist.model.cognitive.SteeringAction[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition],kotlin.Double]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-weighted/-weighted.html -$dokka.location:it.unibo.alchemist.model.cognitive.steering/Weighted/computeNextPosition/#kotlin.collections.List[it.unibo.alchemist.model.cognitive.SteeringAction[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition]]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-weighted/compute-next-position.html -$dokka.location:it.unibo.alchemist.model.cognitive.steering/Weighted/computeTarget/#kotlin.collections.List[it.unibo.alchemist.model.cognitive.SteeringAction[TypeParam(bounds=[kotlin.Any?]),it.unibo.alchemist.model.positions.Euclidean2DPosition]]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive.steering/-weighted/compute-target.html -$dokka.location:it.unibo.alchemist.model.cognitive////PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/index.html -$dokka.location:it.unibo.alchemist.model.cognitive/CognitiveModel///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-cognitive-model/index.html -$dokka.location:it.unibo.alchemist.model.cognitive/CognitiveModel/dangerBelief/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-cognitive-model/danger-belief.html -$dokka.location:it.unibo.alchemist.model.cognitive/CognitiveModel/escapeIntention/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-cognitive-model/escape-intention.html -$dokka.location:it.unibo.alchemist.model.cognitive/CognitiveModel/fear/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-cognitive-model/fear.html -$dokka.location:it.unibo.alchemist.model.cognitive/CognitiveModel/remainIntention/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-cognitive-model/remain-intention.html -$dokka.location:it.unibo.alchemist.model.cognitive/CognitiveModel/update/#kotlin.Double/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-cognitive-model/update.html -$dokka.location:it.unibo.alchemist.model.cognitive/CognitiveModel/wantsToEscape/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-cognitive-model/wants-to-escape.html -$dokka.location:it.unibo.alchemist.model.cognitive/CognitiveProperty///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-cognitive-property/index.html -$dokka.location:it.unibo.alchemist.model.cognitive/CognitiveProperty/cognitiveModel/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-cognitive-property/cognitive-model.html -$dokka.location:it.unibo.alchemist.model.cognitive/CognitiveProperty/danger/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-cognitive-property/danger.html -$dokka.location:it.unibo.alchemist.model.cognitive/CognitiveProperty/influentialPeople/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-cognitive-property/influential-people.html -$dokka.location:it.unibo.alchemist.model.cognitive/Group///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-group/index.html -$dokka.location:it.unibo.alchemist.model.cognitive/Group/members/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-group/members.html -$dokka.location:it.unibo.alchemist.model.cognitive/GroupSteeringAction///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-group-steering-action/index.html -$dokka.location:it.unibo.alchemist.model.cognitive/GroupSteeringAction/group/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-group-steering-action/group.html -$dokka.location:it.unibo.alchemist.model.cognitive/GroupWithLeader///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-group-with-leader/index.html -$dokka.location:it.unibo.alchemist.model.cognitive/GroupWithLeader/leader/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-group-with-leader/leader.html -$dokka.location:it.unibo.alchemist.model.cognitive/HeterogeneousPedestrianModel///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-heterogeneous-pedestrian-model/index.html -$dokka.location:it.unibo.alchemist.model.cognitive/HeterogeneousPedestrianModel/HeterogeneousPedestrianModel/#it.unibo.alchemist.model.cognitive.impact.individual.Age#it.unibo.alchemist.model.cognitive.impact.individual.Gender#it.unibo.alchemist.model.cognitive.impact.individual.Speed#kotlin.Double#it.unibo.alchemist.model.cognitive.impact.individual.HelpAttitude/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-heterogeneous-pedestrian-model/-heterogeneous-pedestrian-model.html -$dokka.location:it.unibo.alchemist.model.cognitive/HeterogeneousPedestrianModel/age/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-heterogeneous-pedestrian-model/age.html -$dokka.location:it.unibo.alchemist.model.cognitive/HeterogeneousPedestrianModel/compliance/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-heterogeneous-pedestrian-model/compliance.html -$dokka.location:it.unibo.alchemist.model.cognitive/HeterogeneousPedestrianModel/gender/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-heterogeneous-pedestrian-model/gender.html -$dokka.location:it.unibo.alchemist.model.cognitive/HeterogeneousPedestrianModel/helpAttitude/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-heterogeneous-pedestrian-model/help-attitude.html -$dokka.location:it.unibo.alchemist.model.cognitive/HeterogeneousPedestrianModel/probabilityOfHelping/#it.unibo.alchemist.model.cognitive.HeterogeneousPedestrianModel[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.Vector[^]]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.Transformation[TypeParam(bounds=[it.unibo.alchemist.model.geometry.Vector[^^]])]])]#kotlin.Boolean/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-heterogeneous-pedestrian-model/probability-of-helping.html -$dokka.location:it.unibo.alchemist.model.cognitive/HeterogeneousPedestrianModel/speed/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-heterogeneous-pedestrian-model/speed.html -$dokka.location:it.unibo.alchemist.model.cognitive/Human2DProperty///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-human2-d-property/index.html -$dokka.location:it.unibo.alchemist.model.cognitive/HumanProperty///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-human-property/index.html -$dokka.location:it.unibo.alchemist.model.cognitive/HumanProperty/age/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-human-property/age.html -$dokka.location:it.unibo.alchemist.model.cognitive/HumanProperty/compliance/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-human-property/compliance.html -$dokka.location:it.unibo.alchemist.model.cognitive/HumanProperty/gender/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-human-property/gender.html -$dokka.location:it.unibo.alchemist.model.cognitive/HumanProperty/helpAttitude/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-human-property/help-attitude.html -$dokka.location:it.unibo.alchemist.model.cognitive/HumanProperty/probabilityOfHelping/#it.unibo.alchemist.model.cognitive.HeterogeneousPedestrianModel[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.Vector[^]]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.Transformation[TypeParam(bounds=[it.unibo.alchemist.model.geometry.Vector[^^]])]])]#kotlin.Boolean/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-human-property/probability-of-helping.html -$dokka.location:it.unibo.alchemist.model.cognitive/HumanProperty/speed/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-human-property/speed.html -$dokka.location:it.unibo.alchemist.model.cognitive/NavigationAction///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-navigation-action/index.html -$dokka.location:it.unibo.alchemist.model.cognitive/NavigationAction/crossDoor/#TypeParam(bounds=[kotlin.Any?])/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-navigation-action/cross-door.html -$dokka.location:it.unibo.alchemist.model.cognitive/NavigationAction/currentRoom/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-navigation-action/current-room.html -$dokka.location:it.unibo.alchemist.model.cognitive/NavigationAction/doorsInSight/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-navigation-action/doors-in-sight.html -$dokka.location:it.unibo.alchemist.model.cognitive/NavigationAction/environment/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-navigation-action/environment.html -$dokka.location:it.unibo.alchemist.model.cognitive/NavigationAction/moveToFinal/#TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-navigation-action/move-to-final.html -$dokka.location:it.unibo.alchemist.model.cognitive/NavigationAction/navigatingNode/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-navigation-action/navigating-node.html -$dokka.location:it.unibo.alchemist.model.cognitive/NavigationAction/orientingProperty/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-navigation-action/orienting-property.html -$dokka.location:it.unibo.alchemist.model.cognitive/NavigationAction/pedestrianPosition/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-navigation-action/pedestrian-position.html -$dokka.location:it.unibo.alchemist.model.cognitive/NavigationAction/stop/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-navigation-action/stop.html -$dokka.location:it.unibo.alchemist.model.cognitive/NavigationStrategy///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-navigation-strategy/index.html -$dokka.location:it.unibo.alchemist.model.cognitive/NavigationStrategy/action/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-navigation-strategy/action.html -$dokka.location:it.unibo.alchemist.model.cognitive/NavigationStrategy/inNewRoom/#TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexShape[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^], it.unibo.alchemist.model.geometry.Vector[^^]]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.Transformation[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^^], it.unibo.alchemist.model.geometry.Vector[^^^]])]])]])/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-navigation-strategy/in-new-room.html -$dokka.location:it.unibo.alchemist.model.cognitive/NavigationStrategy/inUnexpectedNewRoom/#TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexShape[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^], it.unibo.alchemist.model.geometry.Vector[^^]]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.Transformation[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^^], it.unibo.alchemist.model.geometry.Vector[^^^]])]])]])#TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexShape[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^], it.unibo.alchemist.model.geometry.Vector[^^]]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.Transformation[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^^], it.unibo.alchemist.model.geometry.Vector[^^^]])]])]])#TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexShape[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^], it.unibo.alchemist.model.geometry.Vector[^^]]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.Transformation[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^^], it.unibo.alchemist.model.geometry.Vector[^^^]])]])]])/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-navigation-strategy/in-unexpected-new-room.html -$dokka.location:it.unibo.alchemist.model.cognitive/NavigationStrategy/orientingCapability/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-navigation-strategy/orienting-capability.html -$dokka.location:it.unibo.alchemist.model.cognitive/NavigationStrategy2D///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-navigation-strategy2-d/index.html -$dokka.location:it.unibo.alchemist.model.cognitive/OrientingAgent///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-orienting-agent/index.html -$dokka.location:it.unibo.alchemist.model.cognitive/OrientingAgent/cognitiveMap/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-orienting-agent/cognitive-map.html -$dokka.location:it.unibo.alchemist.model.cognitive/OrientingAgent/knowledgeDegree/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-orienting-agent/knowledge-degree.html -$dokka.location:it.unibo.alchemist.model.cognitive/OrientingAgent/registerVisit/#TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexShape[TypeParam(bounds=[it.unibo.alchemist.model.geometry.Vector[^^]]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.Transformation[TypeParam(bounds=[it.unibo.alchemist.model.geometry.Vector[^^^]])]])]])/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-orienting-agent/register-visit.html -$dokka.location:it.unibo.alchemist.model.cognitive/OrientingAgent/volatileMemory/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-orienting-agent/volatile-memory.html -$dokka.location:it.unibo.alchemist.model.cognitive/OrientingAgent2D///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-orienting-agent2-d/index.html -$dokka.location:it.unibo.alchemist.model.cognitive/OrientingProperty///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-orienting-property/index.html -$dokka.location:it.unibo.alchemist.model.cognitive/OrientingProperty/cognitiveMap/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-orienting-property/cognitive-map.html -$dokka.location:it.unibo.alchemist.model.cognitive/OrientingProperty/createLandmarkIn/#TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexShape[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^], it.unibo.alchemist.model.geometry.Vector[^^]]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.Transformation[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^^], it.unibo.alchemist.model.geometry.Vector[^^^]])]])]])/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-orienting-property/create-landmark-in.html -$dokka.location:it.unibo.alchemist.model.cognitive/OrientingProperty/environment/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-orienting-property/environment.html -$dokka.location:it.unibo.alchemist.model.cognitive/OrientingProperty/knowledgeDegree/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-orienting-property/knowledge-degree.html -$dokka.location:it.unibo.alchemist.model.cognitive/OrientingProperty/registerVisit/#TypeParam(bounds=[it.unibo.alchemist.model.geometry.ConvexShape[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^], it.unibo.alchemist.model.geometry.Vector[^^]]),TypeParam(bounds=[it.unibo.alchemist.model.geometry.Transformation[TypeParam(bounds=[it.unibo.alchemist.model.Position[^^^], it.unibo.alchemist.model.geometry.Vector[^^^]])]])]])/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-orienting-property/register-visit.html -$dokka.location:it.unibo.alchemist.model.cognitive/OrientingProperty/volatileMemory/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-orienting-property/volatile-memory.html -$dokka.location:it.unibo.alchemist.model.cognitive/PedestrianProperty///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-pedestrian-property/index.html -$dokka.location:it.unibo.alchemist.model.cognitive/PedestrianProperty/speed/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-pedestrian-property/speed.html -$dokka.location:it.unibo.alchemist.model.cognitive/PerceptiveProperty///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-perceptive-property/index.html -$dokka.location:it.unibo.alchemist.model.cognitive/PerceptiveProperty/fieldOfView/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-perceptive-property/field-of-view.html -$dokka.location:it.unibo.alchemist.model.cognitive/PerceptiveProperty/senses/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-perceptive-property/senses.html -$dokka.location:it.unibo.alchemist.model.cognitive/PhysicalSteeringStrategy///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-physical-steering-strategy/index.html -$dokka.location:it.unibo.alchemist.model.cognitive/PhysicalSteeringStrategy/computeNextPosition/#TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-physical-steering-strategy/compute-next-position.html -$dokka.location:it.unibo.alchemist.model.cognitive/PhysicalSteeringStrategy/computeNextPosition/#kotlin.collections.List[it.unibo.alchemist.model.cognitive.SteeringAction[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-physical-steering-strategy/compute-next-position.html -$dokka.location:it.unibo.alchemist.model.cognitive/PhysicalSteeringStrategy/computeTarget/#kotlin.collections.List[it.unibo.alchemist.model.cognitive.SteeringAction[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-physical-steering-strategy/compute-target.html -$dokka.location:it.unibo.alchemist.model.cognitive/PhysicalSteeringStrategy/node/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-physical-steering-strategy/node.html -$dokka.location:it.unibo.alchemist.model.cognitive/PhysicalSteeringStrategy/nonPhysicalStrategy/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-physical-steering-strategy/non-physical-strategy.html -$dokka.location:it.unibo.alchemist.model.cognitive/RunningPedestrianProperty///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-running-pedestrian-property/index.html -$dokka.location:it.unibo.alchemist.model.cognitive/RunningPedestrianProperty/runningSpeed/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-running-pedestrian-property/running-speed.html -$dokka.location:it.unibo.alchemist.model.cognitive/SocialProperty///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-social-property/index.html -$dokka.location:it.unibo.alchemist.model.cognitive/SocialProperty/group/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-social-property/group.html -$dokka.location:it.unibo.alchemist.model.cognitive/SteeringAction///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-steering-action/index.html -$dokka.location:it.unibo.alchemist.model.cognitive/SteeringAction/nextPosition/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-steering-action/next-position.html -$dokka.location:it.unibo.alchemist.model.cognitive/SteeringActionWithTarget///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-steering-action-with-target/index.html -$dokka.location:it.unibo.alchemist.model.cognitive/SteeringActionWithTarget/target/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-steering-action-with-target/target.html -$dokka.location:it.unibo.alchemist.model.cognitive/SteeringActionWithTarget/targetDistanceTo/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^], it.unibo.alchemist.model.geometry.Vector[^]])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-steering-action-with-target/target-distance-to.html -$dokka.location:it.unibo.alchemist.model.cognitive/SteeringStrategy///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-steering-strategy/index.html -$dokka.location:it.unibo.alchemist.model.cognitive/SteeringStrategy/computeNextPosition/#kotlin.collections.List[it.unibo.alchemist.model.cognitive.SteeringAction[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])]]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-steering-strategy/compute-next-position.html -$dokka.location:it.unibo.alchemist.model.cognitive/SteeringStrategy/computeTarget/#kotlin.collections.List[it.unibo.alchemist.model.cognitive.SteeringAction[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])]]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-steering-strategy/compute-target.html -$dokka.location:it.unibo.alchemist.model.cognitive/WalkingPedestrianProperty///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-walking-pedestrian-property/index.html -$dokka.location:it.unibo.alchemist.model.cognitive/WalkingPedestrianProperty/walkingSpeed/#/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.model.cognitive/-walking-pedestrian-property/walking-speed.html -$dokka.location:it.unibo.alchemist.util////PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.util/index.html -$dokka.location:it.unibo.alchemist.util//lazyMutable/#kotlin.Function0[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.util/lazy-mutable.html -$dokka.location:it.unibo.alchemist.util/LazyMutable///PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.util/-lazy-mutable/index.html -$dokka.location:it.unibo.alchemist.util/LazyMutable/LazyMutable/#kotlin.Function0[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.util/-lazy-mutable/-lazy-mutable.html -$dokka.location:it.unibo.alchemist.util/LazyMutable/getValue/#kotlin.Any?#kotlin.reflect.KProperty[*]/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.util/-lazy-mutable/get-value.html -$dokka.location:it.unibo.alchemist.util/LazyMutable/setValue/#kotlin.Any?#kotlin.reflect.KProperty[*]#TypeParam(bounds=[kotlin.Any?])/PointingToDeclaration/alchemist-cognitive-agents/it.unibo.alchemist.util/-lazy-mutable/set-value.html -it.unibo.alchemist.model.cognitive -it.unibo.alchemist.model.cognitive.actions -it.unibo.alchemist.model.cognitive.conditions -it.unibo.alchemist.model.cognitive.environments -it.unibo.alchemist.model.cognitive.groups -it.unibo.alchemist.model.cognitive.impact -it.unibo.alchemist.model.cognitive.impact.cognitive -it.unibo.alchemist.model.cognitive.impact.individual -it.unibo.alchemist.model.cognitive.navigation -it.unibo.alchemist.model.cognitive.properties -it.unibo.alchemist.model.cognitive.reactions -it.unibo.alchemist.model.cognitive.steering -it.unibo.alchemist.util diff --git a/dokka-cache/it.unibo.alchemist/alchemist-graphql-surrogates/42.3.18.list b/dokka-cache/it.unibo.alchemist/alchemist-graphql-surrogates/42.3.18.list new file mode 100644 index 0000000000..5acaa37b1e --- /dev/null +++ b/dokka-cache/it.unibo.alchemist/alchemist-graphql-surrogates/42.3.18.list @@ -0,0 +1,172 @@ +$dokka.format:html-v1 +$dokka.linkExtension:html +$dokka.location:it.unibo.alchemist.boundary.graphql.monitor////PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.monitor/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.monitor/EnvironmentSubscriptionMonitor///PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.monitor/-environment-subscription-monitor/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.monitor/EnvironmentSubscriptionMonitor/EnvironmentSubscriptionMonitor/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.monitor/-environment-subscription-monitor/-environment-subscription-monitor.html +$dokka.location:it.unibo.alchemist.boundary.graphql.monitor/EnvironmentSubscriptionMonitor/eventFlow/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.monitor/-environment-subscription-monitor/event-flow.html +$dokka.location:it.unibo.alchemist.boundary.graphql.monitor/EnvironmentSubscriptionMonitor/finished/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])]#it.unibo.alchemist.model.Time#kotlin.Long/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.monitor/-environment-subscription-monitor/finished.html +$dokka.location:it.unibo.alchemist.boundary.graphql.monitor/EnvironmentSubscriptionMonitor/initialized/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])]/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.monitor/-environment-subscription-monitor/initialized.html +$dokka.location:it.unibo.alchemist.boundary.graphql.monitor/EnvironmentSubscriptionMonitor/stepDone/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])]#it.unibo.alchemist.model.Actionable[TypeParam(bounds=[kotlin.Any?])]?#it.unibo.alchemist.model.Time#kotlin.Long/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.monitor/-environment-subscription-monitor/step-done.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates////PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates//toGraphQLConcentrationSurrogate/it.unibo.alchemist.model.Concentration[TypeParam(bounds=[kotlin.Any])]#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/to-graph-q-l-concentration-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates//toGraphQLEnvironmentSurrogate/it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])]#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/to-graph-q-l-environment-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates//toGraphQLLayerSurrogate/it.unibo.alchemist.model.Layer[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])]#kotlin.Function1[kotlin.collections.List[kotlin.Number],TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])]/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/to-graph-q-l-layer-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates//toGraphQLMoleculeSurrogate/it.unibo.alchemist.model.Molecule#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/to-graph-q-l-molecule-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates//toGraphQLNeighborhoodSurrogate/it.unibo.alchemist.model.Neighborhood[TypeParam(bounds=[kotlin.Any?])]#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/to-graph-q-l-neighborhood-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates//toGraphQLNodeSurrogate/it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/to-graph-q-l-node-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates//toGraphQLReactionSurrogate/it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/to-graph-q-l-reaction-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates//toGraphQLSimulationSurrogate/it.unibo.alchemist.core.Simulation[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])]#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/to-graph-q-l-simulation-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates//toGraphQLTimeSurrogate/it.unibo.alchemist.model.Time#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/to-graph-q-l-time-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/ConcentrationSurrogate///PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-concentration-surrogate/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/ConcentrationSurrogate/ConcentrationSurrogate/#it.unibo.alchemist.model.Concentration[TypeParam(bounds=[kotlin.Any?])]#kotlin.String/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-concentration-surrogate/-concentration-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/ConcentrationSurrogate/content/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-concentration-surrogate/content.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/ConcentrationSurrogate/origin/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-concentration-surrogate/origin.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/EnvironmentSurrogate///PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-environment-surrogate/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/EnvironmentSurrogate/EnvironmentSurrogate/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])]#kotlin.Int/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-environment-surrogate/-environment-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/EnvironmentSurrogate/cloneNode/#kotlin.Int#it.unibo.alchemist.boundary.graphql.schema.model.surrogates.PositionInput#kotlin.Double/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-environment-surrogate/clone-node.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/EnvironmentSurrogate/dimensions/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-environment-surrogate/dimensions.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/EnvironmentSurrogate/getLayer/#it.unibo.alchemist.boundary.graphql.schema.model.surrogates.MoleculeInput/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-environment-surrogate/get-layer.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/EnvironmentSurrogate/getNeighborhood/#kotlin.Int/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-environment-surrogate/get-neighborhood.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/EnvironmentSurrogate/layers/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-environment-surrogate/layers.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/EnvironmentSurrogate/nodeById/#kotlin.Int/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-environment-surrogate/node-by-id.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/EnvironmentSurrogate/nodeToPos/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-environment-surrogate/node-to-pos.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/EnvironmentSurrogate/nodes/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-environment-surrogate/nodes.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/EnvironmentSurrogate/origin/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-environment-surrogate/origin.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/GenericPositionSurrogate///PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-generic-position-surrogate/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/GenericPositionSurrogate/GenericPositionSurrogate/#kotlin.collections.List[kotlin.Double]#kotlin.Int/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-generic-position-surrogate/-generic-position-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/GenericPositionSurrogate/coordinates/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-generic-position-surrogate/coordinates.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/GenericPositionSurrogate/dimensions/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-generic-position-surrogate/dimensions.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/GraphQLSurrogate///PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-graph-q-l-surrogate/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/GraphQLSurrogate/GraphQLSurrogate/#TypeParam(bounds=[kotlin.Any?])/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-graph-q-l-surrogate/-graph-q-l-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/GraphQLSurrogate/origin/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-graph-q-l-surrogate/origin.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/LayerSurrogate///PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-layer-surrogate/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/LayerSurrogate/LayerSurrogate/#it.unibo.alchemist.model.Layer[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])]#kotlin.Function1[kotlin.collections.List[kotlin.Number],TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])]/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-layer-surrogate/-layer-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/LayerSurrogate/getValue/#it.unibo.alchemist.boundary.graphql.schema.model.surrogates.PositionInput/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-layer-surrogate/get-value.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/LayerSurrogate/origin/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-layer-surrogate/origin.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/LayerSurrogate/posMapping/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-layer-surrogate/pos-mapping.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/MoleculeInput///PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-molecule-input/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/MoleculeInput/MoleculeInput/#kotlin.String/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-molecule-input/-molecule-input.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/MoleculeInput/name/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-molecule-input/name.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/MoleculeSurrogate///PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-molecule-surrogate/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/MoleculeSurrogate/MoleculeSurrogate/#it.unibo.alchemist.model.Molecule#kotlin.String/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-molecule-surrogate/-molecule-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/MoleculeSurrogate/name/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-molecule-surrogate/name.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/MoleculeSurrogate/origin/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-molecule-surrogate/origin.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/NeighborhoodSurrogate///PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-neighborhood-surrogate/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/NeighborhoodSurrogate/NeighborhoodSurrogate/#it.unibo.alchemist.model.Neighborhood[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-neighborhood-surrogate/-neighborhood-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/NeighborhoodSurrogate/contains/#it.unibo.alchemist.boundary.graphql.schema.model.surrogates.NodeSurrogate[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-neighborhood-surrogate/contains.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/NeighborhoodSurrogate/getCenter/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-neighborhood-surrogate/get-center.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/NeighborhoodSurrogate/getNeighbors/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-neighborhood-surrogate/get-neighbors.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/NeighborhoodSurrogate/isEmpty/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-neighborhood-surrogate/is-empty.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/NeighborhoodSurrogate/origin/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-neighborhood-surrogate/origin.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/NeighborhoodSurrogate/size/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-neighborhood-surrogate/size.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/NodeSurrogate///PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-node-surrogate/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/NodeSurrogate/NodeSurrogate/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#kotlin.Int/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-node-surrogate/-node-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/NodeSurrogate/contains/#it.unibo.alchemist.boundary.graphql.schema.model.surrogates.MoleculeInput/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-node-surrogate/contains.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/NodeSurrogate/contents/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-node-surrogate/contents.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/NodeSurrogate/getConcentration/#it.unibo.alchemist.boundary.graphql.schema.model.surrogates.MoleculeInput/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-node-surrogate/get-concentration.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/NodeSurrogate/id/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-node-surrogate/id.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/NodeSurrogate/moleculeCount/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-node-surrogate/molecule-count.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/NodeSurrogate/origin/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-node-surrogate/origin.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/NodeSurrogate/properties/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-node-surrogate/properties.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/NodeSurrogate/reactions/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-node-surrogate/reactions.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/Position2DSurrogate///PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-position2-d-surrogate/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/Position2DSurrogate/Position2DSurrogate/#kotlin.Double#kotlin.Double#kotlin.collections.List[kotlin.Double]#kotlin.Int/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-position2-d-surrogate/-position2-d-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/Position2DSurrogate/coordinates/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-position2-d-surrogate/coordinates.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/Position2DSurrogate/dimensions/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-position2-d-surrogate/dimensions.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/Position2DSurrogate/x/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-position2-d-surrogate/x.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/Position2DSurrogate/y/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-position2-d-surrogate/y.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/PositionInput///PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-position-input/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/PositionInput/PositionInput/#kotlin.collections.List[kotlin.Double]#kotlin.Int/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-position-input/-position-input.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/PositionInput/coordinates/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-position-input/coordinates.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/PositionInput/dimensions/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-position-input/dimensions.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/PositionSurrogate///PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-position-surrogate/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/PositionSurrogate/coordinates/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-position-surrogate/coordinates.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/PositionSurrogate/dimensions/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-position-surrogate/dimensions.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/PositionSurrogate/toInputPosition/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-position-surrogate/to-input-position.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/ReactionSurrogate///PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-reaction-surrogate/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/ReactionSurrogate/ReactionSurrogate/#it.unibo.alchemist.model.Reaction[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Context#it.unibo.alchemist.model.Context#it.unibo.alchemist.boundary.graphql.schema.model.surrogates.NodeSurrogate[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-reaction-surrogate/-reaction-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/ReactionSurrogate/inputContext/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-reaction-surrogate/input-context.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/ReactionSurrogate/node/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-reaction-surrogate/node.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/ReactionSurrogate/origin/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-reaction-surrogate/origin.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/ReactionSurrogate/outputContext/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-reaction-surrogate/output-context.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/SimulationSurrogate///PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-simulation-surrogate/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/SimulationSurrogate/SimulationSurrogate/#it.unibo.alchemist.core.Simulation[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])]/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-simulation-surrogate/-simulation-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/SimulationSurrogate/environment/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-simulation-surrogate/environment.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/SimulationSurrogate/origin/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-simulation-surrogate/origin.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/SimulationSurrogate/status/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-simulation-surrogate/status.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/SimulationSurrogate/time/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-simulation-surrogate/time.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/TimeSurrogate///PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-time-surrogate/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/TimeSurrogate/TimeSurrogate/#it.unibo.alchemist.model.Time/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-time-surrogate/-time-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/TimeSurrogate/doubleTime/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-time-surrogate/double-time.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.model.surrogates/TimeSurrogate/origin/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.model.surrogates/-time-surrogate/origin.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.operations.mutations////PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.operations.mutations/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.operations.mutations/SimulationControl///PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.operations.mutations/-simulation-control/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.operations.mutations/SimulationControl/SimulationControl/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])]/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.operations.mutations/-simulation-control/-simulation-control.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.operations.mutations/SimulationControl/pause/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.operations.mutations/-simulation-control/pause.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.operations.mutations/SimulationControl/play/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.operations.mutations/-simulation-control/play.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.operations.mutations/SimulationControl/terminate/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.operations.mutations/-simulation-control/terminate.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.operations.queries////PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.operations.queries/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.operations.queries/EnvironmentQueries///PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.operations.queries/-environment-queries/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.operations.queries/EnvironmentQueries/EnvironmentQueries/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])]/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.operations.queries/-environment-queries/-environment-queries.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.operations.queries/EnvironmentQueries/environment/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.operations.queries/-environment-queries/environment.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.operations.queries/EnvironmentQueries/simulation/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.operations.queries/-environment-queries/simulation.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.operations.queries/NodeQueries///PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.operations.queries/-node-queries/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.operations.queries/NodeQueries/NodeQueries/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])]/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.operations.queries/-node-queries/-node-queries.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.operations.queries/NodeQueries/neighborhood/#kotlin.Int/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.operations.queries/-node-queries/neighborhood.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.operations.queries/NodeQueries/nodePosition/#kotlin.Int/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.operations.queries/-node-queries/node-position.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.operations.subscriptions////PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.operations.subscriptions/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.operations.subscriptions/EnvironmentSubscriptions///PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.operations.subscriptions/-environment-subscriptions/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.operations.subscriptions/EnvironmentSubscriptions/EnvironmentSubscriptions/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])]/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.operations.subscriptions/-environment-subscriptions/-environment-subscriptions.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.operations.subscriptions/EnvironmentSubscriptions/environment/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.operations.subscriptions/-environment-subscriptions/environment.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.operations.subscriptions/EnvironmentSubscriptions/simulation/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.operations.subscriptions/-environment-subscriptions/simulation.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.operations.subscriptions/NodeSubscriptions///PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.operations.subscriptions/-node-subscriptions/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.operations.subscriptions/NodeSubscriptions/NodeSubscriptions/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])]/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.operations.subscriptions/-node-subscriptions/-node-subscriptions.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.operations.subscriptions/NodeSubscriptions/neighborhood/#kotlin.Int/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.operations.subscriptions/-node-subscriptions/neighborhood.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.operations.subscriptions/NodeSubscriptions/node/#kotlin.Int/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.operations.subscriptions/-node-subscriptions/node.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.util////PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.util/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.util//encodeConcentrationContentToString/#TypeParam(bounds=[kotlin.Any])?/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.util/encode-concentration-content-to-string.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.util//encodeConcentrationContentToString/#it.unibo.alchemist.model.Concentration[TypeParam(bounds=[kotlin.Any])]/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.util/encode-concentration-content-to-string.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.util//toMoleculeToConcentrationMap/kotlin.collections.Map[it.unibo.alchemist.model.Molecule,TypeParam(bounds=[kotlin.Any?])]#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.util/to-molecule-to-concentration-map.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.util//toNodeToPosMap/kotlin.collections.Map[kotlin.Int,TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])]#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.util/to-node-to-pos-map.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.util/GraphQLMap///PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.util/-graph-q-l-map/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.util/GraphQLMap/GraphQLMap/#kotlin.collections.Map[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[kotlin.Any?])]#kotlin.Int/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.util/-graph-q-l-map/-graph-q-l-map.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.util/GraphQLMap/get/#TypeParam(bounds=[kotlin.Any?])/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.util/-graph-q-l-map/get.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.util/GraphQLMap/originMap/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.util/-graph-q-l-map/origin-map.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.util/GraphQLMap/size/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.util/-graph-q-l-map/size.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.util/MoleculeToConcentrationEntry///PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.util/-molecule-to-concentration-entry/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.util/MoleculeToConcentrationEntry/MoleculeToConcentrationEntry/#it.unibo.alchemist.boundary.graphql.schema.model.surrogates.MoleculeSurrogate#kotlin.String/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.util/-molecule-to-concentration-entry/-molecule-to-concentration-entry.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.util/MoleculeToConcentrationEntry/concentration/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.util/-molecule-to-concentration-entry/concentration.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.util/MoleculeToConcentrationEntry/molecule/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.util/-molecule-to-concentration-entry/molecule.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.util/MoleculeToConcentrationMap///PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.util/-molecule-to-concentration-map/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.util/MoleculeToConcentrationMap/MoleculeToConcentrationMap/#kotlin.collections.Map[it.unibo.alchemist.boundary.graphql.schema.model.surrogates.MoleculeSurrogate,kotlin.String]#kotlin.Int/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.util/-molecule-to-concentration-map/-molecule-to-concentration-map.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.util/MoleculeToConcentrationMap/entries/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.util/-molecule-to-concentration-map/entries.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.util/MoleculeToConcentrationMap/get/#it.unibo.alchemist.boundary.graphql.schema.model.surrogates.MoleculeInput/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.util/-molecule-to-concentration-map/get.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.util/MoleculeToConcentrationMap/originMap/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.util/-molecule-to-concentration-map/origin-map.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.util/MoleculeToConcentrationMap/size/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.util/-molecule-to-concentration-map/size.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.util/NodeToPosEntry///PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.util/-node-to-pos-entry/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.util/NodeToPosEntry/NodeToPosEntry/#kotlin.Int#it.unibo.alchemist.boundary.graphql.schema.model.surrogates.PositionSurrogate/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.util/-node-to-pos-entry/-node-to-pos-entry.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.util/NodeToPosEntry/id/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.util/-node-to-pos-entry/id.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.util/NodeToPosEntry/position/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.util/-node-to-pos-entry/position.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.util/NodeToPosMap///PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.util/-node-to-pos-map/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.util/NodeToPosMap/NodeToPosMap/#kotlin.collections.Map[kotlin.Int,it.unibo.alchemist.boundary.graphql.schema.model.surrogates.PositionSurrogate]#kotlin.Int/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.util/-node-to-pos-map/-node-to-pos-map.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.util/NodeToPosMap/entries/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.util/-node-to-pos-map/entries.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.util/NodeToPosMap/originMap/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.util/-node-to-pos-map/origin-map.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.util/NodeToPosMap/size/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.util/-node-to-pos-map/size.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.util/PositionSurrogateUtils///PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.util/-position-surrogate-utils/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.util/PositionSurrogateUtils/fromPositionInput/#it.unibo.alchemist.boundary.graphql.schema.model.surrogates.PositionInput/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.util/-position-surrogate-utils/from-position-input.html +$dokka.location:it.unibo.alchemist.boundary.graphql.schema.util/PositionSurrogateUtils/toPositionSurrogate/#it.unibo.alchemist.model.Position[*]/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql.schema.util/-position-surrogate-utils/to-position-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.graphql////PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql/AlchemistSchemaGeneratorHooksProvider///PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql/-alchemist-schema-generator-hooks-provider/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql/AlchemistSchemaGeneratorHooksProvider/AlchemistSchemaGeneratorHooksProvider/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql/-alchemist-schema-generator-hooks-provider/-alchemist-schema-generator-hooks-provider.html +$dokka.location:it.unibo.alchemist.boundary.graphql/AlchemistSchemaGeneratorHooksProvider/hooks/#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.boundary.graphql/-alchemist-schema-generator-hooks-provider/hooks.html +$dokka.location:it.unibo.alchemist.model.util////PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.model.util/index.html +$dokka.location:it.unibo.alchemist.model.util/Environments///PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.model.util/-environments/index.html +$dokka.location:it.unibo.alchemist.model.util/Environments/subscriptionMonitor/it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])]#/PointingToDeclaration/alchemist-graphql-surrogates/it.unibo.alchemist.model.util/-environments/subscription-monitor.html +it.unibo.alchemist.boundary.graphql +it.unibo.alchemist.boundary.graphql.monitor +it.unibo.alchemist.boundary.graphql.schema.model.surrogates +it.unibo.alchemist.boundary.graphql.schema.operations.mutations +it.unibo.alchemist.boundary.graphql.schema.operations.queries +it.unibo.alchemist.boundary.graphql.schema.operations.subscriptions +it.unibo.alchemist.boundary.graphql.schema.util +it.unibo.alchemist.model.util diff --git a/dokka-cache/it.unibo.alchemist/alchemist-graphql/42.3.18.list b/dokka-cache/it.unibo.alchemist/alchemist-graphql/42.3.18.list new file mode 100644 index 0000000000..0b99953f2f --- /dev/null +++ b/dokka-cache/it.unibo.alchemist/alchemist-graphql/42.3.18.list @@ -0,0 +1,335 @@ +$dokka.format:html-v1 +$dokka.linkExtension:html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter////PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/ConcentrationSubscription_ResponseAdapter.Data///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-concentration-subscription_-response-adapter/-data/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/ConcentrationSubscription_ResponseAdapter.Data/RESPONSE_NAMES/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-concentration-subscription_-response-adapter/-data/-r-e-s-p-o-n-s-e_-n-a-m-e-s.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/ConcentrationSubscription_ResponseAdapter.Data/fromJson/#com.apollographql.apollo3.api.json.JsonReader#com.apollographql.apollo3.api.CustomScalarAdapters/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-concentration-subscription_-response-adapter/-data/from-json.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/ConcentrationSubscription_ResponseAdapter.Data/toJson/#com.apollographql.apollo3.api.json.JsonWriter#com.apollographql.apollo3.api.CustomScalarAdapters#it.unibo.alchemist.boundary.graphql.client.ConcentrationSubscription.Data/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-concentration-subscription_-response-adapter/-data/to-json.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/ConcentrationSubscription_ResponseAdapter.Environment///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-concentration-subscription_-response-adapter/-environment/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/ConcentrationSubscription_ResponseAdapter.Environment/RESPONSE_NAMES/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-concentration-subscription_-response-adapter/-environment/-r-e-s-p-o-n-s-e_-n-a-m-e-s.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/ConcentrationSubscription_ResponseAdapter.Environment/fromJson/#com.apollographql.apollo3.api.json.JsonReader#com.apollographql.apollo3.api.CustomScalarAdapters/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-concentration-subscription_-response-adapter/-environment/from-json.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/ConcentrationSubscription_ResponseAdapter.Environment/toJson/#com.apollographql.apollo3.api.json.JsonWriter#com.apollographql.apollo3.api.CustomScalarAdapters#it.unibo.alchemist.boundary.graphql.client.ConcentrationSubscription.Environment/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-concentration-subscription_-response-adapter/-environment/to-json.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/ConcentrationSubscription_ResponseAdapter.Node///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-concentration-subscription_-response-adapter/-node/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/ConcentrationSubscription_ResponseAdapter.Node/RESPONSE_NAMES/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-concentration-subscription_-response-adapter/-node/-r-e-s-p-o-n-s-e_-n-a-m-e-s.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/ConcentrationSubscription_ResponseAdapter.Node/fromJson/#com.apollographql.apollo3.api.json.JsonReader#com.apollographql.apollo3.api.CustomScalarAdapters/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-concentration-subscription_-response-adapter/-node/from-json.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/ConcentrationSubscription_ResponseAdapter.Node/toJson/#com.apollographql.apollo3.api.json.JsonWriter#com.apollographql.apollo3.api.CustomScalarAdapters#it.unibo.alchemist.boundary.graphql.client.ConcentrationSubscription.Node/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-concentration-subscription_-response-adapter/-node/to-json.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/ConcentrationSubscription_ResponseAdapter.Simulation///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-concentration-subscription_-response-adapter/-simulation/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/ConcentrationSubscription_ResponseAdapter.Simulation/RESPONSE_NAMES/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-concentration-subscription_-response-adapter/-simulation/-r-e-s-p-o-n-s-e_-n-a-m-e-s.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/ConcentrationSubscription_ResponseAdapter.Simulation/fromJson/#com.apollographql.apollo3.api.json.JsonReader#com.apollographql.apollo3.api.CustomScalarAdapters/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-concentration-subscription_-response-adapter/-simulation/from-json.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/ConcentrationSubscription_ResponseAdapter.Simulation/toJson/#com.apollographql.apollo3.api.json.JsonWriter#com.apollographql.apollo3.api.CustomScalarAdapters#it.unibo.alchemist.boundary.graphql.client.ConcentrationSubscription.Simulation/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-concentration-subscription_-response-adapter/-simulation/to-json.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/ConcentrationSubscription_ResponseAdapter///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-concentration-subscription_-response-adapter/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/ConcentrationSubscription_VariablesAdapter///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-concentration-subscription_-variables-adapter/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/ConcentrationSubscription_VariablesAdapter/serializeVariables/#com.apollographql.apollo3.api.json.JsonWriter#it.unibo.alchemist.boundary.graphql.client.ConcentrationSubscription#com.apollographql.apollo3.api.CustomScalarAdapters#kotlin.Boolean/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-concentration-subscription_-variables-adapter/serialize-variables.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/NodesSubscription_ResponseAdapter.Contents///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-nodes-subscription_-response-adapter/-contents/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/NodesSubscription_ResponseAdapter.Contents/RESPONSE_NAMES/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-nodes-subscription_-response-adapter/-contents/-r-e-s-p-o-n-s-e_-n-a-m-e-s.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/NodesSubscription_ResponseAdapter.Contents/fromJson/#com.apollographql.apollo3.api.json.JsonReader#com.apollographql.apollo3.api.CustomScalarAdapters/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-nodes-subscription_-response-adapter/-contents/from-json.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/NodesSubscription_ResponseAdapter.Contents/toJson/#com.apollographql.apollo3.api.json.JsonWriter#com.apollographql.apollo3.api.CustomScalarAdapters#it.unibo.alchemist.boundary.graphql.client.NodesSubscription.Contents/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-nodes-subscription_-response-adapter/-contents/to-json.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/NodesSubscription_ResponseAdapter.Data///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-nodes-subscription_-response-adapter/-data/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/NodesSubscription_ResponseAdapter.Data/RESPONSE_NAMES/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-nodes-subscription_-response-adapter/-data/-r-e-s-p-o-n-s-e_-n-a-m-e-s.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/NodesSubscription_ResponseAdapter.Data/fromJson/#com.apollographql.apollo3.api.json.JsonReader#com.apollographql.apollo3.api.CustomScalarAdapters/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-nodes-subscription_-response-adapter/-data/from-json.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/NodesSubscription_ResponseAdapter.Data/toJson/#com.apollographql.apollo3.api.json.JsonWriter#com.apollographql.apollo3.api.CustomScalarAdapters#it.unibo.alchemist.boundary.graphql.client.NodesSubscription.Data/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-nodes-subscription_-response-adapter/-data/to-json.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/NodesSubscription_ResponseAdapter.Entry///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-nodes-subscription_-response-adapter/-entry/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/NodesSubscription_ResponseAdapter.Entry/RESPONSE_NAMES/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-nodes-subscription_-response-adapter/-entry/-r-e-s-p-o-n-s-e_-n-a-m-e-s.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/NodesSubscription_ResponseAdapter.Entry/fromJson/#com.apollographql.apollo3.api.json.JsonReader#com.apollographql.apollo3.api.CustomScalarAdapters/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-nodes-subscription_-response-adapter/-entry/from-json.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/NodesSubscription_ResponseAdapter.Entry/toJson/#com.apollographql.apollo3.api.json.JsonWriter#com.apollographql.apollo3.api.CustomScalarAdapters#it.unibo.alchemist.boundary.graphql.client.NodesSubscription.Entry/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-nodes-subscription_-response-adapter/-entry/to-json.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/NodesSubscription_ResponseAdapter.Environment///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-nodes-subscription_-response-adapter/-environment/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/NodesSubscription_ResponseAdapter.Environment/RESPONSE_NAMES/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-nodes-subscription_-response-adapter/-environment/-r-e-s-p-o-n-s-e_-n-a-m-e-s.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/NodesSubscription_ResponseAdapter.Environment/fromJson/#com.apollographql.apollo3.api.json.JsonReader#com.apollographql.apollo3.api.CustomScalarAdapters/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-nodes-subscription_-response-adapter/-environment/from-json.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/NodesSubscription_ResponseAdapter.Environment/toJson/#com.apollographql.apollo3.api.json.JsonWriter#com.apollographql.apollo3.api.CustomScalarAdapters#it.unibo.alchemist.boundary.graphql.client.NodesSubscription.Environment/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-nodes-subscription_-response-adapter/-environment/to-json.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/NodesSubscription_ResponseAdapter.Molecule///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-nodes-subscription_-response-adapter/-molecule/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/NodesSubscription_ResponseAdapter.Molecule/RESPONSE_NAMES/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-nodes-subscription_-response-adapter/-molecule/-r-e-s-p-o-n-s-e_-n-a-m-e-s.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/NodesSubscription_ResponseAdapter.Molecule/fromJson/#com.apollographql.apollo3.api.json.JsonReader#com.apollographql.apollo3.api.CustomScalarAdapters/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-nodes-subscription_-response-adapter/-molecule/from-json.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/NodesSubscription_ResponseAdapter.Molecule/toJson/#com.apollographql.apollo3.api.json.JsonWriter#com.apollographql.apollo3.api.CustomScalarAdapters#it.unibo.alchemist.boundary.graphql.client.NodesSubscription.Molecule/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-nodes-subscription_-response-adapter/-molecule/to-json.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/NodesSubscription_ResponseAdapter.Node///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-nodes-subscription_-response-adapter/-node/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/NodesSubscription_ResponseAdapter.Node/RESPONSE_NAMES/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-nodes-subscription_-response-adapter/-node/-r-e-s-p-o-n-s-e_-n-a-m-e-s.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/NodesSubscription_ResponseAdapter.Node/fromJson/#com.apollographql.apollo3.api.json.JsonReader#com.apollographql.apollo3.api.CustomScalarAdapters/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-nodes-subscription_-response-adapter/-node/from-json.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/NodesSubscription_ResponseAdapter.Node/toJson/#com.apollographql.apollo3.api.json.JsonWriter#com.apollographql.apollo3.api.CustomScalarAdapters#it.unibo.alchemist.boundary.graphql.client.NodesSubscription.Node/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-nodes-subscription_-response-adapter/-node/to-json.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/NodesSubscription_ResponseAdapter.Simulation///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-nodes-subscription_-response-adapter/-simulation/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/NodesSubscription_ResponseAdapter.Simulation/RESPONSE_NAMES/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-nodes-subscription_-response-adapter/-simulation/-r-e-s-p-o-n-s-e_-n-a-m-e-s.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/NodesSubscription_ResponseAdapter.Simulation/fromJson/#com.apollographql.apollo3.api.json.JsonReader#com.apollographql.apollo3.api.CustomScalarAdapters/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-nodes-subscription_-response-adapter/-simulation/from-json.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/NodesSubscription_ResponseAdapter.Simulation/toJson/#com.apollographql.apollo3.api.json.JsonWriter#com.apollographql.apollo3.api.CustomScalarAdapters#it.unibo.alchemist.boundary.graphql.client.NodesSubscription.Simulation/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-nodes-subscription_-response-adapter/-simulation/to-json.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/NodesSubscription_ResponseAdapter///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-nodes-subscription_-response-adapter/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/PauseSimulationMutation_ResponseAdapter.Data///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-pause-simulation-mutation_-response-adapter/-data/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/PauseSimulationMutation_ResponseAdapter.Data/RESPONSE_NAMES/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-pause-simulation-mutation_-response-adapter/-data/-r-e-s-p-o-n-s-e_-n-a-m-e-s.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/PauseSimulationMutation_ResponseAdapter.Data/fromJson/#com.apollographql.apollo3.api.json.JsonReader#com.apollographql.apollo3.api.CustomScalarAdapters/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-pause-simulation-mutation_-response-adapter/-data/from-json.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/PauseSimulationMutation_ResponseAdapter.Data/toJson/#com.apollographql.apollo3.api.json.JsonWriter#com.apollographql.apollo3.api.CustomScalarAdapters#it.unibo.alchemist.boundary.graphql.client.PauseSimulationMutation.Data/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-pause-simulation-mutation_-response-adapter/-data/to-json.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/PauseSimulationMutation_ResponseAdapter///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-pause-simulation-mutation_-response-adapter/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/PlaySimulationMutation_ResponseAdapter.Data///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-play-simulation-mutation_-response-adapter/-data/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/PlaySimulationMutation_ResponseAdapter.Data/RESPONSE_NAMES/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-play-simulation-mutation_-response-adapter/-data/-r-e-s-p-o-n-s-e_-n-a-m-e-s.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/PlaySimulationMutation_ResponseAdapter.Data/fromJson/#com.apollographql.apollo3.api.json.JsonReader#com.apollographql.apollo3.api.CustomScalarAdapters/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-play-simulation-mutation_-response-adapter/-data/from-json.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/PlaySimulationMutation_ResponseAdapter.Data/toJson/#com.apollographql.apollo3.api.json.JsonWriter#com.apollographql.apollo3.api.CustomScalarAdapters#it.unibo.alchemist.boundary.graphql.client.PlaySimulationMutation.Data/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-play-simulation-mutation_-response-adapter/-data/to-json.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/PlaySimulationMutation_ResponseAdapter///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-play-simulation-mutation_-response-adapter/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/SimulationStatusQuery_ResponseAdapter.Data///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-simulation-status-query_-response-adapter/-data/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/SimulationStatusQuery_ResponseAdapter.Data/RESPONSE_NAMES/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-simulation-status-query_-response-adapter/-data/-r-e-s-p-o-n-s-e_-n-a-m-e-s.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/SimulationStatusQuery_ResponseAdapter.Data/fromJson/#com.apollographql.apollo3.api.json.JsonReader#com.apollographql.apollo3.api.CustomScalarAdapters/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-simulation-status-query_-response-adapter/-data/from-json.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/SimulationStatusQuery_ResponseAdapter.Data/toJson/#com.apollographql.apollo3.api.json.JsonWriter#com.apollographql.apollo3.api.CustomScalarAdapters#it.unibo.alchemist.boundary.graphql.client.SimulationStatusQuery.Data/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-simulation-status-query_-response-adapter/-data/to-json.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/SimulationStatusQuery_ResponseAdapter.Simulation///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-simulation-status-query_-response-adapter/-simulation/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/SimulationStatusQuery_ResponseAdapter.Simulation/RESPONSE_NAMES/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-simulation-status-query_-response-adapter/-simulation/-r-e-s-p-o-n-s-e_-n-a-m-e-s.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/SimulationStatusQuery_ResponseAdapter.Simulation/fromJson/#com.apollographql.apollo3.api.json.JsonReader#com.apollographql.apollo3.api.CustomScalarAdapters/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-simulation-status-query_-response-adapter/-simulation/from-json.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/SimulationStatusQuery_ResponseAdapter.Simulation/toJson/#com.apollographql.apollo3.api.json.JsonWriter#com.apollographql.apollo3.api.CustomScalarAdapters#it.unibo.alchemist.boundary.graphql.client.SimulationStatusQuery.Simulation/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-simulation-status-query_-response-adapter/-simulation/to-json.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/SimulationStatusQuery_ResponseAdapter///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-simulation-status-query_-response-adapter/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/TerminateSimulationMutation_ResponseAdapter.Data///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-terminate-simulation-mutation_-response-adapter/-data/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/TerminateSimulationMutation_ResponseAdapter.Data/RESPONSE_NAMES/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-terminate-simulation-mutation_-response-adapter/-data/-r-e-s-p-o-n-s-e_-n-a-m-e-s.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/TerminateSimulationMutation_ResponseAdapter.Data/fromJson/#com.apollographql.apollo3.api.json.JsonReader#com.apollographql.apollo3.api.CustomScalarAdapters/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-terminate-simulation-mutation_-response-adapter/-data/from-json.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/TerminateSimulationMutation_ResponseAdapter.Data/toJson/#com.apollographql.apollo3.api.json.JsonWriter#com.apollographql.apollo3.api.CustomScalarAdapters#it.unibo.alchemist.boundary.graphql.client.TerminateSimulationMutation.Data/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-terminate-simulation-mutation_-response-adapter/-data/to-json.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.adapter/TerminateSimulationMutation_ResponseAdapter///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.adapter/-terminate-simulation-mutation_-response-adapter/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.selections////PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.selections/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.selections/ConcentrationSubscriptionSelections///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.selections/-concentration-subscription-selections/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.selections/ConcentrationSubscriptionSelections/__root/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.selections/-concentration-subscription-selections/__root.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.selections/NodesSubscriptionSelections///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.selections/-nodes-subscription-selections/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.selections/NodesSubscriptionSelections/__root/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.selections/-nodes-subscription-selections/__root.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.selections/PauseSimulationMutationSelections///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.selections/-pause-simulation-mutation-selections/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.selections/PauseSimulationMutationSelections/__root/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.selections/-pause-simulation-mutation-selections/__root.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.selections/PlaySimulationMutationSelections///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.selections/-play-simulation-mutation-selections/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.selections/PlaySimulationMutationSelections/__root/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.selections/-play-simulation-mutation-selections/__root.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.selections/SimulationStatusQuerySelections///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.selections/-simulation-status-query-selections/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.selections/SimulationStatusQuerySelections/__root/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.selections/-simulation-status-query-selections/__root.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.selections/TerminateSimulationMutationSelections///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.selections/-terminate-simulation-mutation-selections/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.selections/TerminateSimulationMutationSelections/__root/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.selections/-terminate-simulation-mutation-selections/__root.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type////PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/EnvironmentSurrogate.Companion///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-environment-surrogate/-companion/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/EnvironmentSurrogate.Companion/type/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-environment-surrogate/-companion/type.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/EnvironmentSurrogate///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-environment-surrogate/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/EnvironmentSurrogate/EnvironmentSurrogate/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-environment-surrogate/-environment-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/GraphQLBoolean.Companion///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-graph-q-l-boolean/-companion/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/GraphQLBoolean.Companion/type/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-graph-q-l-boolean/-companion/type.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/GraphQLBoolean///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-graph-q-l-boolean/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/GraphQLBoolean/GraphQLBoolean/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-graph-q-l-boolean/-graph-q-l-boolean.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/GraphQLFloat.Companion///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-graph-q-l-float/-companion/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/GraphQLFloat.Companion/type/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-graph-q-l-float/-companion/type.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/GraphQLFloat///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-graph-q-l-float/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/GraphQLFloat/GraphQLFloat/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-graph-q-l-float/-graph-q-l-float.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/GraphQLID.Companion///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-graph-q-l-i-d/-companion/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/GraphQLID.Companion/type/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-graph-q-l-i-d/-companion/type.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/GraphQLID///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-graph-q-l-i-d/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/GraphQLID/GraphQLID/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-graph-q-l-i-d/-graph-q-l-i-d.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/GraphQLInt.Companion///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-graph-q-l-int/-companion/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/GraphQLInt.Companion/type/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-graph-q-l-int/-companion/type.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/GraphQLInt///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-graph-q-l-int/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/GraphQLInt/GraphQLInt/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-graph-q-l-int/-graph-q-l-int.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/GraphQLString.Companion///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-graph-q-l-string/-companion/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/GraphQLString.Companion/type/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-graph-q-l-string/-companion/type.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/GraphQLString///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-graph-q-l-string/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/GraphQLString/GraphQLString/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-graph-q-l-string/-graph-q-l-string.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/MoleculeSurrogate.Companion///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-molecule-surrogate/-companion/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/MoleculeSurrogate.Companion/type/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-molecule-surrogate/-companion/type.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/MoleculeSurrogate///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-molecule-surrogate/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/MoleculeSurrogate/MoleculeSurrogate/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-molecule-surrogate/-molecule-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/MoleculeToConcentrationEntry.Companion///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-molecule-to-concentration-entry/-companion/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/MoleculeToConcentrationEntry.Companion/type/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-molecule-to-concentration-entry/-companion/type.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/MoleculeToConcentrationEntry///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-molecule-to-concentration-entry/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/MoleculeToConcentrationEntry/MoleculeToConcentrationEntry/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-molecule-to-concentration-entry/-molecule-to-concentration-entry.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/MoleculeToConcentrationMap.Companion///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-molecule-to-concentration-map/-companion/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/MoleculeToConcentrationMap.Companion/type/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-molecule-to-concentration-map/-companion/type.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/MoleculeToConcentrationMap///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-molecule-to-concentration-map/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/MoleculeToConcentrationMap/MoleculeToConcentrationMap/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-molecule-to-concentration-map/-molecule-to-concentration-map.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/Mutation.Companion///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-mutation/-companion/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/Mutation.Companion/type/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-mutation/-companion/type.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/Mutation///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-mutation/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/Mutation/Mutation/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-mutation/-mutation.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/NodeSurrogate.Companion///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-node-surrogate/-companion/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/NodeSurrogate.Companion/__getConcentration_molecule/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-node-surrogate/-companion/__get-concentration_molecule.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/NodeSurrogate.Companion/type/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-node-surrogate/-companion/type.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/NodeSurrogate///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-node-surrogate/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/NodeSurrogate/NodeSurrogate/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-node-surrogate/-node-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/Query.Companion///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-query/-companion/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/Query.Companion/type/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-query/-companion/type.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/Query///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-query/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/Query/Query/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-query/-query.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/SimulationSurrogate.Companion///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-simulation-surrogate/-companion/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/SimulationSurrogate.Companion/type/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-simulation-surrogate/-companion/type.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/SimulationSurrogate///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-simulation-surrogate/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/SimulationSurrogate/SimulationSurrogate/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-simulation-surrogate/-simulation-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/Subscription.Companion///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-subscription/-companion/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/Subscription.Companion/type/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-subscription/-companion/type.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/Subscription///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-subscription/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client.type/Subscription/Subscription/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client.type/-subscription/-subscription.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client////PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/ConcentrationSubscription.Companion///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-concentration-subscription/-companion/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/ConcentrationSubscription.Companion/OPERATION_DOCUMENT/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-concentration-subscription/-companion/-o-p-e-r-a-t-i-o-n_-d-o-c-u-m-e-n-t.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/ConcentrationSubscription.Companion/OPERATION_ID/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-concentration-subscription/-companion/-o-p-e-r-a-t-i-o-n_-i-d.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/ConcentrationSubscription.Companion/OPERATION_NAME/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-concentration-subscription/-companion/-o-p-e-r-a-t-i-o-n_-n-a-m-e.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/ConcentrationSubscription.Data///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-concentration-subscription/-data/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/ConcentrationSubscription.Data/Data/#it.unibo.alchemist.boundary.graphql.client.ConcentrationSubscription.Simulation/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-concentration-subscription/-data/-data.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/ConcentrationSubscription.Data/simulation/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-concentration-subscription/-data/simulation.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/ConcentrationSubscription.Environment///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-concentration-subscription/-environment/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/ConcentrationSubscription.Environment/Environment/#kotlin.collections.List[it.unibo.alchemist.boundary.graphql.client.ConcentrationSubscription.Node]/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-concentration-subscription/-environment/-environment.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/ConcentrationSubscription.Environment/nodes/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-concentration-subscription/-environment/nodes.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/ConcentrationSubscription.Node///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-concentration-subscription/-node/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/ConcentrationSubscription.Node/Node/#kotlin.String?/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-concentration-subscription/-node/-node.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/ConcentrationSubscription.Node/getConcentration/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-concentration-subscription/-node/get-concentration.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/ConcentrationSubscription.Simulation///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-concentration-subscription/-simulation/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/ConcentrationSubscription.Simulation/Simulation/#kotlin.Double#it.unibo.alchemist.boundary.graphql.client.ConcentrationSubscription.Environment/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-concentration-subscription/-simulation/-simulation.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/ConcentrationSubscription.Simulation/environment/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-concentration-subscription/-simulation/environment.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/ConcentrationSubscription.Simulation/time/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-concentration-subscription/-simulation/time.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/ConcentrationSubscription///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-concentration-subscription/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/ConcentrationSubscription/ConcentrationSubscription/#kotlin.String/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-concentration-subscription/-concentration-subscription.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/ConcentrationSubscription/adapter/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-concentration-subscription/adapter.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/ConcentrationSubscription/document/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-concentration-subscription/document.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/ConcentrationSubscription/id/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-concentration-subscription/id.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/ConcentrationSubscription/ignoreErrors/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-concentration-subscription/ignore-errors.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/ConcentrationSubscription/moleculeName/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-concentration-subscription/molecule-name.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/ConcentrationSubscription/name/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-concentration-subscription/name.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/ConcentrationSubscription/rootField/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-concentration-subscription/root-field.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/ConcentrationSubscription/serializeVariables/#com.apollographql.apollo3.api.json.JsonWriter#com.apollographql.apollo3.api.CustomScalarAdapters#kotlin.Boolean/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-concentration-subscription/serialize-variables.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/DefaultGraphQLClient///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-default-graph-q-l-client/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/DefaultGraphQLClient/DefaultGraphQLClient/#kotlin.String#kotlin.Int#kotlin.Boolean/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-default-graph-q-l-client/-default-graph-q-l-client.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/DefaultGraphQLClient/close/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-default-graph-q-l-client/close.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/DefaultGraphQLClient/host/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-default-graph-q-l-client/host.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/DefaultGraphQLClient/mutation/#com.apollographql.apollo3.api.Mutation[TypeParam(bounds=[com.apollographql.apollo3.api.Mutation.Data])]/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-default-graph-q-l-client/mutation.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/DefaultGraphQLClient/port/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-default-graph-q-l-client/port.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/DefaultGraphQLClient/query/#com.apollographql.apollo3.api.Query[TypeParam(bounds=[com.apollographql.apollo3.api.Query.Data])]/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-default-graph-q-l-client/query.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/DefaultGraphQLClient/subscription/#com.apollographql.apollo3.api.Subscription[TypeParam(bounds=[com.apollographql.apollo3.api.Subscription.Data])]/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-default-graph-q-l-client/subscription.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/DefaultGraphQLClient/subscriptionUrl/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-default-graph-q-l-client/subscription-url.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/GraphQLClient///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-graph-q-l-client/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/GraphQLClient/close/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-graph-q-l-client/close.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/GraphQLClient/host/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-graph-q-l-client/host.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/GraphQLClient/mutation/#com.apollographql.apollo3.api.Mutation[TypeParam(bounds=[com.apollographql.apollo3.api.Mutation.Data])]/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-graph-q-l-client/mutation.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/GraphQLClient/port/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-graph-q-l-client/port.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/GraphQLClient/query/#com.apollographql.apollo3.api.Query[TypeParam(bounds=[com.apollographql.apollo3.api.Query.Data])]/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-graph-q-l-client/query.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/GraphQLClient/serverUrl/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-graph-q-l-client/server-url.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/GraphQLClient/subscription/#com.apollographql.apollo3.api.Subscription[TypeParam(bounds=[com.apollographql.apollo3.api.Subscription.Data])]/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-graph-q-l-client/subscription.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/GraphQLClient/subscriptionUrl/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-graph-q-l-client/subscription-url.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/GraphQLClientFactory///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-graph-q-l-client-factory/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/GraphQLClientFactory/basicClient/#kotlin.String#kotlin.Int/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-graph-q-l-client-factory/basic-client.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/GraphQLClientFactory/subscriptionClient/#kotlin.String#kotlin.Int/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-graph-q-l-client-factory/subscription-client.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/NodesSubscription.Companion///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-nodes-subscription/-companion/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/NodesSubscription.Companion/OPERATION_DOCUMENT/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-nodes-subscription/-companion/-o-p-e-r-a-t-i-o-n_-d-o-c-u-m-e-n-t.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/NodesSubscription.Companion/OPERATION_ID/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-nodes-subscription/-companion/-o-p-e-r-a-t-i-o-n_-i-d.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/NodesSubscription.Companion/OPERATION_NAME/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-nodes-subscription/-companion/-o-p-e-r-a-t-i-o-n_-n-a-m-e.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/NodesSubscription.Contents///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-nodes-subscription/-contents/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/NodesSubscription.Contents/Contents/#kotlin.collections.List[it.unibo.alchemist.boundary.graphql.client.NodesSubscription.Entry]/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-nodes-subscription/-contents/-contents.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/NodesSubscription.Contents/entries/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-nodes-subscription/-contents/entries.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/NodesSubscription.Data///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-nodes-subscription/-data/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/NodesSubscription.Data/Data/#it.unibo.alchemist.boundary.graphql.client.NodesSubscription.Simulation/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-nodes-subscription/-data/-data.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/NodesSubscription.Data/simulation/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-nodes-subscription/-data/simulation.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/NodesSubscription.Entry///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-nodes-subscription/-entry/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/NodesSubscription.Entry/Entry/#it.unibo.alchemist.boundary.graphql.client.NodesSubscription.Molecule#kotlin.String/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-nodes-subscription/-entry/-entry.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/NodesSubscription.Entry/concentration/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-nodes-subscription/-entry/concentration.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/NodesSubscription.Entry/molecule/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-nodes-subscription/-entry/molecule.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/NodesSubscription.Environment///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-nodes-subscription/-environment/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/NodesSubscription.Environment/Environment/#kotlin.collections.List[it.unibo.alchemist.boundary.graphql.client.NodesSubscription.Node]/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-nodes-subscription/-environment/-environment.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/NodesSubscription.Environment/nodes/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-nodes-subscription/-environment/nodes.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/NodesSubscription.Molecule///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-nodes-subscription/-molecule/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/NodesSubscription.Molecule/Molecule/#kotlin.String/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-nodes-subscription/-molecule/-molecule.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/NodesSubscription.Molecule/name/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-nodes-subscription/-molecule/name.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/NodesSubscription.Node///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-nodes-subscription/-node/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/NodesSubscription.Node/Node/#it.unibo.alchemist.boundary.graphql.client.NodesSubscription.Contents/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-nodes-subscription/-node/-node.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/NodesSubscription.Node/contents/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-nodes-subscription/-node/contents.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/NodesSubscription.Simulation///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-nodes-subscription/-simulation/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/NodesSubscription.Simulation/Simulation/#kotlin.String#kotlin.Double#it.unibo.alchemist.boundary.graphql.client.NodesSubscription.Environment/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-nodes-subscription/-simulation/-simulation.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/NodesSubscription.Simulation/environment/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-nodes-subscription/-simulation/environment.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/NodesSubscription.Simulation/status/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-nodes-subscription/-simulation/status.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/NodesSubscription.Simulation/time/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-nodes-subscription/-simulation/time.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/NodesSubscription///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-nodes-subscription/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/NodesSubscription/NodesSubscription/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-nodes-subscription/-nodes-subscription.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/NodesSubscription/adapter/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-nodes-subscription/adapter.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/NodesSubscription/document/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-nodes-subscription/document.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/NodesSubscription/equals/#kotlin.Any?/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-nodes-subscription/equals.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/NodesSubscription/hashCode/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-nodes-subscription/hash-code.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/NodesSubscription/id/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-nodes-subscription/id.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/NodesSubscription/ignoreErrors/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-nodes-subscription/ignore-errors.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/NodesSubscription/name/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-nodes-subscription/name.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/NodesSubscription/rootField/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-nodes-subscription/root-field.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/NodesSubscription/serializeVariables/#com.apollographql.apollo3.api.json.JsonWriter#com.apollographql.apollo3.api.CustomScalarAdapters#kotlin.Boolean/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-nodes-subscription/serialize-variables.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/PauseSimulationMutation.Companion///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-pause-simulation-mutation/-companion/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/PauseSimulationMutation.Companion/OPERATION_DOCUMENT/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-pause-simulation-mutation/-companion/-o-p-e-r-a-t-i-o-n_-d-o-c-u-m-e-n-t.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/PauseSimulationMutation.Companion/OPERATION_ID/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-pause-simulation-mutation/-companion/-o-p-e-r-a-t-i-o-n_-i-d.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/PauseSimulationMutation.Companion/OPERATION_NAME/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-pause-simulation-mutation/-companion/-o-p-e-r-a-t-i-o-n_-n-a-m-e.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/PauseSimulationMutation.Data///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-pause-simulation-mutation/-data/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/PauseSimulationMutation.Data/Data/#kotlin.String/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-pause-simulation-mutation/-data/-data.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/PauseSimulationMutation.Data/pause/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-pause-simulation-mutation/-data/pause.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/PauseSimulationMutation///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-pause-simulation-mutation/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/PauseSimulationMutation/PauseSimulationMutation/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-pause-simulation-mutation/-pause-simulation-mutation.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/PauseSimulationMutation/adapter/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-pause-simulation-mutation/adapter.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/PauseSimulationMutation/document/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-pause-simulation-mutation/document.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/PauseSimulationMutation/equals/#kotlin.Any?/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-pause-simulation-mutation/equals.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/PauseSimulationMutation/hashCode/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-pause-simulation-mutation/hash-code.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/PauseSimulationMutation/id/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-pause-simulation-mutation/id.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/PauseSimulationMutation/ignoreErrors/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-pause-simulation-mutation/ignore-errors.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/PauseSimulationMutation/name/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-pause-simulation-mutation/name.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/PauseSimulationMutation/rootField/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-pause-simulation-mutation/root-field.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/PauseSimulationMutation/serializeVariables/#com.apollographql.apollo3.api.json.JsonWriter#com.apollographql.apollo3.api.CustomScalarAdapters#kotlin.Boolean/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-pause-simulation-mutation/serialize-variables.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/PlaySimulationMutation.Companion///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-play-simulation-mutation/-companion/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/PlaySimulationMutation.Companion/OPERATION_DOCUMENT/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-play-simulation-mutation/-companion/-o-p-e-r-a-t-i-o-n_-d-o-c-u-m-e-n-t.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/PlaySimulationMutation.Companion/OPERATION_ID/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-play-simulation-mutation/-companion/-o-p-e-r-a-t-i-o-n_-i-d.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/PlaySimulationMutation.Companion/OPERATION_NAME/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-play-simulation-mutation/-companion/-o-p-e-r-a-t-i-o-n_-n-a-m-e.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/PlaySimulationMutation.Data///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-play-simulation-mutation/-data/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/PlaySimulationMutation.Data/Data/#kotlin.String/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-play-simulation-mutation/-data/-data.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/PlaySimulationMutation.Data/play/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-play-simulation-mutation/-data/play.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/PlaySimulationMutation///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-play-simulation-mutation/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/PlaySimulationMutation/PlaySimulationMutation/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-play-simulation-mutation/-play-simulation-mutation.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/PlaySimulationMutation/adapter/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-play-simulation-mutation/adapter.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/PlaySimulationMutation/document/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-play-simulation-mutation/document.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/PlaySimulationMutation/equals/#kotlin.Any?/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-play-simulation-mutation/equals.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/PlaySimulationMutation/hashCode/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-play-simulation-mutation/hash-code.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/PlaySimulationMutation/id/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-play-simulation-mutation/id.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/PlaySimulationMutation/ignoreErrors/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-play-simulation-mutation/ignore-errors.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/PlaySimulationMutation/name/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-play-simulation-mutation/name.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/PlaySimulationMutation/rootField/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-play-simulation-mutation/root-field.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/PlaySimulationMutation/serializeVariables/#com.apollographql.apollo3.api.json.JsonWriter#com.apollographql.apollo3.api.CustomScalarAdapters#kotlin.Boolean/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-play-simulation-mutation/serialize-variables.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/SimulationHandler///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-simulation-handler/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/SimulationHandler/SimulationHandler/#it.unibo.alchemist.boundary.graphql.client.GraphQLClient/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-simulation-handler/-simulation-handler.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/SimulationHandler/pause/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-simulation-handler/pause.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/SimulationHandler/play/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-simulation-handler/play.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/SimulationHandler/status/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-simulation-handler/status.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/SimulationHandler/terminate/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-simulation-handler/terminate.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/SimulationStatusQuery.Companion///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-simulation-status-query/-companion/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/SimulationStatusQuery.Companion/OPERATION_DOCUMENT/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-simulation-status-query/-companion/-o-p-e-r-a-t-i-o-n_-d-o-c-u-m-e-n-t.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/SimulationStatusQuery.Companion/OPERATION_ID/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-simulation-status-query/-companion/-o-p-e-r-a-t-i-o-n_-i-d.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/SimulationStatusQuery.Companion/OPERATION_NAME/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-simulation-status-query/-companion/-o-p-e-r-a-t-i-o-n_-n-a-m-e.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/SimulationStatusQuery.Data///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-simulation-status-query/-data/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/SimulationStatusQuery.Data/Data/#it.unibo.alchemist.boundary.graphql.client.SimulationStatusQuery.Simulation/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-simulation-status-query/-data/-data.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/SimulationStatusQuery.Data/simulation/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-simulation-status-query/-data/simulation.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/SimulationStatusQuery.Simulation///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-simulation-status-query/-simulation/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/SimulationStatusQuery.Simulation/Simulation/#kotlin.String/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-simulation-status-query/-simulation/-simulation.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/SimulationStatusQuery.Simulation/status/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-simulation-status-query/-simulation/status.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/SimulationStatusQuery///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-simulation-status-query/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/SimulationStatusQuery/SimulationStatusQuery/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-simulation-status-query/-simulation-status-query.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/SimulationStatusQuery/adapter/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-simulation-status-query/adapter.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/SimulationStatusQuery/document/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-simulation-status-query/document.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/SimulationStatusQuery/equals/#kotlin.Any?/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-simulation-status-query/equals.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/SimulationStatusQuery/hashCode/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-simulation-status-query/hash-code.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/SimulationStatusQuery/id/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-simulation-status-query/id.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/SimulationStatusQuery/ignoreErrors/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-simulation-status-query/ignore-errors.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/SimulationStatusQuery/name/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-simulation-status-query/name.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/SimulationStatusQuery/rootField/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-simulation-status-query/root-field.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/SimulationStatusQuery/serializeVariables/#com.apollographql.apollo3.api.json.JsonWriter#com.apollographql.apollo3.api.CustomScalarAdapters#kotlin.Boolean/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-simulation-status-query/serialize-variables.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/TerminateSimulationMutation.Companion///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-terminate-simulation-mutation/-companion/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/TerminateSimulationMutation.Companion/OPERATION_DOCUMENT/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-terminate-simulation-mutation/-companion/-o-p-e-r-a-t-i-o-n_-d-o-c-u-m-e-n-t.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/TerminateSimulationMutation.Companion/OPERATION_ID/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-terminate-simulation-mutation/-companion/-o-p-e-r-a-t-i-o-n_-i-d.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/TerminateSimulationMutation.Companion/OPERATION_NAME/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-terminate-simulation-mutation/-companion/-o-p-e-r-a-t-i-o-n_-n-a-m-e.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/TerminateSimulationMutation.Data///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-terminate-simulation-mutation/-data/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/TerminateSimulationMutation.Data/Data/#kotlin.String/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-terminate-simulation-mutation/-data/-data.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/TerminateSimulationMutation.Data/terminate/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-terminate-simulation-mutation/-data/terminate.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/TerminateSimulationMutation///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-terminate-simulation-mutation/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/TerminateSimulationMutation/TerminateSimulationMutation/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-terminate-simulation-mutation/-terminate-simulation-mutation.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/TerminateSimulationMutation/adapter/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-terminate-simulation-mutation/adapter.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/TerminateSimulationMutation/document/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-terminate-simulation-mutation/document.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/TerminateSimulationMutation/equals/#kotlin.Any?/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-terminate-simulation-mutation/equals.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/TerminateSimulationMutation/hashCode/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-terminate-simulation-mutation/hash-code.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/TerminateSimulationMutation/id/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-terminate-simulation-mutation/id.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/TerminateSimulationMutation/ignoreErrors/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-terminate-simulation-mutation/ignore-errors.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/TerminateSimulationMutation/name/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-terminate-simulation-mutation/name.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/TerminateSimulationMutation/rootField/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-terminate-simulation-mutation/root-field.html +$dokka.location:it.unibo.alchemist.boundary.graphql.client/TerminateSimulationMutation/serializeVariables/#com.apollographql.apollo3.api.json.JsonWriter#com.apollographql.apollo3.api.CustomScalarAdapters#kotlin.Boolean/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.client/-terminate-simulation-mutation/serialize-variables.html +$dokka.location:it.unibo.alchemist.boundary.graphql.server.modules////PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.server.modules/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.server.modules//graphQLModule/io.ktor.server.application.Application#it.unibo.alchemist.model.Environment[*,*]/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.server.modules/graph-q-l-module.html +$dokka.location:it.unibo.alchemist.boundary.graphql.server.modules//graphQLRoutingModule/io.ktor.server.application.Application#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.server.modules/graph-q-l-routing-module.html +$dokka.location:it.unibo.alchemist.boundary.graphql.utils////PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.utils/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.utils/DefaultGraphQLSettings///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.utils/-default-graph-q-l-settings/index.html +$dokka.location:it.unibo.alchemist.boundary.graphql.utils/DefaultGraphQLSettings/DEFAULT_HOST/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.utils/-default-graph-q-l-settings/-d-e-f-a-u-l-t_-h-o-s-t.html +$dokka.location:it.unibo.alchemist.boundary.graphql.utils/DefaultGraphQLSettings/DEFAULT_PORT/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.graphql.utils/-default-graph-q-l-settings/-d-e-f-a-u-l-t_-p-o-r-t.html +$dokka.location:it.unibo.alchemist.boundary.monitors////PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.monitors/index.html +$dokka.location:it.unibo.alchemist.boundary.monitors/GraphQLMonitor///PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.monitors/-graph-q-l-monitor/index.html +$dokka.location:it.unibo.alchemist.boundary.monitors/GraphQLMonitor/GraphQLMonitor/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])]#kotlin.String#kotlin.Int#kotlin.Boolean#kotlinx.coroutines.CoroutineDispatcher/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.monitors/-graph-q-l-monitor/-graph-q-l-monitor.html +$dokka.location:it.unibo.alchemist.boundary.monitors/GraphQLMonitor/environment/#/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.monitors/-graph-q-l-monitor/environment.html +$dokka.location:it.unibo.alchemist.boundary.monitors/GraphQLMonitor/finished/#it.unibo.alchemist.model.Environment[kotlin.Any,kotlin.Nothing]#it.unibo.alchemist.model.Time#kotlin.Long/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.monitors/-graph-q-l-monitor/finished.html +$dokka.location:it.unibo.alchemist.boundary.monitors/GraphQLMonitor/initialized/#it.unibo.alchemist.model.Environment[kotlin.Any,kotlin.Nothing]/PointingToDeclaration/alchemist-graphql/it.unibo.alchemist.boundary.monitors/-graph-q-l-monitor/initialized.html +it.unibo.alchemist.boundary.graphql.client +it.unibo.alchemist.boundary.graphql.client.adapter +it.unibo.alchemist.boundary.graphql.client.selections +it.unibo.alchemist.boundary.graphql.client.type +it.unibo.alchemist.boundary.graphql.server.modules +it.unibo.alchemist.boundary.graphql.utils +it.unibo.alchemist.boundary.monitors diff --git a/dokka-cache/it.unibo.alchemist/alchemist-swingui/42.3.18.list b/dokka-cache/it.unibo.alchemist/alchemist-swingui/42.3.18.list new file mode 100644 index 0000000000..9e53e1a1f1 --- /dev/null +++ b/dokka-cache/it.unibo.alchemist/alchemist-swingui/42.3.18.list @@ -0,0 +1,430 @@ +$dokka.format:html-v1 +$dokka.linkExtension:html +$dokka.location:it.unibo.alchemist.boundary.swingui.api////PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.api/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.api/Graphical2DOutputMonitor///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.api/-graphical2-d-output-monitor/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.api/Graphical2DOutputMonitor/zoomTo/#P#double/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.api/-graphical2-d-output-monitor/zoom-to.html +$dokka.location:it.unibo.alchemist.boundary.swingui.api/GraphicalOutputMonitor///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.api/-graphical-output-monitor/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.api/GraphicalOutputMonitor/getStep/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.api/-graphical-output-monitor/get-step.html +$dokka.location:it.unibo.alchemist.boundary.swingui.api/GraphicalOutputMonitor/isRealTime/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.api/-graphical-output-monitor/is-real-time.html +$dokka.location:it.unibo.alchemist.boundary.swingui.api/GraphicalOutputMonitor/repaint/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.api/-graphical-output-monitor/repaint.html +$dokka.location:it.unibo.alchemist.boundary.swingui.api/GraphicalOutputMonitor/setDrawLinks/#boolean/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.api/-graphical-output-monitor/set-draw-links.html +$dokka.location:it.unibo.alchemist.boundary.swingui.api/GraphicalOutputMonitor/setEffectStack/#java.util.List/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.api/-graphical-output-monitor/set-effect-stack.html +$dokka.location:it.unibo.alchemist.boundary.swingui.api/GraphicalOutputMonitor/setMarkCloserNode/#boolean/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.api/-graphical-output-monitor/set-mark-closer-node.html +$dokka.location:it.unibo.alchemist.boundary.swingui.api/GraphicalOutputMonitor/setRealTime/#boolean/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.api/-graphical-output-monitor/set-real-time.html +$dokka.location:it.unibo.alchemist.boundary.swingui.api/GraphicalOutputMonitor/setStep/#int/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.api/-graphical-output-monitor/set-step.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.api////PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.api/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.api/DrawLayers///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.api/-draw-layers/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.api/DrawLayers/drawLayers/#java.util.Collection>#it.unibo.alchemist.model.Environment#java.awt.Graphics2D#it.unibo.alchemist.boundary.ui.api.Wormhole2D

/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.api/-draw-layers/draw-layers.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.api/Effect///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.api/-effect/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.api/Effect/apply/#java.awt.Graphics2D#it.unibo.alchemist.model.Node#int#int/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.api/-effect/apply.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.api/Effect/apply/#java.awt.Graphics2D#it.unibo.alchemist.model.Node#it.unibo.alchemist.model.Environment#it.unibo.alchemist.boundary.ui.api.Wormhole2D

/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.api/-effect/apply.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.api/Effect/equals/#java.lang.Object/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.api/-effect/equals.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.api/Effect/getColorSummary/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.api/-effect/get-color-summary.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.api/Effect/hashCode/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.api/-effect/hash-code.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.api/FunctionDrawer///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.api/-function-drawer/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.api/FunctionDrawer/drawFunction/#java.util.function.Function#it.unibo.alchemist.model.Environment#java.awt.Graphics2D#it.unibo.alchemist.boundary.ui.api.Wormhole2D

/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.api/-function-drawer/draw-function.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.api/LayerToFunctionMapper///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.api/-layer-to-function-mapper/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.api/LayerToFunctionMapper/map/#java.util.stream.Stream[it.unibo.alchemist.model.Layer[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position2D[^]])]]/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.api/-layer-to-function-mapper/map.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.api/LayerToFunctionMapper/map/#kotlin.collections.Collection[it.unibo.alchemist.model.Layer[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position2D[^]])]]/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.api/-layer-to-function-mapper/map.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.api/LayerToFunctionMapper/prepare/#it.unibo.alchemist.boundary.swingui.effect.impl.AbstractDrawLayersValues#kotlin.collections.Collection[it.unibo.alchemist.model.Layer[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position2D[^]])]]#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position2D[^]])]#java.awt.Graphics2D#it.unibo.alchemist.boundary.ui.api.Wormhole2D[TypeParam(bounds=[it.unibo.alchemist.model.Position2D[^]])]/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.api/-layer-to-function-mapper/prepare.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl////PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractDrawLayers///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstract-draw-layers/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractDrawLayers/AbstractDrawLayers/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstract-draw-layers/-abstract-draw-layers.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractDrawLayers/alpha/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstract-draw-layers/alpha.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractDrawLayers/blue/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstract-draw-layers/blue.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractDrawLayers/drawLayers/#java.util.Collection>#it.unibo.alchemist.model.Environment#java.awt.Graphics2D#it.unibo.alchemist.boundary.ui.api.Wormhole2D

/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstract-draw-layers/draw-layers.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractDrawLayers/getColorSummary/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstract-draw-layers/get-color-summary.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractDrawLayers/green/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstract-draw-layers/green.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractDrawLayers/isLayerFilter/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstract-draw-layers/is-layer-filter.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractDrawLayers/molString/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstract-draw-layers/mol-string.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractDrawLayers/red/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstract-draw-layers/red.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractDrawLayers/setLayerFilter/#boolean/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstract-draw-layers/set-layer-filter.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractDrawLayersGradient///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstract-draw-layers-gradient/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractDrawLayersGradient/drawFunction/#java.util.function.Function#it.unibo.alchemist.model.Environment#java.awt.Graphics2D#it.unibo.alchemist.boundary.ui.api.Wormhole2D

/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstract-draw-layers-gradient/draw-function.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractDrawLayersGradient/map/#double#double#double#double#double/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstract-draw-layers-gradient/map.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractDrawLayersGradient/samples/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstract-draw-layers-gradient/samples.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractDrawLayersValues///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstract-draw-layers-values/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractDrawLayersValues/drawFunction/#java.util.function.Function#it.unibo.alchemist.model.Environment#java.awt.Graphics2D#it.unibo.alchemist.boundary.ui.api.Wormhole2D

/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstract-draw-layers-values/draw-function.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractDrawLayersValues/drawLayers/#java.util.Collection>#it.unibo.alchemist.model.Environment#java.awt.Graphics2D#it.unibo.alchemist.boundary.ui.api.Wormhole2D

/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstract-draw-layers-values/draw-layers.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractDrawLayersValues/maxLayerValue/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstract-draw-layers-values/max-layer-value.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractDrawLayersValues/minLayerValue/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstract-draw-layers-values/min-layer-value.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractDrawOnce///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstract-draw-once/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractDrawOnce/AbstractDrawOnce/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstract-draw-once/-abstract-draw-once.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractDrawOnce/apply/#java.awt.Graphics2D#it.unibo.alchemist.model.Node#it.unibo.alchemist.model.Environment#it.unibo.alchemist.boundary.ui.api.Wormhole2D

/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstract-draw-once/apply.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractDrawOnce/markerNodeID/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstract-draw-once/marker-node-i-d.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractrDrawLayersIsolines.Distribution.LINEAR///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstractr-draw-layers-isolines/-distribution/-l-i-n-e-a-r/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractrDrawLayersIsolines.Distribution.LOGARITHMIC///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstractr-draw-layers-isolines/-distribution/-l-o-g-a-r-i-t-h-m-i-c/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractrDrawLayersIsolines.Distribution///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstractr-draw-layers-isolines/-distribution/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractrDrawLayersIsolines.Distribution/toString/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstractr-draw-layers-isolines/-distribution/to-string.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractrDrawLayersIsolines.Distribution/valueOf/#java.lang.String/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstractr-draw-layers-isolines/-distribution/value-of.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractrDrawLayersIsolines.Distribution/values/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstractr-draw-layers-isolines/-distribution/values.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractrDrawLayersIsolines///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstractr-draw-layers-isolines/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractrDrawLayersIsolines/AbstractrDrawLayersIsolines/#it.unibo.alchemist.boundary.swingui.effect.isolines.api.IsolinesFinder#it.unibo.alchemist.boundary.swingui.effect.api.LayerToFunctionMapper/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstractr-draw-layers-isolines/-abstractr-draw-layers-isolines.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractrDrawLayersIsolines/distribution/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstractr-draw-layers-isolines/distribution.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractrDrawLayersIsolines/drawFunction/#java.util.function.Function#it.unibo.alchemist.model.Environment#java.awt.Graphics2D#it.unibo.alchemist.boundary.ui.api.Wormhole2D

/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstractr-draw-layers-isolines/draw-function.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractrDrawLayersIsolines/getDrawValues/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstractr-draw-layers-isolines/get-draw-values.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractrDrawLayersIsolines/getNumberOfIsolines/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstractr-draw-layers-isolines/get-number-of-isolines.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractrDrawLayersIsolines/linspace/#double#double#int/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstractr-draw-layers-isolines/linspace.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractrDrawLayersIsolines/logspace/#double#double#int#double/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstractr-draw-layers-isolines/logspace.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractrDrawLayersIsolines/setDrawValues/#java.lang.Boolean/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstractr-draw-layers-isolines/set-draw-values.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/AbstractrDrawLayersIsolines/setNumberOfIsolines/#org.danilopianini.lang.RangedInteger/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-abstractr-draw-layers-isolines/set-number-of-isolines.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/BidimensionalGaussianLayersMapper.Companion///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-bidimensional-gaussian-layers-mapper/-companion/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/BidimensionalGaussianLayersMapper.Companion/MINIMUM_LAYER_VALUE/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-bidimensional-gaussian-layers-mapper/-companion/-m-i-n-i-m-u-m_-l-a-y-e-r_-v-a-l-u-e.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/BidimensionalGaussianLayersMapper///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-bidimensional-gaussian-layers-mapper/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/BidimensionalGaussianLayersMapper/BidimensionalGaussianLayersMapper/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-bidimensional-gaussian-layers-mapper/-bidimensional-gaussian-layers-mapper.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/BidimensionalGaussianLayersMapper/map/#java.util.stream.Stream[it.unibo.alchemist.model.Layer[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position2D[^]])]]/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-bidimensional-gaussian-layers-mapper/map.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/BidimensionalGaussianLayersMapper/map/#kotlin.collections.Collection[it.unibo.alchemist.model.Layer[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position2D[^]])]]/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-bidimensional-gaussian-layers-mapper/map.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/BidimensionalGaussianLayersMapper/prepare/#it.unibo.alchemist.boundary.swingui.effect.impl.AbstractDrawLayersValues#kotlin.collections.Collection[it.unibo.alchemist.model.Layer[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position2D[^]])]]#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position2D[^]])]#java.awt.Graphics2D#it.unibo.alchemist.boundary.ui.api.Wormhole2D[TypeParam(bounds=[it.unibo.alchemist.model.Position2D[^]])]/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-bidimensional-gaussian-layers-mapper/prepare.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawBidimensionalGaussianLayersGradient///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-bidimensional-gaussian-layers-gradient/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawBidimensionalGaussianLayersGradient/DrawBidimensionalGaussianLayersGradient/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-bidimensional-gaussian-layers-gradient/-draw-bidimensional-gaussian-layers-gradient.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawBidimensionalGaussianLayersIsolines///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-bidimensional-gaussian-layers-isolines/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawBidimensionalGaussianLayersIsolines/DrawBidimensionalGaussianLayersIsolines/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-bidimensional-gaussian-layers-isolines/-draw-bidimensional-gaussian-layers-isolines.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawCognitiveMap///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-cognitive-map/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawCognitiveMap/DrawCognitiveMap/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-cognitive-map/-draw-cognitive-map.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawCognitiveMap/alpha/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-cognitive-map/alpha.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawCognitiveMap/apply/#java.awt.Graphics2D#it.unibo.alchemist.model.Node#it.unibo.alchemist.model.Environment#it.unibo.alchemist.boundary.ui.api.Wormhole2D

/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-cognitive-map/apply.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawCognitiveMap/blue/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-cognitive-map/blue.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawCognitiveMap/getColorSummary/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-cognitive-map/get-color-summary.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawCognitiveMap/green/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-cognitive-map/green.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawCognitiveMap/red/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-cognitive-map/red.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawDirectedNode///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-directed-node/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawDirectedNode/DrawDirectedNode/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-directed-node/-draw-directed-node.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawDirectedNode/apply/#java.awt.Graphics2D#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any])]#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any]),TypeParam(bounds=[it.unibo.alchemist.model.Position2D[^]])]#it.unibo.alchemist.boundary.ui.api.Wormhole2D[TypeParam(bounds=[it.unibo.alchemist.model.Position2D[^]])]/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-directed-node/apply.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawDirectedNode/colorSummary/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-directed-node/color-summary.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawDirectedNode/getColorSummary/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-directed-node/get-color-summary.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawNavigationGraph///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-navigation-graph/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawNavigationGraph/DrawNavigationGraph/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-navigation-graph/-draw-navigation-graph.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawNavigationGraph/alpha/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-navigation-graph/alpha.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawNavigationGraph/blue/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-navigation-graph/blue.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawNavigationGraph/getColorSummary/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-navigation-graph/get-color-summary.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawNavigationGraph/green/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-navigation-graph/green.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawNavigationGraph/red/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-navigation-graph/red.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawPedestrianPath///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-pedestrian-path/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawPedestrianPath/DrawPedestrianPath/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-pedestrian-path/-draw-pedestrian-path.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawPedestrianPath/alpha/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-pedestrian-path/alpha.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawPedestrianPath/blue/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-pedestrian-path/blue.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawPedestrianPath/getColorSummary/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-pedestrian-path/get-color-summary.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawPedestrianPath/green/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-pedestrian-path/green.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawPedestrianPath/isToBeDrawn/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-pedestrian-path/is-to-be-drawn.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawPedestrianPath/red/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-pedestrian-path/red.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawPedestrianPath/setToBeDrawn/#boolean/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-pedestrian-path/set-to-be-drawn.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawShape.Mode.DRAW_ELLIPSE///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-shape/-mode/-d-r-a-w_-e-l-l-i-p-s-e/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawShape.Mode.DRAW_RECTANGLE///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-shape/-mode/-d-r-a-w_-r-e-c-t-a-n-g-l-e/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawShape.Mode.FILL_ELLIPSE///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-shape/-mode/-f-i-l-l_-e-l-l-i-p-s-e/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawShape.Mode.FILL_RECTANGLE///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-shape/-mode/-f-i-l-l_-r-e-c-t-a-n-g-l-e/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawShape.Mode///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-shape/-mode/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawShape.Mode/toString/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-shape/-mode/to-string.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawShape.Mode/valueOf/#java.lang.String/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-shape/-mode/value-of.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawShape.Mode/values/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-shape/-mode/values.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawShape///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-shape/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawShape/DrawShape/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-shape/-draw-shape.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawShape/alpha/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-shape/alpha.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawShape/apply/#java.awt.Graphics2D#it.unibo.alchemist.model.Node#int#int/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-shape/apply.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawShape/blue/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-shape/blue.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawShape/getColorChannel/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-shape/get-color-channel.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawShape/getColorSummary/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-shape/get-color-summary.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawShape/getIncarnation/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-shape/get-incarnation.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawShape/green/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-shape/green.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawShape/isMolFilter/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-shape/is-mol-filter.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawShape/isMolPropertyFilter/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-shape/is-mol-property-filter.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawShape/isReverse/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-shape/is-reverse.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawShape/isWritingPropertyValue/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-shape/is-writing-property-value.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawShape/maxprop/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-shape/maxprop.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawShape/minprop/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-shape/minprop.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawShape/mode/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-shape/mode.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawShape/molString/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-shape/mol-string.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawShape/molecule/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-shape/molecule.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawShape/property/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-shape/property.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawShape/propoom/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-shape/propoom.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawShape/red/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-shape/red.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawShape/scaleFactor/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-shape/scale-factor.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawShape/setC/#it.unibo.alchemist.boundary.swingui.impl.ColorChannel/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-shape/set-c.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawShape/setIncarnation/#org.danilopianini.lang.CollectionWithCurrentElement/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-shape/set-incarnation.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawShape/setMolFilter/#boolean/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-shape/set-mol-filter.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawShape/setMolPropertyFilter/#boolean/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-shape/set-mol-property-filter.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawShape/setReverse/#boolean/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-shape/set-reverse.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawShape/setWritingPropertyValue/#boolean/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-shape/set-writing-property-value.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawShape/size/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-shape/size.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawSmartcam///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-smartcam/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawSmartcam/DrawSmartcam/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-smartcam/-draw-smartcam.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawSmartcam/apply/#java.awt.Graphics2D#it.unibo.alchemist.model.Node#it.unibo.alchemist.model.Environment#it.unibo.alchemist.boundary.ui.api.Wormhole2D

/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-smartcam/apply.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/DrawSmartcam/getColorSummary/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-draw-smartcam/get-color-summary.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/EffectBuilder///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-effect-builder/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/EffectBuilder/EffectBuilder/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-effect-builder/-effect-builder.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/EffectBuilder/actionPerformed/#java.awt.event.ActionEvent/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-effect-builder/action-performed.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/EffectBuilder/getResult/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-effect-builder/get-result.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/EffectFactory///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-effect-factory/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/EffectFactory/buildDefaultEffect/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-effect-factory/build-default-effect.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/EffectFactory/buildEffect/#java.lang.Class/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-effect-factory/build-effect.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/EffectSerializationFactory///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-effect-serialization-factory/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/EffectSerializationFactory/effectToFile/#java.io.File#it.unibo.alchemist.boundary.swingui.effect.api.Effect/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-effect-serialization-factory/effect-to-file.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/EffectSerializationFactory/effectsFromFile/#java.io.File/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-effect-serialization-factory/effects-from-file.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.impl/EffectSerializationFactory/effectsToFile/#java.io.File#java.util.List/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.impl/-effect-serialization-factory/effects-to-file.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.isolines.api////PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.isolines.api/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.isolines.api/Isoline///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.isolines.api/-isoline/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.isolines.api/Isoline/getSegments/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.isolines.api/-isoline/get-segments.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.isolines.api/Isoline/getValue/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.isolines.api/-isoline/get-value.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.isolines.api/IsolinesFactory.IsolineFinders.CONREC///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.isolines.api/-isolines-factory/-isoline-finders/-c-o-n-r-e-c/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.isolines.api/IsolinesFactory.IsolineFinders///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.isolines.api/-isolines-factory/-isoline-finders/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.isolines.api/IsolinesFactory.IsolineFinders/valueOf/#java.lang.String/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.isolines.api/-isolines-factory/-isoline-finders/value-of.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.isolines.api/IsolinesFactory.IsolineFinders/values/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.isolines.api/-isolines-factory/-isoline-finders/values.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.isolines.api/IsolinesFactory///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.isolines.api/-isolines-factory/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.isolines.api/IsolinesFactory/makeIsoline/#java.lang.Number#java.util.Collection/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.isolines.api/-isolines-factory/make-isoline.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.isolines.api/IsolinesFactory/makeIsolinesFinder/#it.unibo.alchemist.boundary.swingui.effect.isolines.api.IsolinesFactory.IsolineFinders/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.isolines.api/-isolines-factory/make-isolines-finder.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.isolines.api/IsolinesFactory/makeSegment/#java.lang.Number#java.lang.Number#java.lang.Number#java.lang.Number/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.isolines.api/-isolines-factory/make-segment.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.isolines.api/IsolinesFinder///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.isolines.api/-isolines-finder/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.isolines.api/IsolinesFinder/findIsolines/#java.util.function.BinaryOperator#it.unibo.alchemist.boundary.swingui.effect.isolines.api.Segment2D#java.util.Collection/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.isolines.api/-isolines-finder/find-isolines.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.isolines.api/IsolinesFinder/findIsolines/#java.util.function.BinaryOperator#java.lang.Number#java.lang.Number#java.lang.Number#java.lang.Number#java.util.Collection/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.isolines.api/-isolines-finder/find-isolines.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.isolines.api/Segment2D///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.isolines.api/-segment2-d/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.isolines.api/Segment2D/getX1/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.isolines.api/-segment2-d/get-x1.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.isolines.api/Segment2D/getX2/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.isolines.api/-segment2-d/get-x2.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.isolines.api/Segment2D/getY1/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.isolines.api/-segment2-d/get-y1.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.isolines.api/Segment2D/getY2/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.isolines.api/-segment2-d/get-y2.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.isolines.impl////PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.isolines.impl/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.isolines.impl/ConcreteIsolinesFactory///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.isolines.impl/-concrete-isolines-factory/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.isolines.impl/ConcreteIsolinesFactory/ConcreteIsolinesFactory/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.isolines.impl/-concrete-isolines-factory/-concrete-isolines-factory.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.isolines.impl/ConcreteIsolinesFactory/makeIsoline/#java.lang.Number#java.util.Collection/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.isolines.impl/-concrete-isolines-factory/make-isoline.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.isolines.impl/ConcreteIsolinesFactory/makeIsolinesFinder/#it.unibo.alchemist.boundary.swingui.effect.isolines.api.IsolinesFactory.IsolineFinders/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.isolines.impl/-concrete-isolines-factory/make-isolines-finder.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.isolines.impl/ConcreteIsolinesFactory/makeSegment/#java.lang.Number#java.lang.Number#java.lang.Number#java.lang.Number/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.isolines.impl/-concrete-isolines-factory/make-segment.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.isolines.impl/ConrecIsolinesFinder///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.isolines.impl/-conrec-isolines-finder/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.isolines.impl/ConrecIsolinesFinder/ConrecIsolinesFinder/#it.unibo.alchemist.boundary.swingui.effect.isolines.api.IsolinesFactory/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.isolines.impl/-conrec-isolines-finder/-conrec-isolines-finder.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.isolines.impl/ConrecIsolinesFinder/findIsolines/#java.util.function.BinaryOperator#it.unibo.alchemist.boundary.swingui.effect.isolines.api.Segment2D#java.util.Collection/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.isolines.impl/-conrec-isolines-finder/find-isolines.html +$dokka.location:it.unibo.alchemist.boundary.swingui.effect.isolines.impl/ConrecIsolinesFinder/findIsolines/#java.util.function.BinaryOperator#java.lang.Number#java.lang.Number#java.lang.Number#java.lang.Number#java.util.Collection/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.effect.isolines.impl/-conrec-isolines-finder/find-isolines.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl////PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/AbstractMenu///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-abstract-menu/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/AbstractMenu/AbstractMenu/#java.lang.String#javax.swing.JMenuItem[]/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-abstract-menu/-abstract-menu.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/AbstractMenu/addActionListener/#java.awt.event.ActionListener/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-abstract-menu/add-action-listener.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/AlchemistSwingUI///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-alchemist-swing-u-i/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/AlchemistSwingUI/AlchemistSwingUI/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-alchemist-swing-u-i/-alchemist-swing-u-i.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/AlchemistSwingUI/DEFAULT_ICON_SIZE/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-alchemist-swing-u-i/-d-e-f-a-u-l-t_-i-c-o-n_-s-i-z-e.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/AlchemistSwingUI/loadScaledImage/#java.lang.String#int/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-alchemist-swing-u-i/load-scaled-image.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/AlchemistSwingUI/loadScaledImage/#java.lang.String/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-alchemist-swing-u-i/load-scaled-image.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/ColorChannel.ALPHA///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-color-channel/-a-l-p-h-a/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/ColorChannel.BLUE///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-color-channel/-b-l-u-e/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/ColorChannel.BRIGHTNESS///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-color-channel/-b-r-i-g-h-t-n-e-s-s/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/ColorChannel.GREEN///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-color-channel/-g-r-e-e-n/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/ColorChannel.HUE///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-color-channel/-h-u-e/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/ColorChannel.RED///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-color-channel/-r-e-d/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/ColorChannel.SATURATION///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-color-channel/-s-a-t-u-r-a-t-i-o-n/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/ColorChannel///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-color-channel/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/ColorChannel/alter/#java.awt.Color#float/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-color-channel/alter.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/ColorChannel/valueOf/#java.lang.String/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-color-channel/value-of.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/ColorChannel/values/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-color-channel/values.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/FileMenu///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-file-menu/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/FileMenu/FileMenu/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-file-menu/-file-menu.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/FileMenu/actionPerformed/#java.awt.event.ActionEvent/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-file-menu/action-performed.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/LocalizedResourceBundle///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-localized-resource-bundle/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/LocalizedResourceBundle/get/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-localized-resource-bundle/get.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/LocalizedResourceBundle/get/#java.lang.String/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-localized-resource-bundle/get.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/LocalizedResourceBundle/getString/#java.lang.String/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-localized-resource-bundle/get-string.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/NumericTextField///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-numeric-text-field/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/NumericTextField/NumericTextField/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-numeric-text-field/-numeric-text-field.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/ReactivityPanel.Status.MAX_REACTIVITY///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-reactivity-panel/-status/-m-a-x_-r-e-a-c-t-i-v-i-t-y/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/ReactivityPanel.Status.REAL_TIME///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-reactivity-panel/-status/-r-e-a-l_-t-i-m-e/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/ReactivityPanel.Status.USER_SELECTED///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-reactivity-panel/-status/-u-s-e-r_-s-e-l-e-c-t-e-d/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/ReactivityPanel.Status///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-reactivity-panel/-status/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/ReactivityPanel.Status/valueOf/#java.lang.String/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-reactivity-panel/-status/value-of.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/ReactivityPanel.Status/values/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-reactivity-panel/-status/values.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/ReactivityPanel///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-reactivity-panel/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/ReactivityPanel/ReactivityPanel/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-reactivity-panel/-reactivity-panel.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/ReactivityPanel/addActionListener/#java.awt.event.ActionListener/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-reactivity-panel/add-action-listener.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/ReactivityPanel/addChangeLister/#javax.swing.event.ChangeListener/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-reactivity-panel/add-change-lister.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/ReactivityPanel/getUserReactivity/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-reactivity-panel/get-user-reactivity.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/ReactivityPanel/itemStateChanged/#java.awt.event.ItemEvent/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-reactivity-panel/item-state-changed.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/ReactivityPanel/setActionCommand/#java.lang.String/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-reactivity-panel/set-action-command.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/ReactivityPanel/status/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-reactivity-panel/status.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/SimControlButton///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-sim-control-button/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/SimControlButton/SimControlButton/#java.lang.String#java.lang.Enum#java.lang.String/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-sim-control-button/-sim-control-button.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/SimControlCommand.PAUSE///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-sim-control-command/-p-a-u-s-e/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/SimControlCommand.PLAY///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-sim-control-command/-p-l-a-y/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/SimControlCommand.STEP///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-sim-control-command/-s-t-e-p/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/SimControlCommand.STOP///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-sim-control-command/-s-t-o-p/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/SimControlCommand///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-sim-control-command/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/SimControlCommand/createButton/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-sim-control-command/create-button.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/SimControlCommand/equalsToString/#java.lang.String/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-sim-control-command/equals-to-string.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/SimControlCommand/valueOf/#java.lang.String/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-sim-control-command/value-of.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/SimControlCommand/values/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-sim-control-command/values.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/SimControlPanel///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-sim-control-panel/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/SimControlPanel/addActionListener/#java.awt.event.ActionListener/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-sim-control-panel/add-action-listener.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/SimControlPanel/createControlPanel/#it.unibo.alchemist.core.Simulation/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-sim-control-panel/create-control-panel.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/SimControlPanel/getSimulation/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-sim-control-panel/get-simulation.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/SimControlPanel/isDown/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-sim-control-panel/is-down.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/SimControlPanel/setButtonEnabled/#it.unibo.alchemist.boundary.swingui.impl.SimControlCommand#boolean/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-sim-control-panel/set-button-enabled.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/SimControlPanel/setEnabled/#boolean/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-sim-control-panel/set-enabled.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/SimControlPanel/setSimulation/#it.unibo.alchemist.core.Simulation/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-sim-control-panel/set-simulation.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/SimControlPanel/shutdown/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-sim-control-panel/shutdown.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/SimControlPanel/toString/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-sim-control-panel/to-string.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/StatusBar///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-status-bar/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/StatusBar/StatusBar/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-status-bar/-status-bar.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/StatusBar/setNo/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-status-bar/set-no.html +$dokka.location:it.unibo.alchemist.boundary.swingui.impl/StatusBar/setOK/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.impl/-status-bar/set-o-k.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl////PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/Generic2DDisplay///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-generic2-d-display/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/Generic2DDisplay/DEFAULT_FRAME_RATE/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-generic2-d-display/-d-e-f-a-u-l-t_-f-r-a-m-e_-r-a-t-e.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/Generic2DDisplay/Generic2DDisplay/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-generic2-d-display/-generic2-d-display.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/Generic2DDisplay/Generic2DDisplay/#int/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-generic2-d-display/-generic2-d-display.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/Generic2DDisplay/finished/#it.unibo.alchemist.model.Environment#it.unibo.alchemist.model.Time#long/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-generic2-d-display/finished.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/Generic2DDisplay/getStep/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-generic2-d-display/get-step.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/Generic2DDisplay/initialized/#it.unibo.alchemist.model.Environment/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-generic2-d-display/initialized.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/Generic2DDisplay/isRealTime/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-generic2-d-display/is-real-time.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/Generic2DDisplay/repaint/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-generic2-d-display/repaint.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/Generic2DDisplay/setDrawLinks/#boolean/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-generic2-d-display/set-draw-links.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/Generic2DDisplay/setEffectStack/#java.util.List/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-generic2-d-display/set-effect-stack.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/Generic2DDisplay/setMarkCloserNode/#boolean/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-generic2-d-display/set-mark-closer-node.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/Generic2DDisplay/setRealTime/#boolean/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-generic2-d-display/set-real-time.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/Generic2DDisplay/setStep/#int/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-generic2-d-display/set-step.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/Generic2DDisplay/stepDone/#it.unibo.alchemist.model.Environment#it.unibo.alchemist.model.Actionable#it.unibo.alchemist.model.Time#long/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-generic2-d-display/step-done.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/Generic2DDisplay/zoomTo/#P#double/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-generic2-d-display/zoom-to.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/MapDisplay///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-map-display/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/MapDisplay/MapDisplay/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-map-display/-map-display.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/MapDisplay/finished/#it.unibo.alchemist.model.Environment#it.unibo.alchemist.model.Time#long/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-map-display/finished.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/MapDisplay/initialized/#it.unibo.alchemist.model.Environment/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-map-display/initialized.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/MapDisplay/paint/#java.awt.Graphics/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-map-display/paint.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/MoleculeInjectorGUI///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-molecule-injector-g-u-i/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/MoleculeInjectorGUI/MoleculeInjectorGUI/#java.util.Set>/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-molecule-injector-g-u-i/-molecule-injector-g-u-i.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/NodeTracker///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-node-tracker/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/NodeTracker/NodeTracker/#it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-node-tracker/-node-tracker.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/NodeTracker/actionPerformed/#java.awt.event.ActionEvent/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-node-tracker/action-performed.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/NodeTracker/finished/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])]#it.unibo.alchemist.model.Time#kotlin.Long/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-node-tracker/finished.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/NodeTracker/initialized/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])]/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-node-tracker/initialized.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/NodeTracker/stepDone/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])]#it.unibo.alchemist.model.Actionable[TypeParam(bounds=[kotlin.Any?])]?#it.unibo.alchemist.model.Time#kotlin.Long/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-node-tracker/step-done.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/SwingGUI///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-swing-g-u-i/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/SwingGUI/SwingGUI/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position2D[^]])]#java.io.File?#kotlin.Boolean#kotlin.Int/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-swing-g-u-i/-swing-g-u-i.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/SwingGUI/SwingGUI/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position2D[^]])]#kotlin.String?#kotlin.Boolean#kotlin.Int/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-swing-g-u-i/-swing-g-u-i.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/SwingGUI/environment/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-swing-g-u-i/environment.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/SwingGUI/finished/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position2D[^]])]#it.unibo.alchemist.model.Time#kotlin.Long/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-swing-g-u-i/finished.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/SwingGUI/initialized/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position2D[^]])]/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-swing-g-u-i/initialized.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/SwingGUI/isRealTime/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-swing-g-u-i/is-real-time.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/SwingGUI/step/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-swing-g-u-i/step.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/SwingGUI/stepDone/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position2D[^]])]#it.unibo.alchemist.model.Actionable[TypeParam(bounds=[kotlin.Any?])]?#it.unibo.alchemist.model.Time#kotlin.Long/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-swing-g-u-i/step-done.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/TimeStepMonitor///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-time-step-monitor/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/TimeStepMonitor/TimeStepMonitor/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-time-step-monitor/-time-step-monitor.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/TimeStepMonitor/finished/#it.unibo.alchemist.model.Environment#it.unibo.alchemist.model.Time#long/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-time-step-monitor/finished.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/TimeStepMonitor/initialized/#it.unibo.alchemist.model.Environment/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-time-step-monitor/initialized.html +$dokka.location:it.unibo.alchemist.boundary.swingui.monitor.impl/TimeStepMonitor/stepDone/#it.unibo.alchemist.model.Environment#it.unibo.alchemist.model.Actionable#it.unibo.alchemist.model.Time#long/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.monitor.impl/-time-step-monitor/step-done.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl////PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/AbstractFlowLayout///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-abstract-flow-layout/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/AbstractFlowLayout/AbstractFlowLayout/#int#int#int#boolean/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-abstract-flow-layout/-abstract-flow-layout.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/AbstractFlowLayout/BOTH/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-abstract-flow-layout/-b-o-t-h.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/AbstractFlowLayout/CENTER/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-abstract-flow-layout/-c-e-n-t-e-r.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/AbstractFlowLayout/LEFT/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-abstract-flow-layout/-l-e-f-t.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/AbstractFlowLayout/RIGHT/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-abstract-flow-layout/-r-i-g-h-t.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/AbstractFlowLayout/TOP/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-abstract-flow-layout/-t-o-p.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/AbstractFlowLayout/addLayoutComponent/#java.lang.String#java.awt.Component/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-abstract-flow-layout/add-layout-component.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/AbstractFlowLayout/getComponentOrder/#java.awt.Component/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-abstract-flow-layout/get-component-order.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/AbstractFlowLayout/getComponentsList/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-abstract-flow-layout/get-components-list.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/AbstractFlowLayout/isOrdered/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-abstract-flow-layout/is-ordered.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/AbstractFlowLayout/layoutContainer/#java.awt.Container/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-abstract-flow-layout/layout-container.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/AbstractFlowLayout/minimumLayoutSize/#java.awt.Container/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-abstract-flow-layout/minimum-layout-size.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/AbstractFlowLayout/preferredLayoutSize/#java.awt.Container/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-abstract-flow-layout/preferred-layout-size.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/AbstractFlowLayout/removeLayoutComponent/#java.awt.Component/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-abstract-flow-layout/remove-layout-component.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/AbstractFlowLayout/setComponentOrder/#java.awt.Component#int/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-abstract-flow-layout/set-component-order.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/AbstractFlowLayout/toString/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-abstract-flow-layout/to-string.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/AbstractJTapeSection///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-abstract-j-tape-section/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/AbstractJTapeSection/AbstractJTapeSection/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-abstract-j-tape-section/-abstract-j-tape-section.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/AbstractJTapeSection/registerFeature/#java.awt.Component/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-abstract-j-tape-section/register-feature.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/AbstractJTapeSection/unregisterFeature/#java.awt.Component/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-abstract-j-tape-section/unregister-feature.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/HorizontalFlowLayout///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-horizontal-flow-layout/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/HorizontalFlowLayout/HorizontalFlowLayout/#boolean/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-horizontal-flow-layout/-horizontal-flow-layout.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/HorizontalFlowLayout/HorizontalFlowLayout/#int#boolean/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-horizontal-flow-layout/-horizontal-flow-layout.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/HorizontalFlowLayout/HorizontalFlowLayout/#int#int#boolean/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-horizontal-flow-layout/-horizontal-flow-layout.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/HorizontalFlowLayout/HorizontalFlowLayout/#int#int#int#boolean/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-horizontal-flow-layout/-horizontal-flow-layout.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/HorizontalFlowLayout/layoutContainer/#java.awt.Container/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-horizontal-flow-layout/layout-container.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JEffectRepresentation///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-effect-representation/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JEffectRepresentation/JEffectRepresentation/#it.unibo.alchemist.boundary.swingui.effect.api.Effect#it.unibo.alchemist.boundary.swingui.api.GraphicalOutputMonitor/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-effect-representation/-j-effect-representation.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JEffectRepresentation/addItemListener/#java.awt.event.ItemListener/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-effect-representation/add-item-listener.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JEffectRepresentation/effect/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-effect-representation/effect.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JEffectRepresentation/getSelectedObjects/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-effect-representation/get-selected-objects.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JEffectRepresentation/isSelected/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-effect-representation/is-selected.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JEffectRepresentation/removeItemListener/#java.awt.event.ItemListener/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-effect-representation/remove-item-listener.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JEffectRepresentation/setEnabled/#boolean/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-effect-representation/set-enabled.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JEffectRepresentation/setSelected/#boolean/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-effect-representation/set-selected.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JEffectsTab///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-effects-tab/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JEffectsTab/JEffectsTab/#it.unibo.alchemist.boundary.swingui.api.GraphicalOutputMonitor#boolean/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-effects-tab/-j-effects-tab.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JEffectsTab/addActionListener/#java.awt.event.ActionListener/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-effects-tab/add-action-listener.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JEffectsTab/addEffect/#it.unibo.alchemist.boundary.swingui.effect.api.Effect/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-effects-tab/add-effect.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JEffectsTab/clearEffects/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-effects-tab/clear-effects.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JEffectsTab/getEffects/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-effects-tab/get-effects.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JEffectsTab/itemStateChanged/#java.awt.event.ItemEvent/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-effects-tab/item-state-changed.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JEffectsTab/setEffects/#java.util.List/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-effects-tab/set-effects.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JEffectsTab/setEnabled/#boolean/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-effects-tab/set-enabled.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JTape///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-tape/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JTape/JTape/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-tape/-j-tape.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JTape/deregisterTab/#it.unibo.alchemist.boundary.swingui.tape.impl.JTapeTab/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-tape/deregister-tab.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JTape/registerTab/#it.unibo.alchemist.boundary.swingui.tape.impl.JTapeTab/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-tape/register-tab.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JTapeFeatureStack.Type.HORIZONTAL_STACK///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-tape-feature-stack/-type/-h-o-r-i-z-o-n-t-a-l_-s-t-a-c-k/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JTapeFeatureStack.Type.VERTICAL_STACK///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-tape-feature-stack/-type/-v-e-r-t-i-c-a-l_-s-t-a-c-k/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JTapeFeatureStack.Type///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-tape-feature-stack/-type/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JTapeFeatureStack.Type/valueOf/#java.lang.String/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-tape-feature-stack/-type/value-of.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JTapeFeatureStack.Type/values/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-tape-feature-stack/-type/values.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JTapeFeatureStack///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-tape-feature-stack/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JTapeFeatureStack/JTapeFeatureStack/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-tape-feature-stack/-j-tape-feature-stack.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JTapeFeatureStack/JTapeFeatureStack/#it.unibo.alchemist.boundary.swingui.tape.impl.JTapeFeatureStack.Type/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-tape-feature-stack/-j-tape-feature-stack.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JTapeFeatureStack/add/#java.awt.Component/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-tape-feature-stack/add.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JTapeFeatureStack/getLayout/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-tape-feature-stack/get-layout.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JTapeFeatureStack/getOrderedComponents/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-tape-feature-stack/get-ordered-components.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JTapeFeatureStack/registerFeature/#java.awt.Component/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-tape-feature-stack/register-feature.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JTapeFeatureStack/remove/#java.awt.Component/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-tape-feature-stack/remove.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JTapeFeatureStack/setComponentOrder/#java.awt.Component#int/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-tape-feature-stack/set-component-order.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JTapeFeatureStack/type/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-tape-feature-stack/type.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JTapeFeatureStack/unregisterFeature/#java.awt.Component/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-tape-feature-stack/unregister-feature.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JTapeGroup///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-tape-group/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JTapeGroup/JTapeGroup/#java.lang.String/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-tape-group/-j-tape-group.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JTapeGroup/getDescription/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-tape-group/get-description.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JTapeGroup/registerSection/#it.unibo.alchemist.boundary.swingui.tape.impl.AbstractJTapeSection/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-tape-group/register-section.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JTapeGroup/setDescription/#java.lang.String/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-tape-group/set-description.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JTapeMainFeature///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-tape-main-feature/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JTapeMainFeature/JTapeMainFeature/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-tape-main-feature/-j-tape-main-feature.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JTapeMainFeature/registerFeature/#java.awt.Component/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-tape-main-feature/register-feature.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JTapeMainFeature/unregisterFeature/#java.awt.Component/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-tape-main-feature/unregister-feature.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JTapeTab///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-tape-tab/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JTapeTab/JTapeTab/#java.lang.String/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-tape-tab/-j-tape-tab.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JTapeTab/registerGroup/#it.unibo.alchemist.boundary.swingui.tape.impl.JTapeGroup/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-tape-tab/register-group.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/JTapeTab/title/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-j-tape-tab/title.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/VerticalFlowLayout///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-vertical-flow-layout/index.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/VerticalFlowLayout/VerticalFlowLayout/#boolean/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-vertical-flow-layout/-vertical-flow-layout.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/VerticalFlowLayout/VerticalFlowLayout/#int#boolean/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-vertical-flow-layout/-vertical-flow-layout.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/VerticalFlowLayout/VerticalFlowLayout/#int#int#boolean/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-vertical-flow-layout/-vertical-flow-layout.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/VerticalFlowLayout/VerticalFlowLayout/#int#int#int#boolean/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-vertical-flow-layout/-vertical-flow-layout.html +$dokka.location:it.unibo.alchemist.boundary.swingui.tape.impl/VerticalFlowLayout/layoutContainer/#java.awt.Container/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.swingui.tape.impl/-vertical-flow-layout/layout-container.html +$dokka.location:it.unibo.alchemist.boundary.util////PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.util/index.html +$dokka.location:it.unibo.alchemist.boundary.util/InitMapsForge///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.util/-init-maps-forge/index.html +$dokka.location:it.unibo.alchemist.boundary.util/InitMapsForge/initAgent/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.util/-init-maps-forge/init-agent.html +$dokka.location:it.unibo.alchemist.boundary.wormhole.impl////PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.wormhole.impl/index.html +$dokka.location:it.unibo.alchemist.boundary.wormhole.impl/AngleManagerImpl///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.wormhole.impl/-angle-manager-impl/index.html +$dokka.location:it.unibo.alchemist.boundary.wormhole.impl/AngleManagerImpl/AngleManagerImpl/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.wormhole.impl/-angle-manager-impl/-angle-manager-impl.html +$dokka.location:it.unibo.alchemist.boundary.wormhole.impl/AngleManagerImpl/AngleManagerImpl/#double#double/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.wormhole.impl/-angle-manager-impl/-angle-manager-impl.html +$dokka.location:it.unibo.alchemist.boundary.wormhole.impl/AngleManagerImpl/AngleManagerImpl/#double/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.wormhole.impl/-angle-manager-impl/-angle-manager-impl.html +$dokka.location:it.unibo.alchemist.boundary.wormhole.impl/AngleManagerImpl/DEF_DEG_PER_PIXEL/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.wormhole.impl/-angle-manager-impl/-d-e-f_-d-e-g_-p-e-r_-p-i-x-e-l.html +$dokka.location:it.unibo.alchemist.boundary.wormhole.impl/AngleManagerImpl/getAngle/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.wormhole.impl/-angle-manager-impl/get-angle.html +$dokka.location:it.unibo.alchemist.boundary.wormhole.impl/ComponentViewPort///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.wormhole.impl/-component-view-port/index.html +$dokka.location:it.unibo.alchemist.boundary.wormhole.impl/ComponentViewPort/ComponentViewPort/#java.awt.Component/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.wormhole.impl/-component-view-port/-component-view-port.html +$dokka.location:it.unibo.alchemist.boundary.wormhole.impl/ComponentViewPort/component/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.wormhole.impl/-component-view-port/component.html +$dokka.location:it.unibo.alchemist.boundary.wormhole.impl/ComponentViewPort/equals/#java.lang.Object/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.wormhole.impl/-component-view-port/equals.html +$dokka.location:it.unibo.alchemist.boundary.wormhole.impl/ComponentViewPort/getHeight/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.wormhole.impl/-component-view-port/get-height.html +$dokka.location:it.unibo.alchemist.boundary.wormhole.impl/ComponentViewPort/getWidth/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.wormhole.impl/-component-view-port/get-width.html +$dokka.location:it.unibo.alchemist.boundary.wormhole.impl/ComponentViewPort/hashCode/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.wormhole.impl/-component-view-port/hash-code.html +$dokka.location:it.unibo.alchemist.boundary.wormhole.impl/MapWormhole///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.wormhole.impl/-map-wormhole/index.html +$dokka.location:it.unibo.alchemist.boundary.wormhole.impl/MapWormhole/MAX_ZOOM/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.wormhole.impl/-map-wormhole/-m-a-x_-z-o-o-m.html +$dokka.location:it.unibo.alchemist.boundary.wormhole.impl/MapWormhole/MapWormhole/#it.unibo.alchemist.model.Environment#java.awt.Component#org.mapsforge.map.model.MapViewPosition/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.wormhole.impl/-map-wormhole/-map-wormhole.html +$dokka.location:it.unibo.alchemist.boundary.wormhole.impl/MapWormhole/getEnvPoint/#java.awt.Point/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.wormhole.impl/-map-wormhole/get-env-point.html +$dokka.location:it.unibo.alchemist.boundary.wormhole.impl/MapWormhole/getViewPoint/#it.unibo.alchemist.model.GeoPosition/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.wormhole.impl/-map-wormhole/get-view-point.html +$dokka.location:it.unibo.alchemist.boundary.wormhole.impl/MapWormhole/getViewPosition/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.wormhole.impl/-map-wormhole/get-view-position.html +$dokka.location:it.unibo.alchemist.boundary.wormhole.impl/MapWormhole/optimalZoom/#/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.wormhole.impl/-map-wormhole/optimal-zoom.html +$dokka.location:it.unibo.alchemist.boundary.wormhole.impl/MapWormhole/rotateAroundPoint/#java.awt.Point#double/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.wormhole.impl/-map-wormhole/rotate-around-point.html +$dokka.location:it.unibo.alchemist.boundary.wormhole.impl/MapWormhole/setEnvPosition/#it.unibo.alchemist.model.GeoPosition/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.wormhole.impl/-map-wormhole/set-env-position.html +$dokka.location:it.unibo.alchemist.boundary.wormhole.impl/MapWormhole/setViewPosition/#java.awt.Point/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.wormhole.impl/-map-wormhole/set-view-position.html +$dokka.location:it.unibo.alchemist.boundary.wormhole.impl/MapWormhole/setZoom/#double/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.wormhole.impl/-map-wormhole/set-zoom.html +$dokka.location:it.unibo.alchemist.boundary.wormhole.impl/MapWormhole/zoomOnPoint/#java.awt.Point#double/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.wormhole.impl/-map-wormhole/zoom-on-point.html +$dokka.location:it.unibo.alchemist.boundary.wormhole.impl/WormholeSwing///PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.wormhole.impl/-wormhole-swing/index.html +$dokka.location:it.unibo.alchemist.boundary.wormhole.impl/WormholeSwing/WormholeSwing/#it.unibo.alchemist.model.Environment#java.awt.Component/PointingToDeclaration/alchemist-swingui/it.unibo.alchemist.boundary.wormhole.impl/-wormhole-swing/-wormhole-swing.html +it.unibo.alchemist.boundary.swingui.api +it.unibo.alchemist.boundary.swingui.effect.api +it.unibo.alchemist.boundary.swingui.effect.impl +it.unibo.alchemist.boundary.swingui.effect.isolines.api +it.unibo.alchemist.boundary.swingui.effect.isolines.impl +it.unibo.alchemist.boundary.swingui.impl +it.unibo.alchemist.boundary.swingui.monitor.impl +it.unibo.alchemist.boundary.swingui.tape.impl +it.unibo.alchemist.boundary.util +it.unibo.alchemist.boundary.wormhole.impl diff --git a/dokka-cache/it.unibo.alchemist/alchemist-web-renderer/42.3.18.list b/dokka-cache/it.unibo.alchemist/alchemist-web-renderer/42.3.18.list new file mode 100644 index 0000000000..415747ae38 --- /dev/null +++ b/dokka-cache/it.unibo.alchemist/alchemist-web-renderer/42.3.18.list @@ -0,0 +1,282 @@ +$dokka.format:html-v1 +$dokka.linkExtension:html +$dokka.location:it.unibo.alchemist.boundary.launchers////PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.launchers/index.html +$dokka.location:it.unibo.alchemist.boundary.launchers/WebRendererLauncher///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.launchers/-web-renderer-launcher/index.html +$dokka.location:it.unibo.alchemist.boundary.launchers/WebRendererLauncher/WebRendererLauncher/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.launchers/-web-renderer-launcher/-web-renderer-launcher.html +$dokka.location:it.unibo.alchemist.boundary.launchers/WebRendererLauncher/launch/#it.unibo.alchemist.boundary.Loader/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.launchers/-web-renderer-launcher/launch.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.buttons////PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.buttons/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.buttons//Button/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.buttons/-button.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.buttons//ToggleButton/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.buttons/-toggle-button.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.buttons//ToggleButtonGroup/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.buttons/-toggle-button-group.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.buttons/ButtonProps///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.buttons/-button-props/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.buttons/ButtonProps/active/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.buttons/-button-props/active.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.buttons/ButtonProps/disabled/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.buttons/-button-props/disabled.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.buttons/ButtonProps/onClick/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.buttons/-button-props/on-click.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.buttons/ButtonProps/variant/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.buttons/-button-props/variant.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.buttons/ToggleButtonGroupProps///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.buttons/-toggle-button-group-props/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.buttons/ToggleButtonGroupProps/defaultValue/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.buttons/-toggle-button-group-props/default-value.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.buttons/ToggleButtonGroupProps/name/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.buttons/-toggle-button-group-props/name.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.buttons/ToggleButtonGroupProps/onChange/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.buttons/-toggle-button-group-props/on-change.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.buttons/ToggleButtonGroupProps/size/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.buttons/-toggle-button-group-props/size.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.buttons/ToggleButtonGroupProps/type/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.buttons/-toggle-button-group-props/type.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.buttons/ToggleButtonProps///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.buttons/-toggle-button-props/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.buttons/ToggleButtonProps/id/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.buttons/-toggle-button-props/id.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.buttons/ToggleButtonProps/value/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.buttons/-toggle-button-props/value.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.modal////PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.modal/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.modal//Modal/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.modal/-modal.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.modal//ModalBody/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.modal/-modal-body.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.modal//ModalFooter/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.modal/-modal-footer.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.modal//ModalHeader/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.modal/-modal-header.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.modal//ModalTitle/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.modal/-modal-title.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.modal/ModalHeaderProps///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.modal/-modal-header-props/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.modal/ModalHeaderProps/closeButton/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.modal/-modal-header-props/close-button.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.modal/ModalProps///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.modal/-modal-props/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.modal/ModalProps/onHide/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.modal/-modal-props/on-hide.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.modal/ModalProps/show/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.modal/-modal-props/show.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.modal/ModalTitleProps///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.modal/-modal-title-props/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.modal/ModalTitleProps/className/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.modal/-modal-title-props/class-name.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.navbar////PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.navbar/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.navbar//Navbar/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.navbar/-navbar.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.navbar//NavbarBrand/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.navbar/-navbar-brand.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.navbar/NavbarProps///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.navbar/-navbar-props/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.navbar/NavbarProps/bg/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.navbar/-navbar-props/bg.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.navbar/NavbarProps/variant/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.navbar/-navbar-props/variant.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.api.utility////PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.api.utility/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.api.utility/JsonClient///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.api.utility/-json-client/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.api.utility/JsonClient/client/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.api.utility/-json-client/client.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.api.utility/JsonClient/endpoint/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.api.utility/-json-client/endpoint.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.api////PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.api/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.api/EnvironmentApi///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.api/-environment-api/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.api/EnvironmentApi/getEnvironmentClient/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.api/-environment-api/get-environment-client.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.api/EnvironmentApi/getEnvironmentServer/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.api/-environment-api/get-environment-server.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.api/SimulationApi///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.api/-simulation-api/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.api/SimulationApi/getSimulationStatus/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.api/-simulation-api/get-simulation-status.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.api/SimulationApi/pauseSimulation/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.api/-simulation-api/pause-simulation.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.api/SimulationApi/playSimulation/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.api/-simulation-api/play-simulation.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.components////PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.components/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.components//AppContent/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.components/-app-content.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.components//AppNavbar/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.components/-app-navbar.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.components//PlayButton/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.components/-play-button.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.components//RenderModeButtons/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.components/-render-mode-buttons.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.components//WarningModal/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.components/-warning-modal.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.components/PlayButtonProps///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.components/-play-button-props/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.components/PlayButtonProps/status/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.components/-play-button-props/status.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.components/WarningModalProps///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.components/-warning-modal-props/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.components/WarningModalProps/message/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.components/-warning-modal-props/message.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.components/WarningModalProps/title/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.components/-warning-modal-props/title.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.logic////PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.logic/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.logic//updateState/#it.unibo.alchemist.boundary.webui.common.model.RenderMode#it.unibo.alchemist.boundary.webui.client.logic.UpdateStateStrategy#it.unibo.alchemist.boundary.webui.client.logic.AutoRenderModeStrategy/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.logic/update-state.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.logic/AutoRenderModeStrategy///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.logic/-auto-render-mode-strategy/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.logic/AutoRenderModeStrategy/invoke/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.logic/-auto-render-mode-strategy/invoke.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.logic/HwAutoRenderModeStrategy///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.logic/-hw-auto-render-mode-strategy/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.logic/HwAutoRenderModeStrategy/HwAutoRenderModeStrategy/#kotlin.Int/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.logic/-hw-auto-render-mode-strategy/-hw-auto-render-mode-strategy.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.logic/HwAutoRenderModeStrategy/invoke/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.logic/-hw-auto-render-mode-strategy/invoke.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.logic/HwAutoRenderModeStrategy/minHwConcurrency/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.logic/-hw-auto-render-mode-strategy/min-hw-concurrency.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.logic/RESTUpdateStateStrategy///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.logic/-r-e-s-t-update-state-strategy/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.logic/RESTUpdateStateStrategy/RESTUpdateStateStrategy/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.logic/-r-e-s-t-update-state-strategy/-r-e-s-t-update-state-strategy.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.logic/RESTUpdateStateStrategy/clientComputation/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.logic/-r-e-s-t-update-state-strategy/client-computation.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.logic/RESTUpdateStateStrategy/retrieveSimulationStatus/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.logic/-r-e-s-t-update-state-strategy/retrieve-simulation-status.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.logic/RESTUpdateStateStrategy/serverComputation/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.logic/-r-e-s-t-update-state-strategy/server-computation.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.logic/UpdateStateStrategy///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.logic/-update-state-strategy/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.logic/UpdateStateStrategy/clientComputation/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.logic/-update-state-strategy/client-computation.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.logic/UpdateStateStrategy/retrieveSimulationStatus/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.logic/-update-state-strategy/retrieve-simulation-status.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.logic/UpdateStateStrategy/serverComputation/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.logic/-update-state-strategy/server-computation.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.state.actions////PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.state.actions/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.state.actions/SetBitmap///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.state.actions/-set-bitmap/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.state.actions/SetBitmap/SetBitmap/#korlibs.image.bitmap.Bitmap?/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.state.actions/-set-bitmap/-set-bitmap.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.state.actions/SetBitmap/bitmap/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.state.actions/-set-bitmap/bitmap.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.state.actions/SetPlayButton///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.state.actions/-set-play-button/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.state.actions/SetPlayButton/SetPlayButton/#it.unibo.alchemist.boundary.webui.common.utility.Action/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.state.actions/-set-play-button/-set-play-button.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.state.actions/SetPlayButton/action/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.state.actions/-set-play-button/action.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.state.actions/SetRenderMode///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.state.actions/-set-render-mode/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.state.actions/SetRenderMode/SetRenderMode/#it.unibo.alchemist.boundary.webui.common.model.RenderMode/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.state.actions/-set-render-mode/-set-render-mode.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.state.actions/SetRenderMode/renderMode/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.state.actions/-set-render-mode/render-mode.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.state.actions/SetStatusSurrogate///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.state.actions/-set-status-surrogate/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.state.actions/SetStatusSurrogate/SetStatusSurrogate/#it.unibo.alchemist.boundary.webui.common.model.surrogate.StatusSurrogate/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.state.actions/-set-status-surrogate/-set-status-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.state.actions/SetStatusSurrogate/statusSurrogate/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.state.actions/-set-status-surrogate/status-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.state.reducers////PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.state.reducers/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.state.reducers//bitmapReducer/#korlibs.image.bitmap.Bitmap?#kotlin.Any/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.state.reducers/bitmap-reducer.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.state.reducers//playButtonReducer/#it.unibo.alchemist.boundary.webui.common.utility.Action#kotlin.Any/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.state.reducers/play-button-reducer.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.state.reducers//renderModeReducer/#it.unibo.alchemist.boundary.webui.common.model.RenderMode#kotlin.Any/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.state.reducers/render-mode-reducer.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.state.reducers//statusSurrogateReducer/#it.unibo.alchemist.boundary.webui.common.model.surrogate.StatusSurrogate#kotlin.Any/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.state.reducers/status-surrogate-reducer.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.state////PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.state/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.state//rootReducer/#it.unibo.alchemist.boundary.webui.client.state.ClientState#kotlin.Any/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.state/root-reducer.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.state/ClientState///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.state/-client-state/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.state/ClientState/ClientState/#it.unibo.alchemist.boundary.webui.common.model.RenderMode#it.unibo.alchemist.boundary.webui.common.utility.Action#korlibs.image.bitmap.Bitmap?#it.unibo.alchemist.boundary.webui.common.model.surrogate.StatusSurrogate/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.state/-client-state/-client-state.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.state/ClientState/bitmap/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.state/-client-state/bitmap.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.state/ClientState/playButton/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.state/-client-state/play-button.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.state/ClientState/renderMode/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.state/-client-state/render-mode.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.state/ClientState/statusSurrogate/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.state/-client-state/status-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.state/ClientStore///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.state/-client-store/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.client.state/ClientStore/store/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client.state/-client-store/store.html +$dokka.location:it.unibo.alchemist.boundary.webui.client////PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.client//App/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client/-app.html +$dokka.location:it.unibo.alchemist.boundary.webui.client//main/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.client/main.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.serialization////PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.serialization/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.serialization//decodeEnvironmentSurrogate/kotlinx.serialization.json.Json#kotlin.String/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.serialization/decode-environment-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.serialization//encodeEnvironmentSurrogate/kotlinx.serialization.json.Json#it.unibo.alchemist.boundary.webui.common.model.surrogate.EnvironmentSurrogate[TypeParam(bounds=[kotlin.Any]),TypeParam(bounds=[it.unibo.alchemist.boundary.webui.common.model.surrogate.PositionSurrogate])]/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.serialization/encode-environment-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.serialization//jsonFormat/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.serialization/json-format.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.serialization/SerializationModules///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.serialization/-serialization-modules/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.serialization/SerializationModules/concentrationModule/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.serialization/-serialization-modules/concentration-module.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate////PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/EmptyConcentrationSurrogate///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-empty-concentration-surrogate/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/EnvironmentSurrogate.Companion///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-environment-surrogate/-companion/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/EnvironmentSurrogate.Companion/polymorphicSerializer/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-environment-surrogate/-companion/polymorphic-serializer.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/EnvironmentSurrogate.Companion/uninitializedEnvironment/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-environment-surrogate/-companion/uninitialized-environment.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/EnvironmentSurrogate///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-environment-surrogate/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/EnvironmentSurrogate/EnvironmentSurrogate/#kotlin.Int#kotlin.collections.List[it.unibo.alchemist.boundary.webui.common.model.surrogate.NodeSurrogate[TypeParam(bounds=[kotlin.Any]),TypeParam(bounds=[it.unibo.alchemist.boundary.webui.common.model.surrogate.PositionSurrogate])]]/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-environment-surrogate/-environment-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/EnvironmentSurrogate/dimensions/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-environment-surrogate/dimensions.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/EnvironmentSurrogate/nodes/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-environment-surrogate/nodes.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/GeneralPositionSurrogate///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-general-position-surrogate/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/GeneralPositionSurrogate/GeneralPositionSurrogate/#kotlin.DoubleArray#kotlin.Int/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-general-position-surrogate/-general-position-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/GeneralPositionSurrogate/coordinates/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-general-position-surrogate/coordinates.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/GeneralPositionSurrogate/dimensions/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-general-position-surrogate/dimensions.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/GeneralPositionSurrogate/equals/#kotlin.Any?/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-general-position-surrogate/equals.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/GeneralPositionSurrogate/hashCode/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-general-position-surrogate/hash-code.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/MoleculeSurrogate///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-molecule-surrogate/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/MoleculeSurrogate/MoleculeSurrogate/#kotlin.String/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-molecule-surrogate/-molecule-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/MoleculeSurrogate/name/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-molecule-surrogate/name.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/MoleculeSurrogateSerializer///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-molecule-surrogate-serializer/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/MoleculeSurrogateSerializer/descriptor/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-molecule-surrogate-serializer/descriptor.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/MoleculeSurrogateSerializer/deserialize/#kotlinx.serialization.encoding.Decoder/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-molecule-surrogate-serializer/deserialize.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/MoleculeSurrogateSerializer/serialize/#kotlinx.serialization.encoding.Encoder#it.unibo.alchemist.boundary.webui.common.model.surrogate.MoleculeSurrogate/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-molecule-surrogate-serializer/serialize.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/NodeSurrogate///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-node-surrogate/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/NodeSurrogate/NodeSurrogate/#kotlin.Int#kotlin.collections.Map[it.unibo.alchemist.boundary.webui.common.model.surrogate.MoleculeSurrogate,TypeParam(bounds=[kotlin.Any])]#TypeParam(bounds=[it.unibo.alchemist.boundary.webui.common.model.surrogate.PositionSurrogate])/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-node-surrogate/-node-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/NodeSurrogate/contents/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-node-surrogate/contents.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/NodeSurrogate/id/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-node-surrogate/id.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/NodeSurrogate/position/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-node-surrogate/position.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/Position2DSurrogate///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-position2-d-surrogate/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/Position2DSurrogate/Position2DSurrogate/#kotlin.Double#kotlin.Double/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-position2-d-surrogate/-position2-d-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/Position2DSurrogate/coordinates/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-position2-d-surrogate/coordinates.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/Position2DSurrogate/dimensions/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-position2-d-surrogate/dimensions.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/Position2DSurrogate/x/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-position2-d-surrogate/x.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/Position2DSurrogate/y/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-position2-d-surrogate/y.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/PositionSurrogate///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-position-surrogate/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/PositionSurrogate/coordinates/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-position-surrogate/coordinates.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/PositionSurrogate/dimensions/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-position-surrogate/dimensions.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/StatusSurrogate.INIT///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-status-surrogate/-i-n-i-t/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/StatusSurrogate.PAUSED///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-status-surrogate/-p-a-u-s-e-d/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/StatusSurrogate.READY///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-status-surrogate/-r-e-a-d-y/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/StatusSurrogate.RUNNING///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-status-surrogate/-r-u-n-n-i-n-g/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/StatusSurrogate.TERMINATED///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-status-surrogate/-t-e-r-m-i-n-a-t-e-d/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/StatusSurrogate///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-status-surrogate/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/StatusSurrogate/entries/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-status-surrogate/entries.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/StatusSurrogate/valueOf/#kotlin.String/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-status-surrogate/value-of.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model.surrogate/StatusSurrogate/values/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model.surrogate/-status-surrogate/values.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model////PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model/RenderMode.AUTO///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model/-render-mode/-a-u-t-o/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model/RenderMode.CLIENT///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model/-render-mode/-c-l-i-e-n-t/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model/RenderMode.SERVER///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model/-render-mode/-s-e-r-v-e-r/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model/RenderMode///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model/-render-mode/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model/RenderMode/entries/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model/-render-mode/entries.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model/RenderMode/valueOf/#kotlin.String/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model/-render-mode/value-of.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.model/RenderMode/values/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.model/-render-mode/values.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.renderer////PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.renderer/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.renderer/Bitmap32Serializer///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.renderer/-bitmap32-serializer/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.renderer/Bitmap32Serializer/descriptor/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.renderer/-bitmap32-serializer/descriptor.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.renderer/Bitmap32Serializer/deserialize/#kotlinx.serialization.encoding.Decoder/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.renderer/-bitmap32-serializer/deserialize.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.renderer/Bitmap32Serializer/serialize/#kotlinx.serialization.encoding.Encoder#korlibs.image.bitmap.Bitmap32/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.renderer/-bitmap32-serializer/serialize.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.renderer/BitmapRenderer///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.renderer/-bitmap-renderer/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.renderer/BitmapRenderer/BitmapRenderer/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.renderer/-bitmap-renderer/-bitmap-renderer.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.renderer/BitmapRenderer/render/#it.unibo.alchemist.boundary.webui.common.model.surrogate.EnvironmentSurrogate[TypeParam(bounds=[kotlin.Any]),TypeParam(bounds=[it.unibo.alchemist.boundary.webui.common.model.surrogate.PositionSurrogate])]/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.renderer/-bitmap-renderer/render.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.renderer/Renderer///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.renderer/-renderer/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.renderer/Renderer/render/#it.unibo.alchemist.boundary.webui.common.model.surrogate.EnvironmentSurrogate[TypeParam(bounds=[kotlin.Any]),TypeParam(bounds=[it.unibo.alchemist.boundary.webui.common.model.surrogate.PositionSurrogate])]/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.renderer/-renderer/render.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.state////PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.state/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.state/CommonState///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.state/-common-state/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.state/CommonState/CommonState/#it.unibo.alchemist.boundary.webui.common.renderer.Renderer[kotlin.Any,it.unibo.alchemist.boundary.webui.common.model.surrogate.PositionSurrogate,korlibs.image.bitmap.Bitmap]/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.state/-common-state/-common-state.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.state/CommonState/renderer/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.state/-common-state/renderer.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.utility////PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.utility/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.utility/Action.PAUSE///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.utility/-action/-p-a-u-s-e/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.utility/Action.PLAY///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.utility/-action/-p-l-a-y/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.utility/Action///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.utility/-action/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.utility/Action/entries/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.utility/-action/entries.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.utility/Action/valueOf/#kotlin.String/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.utility/-action/value-of.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.utility/Action/values/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.utility/-action/values.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.utility/Routes///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.utility/-routes/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.utility/Routes/ENVIRONMENT_CLIENT_PATH/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.utility/-routes/-e-n-v-i-r-o-n-m-e-n-t_-c-l-i-e-n-t_-p-a-t-h.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.utility/Routes/ENVIRONMENT_SERVER_PATH/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.utility/-routes/-e-n-v-i-r-o-n-m-e-n-t_-s-e-r-v-e-r_-p-a-t-h.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.utility/Routes/SIMULATION_PAUSE_PATH/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.utility/-routes/-s-i-m-u-l-a-t-i-o-n_-p-a-u-s-e_-p-a-t-h.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.utility/Routes/SIMULATION_PLAY_PATH/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.utility/-routes/-s-i-m-u-l-a-t-i-o-n_-p-l-a-y_-p-a-t-h.html +$dokka.location:it.unibo.alchemist.boundary.webui.common.utility/Routes/SIMULATION_STATUS_PATH/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.common.utility/-routes/-s-i-m-u-l-a-t-i-o-n_-s-t-a-t-u-s_-p-a-t-h.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.modules////PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.modules/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.modules//installModule/io.ktor.server.application.Application#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.modules/install-module.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.modules//routingModule/io.ktor.server.application.Application#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.modules/routing-module.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.modules//startBrowserModule/io.ktor.server.application.Application#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.modules/start-browser-module.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.monitor////PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.monitor/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.monitor/EnvironmentMonitor///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.monitor/-environment-monitor/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.monitor/EnvironmentMonitor/EnvironmentMonitor/#kotlin.Function1[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[kotlin.Any])]#kotlin.Function1[TypeParam(bounds=[it.unibo.alchemist.model.Position[^]]),TypeParam(bounds=[it.unibo.alchemist.boundary.webui.common.model.surrogate.PositionSurrogate])]/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.monitor/-environment-monitor/-environment-monitor.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.monitor/EnvironmentMonitor/finished/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])]#it.unibo.alchemist.model.Time#kotlin.Long/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.monitor/-environment-monitor/finished.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.monitor/EnvironmentMonitor/initialized/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])]/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.monitor/-environment-monitor/initialized.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.monitor/EnvironmentMonitor/stepDone/#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])]#it.unibo.alchemist.model.Actionable[TypeParam(bounds=[kotlin.Any?])]?#it.unibo.alchemist.model.Time#kotlin.Long/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.monitor/-environment-monitor/step-done.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.monitor/EnvironmentMonitorFactory///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.monitor/-environment-monitor-factory/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.monitor/EnvironmentMonitorFactory/makeEnvironmentMonitor/#it.unibo.alchemist.model.Environment[*,*]/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.monitor/-environment-monitor-factory/make-environment-monitor.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.routes////PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.routes/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.routes//mainRoute/io.ktor.server.routing.Route#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.routes/main-route.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.routes/EnvironmentRoute///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.routes/-environment-route/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.routes/EnvironmentRoute/environmentClientMode/io.ktor.server.routing.Route#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.routes/-environment-route/environment-client-mode.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.routes/EnvironmentRoute/environmentServerMode/io.ktor.server.routing.Route#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.routes/-environment-route/environment-server-mode.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.routes/SimulationRoute///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.routes/-simulation-route/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.routes/SimulationRoute/simulationActionPause/io.ktor.server.routing.Route#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.routes/-simulation-route/simulation-action-pause.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.routes/SimulationRoute/simulationActionPlay/io.ktor.server.routing.Route#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.routes/-simulation-route/simulation-action-play.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.routes/SimulationRoute/simulationStatus/io.ktor.server.routing.Route#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.routes/-simulation-route/simulation-status.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.state.actions////PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.state.actions/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.state.actions/SetEnvironmentSurrogate///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.state.actions/-set-environment-surrogate/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.state.actions/SetEnvironmentSurrogate/SetEnvironmentSurrogate/#it.unibo.alchemist.boundary.webui.common.model.surrogate.EnvironmentSurrogate[TypeParam(bounds=[kotlin.Any]),TypeParam(bounds=[it.unibo.alchemist.boundary.webui.common.model.surrogate.PositionSurrogate])]/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.state.actions/-set-environment-surrogate/-set-environment-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.state.actions/SetEnvironmentSurrogate/environmentSurrogate/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.state.actions/-set-environment-surrogate/environment-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.state.actions/SetSimulation///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.state.actions/-set-simulation/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.state.actions/SetSimulation/SetSimulation/#it.unibo.alchemist.core.Simulation[kotlin.Any,kotlin.Nothing]?/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.state.actions/-set-simulation/-set-simulation.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.state.actions/SetSimulation/simulation/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.state.actions/-set-simulation/simulation.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.state.reducers////PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.state.reducers/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.state.reducers//environmentSurrogateReducer/#it.unibo.alchemist.boundary.webui.common.model.surrogate.EnvironmentSurrogate[kotlin.Any,it.unibo.alchemist.boundary.webui.common.model.surrogate.PositionSurrogate]#kotlin.Any/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.state.reducers/environment-surrogate-reducer.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.state.reducers//simulationReducer/#it.unibo.alchemist.core.Simulation[kotlin.Any,kotlin.Nothing]?#kotlin.Any/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.state.reducers/simulation-reducer.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.state////PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.state/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.state//rootReducer/#it.unibo.alchemist.boundary.webui.server.state.ServerState#kotlin.Any/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.state/root-reducer.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.state/ServerState///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.state/-server-state/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.state/ServerState/ServerState/#it.unibo.alchemist.core.Simulation[kotlin.Any,kotlin.Nothing]?#it.unibo.alchemist.boundary.webui.common.model.surrogate.EnvironmentSurrogate[kotlin.Any,it.unibo.alchemist.boundary.webui.common.model.surrogate.PositionSurrogate]/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.state/-server-state/-server-state.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.state/ServerState/environmentSurrogate/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.state/-server-state/environment-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.state/ServerState/simulation/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.state/-server-state/simulation.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.state/ServerStore///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.state/-server-store/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.state/ServerStore/store/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.state/-server-store/store.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.surrogates.utility////PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.surrogates.utility/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.surrogates.utility//toEnvironmentSurrogate/it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])]#kotlin.Function1[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[kotlin.Any])]#kotlin.Function1[TypeParam(bounds=[it.unibo.alchemist.model.Position[^]]),TypeParam(bounds=[it.unibo.alchemist.boundary.webui.common.model.surrogate.PositionSurrogate])]/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.surrogates.utility/to-environment-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.surrogates.utility//toEnvironmentSurrogate/it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])]#kotlin.Function1[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[kotlin.Any])]/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.surrogates.utility/to-environment-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.surrogates.utility//toMoleculeSurrogate/it.unibo.alchemist.model.Molecule#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.surrogates.utility/to-molecule-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.surrogates.utility//toNodeSurrogate/it.unibo.alchemist.model.Node[TypeParam(bounds=[kotlin.Any?])]#it.unibo.alchemist.model.Environment[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[it.unibo.alchemist.model.Position[^]])]#kotlin.Function1[TypeParam(bounds=[kotlin.Any?]),TypeParam(bounds=[kotlin.Any])]#kotlin.Function1[TypeParam(bounds=[it.unibo.alchemist.model.Position[^]]),TypeParam(bounds=[it.unibo.alchemist.boundary.webui.common.model.surrogate.PositionSurrogate])]/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.surrogates.utility/to-node-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.surrogates.utility//toStatusSurrogate/it.unibo.alchemist.core.Status#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.surrogates.utility/to-status-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.surrogates.utility/ToConcentrationSurrogate///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.surrogates.utility/-to-concentration-surrogate/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.surrogates.utility/ToConcentrationSurrogate/toEmptyConcentration/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.surrogates.utility/-to-concentration-surrogate/to-empty-concentration.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.surrogates.utility/ToPositionSurrogate///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.surrogates.utility/-to-position-surrogate/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.surrogates.utility/ToPositionSurrogate/toSuitablePositionSurrogate/#kotlin.Int/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.surrogates.utility/-to-position-surrogate/to-suitable-position-surrogate.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.utility////PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.utility/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.utility/Response.Companion///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.utility/-response/-companion/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.utility/Response.Companion/respond/io.ktor.server.routing.RoutingContext#it.unibo.alchemist.boundary.webui.server.utility.Response[TypeParam(bounds=[kotlin.Any])]/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.utility/-response/-companion/respond.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.utility/Response///PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.utility/-response/index.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.utility/Response/Response/#io.ktor.http.HttpStatusCode#TypeParam(bounds=[kotlin.Any?])/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.utility/-response/-response.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.utility/Response/code/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.utility/-response/code.html +$dokka.location:it.unibo.alchemist.boundary.webui.server.utility/Response/content/#/PointingToDeclaration/alchemist-web-renderer/it.unibo.alchemist.boundary.webui.server.utility/-response/content.html +it.unibo.alchemist.boundary.launchers +it.unibo.alchemist.boundary.webui.client +it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.buttons +it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.modal +it.unibo.alchemist.boundary.webui.client.adapters.reactBootstrap.navbar +it.unibo.alchemist.boundary.webui.client.api +it.unibo.alchemist.boundary.webui.client.api.utility +it.unibo.alchemist.boundary.webui.client.components +it.unibo.alchemist.boundary.webui.client.logic +it.unibo.alchemist.boundary.webui.client.state +it.unibo.alchemist.boundary.webui.client.state.actions +it.unibo.alchemist.boundary.webui.client.state.reducers +it.unibo.alchemist.boundary.webui.common.model +it.unibo.alchemist.boundary.webui.common.model.serialization +it.unibo.alchemist.boundary.webui.common.model.surrogate +it.unibo.alchemist.boundary.webui.common.renderer +it.unibo.alchemist.boundary.webui.common.state +it.unibo.alchemist.boundary.webui.common.utility +it.unibo.alchemist.boundary.webui.server.modules +it.unibo.alchemist.boundary.webui.server.monitor +it.unibo.alchemist.boundary.webui.server.routes +it.unibo.alchemist.boundary.webui.server.state +it.unibo.alchemist.boundary.webui.server.state.actions +it.unibo.alchemist.boundary.webui.server.state.reducers +it.unibo.alchemist.boundary.webui.server.surrogates.utility +it.unibo.alchemist.boundary.webui.server.utility diff --git a/dokka-cache/org.mockito/mockito-core/5.20.0.list b/dokka-cache/org.mockito/mockito-core/5.20.0.list new file mode 100644 index 0000000000..7ef36c473b --- /dev/null +++ b/dokka-cache/org.mockito/mockito-core/5.20.0.list @@ -0,0 +1,20 @@ +module:org.mockito +org.mockito +org.mockito.configuration +org.mockito.creation.instance +org.mockito.exceptions.base +org.mockito.exceptions.misusing +org.mockito.exceptions.stacktrace +org.mockito.exceptions.verification +org.mockito.exceptions.verification.junit +org.mockito.exceptions.verification.opentest4j +org.mockito.hamcrest +org.mockito.invocation +org.mockito.junit +org.mockito.listeners +org.mockito.mock +org.mockito.plugins +org.mockito.quality +org.mockito.session +org.mockito.stubbing +org.mockito.verification diff --git a/dokka-cache/org.protelis/protelis-interpreter/18.5.0.list b/dokka-cache/org.protelis/protelis-interpreter/18.5.0.list new file mode 100644 index 0000000000..5d89e93987 --- /dev/null +++ b/dokka-cache/org.protelis/protelis-interpreter/18.5.0.list @@ -0,0 +1,10 @@ +org.protelis +org.protelis.lang +org.protelis.lang.datatype +org.protelis.lang.datatype.impl +org.protelis.lang.interpreter +org.protelis.lang.interpreter.impl +org.protelis.lang.interpreter.util +org.protelis.lang.loading +org.protelis.vm +org.protelis.vm.impl diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7488ec399d..16f7e04078 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -4,7 +4,7 @@ antlr4 = "4.13.2" apollo ="4.0.0-beta.7" arrow = "2.2.1.1" compose-multiplatform = "1.10.1" -dokka = "2.1.0" +dokka = "2.2.0-Beta" graphql = "9.0.0-alpha.8" graphhopper = "11.0" graphstream = "2.0" @@ -12,6 +12,7 @@ junit = "6.0.3" konf = "1.1.2" kotest = "6.1.3" kotlin = "2.3.10" +ksp = "2.3.5" kotlinx-coroutines = "1.10.2" ktor = "3.4.0" mockito = "5.21.0" @@ -35,12 +36,12 @@ appdirs = "net.harawata:appdirs:1.5.0" arrow-core = { module = "io.arrow-kt:arrow-core", version.ref = "arrow" } boilerplate = "org.danilopianini:boilerplate:0.2.2" caffeine = "com.github.ben-manes.caffeine:caffeine:3.2.3" +classgraph = "io.github.classgraph:classgraph:4.8.184" compose-components-resources = { module = "org.jetbrains.compose.components:components-resources", version.ref = "compose-multiplatform" } compose-foundation = { module = "org.jetbrains.compose.foundation:foundation", version.ref = "compose-multiplatform" } compose-material = { module = "org.jetbrains.compose.material:material", version.ref = "compose-multiplatform" } compose-runtime = { module = "org.jetbrains.compose.runtime:runtime", version.ref = "compose-multiplatform" } compose-ui = { module = "org.jetbrains.compose.ui:ui", version.ref = "compose-multiplatform" } -classgraph = "io.github.classgraph:classgraph:4.8.184" conrec = "org.danilopianini:conrec:0.1.1" dokka-gradle-plugin = { module = "org.jetbrains.dokka:dokka-gradle-plugin", version.ref = "dokka" } dyn4j = "org.dyn4j:dyn4j:5.0.2" @@ -67,8 +68,9 @@ jpx = "io.jenetics:jpx:3.2.1" jsr305 = "com.google.code.findbugs:jsr305:3.0.2" junit-api = { module = "org.junit.jupiter:junit-jupiter-api", version.ref = "junit" } junit-engine = { module = "org.junit.jupiter:junit-jupiter-engine", version.ref = "junit" } -junit-platform-engine = "org.junit.platform:junit-platform-engine:6.0.3" -junit-platform-launcher = "org.junit.platform:junit-platform-launcher:6.0.3" +junit-params = { module = "org.junit.jupiter:junit-jupiter-params", version.ref = "junit" } +junit-platform-engine = { module = "org.junit.platform:junit-platform-engine", version.ref = "junit" } +junit-platform-launcher = { module = "org.junit.platform:junit-platform-launcher", version.ref = "junit" } kasechange = "net.pearx.kasechange:kasechange:1.4.1" konf = { module = "com.uchuhimo:konf", version.ref = "konf" } korim = "com.soywiz.korlibs.korim:korim:4.0.10" @@ -82,13 +84,15 @@ kotlin-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-co kotlin-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "kotlinx-coroutines" } kotlin-jvm-plugin = { module = "org.jetbrains.kotlin.jvm:org.jetbrains.kotlin.jvm.gradle.plugin", version.ref = "kotlin" } kotlin-multiplatform-plugin = { module = "org.jetbrains.kotlin.multiplatform:org.jetbrains.kotlin.multiplatform.gradle.plugin", version.ref = "kotlin" } -kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } -kotlin-test-annotations = { module = "org.jetbrains.kotlin:kotlin-test-annotations-common", version.ref = "kotlin" } kotlin-power-assert-plugin = { module = "org.jetbrains.kotlin.plugin.power-assert:org.jetbrains.kotlin.plugin.power-assert.gradle.plugin", version.ref = "kotlin" } kotlin-quality-assurance-plugin = "org.danilopianini.gradle-kotlin-qa:org.danilopianini.gradle-kotlin-qa.gradle.plugin:1.0.1" kotlin-react = { module = "org.jetbrains.kotlin-wrappers:kotlin-react", version.ref = "react" } kotlin-react-dom = { module = "org.jetbrains.kotlin-wrappers:kotlin-react-dom", version.ref = "react" } kotlin-reflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref = "kotlin" } +kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } +kotlin-test-annotations = { module = "org.jetbrains.kotlin:kotlin-test-annotations-common", version.ref = "kotlin" } +ksp-api = { module = "com.google.devtools.ksp:symbol-processing-api", version.ref = "ksp" } +ksp = { module = "com.google.devtools.ksp:symbol-processing", version.ref = "ksp" } kotlinx-atomicfu-runtime = { module = "org.jetbrains.kotlin:kotlinx-atomicfu-runtime", version.ref = "kotlin" } kotlinx-serialization-json = "org.jetbrains.kotlinx:kotlinx-serialization-json:1.10.0" kotlin-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "kotlin" } @@ -165,6 +169,7 @@ scalacache = [ "scalacache-core", "scalacache-guava" ] scalatest = [ "scalatest", "scalatest-junit", "junit-platform-engine", "junit-platform-launcher" ] testing-compile = [ "junit-api", + "junit-params", "kotest-assertions-core", "kotest-assertions-table", "kotest-runner", @@ -183,6 +188,7 @@ graphql-client = { id = "com.apollographql.apollo3", version.ref = "apollo" } graphql-server = { id = "com.expediagroup.graphql", version.ref = "graphql" } hugo = "io.github.fstaudt.hugo:0.12.0" kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } +ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } ktor = { id = "io.ktor.plugin", version.ref = "ktor" } multiJvmTesting = "org.danilopianini.multi-jvm-test-plugin:4.3.2" publishOnCentral = "org.danilopianini.publish-on-central:9.1.13" diff --git a/kotlinscripting.xml b/kotlinscripting.xml new file mode 100644 index 0000000000..5f88afaa61 --- /dev/null +++ b/kotlinscripting.xml @@ -0,0 +1,16 @@ + + + + + + + diff --git a/settings.gradle.kts b/settings.gradle.kts index f120f87f14..c749707584 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -18,6 +18,7 @@ include( "alchemist-cognitive-agents", "alchemist-engine", "alchemist-euclidean-geometry", + "alchemist-factories-generator", "alchemist-full", "alchemist-graphql", "alchemist-graphql-surrogates", @@ -26,6 +27,7 @@ include( "alchemist-incarnation-sapere", "alchemist-incarnation-scafi", "alchemist-incarnation-biochemistry", + "alchemist-kotlinscript", "alchemist-loading", "alchemist-maintenance-tooling", "alchemist-maps", diff --git a/src/test/resources/dodgeball.alchemist.kts b/src/test/resources/dodgeball.alchemist.kts new file mode 100644 index 0000000000..bfac78b697 --- /dev/null +++ b/src/test/resources/dodgeball.alchemist.kts @@ -0,0 +1,33 @@ +import it.unibo.alchemist.boundary.dsl.Dsl.incarnation +import it.unibo.alchemist.boundary.dsl.Dsl.simulation + +/* + * Copyright (C) 2010-2025, Danilo Pianini and contributors + * listed, for each module, in the respective subproject's build.gradle.kts file. + * + * This file is part of Alchemist, and is distributed under the terms of the + * GNU General Public License, with a linking exception, + * as described in the file LICENSE in the Alchemist distribution's top directory. + */ +import it.unibo.alchemist.boundary.swingui.monitor.impl.SwingGUI +val incarnation = SAPERE.incarnation() +simulation(incarnation) { + networkModel = ConnectWithinDistance(0.5) + monitors { +SwingGUI(environment)} + deployments{ + deploy (grid(-5.0, -5.0, 5.0, 5.0, + 0.25, 0.25, 0.1, 0.1, 0.0, 0.0)){ + inside(RectangleFilter(-0.5, -0.5, 1.0, 1.0)) { + molecule = "ball" + } + all{ molecule = "{hit, 0}"} + programs { + all{ + timeDistribution("1") + program = "{ball} {hit, N} --> {hit, N + 1} {launching}" + } + all { program = "{launching} --> +{ball}"} + } + } + } +} diff --git a/src/test/resources/dodgeball.yml b/src/test/resources/dodgeball.yml new file mode 100644 index 0000000000..503a1237c0 --- /dev/null +++ b/src/test/resources/dodgeball.yml @@ -0,0 +1,14 @@ +incarnation: sapere +network-model: { type: ConnectWithinDistance, parameters: [0.5] } +deployments: + type: Grid + parameters: [-5.0, -5.0, 5.0, 5.0, 0.25, 0.25, 0.1, 0.1, 0.0, 0.0] # A perturbed grid of devices + contents: + - molecule: "{hit, 0}" # Everywhere, no one has been hit + - in: { type: Rectangle, parameters: [-0.5, -0.5, 1, 1] } # Inside this shape... + molecule: ball # ...every node has a ball + programs: + - time-distribution: 1 # This is a frequency, time distribution type is left to the incarnation + # 'program' specs are passed down to the incarnation for being interpreted as reactions + program: "{ball} {hit, N} --> {hit, N + 1} {launching}" # If hit, count the hit + - program: "{launching} --> +{ball}" # As soon as possible, throw the ball to a neighbor \ No newline at end of file