Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
eckter committed May 7, 2024
1 parent adcf61b commit 33ad49b
Show file tree
Hide file tree
Showing 8 changed files with 48 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ class STDCMEndpointV2(private val infraManager: InfraManager) : Take {
makeBlockAvailability(
infra,
spacingRequirements,
workSchedules = request.workSchedules,
gridMarginBeforeTrain = request.timeGapBefore.seconds,
gridMarginAfterTrain = request.timeGapAfter.seconds
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,17 @@ import com.squareup.moshi.JsonAdapter
import com.squareup.moshi.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
import fr.sncf.osrd.api.api_v2.TrackLocation
import fr.sncf.osrd.api.api_v2.UndirectedTrackRange
import fr.sncf.osrd.api.api_v2.conflicts.TrainRequirementsRequest
import fr.sncf.osrd.api.api_v2.standalone_sim.MarginValue
import fr.sncf.osrd.api.api_v2.standalone_sim.MarginValueAdapter
import fr.sncf.osrd.api.api_v2.standalone_sim.PhysicsRollingStockModel
import fr.sncf.osrd.railjson.schema.rollingstock.RJSLoadingGaugeType
import fr.sncf.osrd.sim_infra.api.TrackSection
import fr.sncf.osrd.train.RollingStock.Comfort
import fr.sncf.osrd.utils.json.UnitAdapterFactory
import fr.sncf.osrd.utils.units.Duration
import fr.sncf.osrd.utils.units.Offset
import fr.sncf.osrd.utils.units.TimeDelta
import fr.sncf.osrd.utils.units.seconds
import java.time.ZonedDateTime
Expand Down Expand Up @@ -53,13 +56,23 @@ class STDCMRequestV2(
@Json(name = "time_gap_after") val timeGapAfter: TimeDelta,
/// Margin to apply to the whole train.
val margin: MarginValue,
@Json(name = "work_schedules") val workSchedules: Collection<WorkSchedule> = listOf(),
)

class STDCMPathItem(
val locations: List<TrackLocation>,
@Json(name = "stop_duration") val stopDuration: Duration?,
)

class TrackOffset(val track: String, val offset: Offset<TrackSection>)

data class WorkSchedule(
/** List of affected track ranges */
@Json(name = "track_ranges") val trackRanges: Collection<UndirectedTrackRange> = listOf(),
@Json(name = "start_time") val startTime: TimeDelta,
@Json(name = "end_time") val endTime: TimeDelta,
)

val stdcmRequestAdapter: JsonAdapter<STDCMRequestV2> =
Moshi.Builder()
.add(MarginValueAdapter())
Expand Down
8 changes: 0 additions & 8 deletions core/src/main/kotlin/fr/sncf/osrd/api/stdcm/STDCMRequest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import com.squareup.moshi.JsonAdapter
import com.squareup.moshi.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings
import fr.sncf.osrd.api.api_v2.UndirectedTrackRange
import fr.sncf.osrd.api.pathfinding.request.PathfindingWaypoint
import fr.sncf.osrd.railjson.schema.common.ID
import fr.sncf.osrd.railjson.schema.rollingstock.RJSComfortType
Expand Down Expand Up @@ -98,13 +97,6 @@ constructor(
var waypoints: Collection<PathfindingWaypoint>
)

data class WorkSchedule(
/** List of affected track ranges */
@Json(name = "track_ranges") val trackRanges: Collection<UndirectedTrackRange> = listOf(),
@Json(name = "start_time") val startTime: Double,
@Json(name = "end_time") val endTime: Double,
)

companion object {
val adapter: JsonAdapter<STDCMRequest> =
Moshi.Builder()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package fr.sncf.osrd.stdcm.preprocessing.implementation

import fr.sncf.osrd.api.FullInfra
import fr.sncf.osrd.api.stdcm.STDCMRequest
import fr.sncf.osrd.api.api_v2.stdcm.WorkSchedule
import fr.sncf.osrd.conflicts.IncrementalConflictDetector
import fr.sncf.osrd.conflicts.TrainRequirements
import fr.sncf.osrd.conflicts.TravelledPath
Expand Down Expand Up @@ -100,7 +100,7 @@ data class BlockAvailability(
fun makeBlockAvailability(
infra: FullInfra,
requirements: Collection<SpacingRequirement>,
workSchedules: Collection<STDCMRequest.WorkSchedule> = listOf(),
workSchedules: Collection<WorkSchedule> = listOf(),
gridMarginBeforeTrain: Double = 0.0,
gridMarginAfterTrain: Double = 0.0,
): BlockAvailabilityInterface {
Expand Down Expand Up @@ -133,7 +133,7 @@ fun makeBlockAvailability(
*/
private fun convertWorkSchedules(
infra: RawSignalingInfra,
workSchedules: Collection<STDCMRequest.WorkSchedule>
workSchedules: Collection<WorkSchedule>
): List<SpacingRequirement> {
val res = mutableListOf<SpacingRequirement>()
for (entry in workSchedules) {
Expand All @@ -149,8 +149,8 @@ private fun convertWorkSchedules(
res.add(
SpacingRequirement(
infra.getZoneName(zone),
entry.startTime,
entry.endTime,
entry.startTime.seconds,
entry.endTime.seconds,
true
)
)
Expand Down
9 changes: 5 additions & 4 deletions core/src/test/kotlin/fr/sncf/osrd/stdcm/FullSTDCMTests.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package fr.sncf.osrd.stdcm
import com.google.common.collect.HashMultimap
import fr.sncf.osrd.api.FullInfra
import fr.sncf.osrd.api.api_v2.UndirectedTrackRange
import fr.sncf.osrd.api.stdcm.STDCMRequest
import fr.sncf.osrd.api.api_v2.stdcm.WorkSchedule
import fr.sncf.osrd.api.stdcm.makeTrainSchedule
import fr.sncf.osrd.railjson.parser.RJSRollingStockParser
import fr.sncf.osrd.standalone_sim.result.ResultTrain.SpacingRequirement
Expand All @@ -15,6 +15,7 @@ import fr.sncf.osrd.utils.Helpers
import fr.sncf.osrd.utils.Helpers.smallInfra
import fr.sncf.osrd.utils.units.Offset
import fr.sncf.osrd.utils.units.meters
import fr.sncf.osrd.utils.units.seconds
import java.io.IOException
import java.net.URISyntaxException
import org.junit.jupiter.api.Assertions
Expand Down Expand Up @@ -158,10 +159,10 @@ class FullSTDCMTests {
smallInfra,
listOf(),
listOf(
STDCMRequest.WorkSchedule(
WorkSchedule(
listOf(UndirectedTrackRange("TB0", Offset(0.meters), Offset(2000.meters))),
0.0,
3600.0
0.seconds,
3600.seconds
)
)
)
Expand Down
19 changes: 19 additions & 0 deletions editoast/src/core/v2/stdcm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,25 @@ pub struct STDCMPathItem {
pub stop_duration: Option<u64>,
}

#[derive(Debug, Serialize)]
pub struct SimpleWorkSchedule {
pub start_time: u64,
pub end_time: u64,
pub start_ranges: Vec<UndirectedTrackRange>
}

/// A range on a track section.
/// `begin` is always less than `end`.
#[derive(Serialize, Deserialize, Clone, Debug, ToSchema, Hash, PartialEq, Eq)]
pub struct UndirectedTrackRange {
/// The track section identifier.
// pub track_section: str,
/// The beginning of the range in mm.
pub begin: u64,
/// The end of the range in mm.
pub end: u64,
}

#[derive(Debug, Serialize)]
pub struct TrainRequirement {
/// The start datetime of the train
Expand Down
3 changes: 3 additions & 0 deletions editoast/src/views/v2/timetable/stdcm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ use crate::views::v2::path::pathfinding::extract_location_from_path_items;
use crate::views::v2::path::pathfinding::TrackOffsetExtractionError;
use crate::views::v2::train_schedule::train_simulation_batch;
use crate::DbConnectionPool;
use crate::models::NoParams;
use crate::modelsv2::work_schedules::WorkSchedule;
use crate::RedisClient;
use crate::Retrieve;
use crate::RetrieveBatch;
Expand Down Expand Up @@ -184,6 +186,7 @@ async fn stdcm(
},
);
}
// let work_schedules = WorkSchedule::list_conn(conn, page, per_page, NoParams).await?;

// 3. Parse stdcm path items
let path_items = parse_stdcm_steps(db_pool, &data, &infra).await?;
Expand Down
4 changes: 2 additions & 2 deletions tests/fuzzer/fuzzer.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

TIMEOUT = 15
# Note that regression tests expect small_infra.
INFRA_NAME = "small_infra"
INFRA_NAME = "France"
# Consistent rolling stock is useful for regression testing, otherwise set None for randomness.
ROLLING_STOCK_NAME = "fast_rolling_stock"
EDITOAST_URL = "http://127.0.0.1:8090/"
Expand Down Expand Up @@ -116,7 +116,7 @@ def run_test(
else get_rolling_stock(editoast_url, rolling_stock_name)
)
path, path_length = make_valid_path(infra)
if random.randint(0, 1) == 0:
if random.randint(0, 0) == 0:
test_new_train(editoast_url, scenario, rolling_stock, path_length, infra_name, path, prelude)
else:
test_stdcm(editoast_url, scenario, rolling_stock, infra_name, path, prelude)
Expand Down

0 comments on commit 33ad49b

Please sign in to comment.