Skip to content

Commit

Permalink
do better show for Datasets
Browse files Browse the repository at this point in the history
  • Loading branch information
lazarusA committed Sep 10, 2024
1 parent 0ccd686 commit 221e064
Showing 1 changed file with 64 additions and 23 deletions.
87 changes: 64 additions & 23 deletions src/DatasetAPI/Datasets.jl
Original file line number Diff line number Diff line change
Expand Up @@ -91,35 +91,76 @@ function to_dataset(c;datasetaxis = "Variable", layername = get(c.properties,"na
end

function Base.show(io::IO, ds::Dataset)
sharedaxs = intersect([caxes(c) for (n,c) in ds.cubes]...)
# Find axes shared by all cubes
sharedaxs = length(ds.cubes) > 0 ? intersect([caxes(c) for (n, c) in ds.cubes]...) : ()
# Create a dictionary to store groups of variables by their axes
axis_groups = Dict()
variables_with_shared_axes_only = [] # List to hold variables that share all axes
# Group variables by their axes, excluding shared axes
for (var_name, cube) in ds.cubes
axes = tuple(setdiff(caxes(cube), sharedaxs)...)
if isempty(axes)
push!(variables_with_shared_axes_only, var_name) # Track variables that share all axes
else
if haskey(axis_groups, axes)
push!(axis_groups[axes], var_name)
else
axis_groups[axes] = [var_name]
end
end
end
sorted_axis_groups = sort(collect(axis_groups), by = x -> length(x[2]))
# Print header
println(io, "YAXArray Dataset")

# Print shared axes
println(io, "Shared Axes: ")
show(io, MIME("text/plain"), tuple(sharedaxs...))
println(io,"")
println(io, "Variables: ")
for (k,c) in ds.cubes
specaxes = setdiff(caxes(c), sharedaxs)
println(io, k)
if !isempty(specaxes)
specaxes = setdiff(caxes(c), sharedaxs)
DD.Dimensions.print_dims(io, MIME("text/plain"), tuple(specaxes...))
println(io)
end
#for ax in specaxes
# println(io," └── ")
# DD.Dimensions.show_compact(io, MIME("text/plain"),ax)
#end
end
#foreach(i -> print(io, i, " "), keys(ds.cubes))
#show(io, ds.properties)
if !isempty(ds.properties)
if !isempty(sharedaxs)
DD.Dimensions.print_dims(io, MIME("text/plain"), tuple(sharedaxs...))
println(io)
else
printstyled(io, "None", color=:light_black)
print(io, "\n")
end
# Print variables that share all axes with sharedaxs
if !isempty(variables_with_shared_axes_only)
printstyled(io, "Variables: ", color=:light_blue)
print(io, "\n")
println(io, join(variables_with_shared_axes_only, ", "))
println(io)
print(io,"Properties: ")
end

# If there are additional axes, print variables grouped by those additional axes
if !isempty(sorted_axis_groups)
print(io, "\n")
printstyled(io, "Variables grouped by additional axes:", color=:light_yellow)
for (axes, variables) in sorted_axis_groups
print(io, "\n")
if !isempty(axes)
printstyled(io, " Additional Axes: ", color=:light_black)
print(io, "\n")
DD.Dimensions.print_dims(io, MIME("text/plain"), axes)
println(io)
else
print(io, "\n")
printstyled(io, " No additional axes:", color=:light_black)
print(io, "\n")
end
printstyled(io, " Variables: ", color=:light_blue)
padding = " " ^ 2 # Adjust this number to match the length of " Variables: "
variables_str = join(variables, ", ")
padded_variables = padding * variables_str
print(io, "\n")
println(io, padded_variables)
end
end
# Print properties if they exist
if !isempty(ds.properties)
print(io, "\n")
printstyled(io, "Properties: ", color=:light_yellow)
println(io, ds.properties)
# foreach(i -> print(io, i[1], " => ", i[2], " "), ds.properties)
end
end

function Base.propertynames(x::Dataset, private::Bool = false)
if private
Symbol[:cubes; :axes; :properties; collect(keys(x.cubes)); collect(keys(x.axes))]
Expand Down

0 comments on commit 221e064

Please sign in to comment.