Skip to content

Commit d6dac50

Browse files
authored
Merge pull request #54 from rianoc-kx/3.1.6
3.1.6
2 parents 1641417 + f014b81 commit d6dac50

File tree

35 files changed

+1246
-81
lines changed

35 files changed

+1246
-81
lines changed

conda-recipe/meta.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ requirements:
2828
- numpy==1.20.* # [py==37]
2929
- tomli>=2.0.1
3030
- wheel>=0.36
31-
- sysroot_linux-64 # [linux64]
31+
- sysroot_linux-64 2.17 # [linux64]
32+
- kernel-headers_linux-64 3.10.0 # [linux64]
3233

3334
run:
3435
- python

docs/beta-features/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ _This page provides an overview of PyKX Beta Features, including what they are,
1111

1212
## What is a Beta Feature?
1313

14-
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.
14+
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.
1515

1616
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).
1717

docs/getting-started/installing.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -331,11 +331,11 @@ This command should display the installed version of PyKX.
331331
| Mac ARM | kdb+ 4.0 | libq.dylib | 2025.02.18 |
332332
| Mac x86 | kdb+ 4.0 | libq.dylib | 2025.02.18 |
333333
| Windows | kdb+ 4.0 | q.dll/q.lib | 2025.02.18 |
334-
| Linux ARM | kdb+ 4.1 | libq.so | 2025.04.28 |
335-
| Linux x86 | kdb+ 4.1 | libq.so | 2025.04.28 |
336-
| Mac ARM | kdb+ 4.1 | libq.dylib | 2025.04.28 |
337-
| Mac x86 | kdb+ 4.1 | libq.dylib | 2025.04.28 |
338-
| Windows | kdb+ 4.1 | q.dll/q.lib | 2025.04.28 |
334+
| Linux ARM | kdb+ 4.1 | libq.so | 2025.11.25 |
335+
| Linux x86 | kdb+ 4.1 | libq.so | 2025.11.25 |
336+
| Mac ARM | kdb+ 4.1 | libq.dylib | 2025.11.25 |
337+
| Mac x86 | kdb+ 4.1 | libq.dylib | 2025.11.25 |
338+
| Windows | kdb+ 4.1 | q.dll/q.lib | 2025.11.25 |
339339
| Linux ARM | Unlicensed | libe.so | 2023.11.22 |
340340
| Linux x86 | Unlicensed | libe.so | 2023.11.22 |
341341
| Mac ARM | Unlicensed | libe.so | 2023.11.22 |

docs/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ To begin your journey with PyKX, follow the sections below:
3434

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

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

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

docs/release-notes/changelog.md

Lines changed: 58 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,49 @@
44

55
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).
66

7+
## PyKX 3.1.6
8+
9+
#### Release Date
10+
11+
2025-12-01
12+
13+
### Fixes and Improvements
14+
15+
- Updated 4.1 to 2025.11.25 for all platforms.
16+
- Fixed issue where setting `sort=True` when calling `merge` on two `kx.Tables` ignored the supplied `on` parameter.
17+
18+
=== "Behavior prior to change"
19+
20+
```Python
21+
>>> da = kx.q.z.D
22+
>>> a = kx.toq(pd.DataFrame({'r':[2,3,4],'date':[da-2, da, da-1], 'k':[10, 11, 12]}))
23+
>>> b = kx.toq(pd.DataFrame({'r':[5,6,7],'date':[da-2, da-1, da], 'k':[13, 14, 15]}))
24+
>>> a.merge(b, on='date', sort=True)
25+
pykx.Table(pykx.q('
26+
r_x date k_x r_y k_y
27+
--------------------------
28+
2 2025.11.25 10 5 13
29+
3 2025.11.27 11 7 15
30+
4 2025.11.26 12 6 14
31+
'))
32+
```
33+
34+
=== "Behavior post change"
35+
36+
```Python
37+
>>> da = kx.q.z.D
38+
>>> a = kx.toq(pd.DataFrame({'r':[2,3,4],'date':[da-2, da, da-1], 'k':[10, 11, 12]}))
39+
>>> b = kx.toq(pd.DataFrame({'r':[5,6,7],'date':[da-2, da-1, da], 'k':[13, 14, 15]}))
40+
>>> a.merge(b, on='date', sort=True)
41+
pykx.Table(pykx.q('
42+
r_x date k_x r_y k_y
43+
--------------------------
44+
2 2025.11.25 10 5 13
45+
4 2025.11.26 12 6 14
46+
3 2025.11.27 11 7 15
47+
'))
48+
```
49+
750
## PyKX 3.1.5
851

952
#### Release Date
@@ -30,24 +73,24 @@
3073
- 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.
3174
- Fixed an issue when converting dataframes with embeddings arrays.
3275

33-
=== "Behaviour prior to change"
76+
=== "Behavior prior to change"
3477

3578
```Python
3679
>>> df=pd.DataFrame(dict(embeddings=list(np.random.ranf((500, 10)).astype(np.float32))))
37-
>>> pykx.toq(df)
80+
>>> kx.toq(df)
3881
segfault
3982
```
4083

41-
=== "Behaviour post change"
84+
=== "Behavior post change"
4285

4386
```Python
4487
>>> df=pd.DataFrame(dict(embeddings=list(np.random.ranf((500, 10)).astype(np.float32))))
45-
>>> pykx.toq(df)
88+
>>> kx.toq(df)
4689
```
4790

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

50-
=== "Behaviour prior to change"
93+
=== "Behavior prior to change"
5194

5295
```python
5396
>>> np.asarray(kx.FloatAtom(3.65)).dtype
@@ -58,7 +101,7 @@
58101
dtype('O')
59102
```
60103

61-
=== "Behaviour post change"
104+
=== "Behavior post change"
62105

63106
```python
64107
>>> np.asarray(kx.FloatAtom(3.65)).dtype
@@ -71,7 +114,7 @@
71114

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

74-
=== "Behaviour prior to change"
117+
=== "Behavior prior to change"
75118

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

83-
=== "Behaviour after change"
126+
=== "Behavior after change"
84127

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

135+
### Deprecations & Removals
136+
137+
- Creating more than one `DB` instance without specifying `overwrite=True`
138+
92139
## PyKX 3.1.4
93140

94141
#### Release Date
@@ -379,8 +426,8 @@
379426
│ └── time
380427
```
381428

382-
- 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.
383-
- 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.
429+
- 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.
430+
- 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.
384431
- Fix creation of `ParseTree` objects from `QueryPhrase` or `Column` objects.
385432
- Fix or operator `|` for `Column | ParseTree` use cases.
386433
- Fixed an issue around the installation process when users attempted to set unlicensed mode after PyKX failed to load with a kdb+ license.

docs/release-notes/deprecations.md

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22

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

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

24+
## PyKX 3.1.5
25+
26+
Release Date: 2025-10-21
27+
28+
### Fixes and Improvements
29+
30+
- Users will be warned when they attempt to create more than one `DB` object.
31+
32+
```python
33+
>>> import pykx as kx
34+
>>> db = kx.DB(path="tmp/db1")
35+
>>> db2 = kx.DB(path="tmp/db2")
36+
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.
37+
>>> db3 = kx.DB(path="tmp/db3", overwrite=True)
38+
>>>
39+
```
2340

2441
## PyKX 3.1.3
2542

docs/release-notes/underq-changelog.md

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ This changelog provides updates from PyKX 2.0.0 and above, for information relat
2626

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

29-
=== "Behaviour prior to change"
29+
=== "Behavior prior to change"
3030

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

42-
=== "Behaviour post change"
42+
=== "Behavior post change"
4343

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

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

140-
=== "Behaviour prior to change"
140+
=== "Behavior prior to change"
141141

142142
```q
143143
q).pykx.toq .pykx.topd ([] a:1 2 3)
144144
enlist[`..pandas;;][...
145145
```
146146

147-
=== "Behaviour post change"
147+
=== "Behavior post change"
148148

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

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

160-
=== "Behaviour prior to change"
160+
=== "Behavior prior to change"
161161

162162
```q
163163
q).pykx.toq any
164164
'Expected foreign object for call to .pykx.toq
165165
```
166166

167-
=== "Behaviour post change"
167+
=== "Behavior post change"
168168

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

174174
- 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
175175

176-
=== "Behaviour prior to change"
176+
=== "Behavior prior to change"
177177

178178
```q
179179
q).pykx.loadPy "file.py"
180180
'FileNotFoundError(2, 'No such file or directory')
181181
```
182182

183-
=== "Behaviour post change"
183+
=== "Behavior post change"
184184

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

234234
### Fixes and Improvements
235235

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

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

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

248-
=== "Behaviour prior to change"
248+
=== "Behavior prior to change"
249249

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

256-
=== "Behaviour post change"
256+
=== "Behavior post change"
257257

258258
```q
259259
q)p)print(1+1)
260260
2
261261
```
262262

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

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

274274
- 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.
275275

276-
=== "Behaviour prior to change"
276+
=== "Behavior prior to change"
277277

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

285-
=== "Behaviour post change"
285+
=== "Behavior post change"
286286

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

312312
- 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.
313313

314-
=== "Behaviour prior to change"
314+
=== "Behavior prior to change"
315315

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

323-
=== "Behaviour post change"
323+
=== "Behavior post change"
324324

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

587587
- 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"`.
588588

589-
=== "Behaviour prior to change"
589+
=== "Behavior prior to change"
590590

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

598-
=== "Behaviour post change"
598+
=== "Behavior post change"
599599

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

0 commit comments

Comments
 (0)