Release Notes
This release introduces several major new features, performance improvements, and bug fixes across Arkouda’s Python and Chapel codebases.
Highlights include the new pandas ExtensionArray implementation, expanded random number generation features, and improvements to Parquet I/O performance.
Arkouda now officially supports Chapel versions 2.0 through 2.5, and our CI has been updated to validate against these versions.
Major Changes
Implemented pandas ExtensionArray for Arkouda (Closes #4597, #4907, #4876, #4947) by @ajpotts
Added ak.rand to match np.random.rand (Closes #4736) by @drculhane
Added ak.shares_memory function (Closes #3284) by @ajpotts
Added ak.errstate context manager for error handling (Closes #3286) by @ajpotts
Added ak.Index.sort_values (Closes #3177) by @ajpotts
Added ak.fabs (Closes #4921) by @1RyanK
Added ascending argument to ak.argsort (Closes #4782) by @ajpotts
Improved Parquet read performance, especially for multiple column reads (Closes #4906) by @e-kayrakli
Enabled multi-dim output for ak.random.standard_exponential (Closes #4924) by @drculhane
Added destructors for Chapel-side and Python-side RNGs (Closes #4898) by @drculhane
Minor Changes
Expanded axis validation standardization across array API functions (Closes #4831, #4858, #4909, #4932) by @drculhane
Improved docstrings (Closes #3941, #3942, #4852, #4849, #4853, #4947) by @ajpotts, @1RyanK
Added global seed support for reproducibility (Closes #4777, #4726) by @drculhane
Improved shuffle benchmark with Feistel and alternatives (Closes #4818, #4845, #4787) by @1RyanK
Improved benchmark framework (Closes #4811, #4814, #4808, #4816, #4856) by @ajpotts
Added pytest-benchmark dependency (Closes #4821) by @jabraham17
Improved CI builds: Chapel 2.5 support, automated builds, Dockerfile fixes (Closes #4783, #4891, #4910, #4908) by @jaketrookman, @jabraham17
Added pyproject.toml for modern packaging (Closes #4209) by @ajpotts
Refined multi-dim build to reduce size (Closes #4791) by @ajpotts
Improved nbytes handling for bigint arrays (Closes #4850, #4896) by @1RyanK
Improved command registration (Closes #4953) by @e-kayrakli
Bug Fixes
Fixed ak.where for Categorical (Closes #4881) by @1RyanK
Fixed ak.randint behavior for bool (Closes #4872) by @1RyanK
Fixed conversion of numpy bigint zeros producing empty arrays (Closes #4884) by @1RyanK
Fixed cumsum vs cumulative_sum typo (Closes #4804) by @drculhane
Fixed handling of size/shape in ak.random.poisson (Closes #4916) by @drculhane
Fixed common type promotion in concat and stack (Closes #4889) by @drculhane
Fixed benchmark issues: average rate always zero, array_transfer.dat not populating, io_benchmark parsing (Closes #4824, #4863, #4862) by @ajpotts
Fixed doc build failures with Chapel 2.5.0 (Closes #4838) by @ajpotts
Fixed clang bitshift issue (Closes #4894) by @1RyanK
Fixed MaxArrayDims incorrectness (Closes #4565) by @1RyanK
Fixed negative server return values in rare cases (Closes #4157) by @ajpotts
Fixed intermittent test failures (test_set_uint) (Closes #4153) by @ajpotts
Fixed delGeneratorMsg bug (Closes #4933) by @ajpotts
Fixed PT003, T201, E127, Flake8 errors (Closes #4806, #4874, #4903, #4871) by @ajpotts
Fixed doctest failures in random and client modules (Closes #4798, #4860) by @ajpotts, @drculhane
Auto-generated release notes
What's Changed
- Closes 4801, adds an assert to a line in tests/numpy/random_test.py by @drculhane in #4802
- Closes 4804, fixing a "cumsum" vs "cumulative_sum" typo that was in PR 4755 by @drculhane in #4805
- Closes #4597: implement pandas ExtensionArray for arkouda by @ajpotts in #4598
- Closes #4806: Fix PT003 error by @ajpotts in #4807
- Adds ak.rand function to match np.random.rand by @drculhane in #4736
- Closes 4726, standardizing use of seed in unit tests by @drculhane in #4748
- Closes #4808: Expand pytest.N usage in benchmarks_v2 by @ajpotts in #4809
- Add pytest-benchmark dependency to setup.py by @jabraham17 in #4821
- Closes #4816: sort benchmark_v2/datdir/configs/field_lookup_map.json… by @ajpotts in #4817
- Closes #3284: shares_memory by @ajpotts in #4823
- Closes #4818: Shuffle benchmark by @1RyanK in #4825
- Closes #4798: doctest for random.generator module by @ajpotts in #4799
- Closes #4791: trim down multi-dim build by @ajpotts in #4792
- Fixes #4838: make doc fails when building with chapel 2.5.0 by @ajpotts in #4839
- Closes #4811: parse results for benchmark_v2/split_benchmark.py by @ajpotts in #4813
- Closes #4814: Refactor benchmarks/multiIO.py to new benchmark framework by @ajpotts in #4815
- Closes 4828, fixes some parametrizations by @drculhane in #4829
- Fixes #4824: In io_benchmark.py read Average rate is always zero by @ajpotts in #4826
- Closes #4782: add ascending argument to argsort by @ajpotts in #4784
- Closes #4787: Shuffling alternative by @1RyanK in #4789
- Closes 4831, standardizes axis checking for cases where axis can only be an integer by @drculhane in #4834
- update CI to use chapel 2.5 by @jaketrookman in #4783
- Closes #4845: Add Feistel to Shuffle Benchmark by @1RyanK in #4846
- Improved docstrings in client module by @ajpotts in #4849
- Closes #4853: Problem in shuffle docstring by @1RyanK in #4854
- Closes #4860: remove apollo skips on doctest unit tests by @ajpotts in #4861
- Closes #4856: optional benchmark_v2 submodule by @ajpotts in #4859
- Flake8 errors by @ajpotts in #4871
- Closes #3941: ak.hist_all docs example produces an error by @ajpotts in #4866
- Closes #4874 T201 errors by @ajpotts in #4875
- Closes #4863: 16-array Average rate always returns zero under benchm… by @ajpotts in #4865
- Part 2 of #4348: Remove the DAR103 errors from the docstrings by @ajpotts in #4852
- Closes 4777, creating a global seed by @drculhane in #4848
- Closes #4862: array_transfer.dat not populating with benchmark_v2 by @ajpotts in #4864
- Closes #4850: nbytes is meaningless for bigint arrays by @1RyanK in #4851
- Incorporates standard for axis validation to array_api/manipulation_functions.py by @drculhane in #4858
- Closes 4894: clang issue with bitshifts by @1RyanK in #4895
- Closes #4896: Update calc_num_bytes for bigint by @1RyanK in #4897
- Improve CI to automate builds (Part 1) by @jabraham17 in #4891
- Closes #3286: errstate by @ajpotts in #4886
- Implements destructors for chapel-side and python-side rngs by @drculhane in #4898
- Fix push for
build-CI-containerby @jabraham17 in #4908 - Closes #4872: ak.randint doesn't behave the same for bool as numpy by @1RyanK in #4873
- Closes #4876 improve extension array api take functions by @ajpotts in #4882
- Fixes common type promotion in array_api concat and stack by @drculhane in #4889
- Closes #4903: Resolve E127 Errors by @ajpotts in #4904
- Closes #3177 Index.sort_values by @ajpotts in #3235
- Fixes handling of size/shape parameter in ak.random.poisson by @drculhane in #4916
- Closes #4921: fabs by @1RyanK in #4922
- Standardizes axis validation and handling in array_api/statistical_functions.py by @drculhane in #4909
- Fix paths in new CI image Dockerfile by @jabraham17 in #4910
- Closes #4836: --saveUsedModules should only save modules that are not compiled by default by @1RyanK in #4920
- Closes #4565: MaxArrayDims is incorrect - fix or remove it by @1RyanK in #4914
- Closes #4881: bug in ak.where for ak.Categorical by @1RyanK in #4913
- Fix bug in delGeneratorMsg by @ajpotts in #4933
- Closes #4153: Intermitent failures of test_set_uint by @ajpotts in #4937
- Improve parquet read implementation and multiple column read performance by @e-kayrakli in #4906
- Enables multi-dim output from ak.random.standard_exponential by @drculhane in #4924
- Closes #4157: server can return a negative value when it should retu… by @ajpotts in #4939
- Adds axis standardization to repeat function in numpy/manipulation_functions.py by @drculhane in #4932
- Closes #4907: Pandas ExtensionArray API dtypes by @ajpotts in #4915
- Closes #4884: Converting numpy array of bigint zeros to Arkouda yields empty array by @1RyanK in #4885
- Closes #3942 ak.plot dist docs example produces an error by @ajpotts in #4868
- Closes #4947: docstring for the extension module by @ajpotts in #4948
- Closes #4209 create pyproject.toml by @ajpotts in #4887
- Make sure to register commands from modules only once by @e-kayrakli in #4953
Full Changelog: v2025.08.20...v2025.09.30