From d6d20c303e96d9174f03416ac9912d26a26272e6 Mon Sep 17 00:00:00 2001 From: Tunan Wang Date: Wed, 12 Nov 2025 10:48:51 -0600 Subject: [PATCH 1/6] fix:field reload --- src/Compressors/sparse_sign.jl | 29 +++++++++++++++++++++++++++++ src/RLinearAlgebra.jl | 2 +- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/Compressors/sparse_sign.jl b/src/Compressors/sparse_sign.jl index 93de96b2..9c4a8564 100644 --- a/src/Compressors/sparse_sign.jl +++ b/src/Compressors/sparse_sign.jl @@ -97,6 +97,35 @@ function SparseSign(; return SparseSign(cardinality, compression_dim, nnz, type) end +# Reload property +function setproperty!(obj::SparseSign, sym::Symbol, val) + if sym === :compression_dim + new_dim = val + if new_dim <= 0 + throw(ArgumentError("Field `compression_dim` must be positive.")) + elseif obj.nnz > new_dim + throw( + ArgumentError("New `compression_dim`, $new_dim, must be greater than \ + or equal to current `nnz`, $(obj.nnz)." + ) + ) + end + elseif sym === :nnz + new_nnz = val + if new_nnz <= 0 + throw(ArgumentError("Field `nnz` must be positive.")) + elseif new_nnz > obj.compression_dim + throw( + ArgumentError("New `nnz`, $new_nnz, must be less than or equal to \ + current `compression_dim`, $(obj.compression_dim)." + ) + ) + end + end + + return setfield!(obj, sym, val) +end + """ sparse_idx_update!( values::Vector{Int64}, diff --git a/src/RLinearAlgebra.jl b/src/RLinearAlgebra.jl index b93cfb51..be059aa9 100644 --- a/src/RLinearAlgebra.jl +++ b/src/RLinearAlgebra.jl @@ -1,6 +1,6 @@ module RLinearAlgebra import Base.:* -import Base: transpose, adjoint +import Base: transpose, adjoint, setproperty! import LinearAlgebra: Adjoint, axpby!, dot, I, ldiv!, lmul!, lq!, lq, LQ, mul!, norm, qr!, svd import StatsBase: sample, sample!, ProbabilityWeights, wsample! import Random: bitrand, rand!, randn! From b66986804b839da22671cc7e2c05086d5fae7176 Mon Sep 17 00:00:00 2001 From: Tunan Wang Date: Wed, 12 Nov 2025 11:09:47 -0600 Subject: [PATCH 2/6] fix:add tests --- test/Compressors/sparse_sign.jl | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/test/Compressors/sparse_sign.jl b/test/Compressors/sparse_sign.jl index d1802a18..7444c2c9 100644 --- a/test/Compressors/sparse_sign.jl +++ b/test/Compressors/sparse_sign.jl @@ -50,6 +50,39 @@ Random.seed!(2131) end + @testset "Verify field modification" begin + compressor = SparseSign(cardinality=Left(), compression_dim=5, nnz=3, type=Float64) + + @test_throws ArgumentError compressor.compression_dim = 0 + @test_throws ArgumentError compressor.compression_dim = -1 + @test_throws ArgumentError compressor.compression_dim = 2 + + @test_throws ArgumentError compressor.nnz = 0 + @test_throws ArgumentError compressor.nnz = -1 + @test_throws ArgumentError compressor.nnz = 6 + + compressor.compression_dim = 10 + @test compressor.compression_dim == 10 + + compressor.nnz = 8 + @test compressor.nnz == 8 + + compressor.cardinality = Right() + @test typeof(compressor.cardinality) == Right + + compressor.type = Float32 + @test compressor.type == Float32 + + trap_compressor = SparseSign(cardinality=Left(), compression_dim=5, nnz=5) + + @test_throws ArgumentError trap_compressor.compression_dim = 3 + + trap_compressor.nnz = 3 + trap_compressor.compression_dim = 3 + + @test trap_compressor.compression_dim == 3 && trap_compressor.nnz == 3 + end + @testset "Sparse Sign: CompressorRecipe" begin @test_compressor SparseSignRecipe @test fieldnames(SparseSignRecipe) == From 57296e08d0aa9afbc853b589e4eb8bd6d6301504 Mon Sep 17 00:00:00 2001 From: Tunan Wang Date: Wed, 12 Nov 2025 11:13:45 -0600 Subject: [PATCH 3/6] fix:test_changes --- test/Compressors/sparse_sign.jl | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/test/Compressors/sparse_sign.jl b/test/Compressors/sparse_sign.jl index 7444c2c9..a0a3d3e2 100644 --- a/test/Compressors/sparse_sign.jl +++ b/test/Compressors/sparse_sign.jl @@ -52,35 +52,29 @@ Random.seed!(2131) @testset "Verify field modification" begin compressor = SparseSign(cardinality=Left(), compression_dim=5, nnz=3, type=Float64) - + + # Test compression_dim @test_throws ArgumentError compressor.compression_dim = 0 @test_throws ArgumentError compressor.compression_dim = -1 @test_throws ArgumentError compressor.compression_dim = 2 + # Test nnz @test_throws ArgumentError compressor.nnz = 0 @test_throws ArgumentError compressor.nnz = -1 @test_throws ArgumentError compressor.nnz = 6 + # Test correct assignments compressor.compression_dim = 10 @test compressor.compression_dim == 10 - compressor.nnz = 8 @test compressor.nnz == 8 + # Test no checking assignments compressor.cardinality = Right() @test typeof(compressor.cardinality) == Right - compressor.type = Float32 @test compressor.type == Float32 - trap_compressor = SparseSign(cardinality=Left(), compression_dim=5, nnz=5) - - @test_throws ArgumentError trap_compressor.compression_dim = 3 - - trap_compressor.nnz = 3 - trap_compressor.compression_dim = 3 - - @test trap_compressor.compression_dim == 3 && trap_compressor.nnz == 3 end @testset "Sparse Sign: CompressorRecipe" begin From a819be5ef83ce06cc3679841e23bfdf8b05173fd Mon Sep 17 00:00:00 2001 From: Tunan Wang Date: Wed, 19 Nov 2025 10:58:00 -0600 Subject: [PATCH 4/6] 11.19 --- src/Compressors/sparse_sign.jl | 44 +++++++++++++++++++++++++++++++++ test/Compressors/sparse_sign.jl | 11 +++++++++ 2 files changed, 55 insertions(+) diff --git a/src/Compressors/sparse_sign.jl b/src/Compressors/sparse_sign.jl index 9c4a8564..e8de2ef2 100644 --- a/src/Compressors/sparse_sign.jl +++ b/src/Compressors/sparse_sign.jl @@ -126,6 +126,50 @@ function setproperty!(obj::SparseSign, sym::Symbol, val) return setfield!(obj, sym, val) end +# # Getters (examples for compression dimension and number of non-zeros, +# # the same with type and cardinality) +# compression_dim(s::SparseSign) = s.compression_dim +# nnz(s::SparseSign) = s.nnz + +# # Setters +# """ +# compression_dim!(s::SparseSign, new_dim::Int64) + +# Updates the compression dimension. +# Throws an ArgumentError if `new_dim` is invalid or smaller than the current `nnz`. +# """ +# function compression_dim!(s::SparseSign, new_dim::Int64) +# if new_dim <= 0 +# throw(ArgumentError("New `compression_dim` must be positive.")) +# end + +# if s.nnz > new_dim +# throw(ArgumentError("New `compression_dim`, $new_dim, must be greater than or equal to current `nnz`, $(s.nnz).")) +# end + +# s.compression_dim = new_dim +# return s # +# end + +# """ +# nnz!(s::SparseSign, new_nnz::Int64) + +# Updates the number of non-zeros. +# Throws an ArgumentError if `new_nnz` is invalid or larger than the current `compression_dim`. +# """ +# function nnz!(s::SparseSign, new_nnz::Int64) +# if new_nnz <= 0 +# throw(ArgumentError("New `nnz` must be positive.")) +# end + +# if new_nnz > s.compression_dim +# throw(ArgumentError("New `nnz`, $new_nnz, must be less than or equal to current `compression_dim`, $(s.compression_dim).")) +# end + +# s.nnz = new_nnz +# return s +# end + """ sparse_idx_update!( values::Vector{Int64}, diff --git a/test/Compressors/sparse_sign.jl b/test/Compressors/sparse_sign.jl index a0a3d3e2..6f5a072b 100644 --- a/test/Compressors/sparse_sign.jl +++ b/test/Compressors/sparse_sign.jl @@ -57,11 +57,13 @@ Random.seed!(2131) @test_throws ArgumentError compressor.compression_dim = 0 @test_throws ArgumentError compressor.compression_dim = -1 @test_throws ArgumentError compressor.compression_dim = 2 + @test_throws TypeError compressor.compression_dim = 5.5 # Test nnz @test_throws ArgumentError compressor.nnz = 0 @test_throws ArgumentError compressor.nnz = -1 @test_throws ArgumentError compressor.nnz = 6 + @test_throws TypeError compressor.nnz = 2.5 # Test correct assignments compressor.compression_dim = 10 @@ -75,6 +77,15 @@ Random.seed!(2131) compressor.type = Float32 @test compressor.type == Float32 + # Sequence test + compressor = SparseSign(cardinality=Left(), compression_dim=5, nnz=3, type=Float64) + + s.nnz = 4 + s.compression_dim = 5 + + @test s.nnz == 4 + @test s.compression_dim == 5 + end @testset "Sparse Sign: CompressorRecipe" begin From ddde6fa2104bd0307952f4385196770afdb5cc8e Mon Sep 17 00:00:00 2001 From: Tunan Wang Date: Wed, 19 Nov 2025 11:03:27 -0600 Subject: [PATCH 5/6] 11.19 --- test/Compressors/sparse_sign.jl | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/test/Compressors/sparse_sign.jl b/test/Compressors/sparse_sign.jl index 6f5a072b..83d619d7 100644 --- a/test/Compressors/sparse_sign.jl +++ b/test/Compressors/sparse_sign.jl @@ -76,16 +76,6 @@ Random.seed!(2131) @test typeof(compressor.cardinality) == Right compressor.type = Float32 @test compressor.type == Float32 - - # Sequence test - compressor = SparseSign(cardinality=Left(), compression_dim=5, nnz=3, type=Float64) - - s.nnz = 4 - s.compression_dim = 5 - - @test s.nnz == 4 - @test s.compression_dim == 5 - end @testset "Sparse Sign: CompressorRecipe" begin From 4c4dadca86a17078310d32c079d7f15d672c32de Mon Sep 17 00:00:00 2001 From: Tunan Wang Date: Wed, 26 Nov 2025 10:56:35 -0600 Subject: [PATCH 6/6] fix:delete the comments --- src/Compressors/sparse_sign.jl | 44 ---------------------------------- 1 file changed, 44 deletions(-) diff --git a/src/Compressors/sparse_sign.jl b/src/Compressors/sparse_sign.jl index e8de2ef2..9c4a8564 100644 --- a/src/Compressors/sparse_sign.jl +++ b/src/Compressors/sparse_sign.jl @@ -126,50 +126,6 @@ function setproperty!(obj::SparseSign, sym::Symbol, val) return setfield!(obj, sym, val) end -# # Getters (examples for compression dimension and number of non-zeros, -# # the same with type and cardinality) -# compression_dim(s::SparseSign) = s.compression_dim -# nnz(s::SparseSign) = s.nnz - -# # Setters -# """ -# compression_dim!(s::SparseSign, new_dim::Int64) - -# Updates the compression dimension. -# Throws an ArgumentError if `new_dim` is invalid or smaller than the current `nnz`. -# """ -# function compression_dim!(s::SparseSign, new_dim::Int64) -# if new_dim <= 0 -# throw(ArgumentError("New `compression_dim` must be positive.")) -# end - -# if s.nnz > new_dim -# throw(ArgumentError("New `compression_dim`, $new_dim, must be greater than or equal to current `nnz`, $(s.nnz).")) -# end - -# s.compression_dim = new_dim -# return s # -# end - -# """ -# nnz!(s::SparseSign, new_nnz::Int64) - -# Updates the number of non-zeros. -# Throws an ArgumentError if `new_nnz` is invalid or larger than the current `compression_dim`. -# """ -# function nnz!(s::SparseSign, new_nnz::Int64) -# if new_nnz <= 0 -# throw(ArgumentError("New `nnz` must be positive.")) -# end - -# if new_nnz > s.compression_dim -# throw(ArgumentError("New `nnz`, $new_nnz, must be less than or equal to current `compression_dim`, $(s.compression_dim).")) -# end - -# s.nnz = new_nnz -# return s -# end - """ sparse_idx_update!( values::Vector{Int64},