5/1/2018, summary
1. "extract_array", updated, to return only array. (for 1-dimensional data also).
2. dim, dimnames, type for "GDSArray" works by implementing "extract_array" correctly. 
3. show method works for "DelayedSubset" object inside vignette, by depending on S4Vector 0.17.43. 
4. gdsnodes(GDSFile) returns only the gds nodes that could construct
     unique ‘GDSArray’ objects, which means that the gds node has
     non-zero-dimensions, and is actually array, and all ‘GDSArray’s
     returned from these nodes are unique (by excluding the gds nodes
     that has `code~ prefix). 

4/23/2018

- permute, 3-dimensional data, ??
- GDSArray, >2-dimensional, all in variant X sample X other. 
- GDS file, "data" and "~data" are identical except permuted??? 
  - if yes, GDSFile only show "subnodes" of "data", not "~data".   -- done!
  - same for gdsnodes(file).   -- to do or not? 
  - Because GDSArray() returns the array in a fixed order: vaiant X
    sample X other dimension. No need for permutation to return the
    same data.
  
- extract\_array, return array(). called inside: DelayedArray:::.extract\_array\_with_dimnames(). -- done!
- extract\_array, method for "GDSArray" instead of "GDSArraySeed"... 
- https://github.com/Bioconductor/DelayedArray/blob/master/vignettes/02-Implementing_a_backend.Rmd


4/20/2018

- gf$genotype$data  -- correct!
- gf$genotype$`~data`  -- dimnames
- gf$sample.id, gf$annotation$qual  -- 1-dimensional gds nodes not correct. 

- GDSFile show method, $completion method, show gdsnodes(GDSFile) instead of gdsnodes(x@file). -- done!

- add method type,GDSArray, to be consistent with generic set in DelayedArray.   -- done!
- add method dim, dimnames, GDSArray.   -- done!
- add method documentations.   -- done!

4/17/2018

- implement: ".get\_gdsdata\_isarray", extract objdesp.gdsn(f,name)$is.array   --done!
- implement: ".get\_gdsdata\_non1D_array", extract >=2 dimensional array data
  - implenentation. -- done!
  - modify: (makeSEFromGDS:showAvailable()$name   -- todo...

- modify: ".get\_gdsdata\_dim", 
  - return NULL for non-array gds nodes. -- done!
  - return objdesp$dim for all array gds nodes. (.get\_gdsdata\_isrray == TRUE) -- done!

- modify: ".get\_gdsdata\_dimnames", check ".get\_gdsdata\_dim".  -- done!
  - if is.null(dim), return NULL (for non-array gds nodes.) 
  - if any(dim == 0), return NULL.

- modify: ".read\_gdsdata\_first_val", check ".get\_gdsdata\_dim".  -- done!
  - if is.null(dim), return NULL (for non-array data, e.g., Folder, VFolder...). 
  - if any(dim == 0), return NULL (for 0-dim nodes, e.g., file, "phase/extra", "phase/extra.index", "genotype/extra"...) 

- modify: "GDSArraySeed()" constructor. check ".get\_gdsdata\_dim".   -- done!
  - if is.null(dim), wmsg("Not a valid gds node for constructing GDSArray")
  - if any(dim == 0), wmsg("The dimension of gds node is: ", ", which cound not construct GDSArray")

- modify "GDSFile$" method,  -- done!
  - "gdsnodes(file.gds)", returns all nodes, including folder nodes. 
  - "gdsnodes(GDSFile)", return gdsnodes that are array and !any(dim==0). 

> gf$variant.id
<1348> GDSArray object of type "integer":
Error in dimnames(x) <- value : 'dimnames' applied to non-array
> gf$genotype$data  -- correct!
> gf$phase$data   -- correct!


3/13/2018

- RSamtools, filepath, show, width. --- to do...

- gdsNodes as method for GDSlight / GDS file path.   -- done!
- accessors for GDSFile. gdsfile(), not for "current_path" -- done. 
- GDSArray constructor, remove GDSlight input. -- done! 
- $ check if exist, fail if not.   -- done!
- update vignette. -- done!
