HyperPoint is similar to HyperCube. But values in dimensions could be any integer.
| 85 | |
| 86 | |
| 87 | class HyperPoint: |
| 88 | """ |
| 89 | HyperPoint is similar to HyperCube. But values in dimensions could be any integer. |
| 90 | """ |
| 91 | |
| 92 | def __init__( |
| 93 | self, ndim: int, dimensions: Optional[List[Union[int, IntegerType]]] = None |
| 94 | ) -> None: |
| 95 | """ |
| 96 | dimensions: |
| 97 | each item: if item is IntegerType, it's dynamic, else it's static int value. |
| 98 | """ |
| 99 | self.ndim = ndim |
| 100 | self.dimensions = ( |
| 101 | ([IntegerType(unsigned=False, bits=32)] for _ in range(ndim)) |
| 102 | if dimensions is None |
| 103 | else dimensions |
| 104 | ) |
| 105 | assert isinstance(dimensions, (list, tuple)) |
| 106 | assert len(self.dimensions) == self.ndim |
| 107 | |
| 108 | def __getitem__(self, key: int): |
| 109 | assert key >= 0 and key < self.ndim |
| 110 | return self.dimensions[key] |
| 111 | |
| 112 | def __setitem__(self, key: int, value: Union[int, IntegerType]): |
| 113 | assert key >= 0 and key < self.ndim |
| 114 | self.dimensions[key] = value |
| 115 | |
| 116 | def __len__(self): |
| 117 | return self.ndim |
| 118 | |
| 119 | def dim_is_dynamic(self, key: int): |
| 120 | return isinstance(self[key], IntegerType) |
| 121 | |
| 122 | def dim_is_static(self, key: int): |
| 123 | return not self.dim_is_dynamic(key) |
| 124 | |
| 125 | def has_dynamic(self): |
| 126 | return any([self.dim_is_dynamic(i) for i in range(self.ndim)]) |
| 127 | |
| 128 | def get_static_dims_with_keys(self): |
| 129 | return [ |
| 130 | (i, self.dimensions[i]) for i in range(self.ndim) if self.dim_is_static(i) |
| 131 | ] |
nothing calls this directly
no outgoing calls
no test coverage detected