Releases: RayforceDB/rayforce-py
0.6.3
Bug Fixes
- Integer null sentinel handling: I16, I32, and I64 scalars now correctly recognize null sentinels (
0Nh,0Ni,0Nj) and returnNonefromto_python(). This fixes null comparisons in operations where unmatched rows returned raw sentinel values (e.g.,-9223372036854775808) instead ofNone.
0.6.2
0.6.1
New Features
-
Fancy indexing for Tables:
Table.__getitem__now supports multiple indexing modes beyond column access:- Expression filter:
table[Column("age") > 35]— filter rows by condition. Supports&(and) and|(or) for combining expressions. - Integer row access:
table[0],table[-1]— access a single row by index, returns a Dict. - Slicing:
table[1:3],table[:5],table[-2:]— row slicing backed by the C-levelTAKEoperation. - Index list:
table[[0, 2, 5]]— select specific rows by position.
- Expression filter:
-
Vector.from_numpy()auto-widening: Unsupported numpy dtypes are now automatically widened to the nearest supported type:float32/float16→F64,int8→I16,uint16→I32,uint32→I64. -
Vector.from_numpy()bytes and UUID support: Byte string arrays (dtype='S') are automatically decoded to Symbol vectors. Object arrays ofuuid.UUIDvalues are detected and converted to GUID vectors. -
NaT preservation:
NaT(Not-a-Time) values in numpydatetime64andtimedelta64arrays now survive round-trips throughVector.from_numpy()andVector.to_numpy().
Bug Fixes
-
Table.to_numpy()with Timestamp columns: FixedDTypePromotionErrorwhen callingto_numpy()on tables containing a mix of incompatible column types (e.g., integers, strings, and timestamps). Mixed-type tables now gracefully fall back toobjectdtype. -
Filtering F64 by distinct - fixed
-
Vector.__getitem__for U8 vectors: Fixed U8 vector elements being returned asB8(True/False)instead ofU8(value). Both types are 1-byte, causing the C-levelat_idxto misinterpret the type. -
Vector.from_numpy()with explicitray_typefor temporal arrays: FixedValueError: cannot include dtype 'M' in a bufferwhen passingray_type=Timestamp,ray_type=Date, orray_type=Timewith datetime64/timedelta64 arrays.
0.6.0
New Features
-
Vector.from_numpy()classmethod: Create vectors from NumPy arrays via bulk memory copy. Supports numeric types (int16,int32,int64,float64,uint8,bool), string arrays, and temporal types (datetime64→Timestamp/Date,timedelta64→Time). Handles epoch adjustment between NumPy (1970-01-01) and Rayforce (2000-01-01) automatically. -
Vector.to_numpy()method: Export vector data to a NumPy array via bulk memory copy. -
Vector.to_list()method: Export vector data to a Python list via bulk memory copy from the underlying C buffer. -
Table.from_dict()classmethod: Create tables from a dictionary of NumPy arrays, Python lists, or Vectors. -
Table.to_dict()method: Export table data to a Python dictionary of lists via bulk memory copy. -
Table.to_numpy()method: Export table data to a 2D NumPy array via bulk memory copy. -
select("*", col=value)fix: Using"*"with computed columns inselect()now correctly preserves all existing columns
Dependencies
- NumPy (
>=2.0.0) is now a required dependency.
0.5.11
New Features
-
Timestamp.shift_tz()method: Shift aTimestampvalue by a timezone offset. Accepts anydatetime.tzinfo(includingdatetime.timezoneandzoneinfo.ZoneInfo). -
Column.shift_tz()for queries: Shift an entire column of timestamps by a timezone offset withinselect()expressions.