Skip to content

Commit c6d6900

Browse files
authored
Merge branch 'dev' into hai/editoast-refactor-infra-tests-part-7
2 parents 2b22ec9 + e69ecb1 commit c6d6900

File tree

63 files changed

+2064
-678
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+2064
-678
lines changed

.github/scripts/check-commit-titles.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ while IFS= read -r commit_title; do
5959
# if it's the first error for this commit, print the error header
6060
if [ -z "$commit_check_failed" ]; then
6161
printf '%sinvalid commit title:%s ' "$RED" "$RESET"
62-
printf '%s%s%s\n' "$BLUE" "$commit_title" "$RESET"
62+
printf '%s"%s"%s\n' "$BLUE" "$commit_title" "$RESET"
6363
fi
6464

6565
printf ' %s- %s%s\n' "$RED" "$check_error" "$RESET"

core/gradle/libs.versions.toml

+3
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,13 @@ opentelemetry-instrumentation-annotations = { module = 'io.opentelemetry.instrum
6868
opentracing-util = { module = 'io.opentracing:opentracing-util', version = '0.33.0' }
6969
dd-trace-api = { module = 'com.datadoghq:dd-trace-api', version = '1.31.2' }
7070

71+
kaml = { module = 'com.charleskorn.kaml:kaml', version = '0.59.0' } # Apache 2.0
72+
7173
[plugins]
7274
# kotlin
7375
ksp = { id = 'com.google.devtools.ksp', version.ref = 'ksp' }
7476
kotlin-jvm = { id = 'org.jetbrains.kotlin.jvm', version.ref = 'kotlin' }
77+
kotlin-serialization = { id = 'org.jetbrains.kotlin.plugin.serialization', version.ref = 'kotlin' }
7578

7679
# java
7780
spotbugs = { id = 'com.github.spotbugs', version = '6.0.9' }

core/kt-osrd-rjs-parser/build.gradle

+4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
plugins {
22
alias(libs.plugins.kotlin.jvm)
3+
alias(libs.plugins.kotlin.serialization)
34
alias(libs.plugins.ksp)
45
id 'jacoco'
56
}
@@ -30,6 +31,9 @@ dependencies {
3031

3132
// Use JUnit Jupiter API for testing.
3233
testImplementation libs.junit.jupiter.api
34+
35+
// YAML
36+
implementation libs.kaml
3337
}
3438

3539
// to get KSP generated-stuff to be recognised

core/kt-osrd-rjs-parser/src/main/kotlin/fr/sncf/osrd/RawInfraRJSParser.kt

+89-5
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
package fr.sncf.osrd
22

3+
import com.charleskorn.kaml.Yaml
34
import com.google.common.primitives.Doubles
45
import fr.sncf.osrd.geom.LineString
56
import fr.sncf.osrd.railjson.schema.common.graph.EdgeDirection
67
import fr.sncf.osrd.railjson.schema.common.graph.EdgeEndpoint
78
import fr.sncf.osrd.railjson.schema.geom.RJSLineString
8-
import fr.sncf.osrd.railjson.schema.infra.*
9+
import fr.sncf.osrd.railjson.schema.infra.RJSInfra
10+
import fr.sncf.osrd.railjson.schema.infra.RJSRoute
11+
import fr.sncf.osrd.railjson.schema.infra.RJSSwitch
12+
import fr.sncf.osrd.railjson.schema.infra.RJSSwitchType
13+
import fr.sncf.osrd.railjson.schema.infra.RJSTrackSection
914
import fr.sncf.osrd.railjson.schema.infra.trackobjects.RJSRouteWaypoint
1015
import fr.sncf.osrd.railjson.schema.infra.trackobjects.RJSSignal
1116
import fr.sncf.osrd.railjson.schema.infra.trackranges.RJSElectrification
@@ -15,28 +20,70 @@ import fr.sncf.osrd.railjson.schema.infra.trackranges.RJSSpeedSection
1520
import fr.sncf.osrd.railjson.schema.rollingstock.RJSLoadingGaugeType
1621
import fr.sncf.osrd.reporting.exceptions.ErrorType
1722
import fr.sncf.osrd.reporting.exceptions.OSRDError
18-
import fr.sncf.osrd.sim_infra.api.*
23+
import fr.sncf.osrd.sim_infra.api.Detector
24+
import fr.sncf.osrd.sim_infra.api.DetectorId
25+
import fr.sncf.osrd.sim_infra.api.DirDetectorId
26+
import fr.sncf.osrd.sim_infra.api.DirTrackSectionId
27+
import fr.sncf.osrd.sim_infra.api.EndpointTrackSectionId
28+
import fr.sncf.osrd.sim_infra.api.LoadingGaugeConstraint
29+
import fr.sncf.osrd.sim_infra.api.LoadingGaugeType
30+
import fr.sncf.osrd.sim_infra.api.NeutralSection
31+
import fr.sncf.osrd.sim_infra.api.RawInfra
32+
import fr.sncf.osrd.sim_infra.api.RawSignalParameters
33+
import fr.sncf.osrd.sim_infra.api.TrackChunk
34+
import fr.sncf.osrd.sim_infra.api.TrackNodeConfig
35+
import fr.sncf.osrd.sim_infra.api.TrackNodeConfigId
36+
import fr.sncf.osrd.sim_infra.api.TrackNodeId
37+
import fr.sncf.osrd.sim_infra.api.TrackNodePort
38+
import fr.sncf.osrd.sim_infra.api.TrackNodePortId
39+
import fr.sncf.osrd.sim_infra.api.TrackSection
40+
import fr.sncf.osrd.sim_infra.api.ZoneId
41+
import fr.sncf.osrd.sim_infra.api.decreasing
42+
import fr.sncf.osrd.sim_infra.api.increasing
1943
import fr.sncf.osrd.sim_infra.impl.BuildRouteError
2044
import fr.sncf.osrd.sim_infra.impl.MissingNodeConfig
2145
import fr.sncf.osrd.sim_infra.impl.RawInfraBuilder
2246
import fr.sncf.osrd.sim_infra.impl.ReachedNodeDeadEnd
2347
import fr.sncf.osrd.sim_infra.impl.ReachedTrackDeadEnd
48+
import fr.sncf.osrd.sim_infra.impl.SpeedLimitTagDescriptor
2449
import fr.sncf.osrd.sim_infra.impl.SpeedSection
2550
import fr.sncf.osrd.sim_infra.impl.TrackChunkDescriptor
2651
import fr.sncf.osrd.sim_infra.impl.TrackNodeConfigDescriptor
2752
import fr.sncf.osrd.sim_infra.impl.route
28-
import fr.sncf.osrd.utils.*
53+
import fr.sncf.osrd.utils.Direction
2954
import fr.sncf.osrd.utils.Direction.DECREASING
3055
import fr.sncf.osrd.utils.Direction.INCREASING
31-
import fr.sncf.osrd.utils.indexing.*
32-
import fr.sncf.osrd.utils.units.*
56+
import fr.sncf.osrd.utils.DirectionalMap
57+
import fr.sncf.osrd.utils.DistanceRangeMap
58+
import fr.sncf.osrd.utils.DistanceRangeMapImpl
59+
import fr.sncf.osrd.utils.Endpoint
60+
import fr.sncf.osrd.utils.UnionFind
61+
import fr.sncf.osrd.utils.distanceRangeMapOf
62+
import fr.sncf.osrd.utils.indexing.DirStaticIdx
63+
import fr.sncf.osrd.utils.indexing.MutableStaticIdxArraySet
64+
import fr.sncf.osrd.utils.indexing.StaticIdx
65+
import fr.sncf.osrd.utils.indexing.StaticPool
66+
import fr.sncf.osrd.utils.indexing.mutableStaticIdxArrayListOf
67+
import fr.sncf.osrd.utils.indexing.mutableStaticIdxArraySetOf
68+
import fr.sncf.osrd.utils.units.Distance
69+
import fr.sncf.osrd.utils.units.Offset
70+
import fr.sncf.osrd.utils.units.Speed
71+
import fr.sncf.osrd.utils.units.meters
72+
import fr.sncf.osrd.utils.units.metersPerSecond
73+
import fr.sncf.osrd.utils.units.mutableOffsetArrayListOf
74+
import java.io.IOException
3375
import java.util.*
3476
import kotlin.collections.set
3577
import kotlin.math.abs
3678
import kotlin.time.Duration.Companion.seconds
79+
import kotlinx.serialization.SerialName
80+
import kotlinx.serialization.Serializable
81+
import kotlinx.serialization.builtins.MapSerializer
82+
import kotlinx.serialization.builtins.serializer
3783
import mu.KotlinLogging
3884

3985
val logger = KotlinLogging.logger {}
86+
private const val SPEED_LIMIT_TAGS_RESOURCE_PATH = "speed_limit_tags.yml"
4087

4188
private fun parseLineString(rjsLineString: RJSLineString?): LineString? {
4289
if (rjsLineString == null) return null
@@ -717,6 +764,41 @@ fun EdgeEndpoint.toEndpoint(): Endpoint {
717764
return if (this == EdgeEndpoint.BEGIN) Endpoint.START else Endpoint.END
718765
}
719766

767+
@Serializable
768+
data class YamlSpeedLimitTagDescriptor(
769+
val name: String,
770+
@SerialName("fallback_list") val fallbackList: List<String>,
771+
@SerialName("default_speed") val defaultSpeed: Double?,
772+
)
773+
774+
fun parseSpeedLimitTags(builder: RawInfraBuilder) {
775+
val resourceURL =
776+
{}.javaClass.classLoader.getResource(SPEED_LIMIT_TAGS_RESOURCE_PATH)
777+
?: throw IOException(
778+
"can't find speedLimitTags resource $SPEED_LIMIT_TAGS_RESOURCE_PATH"
779+
)
780+
val speedLimitTagDescriptors =
781+
Yaml.default.decodeFromString(
782+
MapSerializer(String.serializer(), YamlSpeedLimitTagDescriptor.serializer()),
783+
resourceURL.readText(),
784+
)
785+
786+
for ((tagCode, tagDescriptor) in speedLimitTagDescriptors.entries) {
787+
val defaultSpeed =
788+
if (tagDescriptor.defaultSpeed != null)
789+
Speed.fromMetersPerSecond(tagDescriptor.defaultSpeed)
790+
else null
791+
builder.speedLimitTag(
792+
SpeedLimitTagDescriptor(
793+
tagCode,
794+
tagDescriptor.name,
795+
tagDescriptor.fallbackList,
796+
defaultSpeed
797+
)
798+
)
799+
}
800+
}
801+
720802
fun parseRJSInfra(rjsInfra: RJSInfra): RawInfra {
721803
val builder = RawInfraBuilder()
722804

@@ -821,5 +903,7 @@ fun parseRJSInfra(rjsInfra: RJSInfra): RawInfra {
821903
parseSignal(builder, rjsSignal)
822904
}
823905

906+
parseSpeedLimitTags(builder)
907+
824908
return builder.build()
825909
}

0 commit comments

Comments
 (0)