@@ -3,6 +3,19 @@ function return_init_as(::Val{false}, layer_matrix::AbstractVecOrMat)
33 return layer_matrix
44end
55
6+ # error for sparse inits with no SparseArrays.jl call
7+
8+ function throw_sparse_error (return_sparse)
9+ if return_sparse && ! haskey (Base. loaded_modules, :SparseArrays )
10+ error (""" \n
11+ Sparse output requested but SparseArrays.jl is not loaded.
12+ Please load it with:
13+
14+ using SparseArrays\n
15+ """ )
16+ end
17+ end
18+
619# ## input layers
720"""
821 scaled_rand([rng], [T], dims...;
@@ -91,6 +104,7 @@ julia> res_input = weighted_init(8, 3)
91104"""
92105function weighted_init (rng:: AbstractRNG , :: Type{T} , dims:: Integer... ;
93106 scaling= T (0.1 ), return_sparse:: Bool = false ) where {T <: Number }
107+ throw_sparse_error (return_sparse)
94108 approx_res_size, in_size = dims
95109 res_size = Int (floor (approx_res_size / in_size) * in_size)
96110 layer_matrix = DeviceAgnostic. zeros (rng, T, res_size, in_size)
@@ -354,6 +368,7 @@ function chebyshev_mapping(rng::AbstractRNG, ::Type{T}, dims::Integer...;
354368 amplitude:: AbstractFloat = one (T), sine_divisor:: AbstractFloat = one (T),
355369 chebyshev_parameter:: AbstractFloat = one (T),
356370 return_sparse:: Bool = false ) where {T <: Number }
371+ throw_sparse_error (return_sparse)
357372 input_matrix = DeviceAgnostic. zeros (rng, T, dims... )
358373 n_rows, n_cols = dims[1 ], dims[2 ]
359374
@@ -433,6 +448,7 @@ function logistic_mapping(rng::AbstractRNG, ::Type{T}, dims::Integer...;
433448 amplitude:: AbstractFloat = 0.3 , sine_divisor:: AbstractFloat = 5.9 ,
434449 logistic_parameter:: AbstractFloat = 3.7 ,
435450 return_sparse:: Bool = false ) where {T <: Number }
451+ throw_sparse_error (return_sparse)
436452 input_matrix = DeviceAgnostic. zeros (rng, T, dims... )
437453 num_rows, num_columns = dims[1 ], dims[2 ]
438454 for col in 1 : num_columns
@@ -533,6 +549,7 @@ function modified_lm(rng::AbstractRNG, ::Type{T}, dims::Integer...;
533549 factor:: Integer , amplitude:: AbstractFloat = 0.3 ,
534550 sine_divisor:: AbstractFloat = 5.9 , logistic_parameter:: AbstractFloat = 2.35 ,
535551 return_sparse:: Bool = false ) where {T <: Number }
552+ throw_sparse_error (return_sparse)
536553 num_columns = dims[2 ]
537554 expected_num_rows = factor * num_columns
538555 if dims[1 ] != expected_num_rows
@@ -599,6 +616,7 @@ julia> res_matrix = rand_sparse(5, 5; sparsity=0.5)
599616function rand_sparse (rng:: AbstractRNG , :: Type{T} , dims:: Integer... ;
600617 radius= T (1.0 ), sparsity= T (0.1 ), std= T (1.0 ),
601618 return_sparse:: Bool = false ) where {T <: Number }
619+ throw_sparse_error (return_sparse)
602620 lcl_sparsity = T (1 ) - sparsity # consistency with current implementations
603621 reservoir_matrix = sparse_init (rng, T, dims... ; sparsity= lcl_sparsity, std= std)
604622 rho_w = maximum (abs .(eigvals (reservoir_matrix)))
@@ -660,6 +678,7 @@ julia> res_matrix = delay_line(5, 5; weight=1)
660678"""
661679function delay_line (rng:: AbstractRNG , :: Type{T} , dims:: Integer... ;
662680 weight= T (0.1 ), return_sparse:: Bool = false ) where {T <: Number }
681+ throw_sparse_error (return_sparse)
663682 reservoir_matrix = DeviceAgnostic. zeros (rng, T, dims... )
664683 @assert length (dims) == 2 && dims[1 ] == dims[2 ] """ \n
665684 The dimensions must define a square matrix
@@ -723,6 +742,7 @@ julia> res_matrix = delay_line_backward(Float16, 5, 5)
723742"""
724743function delay_line_backward (rng:: AbstractRNG , :: Type{T} , dims:: Integer... ;
725744 weight= T (0.1 ), fb_weight= T (0.2 ), return_sparse:: Bool = false ) where {T <: Number }
745+ throw_sparse_error (return_sparse)
726746 res_size = first (dims)
727747 reservoir_matrix = DeviceAgnostic. zeros (rng, T, dims... )
728748
@@ -787,6 +807,7 @@ julia> res_matrix = cycle_jumps(5, 5; jump_size=2)
787807function cycle_jumps (rng:: AbstractRNG , :: Type{T} , dims:: Integer... ;
788808 cycle_weight:: Number = T (0.1 ), jump_weight:: Number = T (0.1 ),
789809 jump_size:: Int = 3 , return_sparse:: Bool = false ) where {T <: Number }
810+ throw_sparse_error (return_sparse)
790811 res_size = first (dims)
791812 reservoir_matrix = DeviceAgnostic. zeros (rng, T, dims... )
792813
@@ -854,6 +875,7 @@ julia> res_matrix = simple_cycle(5, 5; weight=11)
854875"""
855876function simple_cycle (rng:: AbstractRNG , :: Type{T} , dims:: Integer... ;
856877 weight= T (0.1 ), return_sparse:: Bool = false ) where {T <: Number }
878+ throw_sparse_error (return_sparse)
857879 reservoir_matrix = DeviceAgnostic. zeros (rng, T, dims... )
858880
859881 for i in 1 : (dims[1 ] - 1 )
@@ -916,6 +938,7 @@ function pseudo_svd(rng::AbstractRNG, ::Type{T}, dims::Integer...;
916938 max_value:: Number = T (1.0 ), sparsity:: Number = 0.1 , sorted:: Bool = true ,
917939 reverse_sort:: Bool = false , return_sparse:: Bool = false ,
918940 return_diag:: Bool = false ) where {T <: Number }
941+ throw_sparse_error (return_sparse)
919942 reservoir_matrix = create_diag (rng, T, dims[1 ],
920943 max_value;
921944 sorted= sorted,
@@ -1039,6 +1062,7 @@ julia> res_matrix = chaotic_init(8, 8)
10391062function chaotic_init (rng:: AbstractRNG , :: Type{T} , dims:: Integer... ;
10401063 extra_edge_probability:: AbstractFloat = T (0.1 ), spectral_radius:: AbstractFloat = one (T),
10411064 return_sparse:: Bool = false ) where {T <: Number }
1065+ throw_sparse_error (return_sparse)
10421066 requested_order = first (dims)
10431067 if length (dims) > 1 && dims[2 ] != requested_order
10441068 @warn """ \n
0 commit comments