Skip to content

Commit 9297e33

Browse files
committed
getIndependentSignalSizes(..) changed to getIndependentSignalsSize (return argument is now a Dims and no longer a vector of Dims)
1 parent 650095f commit 9297e33

File tree

7 files changed

+39
-20
lines changed

7 files changed

+39
-20
lines changed

docs/src/Functions/OverviewOfFunctions.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ Note, *FileIO* functions (e.g. JSON, HDF5) can be directly used, see [FileIO Exa
4444
| [`hasSignal`](@ref) | Returns `true` if a signal is present in a signal table. |
4545
| [`getSignal`](@ref) | Returns signal from a signal table as [`Var`](@ref) or as [`Par`](@ref). |
4646
| [`getSignalInfo`](@ref) | Returns signal with :\_typeof, :\_size keys instead of :values/:value keys. |
47+
| [`getIndependentSignalsSize`](@ref)| Returns the lengths of the independent signals as Dims. |
4748
| [`getValues`](@ref) | Returns the *values* of a [`Var`](@ref) signal from a signal table. |
4849
| [`getValuesWithUnit`](@ref) | Returns the *values* of a [`Var`](@ref) signal from a signal table including its unit. |
4950
| [`getValue`](@ref) | Returns the *value* of a [`Par`](@ref) signal from a signal table. |

docs/src/Functions/SignalTables.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ The functions below operate on a *signal table* that implements the [Abstract Si
2020
| [`hasSignal`](@ref) | Returns `true` if a signal is present in a signal table. |
2121
| [`getSignal`](@ref) | Returns signal from a signal table as [`Var`](@ref) or as [`Par`](@ref). |
2222
| [`getSignalInfo`](@ref) | Returns signal with :\_typeof, :\_size keys instead of :values/:value keys. |
23-
| [`getIndependentSignalSizes`](@ref)| Returns the sizes of the independent signals. |
23+
| [`getIndependentSignalsSize`](@ref)| Returns the lengths of the independent signals as Dims. |
2424
| [`getValues`](@ref) | Returns the *values* of a [`Var`](@ref) signal from a signal table. |
2525
| [`getValuesWithUnit`](@ref) | Returns the *values* of a [`Var`](@ref) signal from a signal table including its unit. |
2626
| [`getValue`](@ref) | Returns the *value* of a [`Par`](@ref) signal from a signal table. |
@@ -38,7 +38,7 @@ signalNames
3838
hasSignal
3939
getSignal
4040
getSignalInfo
41-
getIndependentSignalSizes
41+
getIndependentSignalsSize
4242
getValues
4343
getValuesWithUnit
4444
getValue

docs/src/Internal/AbstractSignalTableInterface.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ Functions that are marked as *optional* have a default implementation.
2828
| [`signalNames`](@ref) | Returns a string vector of the signal names from a signal table (*required*). |
2929
| [`getSignal`](@ref) | Returns signal from a signal table as [`Var`](@ref) or as [`Par`](@ref) (*required*). |
3030
| [`getSignalInfo`](@ref) | Returns signal with :\_typeof, :\_size keys instead of :values/:value key (*optional*). |
31-
| [`getIndependentSignalSizes`](@ref)| Returns the sizes of the independent signals. (*optional*). |
31+
| [`getIndependentSignalsSize`](@ref)| Returns the lengths of the independent signals as Dims. (*optional*). |
3232
| [`getDefaultHeading`](@ref) | Returns the default heading for a plot. (*optional*). |
3333
| [`hasSignal`](@ref) | Returns true if signal name is present in signal table. (*optional*). |
3434

src/AbstractSignalTableInterface.jl

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -117,11 +117,23 @@ end
117117

118118

119119
"""
120-
getIndependentSignalSizes(signalTable)::Vector{Dims}
121-
122-
Returns the sizes of the independent signals.
123-
"""
124-
getIndependentSignalSizes(signalTable)::Vector{Dims} = Dims[getSignalInfo(signalTable,name)[:_size] for name in independentSignalNames(signalTable)]
120+
getIndependentSignalsSize(signalTable)::Dims
121+
122+
Returns the lengths of the independent signals as Dims.
123+
E.g. for one independent signal of length 5 return (5,),
124+
or for two independent signals of length 5 and 7 return (5,7).
125+
"""
126+
function getIndependentSignalsSize(signalTable)::Dims
127+
sigLength = Int[]
128+
for name in independentSignalNames(signalTable)
129+
sigSize = getSignalInfo(signalTable,name)[:_size]
130+
if length(sigSize) != 1
131+
error("Independent signal $name has not one dimension but has size = $sigSize")
132+
end
133+
push!(sigLength, sigSize[1])
134+
end
135+
return ntuple(i -> sigLength[i], length(sigLength))
136+
end
125137

126138

127139
"""

src/SignalTable.jl

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -97,12 +97,12 @@ SignalTable(
9797
struct SignalTable <: AbstractDict{String,Any}
9898
dict::StringDictType
9999
independendentSignalNames::Vector{String}
100-
independentSignalsFirstDimension::Vector{Int}
100+
independentSignalsSize::NTuple
101101

102102
function SignalTable(args...)
103103
dict = new_signal_table()
104104
independendentSignalNames = String[]
105-
independentSignalsFirstDimension = Int[]
105+
independentSignalLengths = Int[]
106106
k = 0
107107
for (key, sig) in args
108108
if !isSignal(sig)
@@ -116,10 +116,14 @@ struct SignalTable <: AbstractDict{String,Any}
116116
end
117117
if get(sig, :independent, false)
118118
k += 1
119+
ndims_sig = ndims(sig_values)
120+
if ndims_sig != 1
121+
error("SignalTable(.., $key => ..): Independent signal $key must have one dimension, but has $ndims_sig dimensions.")
122+
end
119123
push!(independendentSignalNames, key)
120-
push!(independentSignalsFirstDimension, size(sig_values, 1))
124+
push!(independentSignalLengths, length(sig_values))
121125
else
122-
for (i,val) in enumerate(independentSignalsFirstDimension)
126+
for (i,val) in enumerate(independentSignalLengths)
123127
if size(sig_values, i) != val
124128
error("SignalTable(\"$key\" => signal, ...): size(signal[:values],$i) = $(size(sig_values,i)) but must be $val (= length of independent signal)!")
125129
end
@@ -153,7 +157,7 @@ struct SignalTable <: AbstractDict{String,Any}
153157
end
154158
dict[key] = sig
155159
end
156-
new(dict, independendentSignalNames, independentSignalsFirstDimension)
160+
new(dict, independendentSignalNames, ntuple(i -> independentSignalLengths[i], length(independentSignalLengths)))
157161
end
158162
end
159163
Base.convert(::Type{StringDictType}, sig::SignalTable) = sig.dict
@@ -199,11 +203,13 @@ end
199203

200204
# Implementation of AbstractSignalTableInterface
201205
isSignalTable(sigTable::SignalTable) = true
202-
independentSignalNames(sigTable::SignalTable) = sigTable.independendentSignalNames
206+
independentSignalNames( sigTable::SignalTable) = sigTable.independendentSignalNames
207+
getIndependentSignalsSize(sigTable::SignalTable) = sigTable.independentSignalsSize
203208
signalNames( sigTable::SignalTable) = setdiff(String.(keys(sigTable)), ["_class"])
204209
getSignal( sigTable::SignalTable, name::String) = sigTable[name]
205210
hasSignal( sigTable::SignalTable, name::String) = haskey(sigTable, name)
206211

212+
207213
function getDefaultHeading(sigTable::SignalTable)::String
208214
attr = get(sigTable, "attributes", "")
209215
if attr == ""

src/SignalTableFunctions.jl

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -328,12 +328,12 @@ function getFlattenedSignal(signalTable, name::String;
328328
missingToNaN = true,
329329
targetInt = Int,
330330
targetFloat = Float64)
331-
independentSignalSizes = getIndependentSignalSizes(signalTable)
332-
if length(independentSignalSizes) != 1
333-
ni = length(independentSignalSizes)
334-
error("getFlattenedSignal(..) currently only supported for one independent signal,\nbut number of independent signals = $ni!")
331+
independentSignalsSize = getIndependentSignalsSize(signalTable)
332+
if length(independentSignalsSize) != 1
333+
ni = length(independentSignalsSize)
334+
error("getFlattenedSignal(.., $name) currently only supported for one independent signal,\nbut number of independent signals = $ni!")
335335
end
336-
lenx = independentSignalSizes[1]
336+
lenx = independentSignalsSize[1]
337337
sigPresent = false
338338
if hasSignal(signalTable,name)
339339
# name is a signal name without range

src/SignalTables.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import Pkg
1414
export SignalType, Var, Par, isVar, isPar, isSignal, showSignal, basetype, quantity, unitAsParseableString
1515

1616
# Abstract Signal Table Interface
17-
export isSignalTable, independentSignalNames, signalNames, hasSignal, getSignal, getSignalInfo, getIndependentSignalSizes, getDefaultHeading
17+
export isSignalTable, independentSignalNames, signalNames, hasSignal, getSignal, getSignalInfo, getIndependentSignalsSize, getDefaultHeading
1818

1919
# Signal table functions
2020
export new_signal_table, getValues, getValue, getValuesWithUnit, getValueWithUnit, getFlattenedSignal, showInfo, getHeading

0 commit comments

Comments
 (0)