Skip to content

Commit

Permalink
Unit test pseudobulk projections
Browse files Browse the repository at this point in the history
  • Loading branch information
rasmushenningsson committed Dec 12, 2023
1 parent a96cfec commit 0de00eb
Showing 1 changed file with 51 additions and 4 deletions.
55 changes: 51 additions & 4 deletions test/basic.jl
Original file line number Diff line number Diff line change
Expand Up @@ -420,10 +420,16 @@
# @testset "pseudobulk $name" for (name,data,data_proj) in (("counts",counts,counts_proj), ("transformed",transformed,transformed_proj), ("reduced",reduced,reduced_proj))
d = copy(data)
d.obs.group2 = replace(d.obs.group, "C"=>missing)
d.obs.group3 = rand(StableRNG(276), ("a","b"), size(data,2))
d.obs.group3 = rand(StableRNG(276), ("a","b"), size(d,2))
d.obs.twogroup = replace(d.obs.group, "C"=>"A")
X = materialize(d.matrix)

d_proj = copy(data_proj)
d_proj.obs.group2 = replace(d_proj.obs.group, "C"=>missing)
d_proj.obs.group3 = rand(StableRNG(276), ("a","b"), size(d_proj,2))
d_proj.obs.twogroup = replace(d_proj.obs.group, "C"=>"A")
X_proj = materialize(d_proj.matrix)

@testset "$annot" for annot in ("group","group2","group3","twogroup")
unique_groups = collect(skipmissing(unique!(sort(d.obs[!,annot]))))

Expand All @@ -439,9 +445,26 @@
for g in unique_groups
x = vec(mean(X[:, isequal.(d.obs[!,annot], g)]; dims=2))
gi = findfirst(isequal(g), pb.obs.id)

@test x pb_X[:,gi]
end


unique_groups_proj = collect(skipmissing(unique!(sort(d_proj.obs[!,annot]))))

pb_proj = project(d_proj, pb)
@test names(pb_proj.obs) == ["id", annot]
@test unique!(sort(pb_proj.obs.id)) == unique_groups_proj
@test unique!(sort(pb_proj.obs[!,annot])) == unique_groups_proj

pb_proj_X = materialize(pb_proj.matrix)
@test size(pb_proj_X,1) == size(X_proj,1)
@test size(pb_proj_X,2) == length(unique_groups_proj)

for g in unique_groups_proj
x_proj = vec(mean(X_proj[:, isequal.(d_proj.obs[!,annot], g)]; dims=2))
gi = findfirst(isequal(g), pb_proj.obs.id)
@test x_proj pb_proj_X[:,gi]
end
end

@testset "$annot1, $annot2" for (annot1,annot2) in (("group","group3"),("group","group2"),("group","twogroup"))
Expand All @@ -455,7 +478,6 @@
@test unique!(sort(pb.obs[!,annot1])) == unique!(sort!(d.obs[mask,annot1]))
@test unique!(sort(pb.obs[!,annot2])) == unique!(sort!(d.obs[mask,annot2]))


pb_X = materialize(pb.matrix)
@test size(pb_X,1) == size(X,1)
@test size(pb_X,2) == length(unique_groups)
Expand All @@ -470,7 +492,32 @@
@test gi === nothing
end
end
end


groups_proj = string.(d_proj.obs[!,annot1],'_',d_proj.obs[!,annot2])
mask_proj = .!ismissing.(d_proj.obs[!,annot1]) .& .!ismissing.(d_proj.obs[!,annot2])
unique_groups_proj = unique!(sort!(groups_proj[mask_proj]))

pb_proj = project(d_proj, pb)
@test names(pb_proj.obs) == ["id", annot1, annot2]
@test unique!(sort(pb_proj.obs.id)) == unique_groups_proj
@test unique!(sort(pb_proj.obs[!,annot1])) == unique!(sort!(d_proj.obs[mask_proj,annot1]))
@test unique!(sort(pb_proj.obs[!,annot2])) == unique!(sort!(d_proj.obs[mask_proj,annot2]))

pb_proj_X = materialize(pb_proj.matrix)
@test size(pb_proj_X,1) == size(X_proj,1)
@test size(pb_proj_X,2) == length(unique_groups_proj)

for g1 in unique(d_proj.obs[mask_proj,annot1]), g2 in unique(d_proj.obs[mask_proj,annot2])
g_mask = isequal.(d_proj.obs[!,annot1], g1) .& isequal.(d_proj.obs[!,annot2], g2)
x_proj = vec(mean(X_proj[:, g_mask]; dims=2))
gi = findfirst(isequal(string(g1,'_',g2)), pb_proj.obs.id)
if any(g_mask) # are there any observations in this group?
@test x_proj pb_proj_X[:,gi]
else
@test gi === nothing
end
end
end
end
end

0 comments on commit 0de00eb

Please sign in to comment.