Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion conda-recipe/meta.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ requirements:
- numpy==1.20.* # [py==37]
- tomli>=2.0.1
- wheel>=0.36
- sysroot_linux-64 # [linux64]
- sysroot_linux-64 2.17 # [linux64]
- kernel-headers_linux-64 3.10.0 # [linux64]

run:
- python
Expand Down
2 changes: 1 addition & 1 deletion docs/beta-features/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ _This page provides an overview of PyKX Beta Features, including what they are,

## What is a Beta Feature?

As used commonly within software development "Beta Features" within PyKX describe features which have completed an initial development process phase and are being released in an opt-in manner to users of PyKX wishing to test these features. These features are not intended to be for production use while in beta and are subject to change prior to release as full features. Usage of these features will not effect the default behaviour of the library outside of the scope of the new functionality being added.
As used commonly within software development "Beta Features" within PyKX describe features which have completed an initial development process phase and are being released in an opt-in manner to users of PyKX wishing to test these features. These features are not intended to be for production use while in beta and are subject to change prior to release as full features. Usage of these features will not effect the default behavior of the library outside of the scope of the new functionality being added.

Feedback on Beta Feature development is incredibly helpful and helps to determine when these features are promoted to fully supported production features. If you run into any issues while making use of these features please raise an issue on the PyKX Github [here](https://github.com/KxSystems/pykx/issues).

Expand Down
10 changes: 5 additions & 5 deletions docs/getting-started/installing.md
Original file line number Diff line number Diff line change
Expand Up @@ -331,11 +331,11 @@ This command should display the installed version of PyKX.
| Mac ARM | kdb+ 4.0 | libq.dylib | 2025.02.18 |
| Mac x86 | kdb+ 4.0 | libq.dylib | 2025.02.18 |
| Windows | kdb+ 4.0 | q.dll/q.lib | 2025.02.18 |
| Linux ARM | kdb+ 4.1 | libq.so | 2025.04.28 |
| Linux x86 | kdb+ 4.1 | libq.so | 2025.04.28 |
| Mac ARM | kdb+ 4.1 | libq.dylib | 2025.04.28 |
| Mac x86 | kdb+ 4.1 | libq.dylib | 2025.04.28 |
| Windows | kdb+ 4.1 | q.dll/q.lib | 2025.04.28 |
| Linux ARM | kdb+ 4.1 | libq.so | 2025.11.25 |
| Linux x86 | kdb+ 4.1 | libq.so | 2025.11.25 |
| Mac ARM | kdb+ 4.1 | libq.dylib | 2025.11.25 |
| Mac x86 | kdb+ 4.1 | libq.dylib | 2025.11.25 |
| Windows | kdb+ 4.1 | q.dll/q.lib | 2025.11.25 |
| Linux ARM | Unlicensed | libe.so | 2023.11.22 |
| Linux x86 | Unlicensed | libe.so | 2023.11.22 |
| Mac ARM | Unlicensed | libe.so | 2023.11.22 |
Expand Down
2 changes: 1 addition & 1 deletion docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ To begin your journey with PyKX, follow the sections below:

!!! home-page "[Releases](./release-notes/changelog.md)"

Stay updated with the latest release notes and roadmap details. You’ll find information on the latest releases/fixes, previous versions, and upcoming features.
Stay updated with the latest release notes. You’ll find information on the latest releases/fixes, and previous versions.

!!! home-page "[Help and Support](./help/troubleshooting.md)"

Expand Down
69 changes: 58 additions & 11 deletions docs/release-notes/changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,49 @@

The changelog presented here outlines changes to PyKX when operating within a Python environment specifically, if you require changelogs associated with PyKX operating under a q environment see [here](./underq-changelog.md).

## PyKX 3.1.6

#### Release Date

2025-12-01

### Fixes and Improvements

- Updated 4.1 to 2025.11.25 for all platforms.
- Fixed issue where setting `sort=True` when calling `merge` on two `kx.Tables` ignored the supplied `on` parameter.

=== "Behavior prior to change"

```Python
>>> da = kx.q.z.D
>>> a = kx.toq(pd.DataFrame({'r':[2,3,4],'date':[da-2, da, da-1], 'k':[10, 11, 12]}))
>>> b = kx.toq(pd.DataFrame({'r':[5,6,7],'date':[da-2, da-1, da], 'k':[13, 14, 15]}))
>>> a.merge(b, on='date', sort=True)
pykx.Table(pykx.q('
r_x date k_x r_y k_y
--------------------------
2 2025.11.25 10 5 13
3 2025.11.27 11 7 15
4 2025.11.26 12 6 14
'))
```

=== "Behavior post change"

```Python
>>> da = kx.q.z.D
>>> a = kx.toq(pd.DataFrame({'r':[2,3,4],'date':[da-2, da, da-1], 'k':[10, 11, 12]}))
>>> b = kx.toq(pd.DataFrame({'r':[5,6,7],'date':[da-2, da-1, da], 'k':[13, 14, 15]}))
>>> a.merge(b, on='date', sort=True)
pykx.Table(pykx.q('
r_x date k_x r_y k_y
--------------------------
2 2025.11.25 10 5 13
4 2025.11.26 12 6 14
3 2025.11.27 11 7 15
'))
```

## PyKX 3.1.5

#### Release Date
Expand All @@ -30,24 +73,24 @@
- Added `no_allocator` keyword argument to `pykx.toq` that allows one time disabling of the PyKX allocator during a conversion. See [here](../help/issues.md#known-issues) for details.
- Fixed an issue when converting dataframes with embeddings arrays.

=== "Behaviour prior to change"
=== "Behavior prior to change"

```Python
>>> df=pd.DataFrame(dict(embeddings=list(np.random.ranf((500, 10)).astype(np.float32))))
>>> pykx.toq(df)
>>> kx.toq(df)
segfault
```

=== "Behaviour post change"
=== "Behavior post change"

```Python
>>> df=pd.DataFrame(dict(embeddings=list(np.random.ranf((500, 10)).astype(np.float32))))
>>> pykx.toq(df)
>>> kx.toq(df)
```

- Addition of `__array__` method to Atom classes. Enables `np.asarray` to created typed arrays.
- Addition of `__array__` method to Atom classes. Enables `np.asarray` to create typed arrays.

=== "Behaviour prior to change"
=== "Behavior prior to change"

```python
>>> np.asarray(kx.FloatAtom(3.65)).dtype
Expand All @@ -58,7 +101,7 @@
dtype('O')
```

=== "Behaviour post change"
=== "Behavior post change"

```python
>>> np.asarray(kx.FloatAtom(3.65)).dtype
Expand All @@ -71,7 +114,7 @@

- Fixed the returned type of an `exec` query with a single renamed column.

=== "Behaviour prior to change"
=== "Behavior prior to change"

```python
>>> type(kx.q.qsql.exec(qtab, {'symcol': 'col1'}))
Expand All @@ -80,7 +123,7 @@
pykx.wrappers.SymbolVector
```

=== "Behaviour after change"
=== "Behavior after change"

```python
>>> type(kx.q.qsql.exec(qtab, {'symcol': 'col1'}))
Expand All @@ -89,6 +132,10 @@
pykx.wrappers.Dictionary
```

### Deprecations & Removals

- Creating more than one `DB` instance without specifying `overwrite=True`

## PyKX 3.1.4

#### Release Date
Expand Down Expand Up @@ -379,8 +426,8 @@
│ └── time
```

- Fixed behaviour for `PartitionedTable.copy_column()` operation on anymap columns. When copying `anymap` columns, the `#` and `##` files were not copied. Now all correct copying procedures are applied.
- Fixed behaviour for `PartitionedTable.delete_column()` operation on anymap columns. When deleting `anymap` columns, the `#` and `##` files were left in. All relevant files are now deleted.
- Fixed behavior for `PartitionedTable.copy_column()` operation on anymap columns. When copying `anymap` columns, the `#` and `##` files were not copied. Now all correct copying procedures are applied.
- Fixed behavior for `PartitionedTable.delete_column()` operation on anymap columns. When deleting `anymap` columns, the `#` and `##` files were left in. All relevant files are now deleted.
- Fix creation of `ParseTree` objects from `QueryPhrase` or `Column` objects.
- Fix or operator `|` for `Column | ParseTree` use cases.
- Fixed an issue around the installation process when users attempted to set unlicensed mode after PyKX failed to load with a kdb+ license.
Expand Down
19 changes: 18 additions & 1 deletion docs/release-notes/deprecations.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@

A list of deprecated behaviors and the version in which they were removed.

| Feature | Alternative | Deprecated | Removed |
| Feature | Alternative | Deprecated | Removed |
|---------------------------------------------------|---------------------------|---------------|------------|
| Creating more than one DB object | `overwrite=True` | 3.1.5 | |
| `kx.q.system.console_size` | `kx.q.system.display_size`| 3.1.3 | |
| `.pykx.console[]` on Windows | | 3.1.3 | 3.1.3 |
| `labels` keyword for `rename` method | `mapper` | 2.5.0 | 3.1.0 |
Expand All @@ -20,6 +21,22 @@ A list of deprecated behaviors and the version in which they were removed.
| `PYKX_ENABLE_PANDAS_API` | | 3.0.0 | 3.0.0 |
| `.pd(raw_guids)` | | 2.5.0 | 2.5.0 |

## PyKX 3.1.5

Release Date: 2025-10-21

### Fixes and Improvements

- Users will be warned when they attempt to create more than one `DB` object.

```python
>>> import pykx as kx
>>> db = kx.DB(path="tmp/db1")
>>> db2 = kx.DB(path="tmp/db2")
PyKXWarning: Only one DB object exists at a time within a process. Use overwrite=True to overwrite your existing DB object. This warning will error in future releases.
>>> db3 = kx.DB(path="tmp/db3", overwrite=True)
>>>
```

## PyKX 3.1.3

Expand Down
36 changes: 18 additions & 18 deletions docs/release-notes/underq-changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ This changelog provides updates from PyKX 2.0.0 and above, for information relat

- Resolved `object has no attribute 't'` error for certain conversions

=== "Behaviour prior to change"
=== "Behavior prior to change"

```python
q).pykx.setdefault (),"k";
Expand All @@ -39,7 +39,7 @@ This changelog provides updates from PyKX 2.0.0 and above, for information relat
":"~first a0:string x0;
```

=== "Behaviour post change"
=== "Behavior post change"

```python
q).pykx.setdefault (),"k";
Expand Down Expand Up @@ -137,14 +137,14 @@ This changelog provides updates from PyKX 2.0.0 and above, for information relat

- Using `.pykx.toq`/`.pykx.toq0` now return the q representation of an object when passed a wrapped type conversion object

=== "Behaviour prior to change"
=== "Behavior prior to change"

```q
q).pykx.toq .pykx.topd ([] a:1 2 3)
enlist[`..pandas;;][...
```

=== "Behaviour post change"
=== "Behavior post change"

```q
q).pykx.toq .pykx.topd[([] a:1 2 3)]
Expand All @@ -157,14 +157,14 @@ This changelog provides updates from PyKX 2.0.0 and above, for information relat

- When using `.pykx.toq`/`.pykx.toq0`, passing compositions such as `any` now returns the data as the appropriate object

=== "Behaviour prior to change"
=== "Behavior prior to change"

```q
q).pykx.toq any
'Expected foreign object for call to .pykx.toq
```

=== "Behaviour post change"
=== "Behavior post change"

```q
q).pykx.toq any
Expand All @@ -173,14 +173,14 @@ This changelog provides updates from PyKX 2.0.0 and above, for information relat

- When failing to find a file loaded with `.pykx.loadPy` the name of the file which was loaded is now included in the error message

=== "Behaviour prior to change"
=== "Behavior prior to change"

```q
q).pykx.loadPy "file.py"
'FileNotFoundError(2, 'No such file or directory')
```

=== "Behaviour post change"
=== "Behavior post change"

```q
q).pykx.loadPy "file.py"
Expand Down Expand Up @@ -233,7 +233,7 @@ This changelog provides updates from PyKX 2.0.0 and above, for information relat

### Fixes and Improvements

- Addition of function `.pykx.toq0` to support conversion of Python strings to q strings rather than q symbols as is the default behaviour
- Addition of function `.pykx.toq0` to support conversion of Python strings to q strings rather than q symbols as is the default behavior

```q
q)pystr:.pykx.eval["\"test\""]
Expand All @@ -245,22 +245,22 @@ This changelog provides updates from PyKX 2.0.0 and above, for information relat

- Fix for `install_into_QHOME` with `overwrite_embedpy=True`. Previously loading PyKX through use of `p)` would fail.

=== "Behaviour prior to change"
=== "Behavior prior to change"

```q
q)p)print(1+1)
'pykx.q. OS reports: No such file or directory
[3] /home/user/q/p.k:1: \l pykx.q
```

=== "Behaviour post change"
=== "Behavior post change"

```q
q)p)print(1+1)
2
```

- Fix to minor memory leak when accessing attributes or retrieving global variables from Python objects. The following operations would lead to this behaviour
- Fix to minor memory leak when accessing attributes or retrieving global variables from Python objects. The following operations would lead to this behavior

```q
q)np:.pykx.import[`numpy]
Expand All @@ -273,7 +273,7 @@ This changelog provides updates from PyKX 2.0.0 and above, for information relat

- When loading on Linux loading of `qlog` no longer loads the logging functionality into the `.pykx` namespace and instead loads it to the `.com_kx_log` namespace as expected under default conditions.

=== "Behaviour prior to change"
=== "Behavior prior to change"

```q
q)@[{get x;1b};`.pykx.configure;0b]
Expand All @@ -282,7 +282,7 @@ This changelog provides updates from PyKX 2.0.0 and above, for information relat
0b
```

=== "Behaviour post change"
=== "Behavior post change"

```q
q)@[{get x;1b};`.pykx.configure;0b]
Expand Down Expand Up @@ -311,7 +311,7 @@ This changelog provides updates from PyKX 2.0.0 and above, for information relat

- Previously PyKX conversions of generic lists (type 0h) would convert this data to it's `raw` representation rather than it's `python` representation as documented. This had the effect of restricting the usability of some types within PyKX under q in non-trivial use-cases. With the `2.5.2` changes to more accurately represent `raw` data at depth this became more obvious as an issue.

=== "Behaviour prior to change"
=== "Behavior prior to change"

```q
q).pykx.version[]
Expand All @@ -320,7 +320,7 @@ This changelog provides updates from PyKX 2.0.0 and above, for information relat
[b'test', None, 49577290277400616]
```

=== "Behaviour post change"
=== "Behavior post change"

```q
q).pykx.print .pykx.eval["lambda x:x"]
Expand Down Expand Up @@ -586,7 +586,7 @@ This changelog provides updates from PyKX 2.0.0 and above, for information relat

- Update to default conversion logic for q objects passed to PyKX functions to more closely match embedPy based conversion expectations.For version <=2.0 conversions of KX lists would produce N Dimensional Numpy arrays of singular type. This results in issues when applying to many analytic libraries which rely on lists of lists rather than singular N Dimensional arrays. Additionally q tables and keyed tables would be converted to Numpy recarrays, these are now converted to Pandas DataFrames. To maintain previous behavior please set the following environment variable `PYKX_DEFAULT_CONVERSION="np"`.

=== "Behaviour prior to change"
=== "Behavior prior to change"

```q
q).pykx.eval["lambda x:print(type(x))"](10?1f;10?1f)
Expand All @@ -595,7 +595,7 @@ This changelog provides updates from PyKX 2.0.0 and above, for information relat
<class 'numpy.recarray'>
```

=== "Behaviour post change"
=== "Behavior post change"

```q
q).pykx.eval["lambda x:print(type(x))"](10?1f;10?1f)
Expand Down
Loading