NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #3495 most downloaded on PyPI
Manipulate JSON-like data with NumPy-like idioms.
Last release 17 days ago
17 Sep 2026
Release timing varies
gaps range from 2 weeks to 4 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
4 versions withdrawn
withdrawn after publishing
8 years old
210 releases · first in 2018
feat: add validity error for duplicate record field by @agoose77 in https://github.com/scikit-hep/awkward/pull/2447
empty_if_typetracer & expose more of typetracer to L2 by @agoose77 in https://github.com/scikit-hep/awkward/pull/2127typestr in ak.types.Type by @agoose77 in https://github.com/scikit-hep/awkward/pull/2454ak.to_numpy does not properly convert lists of empty string by @agoose77 in https://github.com/scikit-hep/awkward/pull/2449ak.almost_equal by @agoose77 in https://github.com/scikit-hep/awkward/pull/2460Full Changelog: https://github.com/scikit-hep/awkward/compare/v2.2.0...v2.2.1
One column per quarter.
feat!: deprecate length_zero_array highlevel argument by @agoose77 in https://github.com/scikit-hep/awkward/pull/2437
union[?X, Y] into union[?X, ?Y] by @agoose77 in https://github.com/scikit-hep/awkward/pull/2427ak.forms.from_type by @agoose77 in https://github.com/scikit-hep/awkward/pull/2425ak.enforce_type by @agoose77 in https://github.com/scikit-hep/awkward/pull/2365length_zero_array highlevel argument by @agoose77 in https://github.com/scikit-hep/awkward/pull/2437broadcast_fields to toctree by @agoose77 in https://github.com/scikit-hep/awkward/pull/2436Full Changelog: https://github.com/scikit-hep/awkward/compare/v2.1.4...v2.2.0
feat!: raise error for out-of-bounds axis in ak.cartesian by @agoose77 in https://github.com/scikit-hep/awkward/pull/2411
ak.cartesian by @agoose77 in https://github.com/scikit-hep/awkward/pull/2411ak.numba.GrowableBuffer visible by @ianna in https://github.com/scikit-hep/awkward/pull/2403GrowableBuffer::extend algorithm by @ianna in https://github.com/scikit-hep/awkward/pull/2396resize default value to 8 - that is passed to GrowableBuffer by @ianna in https://github.com/scikit-hep/awkward/pull/2421is_equal_to bug in UnionArray by @agoose77 in https://github.com/scikit-hep/awkward/pull/2426ak.almost_equal by @agoose77 in https://github.com/scikit-hep/awkward/pull/2424nplike.repeat & ak.with_field by @agoose77 in https://github.com/scikit-hep/awkward/pull/2429Full Changelog: https://github.com/scikit-hep/awkward/compare/v2.1.3...v2.1.4
fix: support empty records in ak.with_field by @agoose77 in https://github.com/scikit-hep/awkward/pull/2387
(none!)
ak.with_field by @agoose77 in https://github.com/scikit-hep/awkward/pull/2387nplike.asarray if copy is required by @agoose77 in https://github.com/scikit-hep/awkward/pull/2395GrowableBuffer::move_to algorithm by @ianna in https://github.com/scikit-hep/awkward/pull/2394ascontiguousarray by @agoose77 in https://github.com/scikit-hep/awkward/pull/2397nplike registry (1 of 2) by @agoose77 in https://github.com/scikit-hep/awkward/pull/2389Backend registry (2 of 2) by @agoose77 in https://github.com/scikit-hep/awkward/pull/2390unset sentinel by @agoose77 in https://github.com/scikit-hep/awkward/pull/2391Full Changelog: https://github.com/scikit-hep/awkward/compare/v2.1.2...v2.1.3
feat: use cppyy for JIT by @ianna in https://github.com/scikit-hep/awkward/pull/2306
to_backend to ak.record.Record by @agoose77 in https://github.com/scikit-hep/awkward/pull/2355is_equal_to member by @agoose77 in https://github.com/scikit-hep/awkward/pull/2368ak.cartesian & broadcasting by @agoose77 in https://github.com/scikit-hep/awkward/pull/2329ak.cartesian for typetracer by @agoose77 in https://github.com/scikit-hep/awkward/pull/2295rdfentry_ column by @ianna in https://github.com/scikit-hep/awkward/pull/2343TypeTracer.asarray by @agoose77 in https://github.com/scikit-hep/awkward/pull/2361from_iter require iterables! by @agoose77 in https://github.com/scikit-hep/awkward/pull/2353ak.unzip visits all contents by @agoose77 in https://github.com/scikit-hep/awkward/pull/2373awkward.typing by @agoose77 in https://github.com/scikit-hep/awkward/pull/2324_parameters_XXX functions into _parameters submodule by @agoose77 in https://github.com/scikit-hep/awkward/pull/2325merge_as_union to ak_concatenate by @agoose77 in https://github.com/scikit-hep/awkward/pull/2351Full Changelog: https://github.com/scikit-hep/awkward/compare/v2.1.1...v2.1.2
feat: add support for arrays in from_buffers by @agoose77 in https://github.com/scikit-hep/awkward/pull/2319
from_buffers by @agoose77 in https://github.com/scikit-hep/awkward/pull/2319axis in L1 by @agoose77 in https://github.com/scikit-hep/awkward/pull/2285ak.unflatten by @agoose77 in https://github.com/scikit-hep/awkward/pull/2293__getitem__ by @agoose77 in https://github.com/scikit-hep/awkward/pull/2314nplike_of by @agoose77 in https://github.com/scikit-hep/awkward/pull/2315Full Changelog: https://github.com/scikit-hep/awkward/compare/v2.1.0...v2.1.1
chore: bump NumPy version by @agoose77 in https://github.com/scikit-hep/awkward/pull/2282
(none!)
(none!)
Full Changelog: https://github.com/scikit-hep/awkward/compare/v2.0.10...v2.1.0
feat: make header-only libraries a CMake project by @agoose77 in https://github.com/scikit-hep/awkward/pull/2280
header-only libraries a CMake project by @agoose77 in https://github.com/scikit-hep/awkward/pull/2280Full Changelog: https://github.com/scikit-hep/awkward/compare/v2.0.9...v2.0.10
feat: keep column order after filtering flag by @ianna in https://github.com/scikit-hep/awkward/pull/2234
full_like by @agoose77 in https://github.com/scikit-hep/awkward/pull/2251simplified in ak._do.merge_as_union by @agoose77 in https://github.com/scikit-hep/awkward/pull/2240to_packed by @agoose77 in https://github.com/scikit-hep/awkward/pull/2263nan_to_num impl by @agoose77 in https://github.com/scikit-hep/awkward/pull/2266ak.broadcast_fields by @agoose77 in https://github.com/scikit-hep/awkward/pull/2267Full Changelog: https://github.com/scikit-hep/awkward/compare/v2.0.8...v2.0.9
feat: allow awkward type arrays filtering based on rdfentry by @ianna in https://github.com/scikit-hep/awkward/pull/2202
unknown-length by @agoose77 in https://github.com/scikit-hep/awkward/pull/2229EmptyArray in remove_structure by @agoose77 in https://github.com/scikit-hep/awkward/pull/2219is_c_contiguous method to Cupy by @ianna in https://github.com/scikit-hep/awkward/pull/2221to_RegularArray by @agoose77 in https://github.com/scikit-hep/awkward/pull/2226RegularArray with typetracer by @agoose77 in https://github.com/scikit-hep/awkward/pull/2227ak.merge_union_of_records by @agoose77 in https://github.com/scikit-hep/awkward/pull/2236Content._getitem_XXX by @agoose77 in https://github.com/scikit-hep/awkward/pull/2223NumpyLike.known_shape by @agoose77 in https://github.com/scikit-hep/awkward/pull/2228Content._getitem_range to use explicit indices by @agoose77 in https://github.com/scikit-hep/awkward/pull/2220merge_union_of_records by @agoose77 in https://github.com/scikit-hep/awkward/pull/2213switcher.json by @agoose77 in https://github.com/scikit-hep/awkward/pull/2217how-to-examine-type.md by @agoose77 in https://github.com/scikit-hep/awkward/pull/2013Full Changelog: https://github.com/scikit-hep/awkward/compare/v2.0.7...v2.0.8
feat: add ability to forget length of typetracer created with typetracer_from_report by @douglasdavis in https://github.com/scikit-hep/awkward/pull/21
typetracer_from_report by @douglasdavis in https://github.com/scikit-hep/awkward/pull/2141None for unknown lengths (1 of 2) by @agoose77 in https://github.com/scikit-hep/awkward/pull/2168ak.merge_union_of_records by @agoose77 in https://github.com/scikit-hep/awkward/pull/2185ak.approx_equal by @agoose77 in https://github.com/scikit-hep/awkward/pull/2198dtype for buffers in from_rdataframe. by @agoose77 in https://github.com/scikit-hep/awkward/pull/2145_repr by @agoose77 in https://github.com/scikit-hep/awkward/pull/2158type_to_name for Layout builder cxx_14 target by @ianna in https://github.com/scikit-hep/awkward/pull/2165mask_identity=True for axis=None in ptp, std, etc. by @agoose77 in https://github.com/scikit-hep/awkward/pull/2172keepdims=True, axis=None reductions by @agoose77 in https://github.com/scikit-hep/awkward/pull/2177len(layout) under typetracer by @agoose77 in https://github.com/scikit-hep/awkward/pull/2181NotImplementedError when reading empty array from Parquet by @dsavoiu in https://github.com/scikit-hep/awkward/pull/2194to_arraylib by @agoose77 in https://github.com/scikit-hep/awkward/pull/2128Singleton to its own module by @agoose77 in https://github.com/scikit-hep/awkward/pull/2131nplike.asarray by @agoose77 in https://github.com/scikit-hep/awkward/pull/2134nplike.zeros et al. use Array API type signatures by @agoose77 in https://github.com/scikit-hep/awkward/pull/2137_nplikes.py into _nplikes/*.py [2 of 2] by @agoose77 in https://github.com/scikit-hep/awkward/pull/2152UnknownScalar, harden unknown scalar behavior by @agoose77 in https://github.com/scikit-hep/awkward/pull/2154noxfile by @agoose77 in https://github.com/scikit-hep/awkward/pull/2136not in by @henryiii in https://github.com/scikit-hep/awkward/pull/2176Full Changelog: https://github.com/scikit-hep/awkward/compare/v2.0.6...v2.0.7
feat: expose typetracer in public backend API by @agoose77 in https://github.com/scikit-hep/awkward/pull/2066
to_buffers by @agoose77 in https://github.com/scikit-hep/awkward/pull/2095__array_function__ by @agoose77 in https://github.com/scikit-hep/awkward/pull/2045fill_none by @agoose77 in https://github.com/scikit-hep/awkward/pull/2065ak.Record by @agoose77 in https://github.com/scikit-hep/awkward/pull/2077array_function overload results by @agoose77 in https://github.com/scikit-hep/awkward/pull/2079RegularArray and NumpyArray by @agoose77 in https://github.com/scikit-hep/awkward/pull/2063run_lengths by @agoose77 in https://github.com/scikit-hep/awkward/pull/2093counts by @agoose77 in https://github.com/scikit-hep/awkward/pull/2097ak.to_layout by @agoose77 in https://github.com/scikit-hep/awkward/pull/2098ak.unflatten by @agoose77 in https://github.com/scikit-hep/awkward/pull/2099ak.mixin_class_method by @agoose77 in https://github.com/scikit-hep/awkward/pull/2102NumpyArray with option by @agoose77 in https://github.com/scikit-hep/awkward/pull/2105is_indexed types in ak.fill_none by @agoose77 in https://github.com/scikit-hep/awkward/pull/2111object.__new__(ak.Array) for pickling constructor by @agoose77 in https://github.com/scikit-hep/awkward/pull/2113TypeTracerArray binary operators, ak.Array.__str__ with a typetracer, attempts to call touch_data on non-typetracers, ...? by @jpivarski in https://github.com/scikit-hep/awkward/pull/2115ScalarType and treat bare strings as char arrays by @agoose77 in https://github.com/scikit-hep/awkward/pull/2116@final to contents, types, and forms by @agoose77 in https://github.com/scikit-hep/awkward/pull/2033kind and order args to sorting protocols by @agoose77 in https://github.com/scikit-hep/awkward/pull/2090Full Changelog: https://github.com/scikit-hep/awkward/compare/v2.0.5...v2.0.6
fix: remove unused keyword arg by @agoose77 in https://github.com/scikit-hep/awkward/pull/2046
(none!)
regular_to_jagged in Content._recursively_apply / ak.transform by @agoose77 in https://github.com/scikit-hep/awkward/pull/2048ak.ArrayBuilder by @agoose77 in https://github.com/scikit-hep/awkward/pull/2052check pointers in ArrayBuilder by @agoose77 in https://github.com/scikit-hep/awkward/pull/2055ak.metadata_from_parquet by @agoose77 in https://github.com/scikit-hep/awkward/pull/2050Full Changelog: https://github.com/scikit-hep/awkward/compare/v2.0.4...v2.0.5
…but the function argument needs to go through a deprecation cycle, since libraries like dask-awkward pass arguments through to Awkward. Removing flatt…
This follows quickly on 2.0.3, which removed a feature and a function argument. Removing the feature is still the right thing to do (see the 2.0.3 release notes), but the function argument needs to go through a deprecation cycle, since libraries like dask-awkward pass arguments through to Awkward. Removing flatten_records as an argument introduces an error, even if the surviving case of flatten_records=False is desired.
This will also be a good exercise of the deprecation schedule in 2.x.
(none!)
flatten_records instead of hard-deprecation by @agoose77 in https://github.com/scikit-hep/awkward/pull/2036(none!)
Full Changelog: https://github.com/scikit-hep/awkward/compare/v2.0.3...v2.0.4
The flatten_records argument of all reducers (ak.all, ak.any, ..., ak.var) has effectively been removed: setting it now raises an error (PR #2020). Th
flatten_records argument of all reducers (ak.all, ak.any, ..., ak.var) has effectively been removed: setting it now raises an error (PR #2020). This argument applies a reducer to all contents of a record, merging fields, and it had to be removed to properly implement axis=None. The old default, flatten_records=False, is now the only behavior, and to get the equivalent of flatten_records=True, you can use ak.ravel:ak.sum(array, flatten_records=True)
becomes
ak.sum(ak.ravel(array))
Note: yanked from PyPI in favor of 2.0.4.
UnknownLength in ak.types.ArrayType by @agoose77 in https://github.com/scikit-hep/awkward/pull/2031axis=-1 reduction for axis=None by @agoose77 in https://github.com/scikit-hep/awkward/pull/2020Full Changelog: https://github.com/scikit-hep/awkward/compare/v2.0.2...v2.0.3
feat: add ak.drop_none() by @ioanaif in https://github.com/scikit-hep/awkward/pull/1904
(none!)
(none!)
Full Changelog: https://github.com/scikit-hep/awkward/compare/v2.0.1...v2.0.2
feat: add ak.without_field by @agoose77 in https://github.com/scikit-hep/awkward/pull/1963
ak.without_field by @agoose77 in https://github.com/scikit-hep/awkward/pull/1963Record.copy by @agoose77 in https://github.com/scikit-hep/awkward/pull/1996ak.to_numpy by @agoose77 in https://github.com/scikit-hep/awkward/pull/2012ak.type() by @agoose77 in https://github.com/scikit-hep/awkward/pull/2009num kernels by @agoose77 in https://github.com/scikit-hep/awkward/pull/1998Full Changelog: https://github.com/scikit-hep/awkward/compare/v2.0.0...v2.0.1
Any removal or change of an interface will require a minor version number increase and a deprecation cycle, on the order of months. (New features and…
The Awkward Array version 2 project started in June of 2021 and has been developed alongside version 1 updates. For most of that time, it was available as a submodule, awkward._v2, so that it could be tested with the same tests as version 1 and could be experimented upon by early adopters.
The usual list of pull request titles would not be useful as release notes because the changes from 1.10.2 to 2.0.0 are too extensive. But here's a list of their PR numbers:
#884, #895, #896, #914, #957, #958, #959, #962, #977, #1025, #1031, #1036, #1045, #1059, #1063, #1072, #1073, #1074, #1079, #1082, #1092, #1099, #1101, #1109, #1110, #1111, #1116, #1117, #1119, #1121, #1122, #1123, #1124, #1125, #1130, #1131, #1132, #1134, #1135, #1137, #1138, #1140, #1141, #1142, #1143, #1145, #1146, #1147, #1148, #1149, #1150, #1153, #1154, #1156, #1159, #1160, #1161, #1162, #1164, #1165, #1183, #1184, #1201, #1203, #1204, #1206, #1207, #1211, #1214, #1215, #1217, #1218, #1219, #1220, #1221, #1222, #1225, #1226, #1227, #1228, #1229, #1233, #1234, #1240, #1242, #1245, #1248, #1259, #1270, #1276, #1279, #1289, #1290, #1292, #1293, #1294, #1296, #1297, #1300, #1301, #1304, #1306, #1307, #1309, #1312, #1317, #1321, #1327, #1329, #1338, #1340, #1346, #1347, #1351, #1352, #1354, #1355, #1356, #1359, #1360, #1364, #1365, #1367, #1368, #1369, #1370, #1372, #1373, #1374, #1376, #1378, #1380, #1381, #1383, #1384, #1385, #1387, #1390, #1392, #1393, #1394, #1395, #1397, #1398, #1399, #1401, #1404, #1407, #1408, #1409, #1410, #1412, #1413, #1415, #1416, #1418, #1419, #1421, #1422, #1425, #1426, #1427, #1428, #1429, #1430, #1431, #1432, #1433, #1434, #1435, #1437, #1440, #1443, #1444, #1445, #1446, #1447, #1449, #1455, #1456, #1457, #1458, #1462, #1464, #1465, #1467, #1468, #1469, #1470, #1474, #1475, #1476, #1478, #1484, #1485, #1486, #1487, #1490, #1491, #1492, #1493, #1494, #1496, #1497, #1498, #1499, #1502, #1503, #1505, #1508, #1510, #1513, #1514, #1515, #1516, #1518, #1519, #1520, #1521, #1523, #1524, #1527, #1531, #1532, #1533, #1535, #1536, #1537, #1538, #1539, #1540, #1541, #1542, #1543, #1544, #1550, #1555, #1556, #1559, #1560, #1561, #1562, #1564, #1565, #1566, #1567, #1568, #1572, #1573, #1576, #1579, #1581, #1589, #1593, #1597, #1598, #1602, #1603, #1604, #1605, #1607, #1609, #1610, #1613, #1614, #1615, #1616, #1617, #1618, #1619, #1620, #1621, #1625, #1627, #1629, #1632, #1636, #1641, #1642, #1645, #1649, #1650, #1651, #1652, #1653, #1661, #1665, #1666, #1671, #1673, #1674, #1675, #1677, #1679, #1689, #1691, #1692, #1695, #1698, #1699, #1700, #1706, #1708, #1712, #1715, #1716, #1717, #1721, #1722, #1723, #1725, #1730, #1731, #1732, #1733, #1739, #1740, #1743, #1744, #1746, #1748, #1749, #1750, #1751, #1752, #1754, #1757, #1758, #1759, #1760, #1761, #1763, #1768, #1769, #1770, #1773, #1774, #1776, #1777, #1779, #1781, #1783, #1787, #1788, #1795, #1796, #1797, #1798, #1800, #1801, #1803, #1804, #1811, #1812, #1813, #1815, #1816, #1822, #1825, #1826, #1827, #1829, #1830, #1831, #1832, #1835, #1836, #1837, #1838, #1841, #1844, #1845, #1848, #1851, #1852, #1853, #1854, #1856, #1857, #1858, #1859, #1860, #1861, #1863, #1867, #1869, #1871, #1873, #1876, #1877, #1878, #1880, #1881, #1891, #1892, #1894, #1895, #1897, #1898, #1900, #1905, #1907, #1908, #1911, #1912, #1913, #1915, #1919, #1920, #1921, #1922, #1928, #1930, #1934, #1938, #1939, #1940, #1942, #1943, #1946, #1948, #1949, #1950, #1951, #1952, #1953, #1954, #1955, #1956, #1959, #1960, #1962, #1965, #1966, #1968, #1970, #1971, #1972, #1974, #1976, #1977, #1979, #1981, #1982, #1983, #1985, #1986
Full Changelog: https://github.com/scikit-hep/awkward/compare/v1.10.2...v2.0.0
Despite the long list of PRs, the high-level interface changes from version 1 to version 2 were kept at a minimum. For the most part, the Awkward 1.x API is fine, but the internal implementation needed an overhaul to prevent technical debt.
The work was done by the Awkward Array developers:
In particular, most of the translation from version 1 to version 2 was the work of @ioanaif, the build/deployment was from @henryiii and @agoose77, the Awkward-RDataFrame bridge and other C++ interface from @ianna, GrowableBuffer/LayoutBuilder from @ManasviGoyal, and the CUDA and JAX foundations were laid by @swishdiff.
Additionally, we had help from:
Nearly all of the code is written in Python now. Exceptions are the "kernel" functions, GrowableBuffer, LayoutBuilder, ArrayBuilder, AwkwardForth, and dynamically generated C++ code for RDataFrame.
Maintains performance because any algorithms that scale with the size of an array are implemented in compiled "kernel" functions.
Split into two packages: awkward-cpp for the C++ part (infrequently updated, binary distribution for most platforms and Python versions) and awkward, the Python part (frequently updated).
Virtual arrays and Partitions (collectively, "lazy arrays") have been removed in favor of dask-awkward.
Awkward Arrays can be converted to and from RDataFrame, generating C++ for ROOT to JIT-compile so that iteration over Awkward Array input is fast (adapted from the Numba implementation).
Auto-differentiation of functions on Awkward Arrays using JAX. (But not JAX JIT-compilation.)
Suite of header-only C++ that does not depend on Awkward Arrays, but can be used to produce them and quickly get them from C++ to Python. The header-only suite includes GrowableBuffer and LayoutBuilder.
New documentation website (https://awkward-array.org/), based on JupyterBooks, the NumPy/SciPy/Pandas style and organization, as well as a notebook that can be executed in your web browser.
More expressive error-messages, highlighting the ak.* function that was in progress when the error occurred, with its arguments. (That is, highlighting ak.* functions as the granularity of feedback to users of Awkward Array, rather than making you search through the stack trace to the hand-off from your code to ours.)
Brackets are always balanced in the console representation of an array:
>>> ak.Array([
... [{"x": 1.1, "y": [1]}, {"x": 2.2, "y": [1, 2]}],
... [],
... [{"x": 3.3, "y": [1, 2, 3]}],
... ])
<Array [[{x: 1.1, y: [1]}, {...}], ...] type='3 * var * {x: float64, y: var...'>
as opposed to
<Array [[{x: 1.1, y: [1]}, ... y: [1, 2, 3]}]] type='3 * var * {"x": float64, "y...'>
in version 1. Also, show methods for values
[[{x: 1.1, y: [1]}, {x: 2.2, y: [1, 2]}],
[],
[{x: 3.3, y: [1, 2, 3]}]]
and types
3 * var * {
x: float64,
y: var * int64
}
This extended show output is the default representation in Jupyter.
Round-trip fidelity in ak.to_arrow/ak.from_arrow: no Awkward Array metadata is lost. Same for ak.to_parquet/ak.from_parquet, to the extent that pyarrow can read and write Parquet.
Parquet column selection using wildcards.
Data exported with version 1 ak.to_buffers can be imported by version 2 ak.from_buffers, with custom buffer_keys.
The majority of version 1 tests have been ported to version 2, to ensure that the interface and functionality doesn't change, except where intended (e.g. organizing naming conventions).
Consistent handling of date-time and time-delta types (matches NumPy's system).
Improved ak.to_json/ak.from_json arguments (for converting non-JSON types NaN, infinity, complex numbers) and using a known JSONSchema to accelerate ak.from_json. Removed ambiguities about newline-delimited JSON (requires explicit argument).
The world's fastest Avro file reader in Python, ak.from_avro_file (uses AwkwardForth).
"nan" versions of NumPy functions, such as np.nansum, np.nanmean, np.nanstd.
Renamed ak.to_pandas → ak.to_dataframe, to clarify distinction from awkward-pandas.
Organized Type and Form objects better, more consistent.
Clear specification of NumPy dtypes that can be used in Awkward Arrays (bool, numbers, including complex, and date-time/time-delta).
Organized naming conventions throughout the codebase, such as keys versus fields versus recordlookup.
Carefully examined the public API (all modules, functions, classes, and methods that don't start with an underscore) to be sure that we can support it going forward. Any removal or change of an interface will require a minor version number increase and a deprecation cycle, on the order of months. (New features and bug-fixes can be immediate, on patch releases.)
Flags and "configuration" function arguments are now keyword-only (order independent).
Started adding Python type hints (nowhere near complete, but started).
Removed the Identities from array nodes. They were never fully implemented—a placeholder for a feature that won't be developed within Awkward Array (SQL-style JOINs).
TypeTracerArray does a "dry run" of a calculation to predict its type at the end. Used to build a computation graph for dask-awkward.
Equivalent but ungainly type combinations, such as "option-type of option-type of X" or "union-type containing union-types," have been outlawed with tools to squash them into a canonical layout. Operations on the data now have fewer possibilities to worry about.
Simplified the semantics of nbytes.
Clarified ak.ravel and ak.flatten's treatments of missing data.
Added missing ArrayBuilder methods in Numba.
Set up framework for performing ak.* operations in CUDA, using CuPy JIT-compilation to get the right interface, with error message passing through asynchronous GPU computations. The CUDA implementation is not complete, but the groundwork has been laid.
Parquet reading/writing uses fsspec for remote connections and handles the dataset protocol correctly.
Public interface to our power-tools: ak.transform unifies our internal recursively_apply and broadcast_and_apply.
All ak.* functions were rewritten; some were redesigned in a simpler way using the above-mentioned power tools. There are likely fewer undiscovered bugs in these functions now.
Use of records in numerical functions is more restricted, to prevent misapplication of ufuncs like + and reducers like np.sum on meaningful records such as Vectors.
All docstrings updated for version 2, including the code examples.
This will very likely be the last pre-release before the final 2.0.0 release. If all goes well, that will be six hours after now. ("Now" is 16:00 UTC,
This will very likely be the last pre-release before the final 2.0.0 release. If all goes well, that will be six hours after now. ("Now" is 16:00 UTC, December 9, 2022, so the final release will likely be at 22:00 UTC.)
(none!)
with_field assignments against existing array by @agoose77 in https://github.com/scikit-hep/awkward/pull/1962axis_wrap_if_negative with maybe_posaxis, simpler and more correct by @jpivarski in https://github.com/scikit-hep/awkward/pull/1986Full Changelog: https://github.com/scikit-hep/awkward/compare/v2.0.0rc7...v2.0.0rc8
fix: EmptyArray.is_numpy should be False. by @jpivarski in https://github.com/scikit-hep/awkward/pull/1971
(none!)
Form to form_cls by @agoose77 in https://github.com/scikit-hep/awkward/pull/1976ak._do submodule. by @jpivarski in https://github.com/scikit-hep/awkward/pull/1972Full Changelog: https://github.com/scikit-hep/awkward/compare/v2.0.0rc6...v2.0.0rc7
The main purpose of this release is to fix Uproot.
The main purpose of this release is to fix Uproot.
__array__ = 'sorted_map' should only be allowed on RecordArrays, not lists. by @jpivarski in https://github.com/scikit-hep/awkward/pull/1959(none!)
Full Changelog: https://github.com/scikit-hep/awkward/compare/v2.0.0rc5...v2.0.0rc6
Most of the focus now is on last-minute API changes; the API can't change without a deprecation cycle after 2.0.0.
This is one of the last pre-releases before 2.0.0. Most of the focus now is on last-minute API changes; the API can't change without a deprecation cycle after 2.0.0.
toXXX methods by @agoose77 in https://github.com/scikit-hep/awkward/pull/1919to_buffers by @agoose77 in https://github.com/scikit-hep/awkward/pull/1942Content initialisers take nplike, parameters as keyword by @agoose77 in https://github.com/scikit-hep/awkward/pull/1921ak.ravel by @agoose77 in https://github.com/scikit-hep/awkward/pull/1934backend as a higher abstraction than nplike by @agoose77 in https://github.com/scikit-hep/awkward/pull/1922simplify_optiontype and simplify_uniontype with simplified classmethod by @jpivarski in https://github.com/scikit-hep/awkward/pull/1928yesqa by @agoose77 in https://github.com/scikit-hep/awkward/pull/1915Full Changelog: https://github.com/scikit-hep/awkward/compare/v2.0.0rc4...v2.0.0rc5
This is the first release in which the C++ code has been moved into a separate package, awkward-cpp. The pure Python awkward package is version-locked
This is the first release in which the C++ code has been moved into a separate package, awkward-cpp. The pure Python awkward package is version-locked to version 1 of awkward-cpp.
ak.XXX operations by @agoose77 in https://github.com/scikit-hep/awkward/pull/1869$SOURCE_DATE_EPOCH by @agoose77 in https://github.com/scikit-hep/awkward/pull/1900Full Changelog: https://github.com/scikit-hep/awkward/compare/v2.0.0rc3...v2.0.0rc4
fix: update backport for changes in Numba, NumExpr, Arrow, and RDataFrame by @ianna and @jpivarski in https://github.com/scikit-hep/awkward/pull/2735
Basically, third-party libraries have been changing. This backport brings Awkward 1.x up to speed with them.
Full Changelog: https://github.com/scikit-hep/awkward/compare/v1.10.4...v1.10.5
fix: backport vendored mixin from #2534 by @agoose77 in https://github.com/scikit-hep/awkward/pull/2583
Full Changelog: https://github.com/scikit-hep/awkward/compare/v1.10.3...v1.10.4
This is a bug-fix release, motivated by PR #2311, which fixes a memory leak investigated in issues #1127, #1280, #2275, and #2310 (500 days from first
This is a bug-fix release, motivated by PR #2311, which fixes a memory leak investigated in issues #1127, #1280, #2275, and #2310 (500 days from first sighting).
(none!)
(none!)
Full Changelog: https://github.com/scikit-hep/awkward/compare/v1.10.2...v1.10.3
feat: add RegularArray._reduce_next implementation (backport) by @agoose77 in https://github.com/scikit-hep/awkward/pull/1813
RegularArray._reduce_next implementation (backport) by @agoose77 in https://github.com/scikit-hep/awkward/pull/1813. for module name in is_XXX_buffer (backport) by @agoose77 in https://github.com/scikit-hep/awkward/pull/1746ByteMaskedArray.mergemany (backport) by @agoose77 in https://github.com/scikit-hep/awkward/pull/1750ListOffsetArray_reduce_nonlocal_outstartsstops (backport) by @agoose77 in https://github.com/scikit-hep/awkward/pull/1797Full Changelog: https://github.com/scikit-hep/awkward/compare/v1.10.1...v1.10.2
fix: support non-hashable parameter values in broadcasting by @agoose77 in https://github.com/scikit-hep/awkward/pull/1708
(none)
Full Changelog: https://github.com/scikit-hep/awkward/compare/v1.10.0...v1.10.1
feat: raise Error for Record.__setattr__ by @agoose77 in https://github.com/scikit-hep/awkward/pull/1699
categorical in ak._v2.packed by @agoose77 in https://github.com/scikit-hep/awkward/pull/1689__copy__ and __deepcopy__ are enabled. by @jpivarski in https://github.com/scikit-hep/awkward/pull/1695dev/build-awkward.sh by @agoose77 in https://github.com/scikit-hep/awkward/pull/1675Full Changelog: https://github.com/scikit-hep/awkward/compare/v1.9.0...v1.10.0
These are differences from 1.8.0 to 1.9.0. Most only affect Awkward Array version 2, in the awkward._v2 submodule of 1.9.0. The exceptions are called
These are differences from 1.8.0 to 1.9.0. Most only affect Awkward Array version 2, in the awkward._v2 submodule of 1.9.0. The exceptions are called out with "v1" in the subject line.
is_tuple describe operation by @agoose77 in https://github.com/scikit-hep/awkward/pull/1351depth_limit to ak.broadcast_arrays by @agoose77 in https://github.com/scikit-hep/awkward/pull/1373_like methods to TypeTracer by @agoose77 in https://github.com/scikit-hep/awkward/pull/1505AttributeError for public Array attributes by @agoose77 in https://github.com/scikit-hep/awkward/pull/1573ak.behavior['.', 'Name'] = cls, which isn't working/isn't tested. by @jpivarski in https://github.com/scikit-hep/awkward/pull/1651recursively_apply for Record by @agoose77 in https://github.com/scikit-hep/awkward/pull/1401from_numpy references ListArray64 by @agoose77 in https://github.com/scikit-hep/awkward/pull/1404to_layout with allow_records=False and allows single-record writing to Arrow and Parquet by @jpivarski in https://github.com/scikit-hep/awkward/pull/1456to_rdataframe extensive tests and bug fixes by @ianna in https://github.com/scikit-hep/awkward/pull/1478axis_wrap_if_negative Record method in both v1 and v2 by @ioanaif in https://github.com/scikit-hep/awkward/pull/1565RecordArrays in ak.to_layout by @agoose77 in https://github.com/scikit-hep/awkward/pull/1581ak.from_iter performance for long (axis=0) arrays by @agoose77 in https://github.com/scikit-hep/awkward/pull/1614RecordArray's internal fields in HL API by @Saransh-cpp in https://github.com/scikit-hep/awkward/pull/1650self._length in RegularArray.mergemany by @agoose77 in https://github.com/scikit-hep/awkward/pull/1645ListArray by @agoose77 in https://github.com/scikit-hep/awkward/pull/1408ak.concatenate should flatten for first axis, single-array by @agoose77 in https://github.com/scikit-hep/awkward/pull/1641Full Changelog: https://github.com/scikit-hep/awkward/compare/1.8.0...v1.9.0
Just like 1.8.0rc7, but this is not a release candidate. See the release candidates for all the changes with respect to 1.7.0.
Just like 1.8.0rc7, but this is not a release candidate. See the release candidates for all the changes with respect to 1.7.0.
The first non-release candidate to drop Python 2.7 and 3.5, and the first to support Python 3.10.
@jpivarski applied the 1.7.0 deprecation (see Roadmap): #1118. Enabled codecov: #1120. Updated Azure's Windows VM: #1129. Fixed order in RecordForm.co…
The 1.7.x series is the last to support Python 2.7 and Python 3.5. From 1.8.0 onward, only Python 3.6 and above will be supported.
@ianna fixed a division-by-zero bug: #1168 and #1169.
@jpivarski applied the 1.7.0 deprecation (see Roadmap): #1118. Enabled codecov: #1120. Updated Azure's Windows VM: #1129. Fixed order in RecordForm.contents property: #1166. Fixed Parquet reading for files with zero RecordBatches: #1170.
Version 2 development:
@ioanaif: #1082, #1116, #1130, #1137, #1145, #1147, #1148, #1161,
@ianna: #1111, #1141, #1140, #1138, #1142, #1149, #1150, #1164,
@ctrl-stormy: #1135,
@jpivarski: #1117, #1119, #1121, #1122, #1123, #1124, #1125, #1131, #1132, #1134, #1143, #1146, #1154, #1153, #1156, #1159, #1160, #1162, #1165,
@chrisburr made the build respect CMAKE_ARGS if it's set by the environment: PR #1091.
@chrisburr made the build respect CMAKE_ARGS if it's set by the environment: PR #1091.
@jpivarski fixed mask_identity=False, so that it never returns an option type: PR #1108. Also fixed parameters, which truncated floats to ints in its string representation: PR #1114.
@agoose77 added a check to from_json to not attempt to find very large strings as filenames: PR #1085.
The v2 project:
@ianna added sorting: PR #1072, reducers: PR #1099, argsort: PR #1092.
@stormiestsin added validityerror: PR #1101.
@jpivarski added a TypeTracer: PRs #1109, #1110.
This is the same as 1.5.0rc2; most of the changes went into 1.5.0rc1.
Nothing published for this version
@ianna fixed class names in the documentation (PR #860).
@ianna fixed class names in the documentation (PR #860).
@agoose77 fixed ak.is_none (PR #864).
@drahnreb made Parquet lazy-loading only build Forms for requested columns (PR #867).
@agoose77 and @drahnreb together made idioms like x["z"] = None work correctly by assigning a column of Nones (PR #880).
@jpivarski fixed some union-simplification issues in getitem-field (PR #870). Also fixed various bugs to enable Numba JIT-compiled functions to iterate over VirtualArrays created by lazy-reading Parquet (PR #871). Fixed a relic of the ptr().get() → data() transition for kernel interfaces (PR #877). Fixed some null-type issues with Arrow/Parquet columns (PR #878). And fixed matrix multiplication of a vector as an Awkward record (PR #868).
Same as 1.3.0rc4. Deploying as a full release because issue #859 was encountered twice (before as #836), so it's a common problem.
Same as 1.3.0rc4. Deploying as a full release because issue #859 was encountered twice (before as #836), so it's a common problem.
Like 1.3.0rc3, but also fixes issue #819: PR #820.
Like 1.3.0rc3, but also fixes issue #819: PR #820.
See release notes for 1.3.0rc1, 1.3.0rc2, 1.3.0rc3. This release comes after those.
@ianna fixed the data type of ak.argsort for empty arrays (it should always be integer, but was float in some cases). PR #803.
@ianna fixed the data type of ak.argsort for empty arrays (it should always be integer, but was float in some cases). PR #803.
It fixes code like
good_leptons = good_leptons[ak.argsort(good_leptons.pt)]
in which good_leptons consists of empty lists.
Nothing published for this version
The fix that motivates this patch release is @henryiii's repair of the SDist distribution: PR #720. The addition of dlpack wasn't included in the sour
The fix that motivates this patch release is @henryiii's repair of the SDist distribution: PR #720. The addition of dlpack wasn't included in the source distribution, so pip install awkward without an available wheel was failing due to not having all the headers it needed to compile.
Also fixed jagged slices: issue #723, PRs #725 and #729, as well as a segfault in ak.flatten: issue #724, PR #726.
New patch release motivated by a bug discovered in Uproot's tests: PR #719. (From now on, Uproot will test Awkward release candidates.)
New patch release motivated by a bug discovered in Uproot's tests: PR #719. (From now on, Uproot will test Awkward release candidates.)
Also, #717 adds an optional behavior argument to every function that takes a highlevel=True/False.
Also from now on, only critical bug-fixes (like this one) will be patch releases and other updates will all go into release candidates for the next non-patch release (e.g. 1.2.0, scheduled for 2021-04-01).
This is the February 2021 release (see Roadmap).
This is the February 2021 release (see Roadmap).
No change with respect to 1.1.0r5.
@nsmith- fixed virtual arrays in ak.to_arrow (PR #642).
@nsmith- fixed virtual arrays in ak.to_arrow (PR #642).
Otherwise, this is identical to 1.0.2rc5.
Fixed #597 with PR #598. Otherwise identical to 1.0.1rc3.
Fixed #597 with PR #598. Otherwise identical to 1.0.1rc3.
First version 1.0.0 (non release candidate)! From now on, when users
First version 1.0.0 (non release candidate)! From now on, when users
pip install awkward
(without any version qualification) they will get Awkward 1.x, not Awkward 0.x.
This release also has a few bug-fixes: a memory leak in ArrayBuilder and ak.combinations (#570) and converting Awkward 0 Table with non-trivial _view into Awkward 1 RecordArray, which would sometimes be wrapped in an IndexedArray for the _view (#573).
This version of Awkward Array is compiled against pybind11 version 2.6.0 and RapidJSON version 1.1.0 (though RapidJSON is not part of the public interface the way pybind11 is: only pybind11 might have to be version-matched, not RapidJSON).
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →