diff --git a/docs/literate/man/params_in_struct.jl b/docs/literate/man/params_in_struct.jl new file mode 100644 index 0000000..94d4440 --- /dev/null +++ b/docs/literate/man/params_in_struct.jl @@ -0,0 +1,30 @@ +# # Add params in NamedTrajectory + +# NamedTrajectory.jl support passing parameters as a Tuple when construct a `NamedTrajectory`. + +using NamedTrajectories + +# First we need to define number of timesteps and timestep +T = 10 +dt = 0.1 + +# then build named tuple of components and data matrices. +components = ( + x = rand(3, T), + u = rand(2, T), + Δt = fill(dt, 1, T), +) + +# we must specify a timestep and control variable for the trajectory. + +timestep = 0.1 +control = :u + +# some global params as a NamedTuple +params = ( + α = rand(1), + β = rand(1) +) + +# we can now create a `NamedTrajectory` object with parameters specification. +traj = NamedTrajectory(components; timestep=timestep, controls=control, params=params) \ No newline at end of file diff --git a/docs/make.jl b/docs/make.jl index 20b62a6..0cc2c96 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -9,11 +9,13 @@ pages = [ "Quickstart Guide" => "generated/quickstart.md", "Manual" => [ "generated/man/constructors.md", + "generated/man/params_in_struct.md", # "generated/man/retrieval.md", # "generated/man/add_remove.md", # "generated/man/updating.md", # "generated/man/times.md", # "generated/man/operations.md", + ], "Plotting" => "generated/plotting.md", "Library" => "lib.md" diff --git a/docs/src/generated/man/params_in_struct.md b/docs/src/generated/man/params_in_struct.md new file mode 100644 index 0000000..88cf32e --- /dev/null +++ b/docs/src/generated/man/params_in_struct.md @@ -0,0 +1,55 @@ +```@meta +EditURL = "../../../literate/man/params_in_struct.jl" +``` + +# Add params in NamedTrajectory + +NamedTrajectory.jl support passing parameters as a Tuple when construct a `NamedTrajectory`. + +````@example params_in_struct +using NamedTrajectories +```` + +First we need to define number of timesteps and timestep + +````@example params_in_struct +T = 10 +dt = 0.1 +```` + +then build named tuple of components and data matrices. + +````@example params_in_struct +components = ( + x = rand(3, T), + u = rand(2, T), + Δt = fill(dt, 1, T), +) +```` + +we must specify a timestep and control variable for the trajectory. + +````@example params_in_struct +timestep = 0.1 +control = :u +```` + +some global params as a NamedTuple + +````@example params_in_struct +params = ( + α = rand(1), + β = rand(1) +) +```` + +we can now create a `NamedTrajectory` object with parameters specification. + +````@example params_in_struct +traj = NamedTrajectory(components; timestep=timestep, controls=control, params=params) +```` + +--- + +*This page was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).* + diff --git a/src/struct_named_trajectory.jl b/src/struct_named_trajectory.jl index ae4222a..9361f50 100644 --- a/src/struct_named_trajectory.jl +++ b/src/struct_named_trajectory.jl @@ -23,6 +23,7 @@ mutable struct NamedTrajectory{R <: Real} final::NamedTuple{fnames, <:Tuple{Vararg{AbstractVector{R}}}} where fnames goal::NamedTuple{gnames, <:Tuple{Vararg{AbstractVector{R}}}} where gnames components::NamedTuple{cnames, <:Tuple{Vararg{AbstractVector{Int}}}} where cnames + params::NamedTuple{pnames, <:Tuple{Vararg{AbstractVector{R}}}} where pnames names::Tuple{Vararg{Symbol}} state_names::Tuple{Vararg{Symbol}} control_names::Tuple{Vararg{Symbol}} @@ -49,6 +50,7 @@ function NamedTrajectory( initial=(;), final=(;), goal=(;), + params=(;), ) where R <: Real controls = controls isa Symbol ? (controls,) : controls @@ -167,6 +169,7 @@ function NamedTrajectory( final, goal, comps, + params, names, state_names, controls @@ -221,6 +224,7 @@ function NamedTrajectory( initial=(;), final=(;), goal=(;), + params=(;), ) where R <: Real controls = (controls isa Symbol) ? (controls,) : controls @@ -291,6 +295,7 @@ function NamedTrajectory( final, goal, components, + params, names, state_names, controls @@ -328,6 +333,7 @@ function NamedTrajectory( Z.final, Z.goal, Z.components, + Z.params, Z.names, Z.state_names, Z.control_names @@ -365,6 +371,7 @@ function NamedTrajectory( traj.final, traj.goal, traj.components, + traj.params, traj.names, traj.state_names, traj.control_names @@ -416,6 +423,7 @@ function NamedTrajectory( initial = NamedTuple([(k => traj.initial[k]) for k ∈ keys(comps) if k ∈ keys(traj.initial)]) final = NamedTuple([(k => traj.final[k]) for k ∈ keys(comps) if k ∈ keys(traj.final)]) goal = NamedTuple([(k => traj.goal[k]) for k ∈ keys(comps) if k ∈ keys(traj.goal)]) + params = NamedTuple([(k => traj.params[k]) for k ∈ keys(comps) if k ∈ keys(traj.params)]) return NamedTrajectory( comps; @@ -425,6 +433,7 @@ function NamedTrajectory( initial=initial, final=final, goal=goal, + params ) end diff --git a/test/test_constructor.jl b/test/test_constructor.jl new file mode 100644 index 0000000..afaec51 --- /dev/null +++ b/test/test_constructor.jl @@ -0,0 +1,28 @@ +""" +test: struct_named_trajectory.jl +""" + +@testset "testing constructor" begin + # define number of timesteps and timestep + T = 10 + dt = 0.1 + + components = ( + x = rand(3, T), + u = rand(2, T), + Δt = fill(dt, 1, T), + ) + + timestep = 0.1 + control = :u + + # some global params as a NamedTuple + params = ( + α = rand(1), + β = rand(1) + ) + + traj = NamedTrajectory(components; timestep=timestep, controls=control, params=params) + + @test traj.params == params +end \ No newline at end of file