Releases: KxSystems/pykx
3.1.8
3.1.7
3.1.6
3.1.5
3.1.4
3.1.3
3.1.2
The release notes below cover both the 3.1.2 and 3.1.1 releases of PyKX owing to the feature merge containing the changes for both
PyKX 3.1.1
Release Date
2025-02-14
Fixes and Improvements
- Fixed issue whereby PyKX would prompt for user inputs if a license was not found in a non-interactive session, now correctly falls back to unlicensed mode.
- Fix throwing of errors for .pykx.safeReimport, now throws an error instead of returning a value.
PyKX 3.1.2
Release Date
2025-03-18
Fixes and Improvements
- Fixes an issue when using PYKX_THREADING that could cause a segfault in some scenarios.
3.1.0
📦 PyKX 3.1.0 Released 📦
Full up-to-date release notes are available here.
🎉 Feature 🎉
- Added support for Python 3.13.
- Added support for NumPy 2.0
- Added support for the creation and management of splayed format databases when using the pykx.DB class.
- Addition of .copy() method for all pykx objects allowing users to modify copied objects without interfering with the original object.
- Addition of reshape keyword to the .np() method of kx.List objects. This can provide two benefits:
a. Conversions of kx.List objects to NumPy by default produce an array of NumPy arrays rather than an N-Dimensional NumPy array. Setting reshape=True when handling N-Dimensional rectangular lists allows the shape to be pre-processed prior to conversion and a more natural N-Dimensional NumPy array to be generated.
>>> kx.q('2 2#4?1f').np(reshape=True)
array([[0.94997503, 0.43908099],
[0.57590514, 0.59190043]])b. Provide a performance boost when converting regularly shaped (rectangular) N-Dimensional lists of uniform type when the shape of the resulting numpy array is known prior to conversion
>>> import pykx as kx
>>> lst = kx.q('100000 100 10#100000000?1f')
>>> %timeit lst.np()
9.72 s ± 272 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
>>> %timeit lst.np(reshape=[100000, 100, 10])
883ms ± 19.8 ms per loop (mean ± std. dev. of 7 runs, 1 loops each)- Added async_response keyword argument when calling AsyncQConnection objects with reuse=False and wait=False to allow keeping the connection alive until an asynchronous response message has been received.
🔧 Fixes & Improvements 🔧
- Application of the str function on empty PyKX objects could return unexpected results
>>> import pykx as kx
>>> str(kx.q('()!()'))
'()!()'
>>> str(kx.q('()'))
'()'- When a client attempted to retrieve an object which could not be serialized from a PyKX server it resulted in the client process hanging. An appropriate error is now sent to the client.
- Database generation functionality now allows users to pass any data-type which will convert to a pykx.Table as the table parameter
- Attempting to create a partitioned databases/add a partition to a database with a sym_enum keyword but no by_field would result in a KeyError.
- Using math.inf or -math.inf when creating numeric values now creates equivalent PyKX types
- Fixed a bug where QFuture objects returned by AsyncQConnection objects could block each other unnecessarily.
🆕 Beta Features 🆕
Addition of support in Beta form for conversions between PyKX and PyTorch objects.
2.5.5
PyKX 2.5.5
Release Date
2024-11-28
Fixes and Improvements
- PyKX Pandas dependency has been raised to allow
<=2.2.3for Python>3.8 - PyKX Pandas dependency for Python 3.8 has been clamped to
<2.0due to support being dropped for it by Pandas after 2.0.3.
For release notes of all versions see here.
3.0.1
Full up-to-date release notes are available here.
🎉 Feature 🎉
-
Addition of the property day to kx.Column objects to allow users to retrieve the day of month of a timestamp.
>>> import pykx as kx >>> tab = kx.Table(data={ ... 'a': kx.random.random(100, kx.TimestampAtom.inf), ... 'b': kx.random.random([100, 3], 10.0) ... }) >>> tab.exec(kx.Column('a').day) pykx.IntVector(pykx.q('7 10 12..'))
🔧 Fixes & Improvements 🔧
-
Added warning to kx.q.system.load and context registration when attempting to load path with a space. Can be suppressed by enabling PYKX_SUPPRESS_WARNINGS.
-
Changed %%python heading to %%py when calling Python code during jupyter_qfirst mode so as not to conflict with inbuilt Jupyter cell magics.
-
Fixed kx.license.check(format='string') to remove newline characters during comparison.
-
Configuration file .pykx-config now supports use of boolean toml configuration
$ cat ~/.pykx-config [default] PYKX_QDEBUG = true $ python >>> import pykx as kx >>> kx.config.pykx_qdebug True
-
Reintroduced unsetting/setting of PYKX_SKIP_UNDERQ in PyKXReimport these had been removed in the 3.0.0 release.
-
Added type checking for the cast flag when calling kx.toq() or creating a kx.K variable such as kx.FloatVector() or kx.DatetimeAtom().
-
Removed the need to enable PYKX_BETA_FEATURES to use pykx_threading.
-
Fixed a memory leak when calling pickle.loads on a PyKX object which previously had been called with pickle.dumps.
-
Removal of column type from the return of dtypes method for kx.Table objects, previously this had raised a deprecation warning
>>> tab = kx.q('([] a:1 2 3j;b:4 5 6i)') >>> tab.dtypes pykx.Table(pykx.q(' columns datatypes --------------------- a "kx.LongAtom" b "kx.IntAtom" '))