def _parse_index( index: Optional[Union[int, list, tuple, slice, str]] = None ) -> Optional[Union[int, slice]]: if index is None: return None elif isinstance(index, (int, slice)): return index elif isinstance(index, (list, tuple)): if len(index) > 3: raise ge_exceptions.BatchFilterError( f"""The number of index slice components must be between 1 and 3 (the given number is {len(index)}). """) if len(index) == 1: return index[0] if len(index) == 2: return slice(index[0], index[1], None) if len(index) == 3: return slice(index[0], index[1], index[2]) elif isinstance(index, str): if is_int(value=index): return _parse_index(index=int(index)) return _parse_index( index=[int(idx_str) for idx_str in index.split(":")]) else: raise ge_exceptions.BatchFilterError( f"""The type of index must be an integer (Python "int"), or a list (Python "list") or a tuple (Python "tuple"), or a Python "slice" object, or a string that has the format of a single integer or a slice argument. The type given is "{str(type(index))}", which is illegal. """)
def get_batch_key(self, batch_definition: BatchDefinition) -> Any: batch_identifiers: dict = batch_definition.batch_identifiers batch_value: Any = batch_identifiers[self.name] if not is_numeric(value=batch_value): raise ge_exceptions.SorterError( # what is the identifying characteristic of batch_definition? f"""BatchDefinition with IDDict "{self.name}" with value "{batch_value}" has value "{batch_value}" which cannot be part of numeric sort. """) if is_int(value=batch_value): return int(batch_value) # The case of strings having floating point number format used as references to partitions should be rare. return round(float(batch_value))