Skip to content

Commit

Permalink
Revert "common data model update and fixes"
Browse files Browse the repository at this point in the history
This reverts commit 9c21cd4.
  • Loading branch information
rafaqz committed Mar 10, 2024
1 parent 9c21cd4 commit 8c7d183
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 19 deletions.
2 changes: 1 addition & 1 deletion Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ Adapt = "2, 3.0, 4"
ArchGDAL = "0.9, 0.10"
CFTime = "0.1"
ColorTypes = "0.10, 0.11"
CommonDataModel = "0.2.3, 0.3"
CommonDataModel = "0.2.3"
ConstructionBase = "1"
CoordinateTransformations = "0.6.2"
DataFrames = "1"
Expand Down
41 changes: 23 additions & 18 deletions src/sources/commondatamodel.jl
Original file line number Diff line number Diff line change
Expand Up @@ -31,44 +31,49 @@ const CDM_STANDARD_NAME_MAP = Dict(
"time" => Ti,
)

struct CFDiskArray{T,N,TV,TA,TSA} <: AbstractDiskArray{T,N}
# CFVariable is imblemented again here because the one
# in CommonDataModel is not DiskArrays.jl compatible.
# TODO move this code to CommonDataModel.jl
struct CFVariable{T,N,TV,TA,TSA} <: CDM.AbstractVariable{T,N}
var::CDM.CFVariable{T,N,TV,TA,TSA}
end
@implement_diskarray CFVariable

# Base methods
Base.parent(A::CFDiskArray) = A.var
Base.getindex(os::OpenStack{<:CDMsource}, key::Symbol) = CFDiskArray(dataset(os)[key])
Base.parent(A::CFVariable) = A.var
Base.getindex(os::OpenStack{<:CDMsource}, key::Symbol) = CFVariable(dataset(os)[key])

# DiskArrays.jl methods
function DiskArrays.readblock!(A::CFDiskArray, aout, i::AbstractUnitRange...)
function DiskArrays.readblock!(A::CFVariable, aout, i::AbstractUnitRange...)
aout .= getindex(parent(A), i...)
end
function DiskArrays.writeblock!(A::CFDiskArray, data, i::AbstractUnitRange...)
function DiskArrays.writeblock!(A::CFVariable, data, i::AbstractUnitRange...)
setindex!(parent(A), data, i...)
return data
end
_open(f, ::Type{<:CDMsource}, var::CFVariable; kw...) = cleanreturn(f(var))

# We have to dig down to find the chunks as they are not immplemented
# properly in the source packages, but they are in their internal objects.
# We just make it work here even though it doesn't work in NCDatasets.jl or GRIBDatasets.jl
DiskArrays.eachchunk(var::CFDiskArray) = _get_eachchunk(var)
DiskArrays.haschunks(var::CFDiskArray) = _get_haschunks(var)
DiskArrays.eachchunk(var::CFVariable) = _get_eachchunk(var)
DiskArrays.haschunks(var::CFVariable) = _get_haschunks(var)

_get_eachchunk(var::CFDiskArray) = _get_eachchunk(var.var)
_get_eachchunk(var::CFVariable) = _get_eachchunk(var.var)
_get_eachchunk(var::CDM.CFVariable) = _get_eachchunk(var.var)
_get_haschunks(var::CFDiskArray) = _get_haschunks(var.var)
_get_haschunks(var::CFVariable) = _get_haschunks(var.var)
_get_haschunks(var::CDM.CFVariable) = _get_haschunks(var.var)

# CommonDataModel.jl methods
for method in (:size, :name, :dimnames, :dataset, :attribnames)
@eval begin
CDM.$(method)(var::CFDiskArray) = CDM.$(method)(parent(var))
CDM.$(method)(var::CFVariable) = CDM.$(method)(parent(var))
end
end

for method in (:attrib, :dim)
@eval begin
CDM.$(method)(var::CFDiskArray, name::CDM.SymbolOrString) = CDM.$(method)(parent(var), name)
CDM.$(method)(var::CFVariable, name::CDM.SymbolOrString) = CDM.$(method)(parent(var), name)
end
end

Expand All @@ -77,7 +82,6 @@ haslayers(::Type{<:CDMsource}) = true
defaultcrs(::Type{<:CDMsource}) = EPSG(4326)
defaultmappedcrs(::Type{<:CDMsource}) = EPSG(4326)

_dataset(var::CFDiskArray) = _dataset(parent(var))
_dataset(var::AbstractVariable) = CDM.dataset(var)

# Raster ########################################################################
Expand All @@ -89,12 +93,12 @@ function Raster(ds::AbstractDataset, filename::AbstractString, key=nothing; sour
for key in layerkeys(ds)
if ndims(ds[key]) > 0
@info "No `name` or `key` keyword provided, using first valid layer with name `:$key`"
return Raster(CFDiskArray(ds[key]), filename, key; source, kw...)
return Raster(CFVariable(ds[key]), filename, key; source, kw...)
end
end
throw(ArgumentError("dataset at $filename has no array variables"))
else
return Raster(CFDiskArray(ds[key]), filename, key; source, kw...)
return Raster(CFVariable(ds[key]), filename, key; source, kw...)
end
end

Expand Down Expand Up @@ -218,13 +222,14 @@ function FileStack{source}(
end

function _open(f, ::Type{<:CDMsource}, ds::AbstractDataset; key=nothing, kw...)
x = key isa Nothing ? ds : CFDiskArray(ds[_firstkey(ds, key)])
x = key isa Nothing ? ds : CFVariable(ds[_firstkey(ds, key)])
cleanreturn(f(x))
end
_open(f, ::Type{<:CDMsource}, var::CFDiskArray; kw...) = cleanreturn(f(var))
# _open(f, ::Type{<:CDMsource}, var::CDM.CFVariable; kw...) = cleanreturn(f(CFDiskArray(var)))
# _open(f, ::Type{<:CDMsource}, var::CDM.CFVariable; kw...) = cleanreturn(f(CFVariable(var)))

cleanreturn(A::CFDiskArray) = Array(A)
# Utils ########################################################################

cleanreturn(A::CFVariable) = Array(A)

# Utils ########################################################################

Expand Down

0 comments on commit 8c7d183

Please sign in to comment.