From 36713460fded41e44a3bbdf3e783160615e1c48b Mon Sep 17 00:00:00 2001
From: Mahmoud Bentriou <mahmoud.bentriou@centralesupelec.fr>
Date: Sun, 21 Mar 2021 17:48:43 +0100
Subject: [PATCH] new methods trajectory_from_csv

---
 core/MarkovProcesses.jl |  2 +-
 core/trajectory.jl      | 20 ++++++++++++++++++++
 2 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/core/MarkovProcesses.jl b/core/MarkovProcesses.jl
index fe716b1..0165793 100644
--- a/core/MarkovProcesses.jl
+++ b/core/MarkovProcesses.jl
@@ -29,7 +29,7 @@ export InvariantPredicateFunction, CheckConstraintsFunction, UpdateStateFunction
 # Trajectory related methods
 export +, -, δ, dist_lp, euclidean_distance
 export get_obs_var, length_states, length_obs_var
-export get_state_from_time, get_var_from_time, vectorize
+export get_state_from_time, get_var_from_time, vectorize, trajectory_from_csv
 export isbounded, states, times, transitions
 export check_consistency, issteadystate, isaccepted
 
diff --git a/core/trajectory.jl b/core/trajectory.jl
index da97f76..3712415 100644
--- a/core/trajectory.jl
+++ b/core/trajectory.jl
@@ -308,3 +308,23 @@ function +(σ1::AbstractTrajectory,σ2::AbstractTrajectory) end
 function -(σ1::AbstractTrajectory,σ2::AbstractTrajectory) end
 δ(σ::AbstractTrajectory,idx::Int) = times(σ)[i+1] - times(σ)[i]
 
+function trajectory_from_csv(csv_file, model::ContinuousTimeModel)
+    csv_mat_values, header = readdlm(csv_file, ',', header = true)
+    nbr_states = size(csv_mat_values, 1)
+    times = zeros(nbr_states)
+    values = Vector{Vector{Int}}(undef, length(model.g))
+    transitions = fill(nothing, nbr_states)
+    for i = eachindex(header)
+        model_var = header[i]
+        if model_var == "time"
+            times = csv_mat_values[:,i]
+        elseif model_var == "transitions"
+            transitions = csv_mat_values[:,i]
+        else
+            @assert Symbol(model_var) in model.g "Variable is not observed in the model"
+            values[model._map_obs_var_idx[Symbol(model_var)]] = csv_mat_values[:,i]
+        end
+    end
+    return Trajectory(model, values, times, transitions)
+end
+
-- 
GitLab