1- from typing import Dict , List , Optional , Union
1+ from typing import Any , Dict , List , Optional , Union
22
33import numpy as np
44from ciftools .bin .decoder import decode_cif_data
@@ -11,11 +11,11 @@ def __init__(
1111self ,
1212name : str ,
1313values : Union [np .ndarray , list [str ]],
14- value_kinds : Union [np .ndarray , None ],
14+ value_mask : Union [np .ndarray , None ],
1515 ):
1616self .name = name
1717self ._values = values
18- self ._value_kinds = value_kinds
18+ self ._value_mask = value_mask
1919self ._row_count = len (values )
2020
2121def get_string (self , row : int ) -> str :
@@ -28,8 +28,8 @@ def get_float(self, row: int) -> float:
2828return float (self ._values [row ])
2929
3030def get_value_presence (self , row : int ) -> CIFValuePresenceEnum :
31- if self ._value_kinds :
32- return self ._value_kinds [row ]
31+ if self ._value_mask :
32+ return self ._value_mask [row ]
3333return 0
3434
3535def are_values_equal (self , row_a : int , row_b : int ) -> bool :
@@ -49,19 +49,23 @@ def as_ndarray(
4949return self ._values [start :end ]
5050return self ._values [start :end ].astype (dtype )
5151
52- def __getitem__ (self , idx : int ) -> Union [ str , float , int , None ] :
53- if self ._value_kinds and self ._value_kinds [idx ]:
52+ def __getitem__ (self , idx : Any ) -> Any :
53+ if isinstance ( idx , int ) and self ._value_mask and self ._value_mask [idx ]:
5454return None
5555return self ._values [idx ]
5656
5757def __len__ (self ):
5858return self ._row_count
5959
60+ @property
61+ def value_presences (self ) -> Optional [np .ndarray ]:
62+ return self ._value_mask
63+
6064
6165def _decode_cif_column (column : EncodedCIFColumn ) -> CIFColumn :
6266values = decode_cif_data (column ["data" ])
63- value_kinds = decode_cif_data (column ["mask" ]) if column ["mask" ] else None
64- return BinaryCIFColumn (column ["name" ], values , value_kinds )
67+ value_mask = decode_cif_data (column ["mask" ]) if column ["mask" ] else None
68+ return BinaryCIFColumn (column ["name" ], values , value_mask )
6569
6670
6771class BinaryCIFCategory (CIFCategory ):
@@ -100,7 +104,7 @@ def n_columns(self) -> int:
100104return len
101105
102106@property
103- def column_names (self ) -> list [str ]:
107+ def field_names (self ) -> list [str ]:
104108return self ._field_names
105109
106110
@@ -156,8 +160,8 @@ def from_data(data: EncodedCIFFile, *, lazy=True) -> "BinaryCIFFile":
156160 - False: decode all columns immediately
157161 """
158162
159- min_version = [ 0 , 3 , 0 ]
160- version = map (int , data ["version" ].split ("." ))
163+ min_version = ( 0 , 3 , 0 )
164+ version = tuple ( map (int , data ["version" ].split ("." ) ))
161165if version < min_version :
162166raise ValueError (f"Invalid version { data ['version' ]} , expected >={ '.' .join (map (str , min_version ))} " )
163167
0 commit comments