From 27a3ec6cad52bc3f4756f5308a37215e72bb4b4e Mon Sep 17 00:00:00 2001 From: Mark Keller <7525285+keller-mark@users.noreply.github.com> Date: Mon, 14 Aug 2023 17:34:33 -0400 Subject: [PATCH] Refactor dtypes functions --- R/array-nested.R | 138 +-------------------------------------------- R/dtypes.R | 144 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 147 insertions(+), 135 deletions(-) create mode 100644 R/dtypes.R diff --git a/R/array-nested.R b/R/array-nested.R index e5755fb..7e95635 100644 --- a/R/array-nested.R +++ b/R/array-nested.R @@ -1,145 +1,13 @@ -get_dtype_rtype <- function(dtype) { - # Reference: https://github.com/gzuidhof/zarr.js/blob/292804/src/nestedArray/types.ts#L32 - DTYPE_RTYPE_MAPPING <- list( - "|b" = logical(), - "|u1" = integer(), - "|i1" = integer(), - "b" = logical(), - ">u1" = integer(), - ">i1" = integer(), - ">u2" = integer(), - ">i2" = integer(), - ">u4" = integer(), - ">i4" = integer(), - ">f4" = double(), - ">f8" = double() - ) - return(DTYPE_RTYPE_MAPPING[[dtype]]) - # TODO: handle errors - #stop('Dtype not recognized or not supported in pizzarr') -} - - -get_dtype_endianness <- function(dtype) { - # TODO: use regexes to figure this stuff out - DTYPE_ENDIANNESS_MAPPING <- list( - "|b" = "nr", - "|u1" = "nr", - "|i1" = "nr", - "b" = "big", - ">u1" = "big", - ">i1" = "big", - ">u2" = "big", - ">i2" = "big", - ">u4" = "big", - ">i4" = "big", - ">f4" = "big", - ">f8" = "big" - ) - return(DTYPE_ENDIANNESS_MAPPING[[dtype]]) -} - -get_dtype_numbytes <- function(dtype) { - # TODO: use regexes to figure this stuff out - DTYPE_NUMBYTES_MAPPING <- list( - "|b" = 1, - "|u1" = 1, - "|i1" = 1, - "b" = 1, - ">u1" = 1, - ">i1" = 1, - ">u2" = 2, - ">i2" = 2, - ">u4" = 4, - ">i4" = 4, - ">f4" = 4, - ">f8" = 8 - ) - return(DTYPE_NUMBYTES_MAPPING[[dtype]]) -} -get_typed_array_ctr <- function(dtype) { - rtype <- get_dtype_rtype(dtype) - return(function(dim) array(data = rtype, dim = dim)) -} -# Reference: https://github.com/gzuidhof/zarr.js/blob/292804/src/nestedArray/index.ts#L134 +#' @keywords internal create_array_from_raw <- function(buf, dtype, shape, offset = 0) { # TODO -} - -get_dtype_from_array <- function(a) { - TYPEOF_RTYPE_MAPPING <- list( - "logical" = logical(), - "integer" = integer(), - "double" = double() - ) - RTYPE_DTYPE_MAPPING <- list( - "logical" = "|b", - "integer" = "b" = as.logical, - ">u1" = as.integer, - ">i1" = as.integer, - ">u2" = as.integer, - ">i2" = as.integer, - ">u4" = as.integer, - ">i4" = as.integer, - ">f4" = as.double, - ">f8" = as.double - ) - return(DTYPE_RTYPE_MAPPING[[dtype]]) - # TODO: handle errors - #stop('Dtype not recognized or not supported in pizzarr') } +#' @keywords internal zero_based_to_one_based <- function(selection, shape) { selection_list <- list() for(i in seq_len(length(selection))) { diff --git a/R/dtypes.R b/R/dtypes.R new file mode 100644 index 0000000..3c526c2 --- /dev/null +++ b/R/dtypes.R @@ -0,0 +1,144 @@ +# Internal utility functions for converting between Zarr and R data types. + + +#' @keywords internal +get_dtype_rtype <- function(dtype) { + # Reference: https://github.com/gzuidhof/zarr.js/blob/292804/src/nestedArray/types.ts#L32 + DTYPE_RTYPE_MAPPING <- list( + "|b" = logical(), + "|u1" = integer(), + "|i1" = integer(), + "b" = logical(), + ">u1" = integer(), + ">i1" = integer(), + ">u2" = integer(), + ">i2" = integer(), + ">u4" = integer(), + ">i4" = integer(), + ">f4" = double(), + ">f8" = double() + ) + return(DTYPE_RTYPE_MAPPING[[dtype]]) + # TODO: handle errors + #stop('Dtype not recognized or not supported in pizzarr') +} + +#' @keywords internal +get_dtype_endianness <- function(dtype) { + # TODO: use regexes to figure this stuff out + DTYPE_ENDIANNESS_MAPPING <- list( + "|b" = "nr", + "|u1" = "nr", + "|i1" = "nr", + "b" = "big", + ">u1" = "big", + ">i1" = "big", + ">u2" = "big", + ">i2" = "big", + ">u4" = "big", + ">i4" = "big", + ">f4" = "big", + ">f8" = "big" + ) + return(DTYPE_ENDIANNESS_MAPPING[[dtype]]) +} + +#' @keywords internal +get_dtype_numbytes <- function(dtype) { + # TODO: use regexes to figure this stuff out + DTYPE_NUMBYTES_MAPPING <- list( + "|b" = 1, + "|u1" = 1, + "|i1" = 1, + "b" = 1, + ">u1" = 1, + ">i1" = 1, + ">u2" = 2, + ">i2" = 2, + ">u4" = 4, + ">i4" = 4, + ">f4" = 4, + ">f8" = 8 + ) + return(DTYPE_NUMBYTES_MAPPING[[dtype]]) +} + +#' @keywords internal +get_dtype_from_array <- function(a) { + TYPEOF_RTYPE_MAPPING <- list( + "logical" = logical(), + "integer" = integer(), + "double" = double() + ) + RTYPE_DTYPE_MAPPING <- list( + "logical" = "|b", + "integer" = "b" = as.logical, + ">u1" = as.integer, + ">i1" = as.integer, + ">u2" = as.integer, + ">i2" = as.integer, + ">u4" = as.integer, + ">i4" = as.integer, + ">f4" = as.double, + ">f8" = as.double + ) + return(DTYPE_RTYPE_MAPPING[[dtype]]) + # TODO: handle errors + #stop('Dtype not recognized or not supported in pizzarr') +} + +#' @keywords internal +get_typed_array_ctr <- function(dtype) { + rtype <- get_dtype_rtype(dtype) + return(function(dim) array(data = rtype, dim = dim)) +} \ No newline at end of file