[docs]@dataclassclassCellArrConfig:"""Configuration class for TileDB array creation and access."""tile_capacity:int=100000cell_order:str="row-major"tile_order:str="row-major"coords_filters:List[tiledb.Filter]=field(default_factory=lambda:[tiledb.LZ4Filter()])offsets_filters:List[tiledb.Filter]=field(default_factory=lambda:[tiledb.LZ4Filter()])attrs_filters:Dict[str,List[tiledb.Filter]]=field(default_factory=lambda:{"":[tiledb.LZ4Filter()]})ctx_config:Dict[str,Any]=field(default_factory=dict)
[docs]@staticmethoddefcreate_filter(filter_config:Union[Dict[str,Any],tiledb.Filter])->tiledb.Filter:"""Create a TileDB Filter object from configuration."""ifisinstance(filter_config,tiledb.Filter):returnfilter_configifisinstance(filter_config,dict):filter_name=filter_config.get("name","").lower()filter_level=filter_config.get("level",None)iffilter_name=="zstd":returntiledb.ZstdFilter(level=filter_level)eliffilter_name=="gzip":returntiledb.GzipFilter(level=filter_level)eliffilter_name=="bzip2":returntiledb.Bzip2Filter(level=filter_level)eliffilter_name=="double-delta":returntiledb.DoubleDeltaFilter()eliffilter_name=="bit-width-reduction":returntiledb.BitWidthReductionFilter()else:raiseValueError(f"Unsupported filter type: {filter_name}")raiseTypeError("Filter must be either a TileDB Filter object or a configuration dictionary")
[docs]def__post_init__(self):"""Convert filter configurations to TileDB Filter objects."""ifnotisinstance(self.coords_filters,list):self.coords_filters=[self.coords_filters]self.coords_filters=[self.create_filter(f)forfinself.coords_filters]ifnotisinstance(self.offsets_filters,list):self.offsets_filters=[self.offsets_filters]self.offsets_filters=[self.create_filter(f)forfinself.offsets_filters]forattr,filtersinself.attrs_filters.items():ifnotisinstance(filters,list):filters=[filters]self.attrs_filters[attr]=[self.create_filter(f)forfinfilters]
[docs]@dataclassclassConsolidationConfig:"""Configuration for array consolidation."""steps:int=100000step_min_frags:int=2step_max_frags:int=10buffer_size:int=15000000000# 15GBtotal_budget:int=40000000000# 40GBnum_threads:int=4vacuum_after:bool=True