Release history — Awkward Array documentation

# Release history

## Unreleased (main branch on GitHub)

- PR #1863: chore: remove v2 Python highlevel LayoutBuilder from main-v1.

- PR #1813: feat: add `RegularArray._reduce_next` implementation (backport)

- PR #1797: fix: simplify `ListOffsetArray_reduce_nonlocal_outstartsstops` (backport)

- PR #1750: fix: use proper lengths in `ByteMaskedArray.mergemany` (backport) (also: #1747)

- PR #1746: fix: don’t assume trailing `.` for module name in `is_XXX_buffer` (backport)

- PR #1706: chore: update pre-commit hooks.

- PR #1708: fix: support non-hashable parameter values in broadcasting. (also: #1707, #1707)

- PR #1700: perf: improve Array initialisation performance. (also: #1511)

- PR #1699: feat: raise Error for Record.__setattr__.

- PR #1692: Build(deps): bump pypa/cibuildwheel from 2.9.0 to 2.10.0.

- PR #1698: fix: pass memo to deepcopy.

- PR #1695: fix: ensure that `__copy__` and `__deepcopy__` are enabled.

- PR #1691: test: skip individual np.float16/128 tests because different systems have different combinations.

- PR #1562: fix: reduce runtime dependency from setuptools to just packaging.

- PR #1673: chore: update pre-commit hooks.

- PR #1689: fix: don’t project `categorical` in `ak._v2.packed`

- PR #1679: fix: carry parameters through broadcasting.

- PR #1671: fix: allow string arrays to merge without unions. (also: #1646)

- PR #1674: refactor: move categorical functions to operations.

- PR #1675: chore: remove `dev/build-awkward.sh`

- PR #1661: chore: drop 3.6 support.

- PR #1652: fix: to_list must follow __getitem__ implementations, even in Records.

- PR #1408: fix: jagged slicing for `ListArray`

- PR #1641: perf: `ak.concatenate` should flatten for first axis, single-array.

- PR #1645: fix: include `self._length` in `RegularArray.mergemany`

- PR #1650: fix: pass a copy of `RecordArray`’s internal fields in HL API.

- PR #1625: feat: retrieve multiple columns from RDataFrame in a single event loop.

- PR #1653: docs: add Saransh-cpp as a contributor for code.

- PR #1651: feat: Drop ak.behavior[‘.’, ‘Name’] = Class, which isn’t working/isn’t tested.

- PR #1649: fix: Ensure that ak._v2.to_json raises errors when appropriate.

- PR #1642: fix: ak.from_iter should interpret top-level tuples as ak.Array (v1 and v2).

- PR #1597: fix: empty slice lists of record arrays (#1593) (also: #1305)

- PR #1619: fix: support root empty field in Parquet file.

- PR #1636: fix: Use dtype=np.int64, not int, for platform independence (Windows).

- PR #1629: ci: add Linux ROOT build to run ROOT-based tests.

- PR #1632: ci: run semantic-pr-title in concurrency group.

- PR #1607: fix: prevent reducers like ak.sum on records (v2)

- PR #1627: ci: aarch64 should also use cibuildwheel v2.9.0.

## Release 1.9.0rc11

- PR #1618: chore: update pre-commit hooks.

- PR #1602: chore: include Python 3.11.

- PR #1620: refactor: from_rdataframe to use LayoutBuilder.

- PR #1621: docs: Documented ak.from_json and completed it.

- PR #1617: refactor: replace 3 ak.from_json* functions with one.

- PR #1613: fix: generator tolayout in cling.

- PR #1615: ci: lint PR titles according to conventional commits.

- PR #1616: Upgrade Linux 18.04 -> 20.04 and DOS line endings.

- PR #1614: fix: improve `ak.from_iter` performance for long (axis=0) arrays. (also: #1588)

- PR #1550: ci: use GHA instead of Azure :hammer:

- PR #1610: Public interface for layout.recursively_apply and broadcast_and_apply.

- PR #1609: ak.concatenate should preserve regular-type for axis>0, too.

- PR #1605: ak.concatenate of identical Forms preserves the Form.

- PR #1604: ak.concatenate (mergemany) should preserve regular-type.

- PR #1603: Renamed ak.to_pandas -> ak.to_dataframe.

- PR #1598: Raises an exception on mixed Awkward/NumPy slices. (also: #1305)

- PR #1589: Fix regular maybe_toNumpy.

- PR #1568: Fix: Lengths of empty regular slices.

- PR #1567: Fix: tolist() bug from Uproot (longlong type for Index)

- PR #1581: Fix: allow empty `RecordArray``s in ``ak.to_layout` (also: #1578)

- PR #1564: Build(deps): bump pypa/gh-action-pypi-publish from 1.5.0 to 1.5.1.

- PR #1573: Feat: raise `AttributeError` for public Array attributes.

- PR #1576: [pre-commit.ci] pre-commit autoupdate.

- PR #1579: Doxygen Documentation of GrowableBuffer and LayoutBuilder.

- PR #1572: add int64_t definition for Windows.

- PR #1560: builder options and layout builder updates.

- PR #1559: Fix: ufuncs on records should not be allowed unless overridden.

- PR #1565: Fix: Missing `axis_wrap_if_negative` Record method in both v1 and v2.

- PR #1494: Templated LayoutBuilder.

- PR #1566: [pre-commit.ci] pre-commit autoupdate.

## Release 1.9.0rc10

> (pip)

- PR #1561: Remove std::cout from ArrayBuilder code.

- PR #1556: Build(deps): bump pypa/cibuildwheel from 2.8.0 to 2.8.1.

## Release 1.9.0rc9

> (pip)

- PR #1555: GrowableBuffer.h’s missing <cstring> import broke localbuild.py; fixing it.

- PR #1476: parquet redux.

- PR #1544: fix ak2 convert class name msg.

- PR #1543: [pre-commit.ci] pre-commit autoupdate.

- PR #1542: migrate ArrayBuilder to new GrowableBuffer.

- PR #1527: [pre-commit.ci] pre-commit autoupdate.

## Release 1.9.0rc8

> (pip)

- PR #1541: docs: add aryan26roy as a contributor for code.

- PR #1540: docs: add ManasviGoyal as a contributor for code.

- PR #1538: Solving the endian bug on MacOS.

- PR #1539: Fix: ak._v2.is_none check for axis value.

- PR #1532: Fix: Error when using ak.copy in v2.

- PR #1537: Fixed RecordArray.__repr__ (last vestige of ‘override’ misunderstanding).

- PR #1531: Fix: Initialize values behind the mask in ak.to_numpy.

- PR #1535: Growable Buffer header.

- PR #1536: Build(deps): bump pypa/cibuildwheel from 2.7.0 to 2.8.0.

- PR #1533: Fix: numba pre-commit issues.

- PR #1524: restructure cpp headers.

- PR #1484: LayoutBuilder migration to v2.

- PR #1523: add C++ headers-only distribution configuration.

- PR #1521: Build(deps): bump actions/download-artifact from 2 to 3.

- PR #1520: Build(deps): bump actions/checkout from 2 to 3.

- PR #1519: Build(deps): bump actions/upload-artifact from 2 to 3.

- PR #1518: chore: remove unneeded lines.

## Release 1.9.0rc7

> (pip)

- PR #1514: Update type-parser for v2.

- PR #1516: Package: fix MANIFEST to include cpp-headers.

- PR #1515: Swap ‘merged dtype same as NumPy’ test of v1 for test of v2.

## Release 1.9.0rc6

> (pip)

- PR #1513: Add typeparser to v2.

- PR #1508: from rdataframe for awkward arrays.

- PR #1510: Build(deps): bump pypa/cibuildwheel from 2.6.1 to 2.7.0.

## Release 1.9.0rc5

> (pip)

- PR #1505: Feat: add missing `_like` methods to `TypeTracer`

- PR #1503: [pre-commit.ci] pre-commit autoupdate.

- PR #1485: Add the beginning of an example of templated LayoutBuilder.

- PR #1474: rdataframe to awkward.

- PR #1502: Fix for issue 1406.

- PR #1499: Fix slicing for UnmaskedArrays (which come from Arrow).

- PR #1498: Fixed typo in unmaskedarray.py.

- PR #1487: Adding repr overriden behavior.

- PR #1491: Adding a Forth Based Avro Reader.

- PR #1497: Fixed slicing shape for array of booleans.

- PR #1496: _to_numpy method should return a numpy array.

- PR #1490: Refactoring to include index_nplike and reducers.

- PR #1493: Build(deps): bump pypa/cibuildwheel from 2.5.0 to 2.6.1.

- PR #1492: Fix categorical equality handling (bad copy-paste from v1).

- PR #1486: Fix selecting columns from Parquet.

- PR #1478: `to_rdataframe` extensive tests and bug fixes. (also: #1477)

- PR #1475: update awkward-1.0 to awkward.

- PR #1447: This PR attempts to add autodifferentiation support for Awkward Arrays using JAX pytrees.

- PR #1470: Rename fillna -> fill_none.

- PR #1469: _getitem_* functions must consistently set the slicer in handle_error.

- PR #1468: Rename low-level methods to match high-level function names.

- PR #1467: Flatten directory structure under src/awkward/_v2/operations.

- PR #1465: [pre-commit.ci] pre-commit autoupdate.

- PR #1462: Build(deps): bump docker/setup-qemu-action from 1.2.0 to 2.0.0.

- PR #1464: Ignore a NumPy 1.22 warning in Numba and fix the flake8-print T001 –> T201 change.

## Release 1.9.0rc4

> (pip)

(no pull requests)

## Release 1.9.0rc3

> (pip)

- PR #1449: Revamping the to_json/from_json interface.

- PR #1458: Streamline recursively_apply for small slices of big arrays.

- PR #1457: Fix RDataFrame GetColumnNames order in test.

- PR #1446: awkward rdataframe source tests.

- PR #1456: Fixes `to_layout` with `allow_records=False` and allows single-record writing to Arrow and Parquet. (also: #1453)

- PR #1455: Build(deps): bump pypa/cibuildwheel from 2.4.0 to 2.5.0.

- PR #1445: Pass on skipped v2 tests.

- PR #1429: Fix: is_unique() for IndexedArray.

- PR #1444: Enable ak.singletons.

- PR #1443: Enable ak.firsts.

- PR #1374: awkward to rdataframe.

- PR #1440: Implementing ak._v2.to_parquet.

- PR #1437: Enable mixins behavior.

- PR #1435: Remove duplicated import of to/from-parquet.

- PR #1434: Enable categorical behavior - testing.

## Release 1.9.0rc2

> (pip)

- PR #1433: Add Array and Record.__delitem__. And fix show(type=True).

- PR #1432: Register both v1 and v2 Arrays in Numba entry_points.

- PR #1431: Fixed miscellaneous optiontype-in-Parquet bugs. (also: #1397)

- PR #1397: split up functions.

- PR #1430: Pretty-printing types.

- PR #1428: Implements ak.nan_to_none and all of the ak.nan* functions to override NumPy’s.

- PR #1421: Enabled string/categorical behavior.

- PR #1427: Enable broadcasting of string equality.

- PR #1426: ListOffsetArray._reduce_next is not implemented for 32-bit (it could be, but this PR just fixes the error).

- PR #1425: Fix ak._v2.to_arrow for sliced ListOffsetArray.

## Release 1.9.0rc1

> (pip)

- PR #1422: Update AwkwardForth documentation and move it from the wiki to the standard docs.

- PR #1410: Removed bytemask() in favour of mask_as_bool()

- PR #1415: Passing behaviour in ak._v2 functions.

- PR #1419: Fix iteration over NumpyArray type.

- PR #1418: Fix performance issue in v2 tolist.

- PR #1416: docs: add Ahmad-AlSubaie as a contributor for code.

- PR #1413: replace llvmlite.ir instead of llvmlite.llvmpy.core.

- PR #1412: fix: pypy 3.9.

- PR #1399: This PR adds JAX as a new nplike.

- PR #1409: [pre-commit.ci] pre-commit autoupdate.

- PR #1407: Windows builds stopped working; be looser about directory name.

- PR #1404: Fix: `from_numpy` references `ListArray64` (also: #1403)

- PR #1401: Implement `recursively_apply` for `Record`

- PR #1398: ROOT doesn’t recognize for-each iterators without operator==

- PR #1390: This PR adds all the remaining kernels in the studies directory.

- PR #1395: [pre-commit.ci] pre-commit autoupdate.

- PR #1394: Build(deps): bump pypa/cibuildwheel from 2.3.1 to 2.4.0.

- PR #1393: ErrorContexts should only contain strings.

- PR #1392: High-level ak._v2.Array clean-ups.

- PR #1387: No zero-length shortcuts for ak.argsort (v1 & v2). (also: psf/black#2964)

- PR #1385: fix: bump black to 22.3.0 due to click 8.1 releasennSee https://github.com/psf/black/issues/2964 for details.

- PR #1381: This PR adds the generated kernels and simplifies the template specialization generation process.

- PR #1384: Fix _prettyprint after ‘for i in range’ changed to ‘for i, val in enumerate’.

- PR #1383: Protect test 1300 from ROOT without C++17 (or, at least, without std::optional).

- PR #1380: Reducers with axis=None and typetracers.

- PR #1378: Fixes nonlocal reducers in which the first list is empty.

- PR #1355: This PR sets up the architecture to call CuPy Raw Kernels from Awkward.

- PR #1376: Allow NumPy arrays in CppStatements; fix row_groups in single-file from_parquet.

- PR #1373: Feat: add `depth_limit` to `ak.broadcast_arrays`

- PR #1365: Refactor: cleanup reducer.

- PR #1360: C++ refactoring: ak.unflatten.

- PR #1372: Allow NumPy arrays in CppStatements; fix row_groups in single-file from_parquet.

- PR #1369: C++ refactoring: ak.to_pandas.

- PR #1367: C++ refactoring: ak.copy.

- PR #1338: First version of ak._v2.from_parquet.

- PR #1368: C++ refactoring: ak.broadcast_arrays.

- PR #1359: Pure Cling demo and improvements to C++ JIT infrastructure. (also: #1295)

- PR #1370: [pre-commit.ci] pre-commit autoupdate.

- PR #1364: Fixes #1363 by ensuring that arguments documented as ‘iterable of X’ aren’t used in ‘len(X)’.

- PR #1354: C++ refactoring: ak.unzip.

- PR #1356: Fix: fix docstring line.

- PR #1351: Feat: add `is_tuple` describe operation.

- PR #1347: C++ refactoring: ak.run_lengths.

- PR #1352: C++ refactoring: ak.nan_to_num.

- PR #1346: Fix PR #788: avoid materializing VirtualArrays in ak.with_name.

- PR #1327: Straighten out error handling via a thread-local (but otherwise global) context.

- PR #1340: ak.flatten and ak.ravel should test for nplike.ndarray, not np.ndarray.

- PR #1329: Fixed ak.num with axis=0 in typetracer.

## Release 1.8.0

> (pip)

(no pull requests)

## Release 1.8.0rc7

- PR #1326: Docs: fix typo in documentation.

- PR #1314: chore: remove extra files from the wheels.

- PR #1313: ci: avoid PyPI cuda wheel upload.

- PR #1316: chore: bump pybind11 to 2.9.1.

- PR #1312: Keep as much length knowledge as possible in typetracers.

- PR #1322: chore: wheel not required for setuptools PEP 517 (all-repos)

- PR #1317: C++ refactoring: ak.cartesian, ak.argcartesian.

- PR #1301: C++ refactoring: ak.strings_astype.

- PR #1308: Feat: add `optiontype_outside_record` argument to `ak.zip`

- PR #1307: C++ refactoring: ak.argcombinations, ak.combinations.

- PR #1309: C++ refactoring: ak.sort.

## Release 1.8.0rc6

- PR #1310: Fix lost ‘behavior’ in ‘ak.unzip’.

- PR #1300: Implement Awkward –> C++ with Cling.

- PR #1306: Version of awkward_cuda should be tied with awkward.

- PR #1304: C++ refactoring: ak.argsort.

- PR #1303: Fix: do not increment field index for nested lists.

## Release 1.8.0rc5

(no pull requests)

## Release 1.8.0rc4

- PR #1299: Remove unnecessary line blank from the tops of almost all files .

- PR #1298: Allow ak.nan_to_num arguments to be arrays.

- PR #1296: ak.fields.

- PR #1297: ak.without_parameters.

- PR #1293: C++ refactoring: ak.full_like, ak.zeros_like, ak.ones_like.

- PR #1275: style: pylint 1.

- PR #1274: Fixing #1266 (in v1 and v2), possibly by reordering nextparents.

- PR #1294: C++ refactoring: ak._v2.from_arrow_schema function.

- PR #1289: C++ refactoring: ak.with_parameter.

- PR #1292: C++ refactoring: ak.with_field.

- PR #1290: typo.

- PR #1276: This PR adds support to call kernels in CUDA from v2 Awkward Arrays.

- PR #1249: Fix: support nested option types in `ak.is_none` (also: #1193, #1193)

- PR #1279: Fix: simplify output in {Byte,Bit}MaskedArray.

- PR #1277: [pre-commit.ci] pre-commit autoupdate.

- PR #1240: Getting Numba to work for v2 arrays.

- PR #1207: json de-/serialisation from/to string or file.

- PR #1270: Add GHA to build CUDA Wheels and update the cuda build script.

- PR #1262: chore: initial nox and pylint support.

- PR #1267: style: update to first non-pre-release black!

- PR #1265: Bump pypa/gh-action-pypi-publish from 1.4.2 to 1.5.0.

- PR #1257: Add a .zenodo.json file to specify a set of authors.

- PR #1264: Bump pypa/cibuildwheel from 1.12.0 to 2.3.1.

- PR #1263: chore: add dependabot for actions.

- PR #1259: Fix: fix `ByteMaskedArray.simplify_optiontype()`

- PR #1258: Remove distutils reference in test (now an error).

- PR #1255: chore: update pytest config, 6.0+

- PR #1242: C++ refactoring: ak.parameters.

- PR #1243: style: add shellcheck.

- PR #1254: fix: building twice was broken.

- PR #1248: Fix: support mixed array types in `NumpyLike.to_rectilinear`

- PR #1246: style: further cleanup for Python 3.6+

- PR #1244: style: pyupgrade to 3.6.

- PR #1245: layout.completely_flatten should not concatenate (performance issue).

- PR #1234: C++ refactoring: ak.type and ak.values_astype.

- PR #1214: Fix: drop parameters for flattened RecordArray.

## Release 1.8.0rc3

- PR #1239: Revert “Build wheels for ppc64le (#1224)”

## Release 1.8.0rc2

- PR #1233: C++ refactoring: ak.with_name.

- PR #1231: Updated the generate-cuda script. Works for py >= 3.8.

- PR #1224: Build wheels for ppc64le.

- PR #1237: Remove Windows 32-bit from the Python 3.10 build.

- PR #1229: C++ refactoring: ak.pad_none.

- PR #1232: macos segfault bugfix.

- PR #1225: C++ refactoring: ak.zip.

- PR #1228: Redo PR #1227: fixing ‘emptyArray’ typo.

- PR #1226: C++ refactoring: ak.num.

- PR #1217: C++ refactoring: ak.flatten.

- PR #1220: C++ refactoring: ak.where.

- PR #1223: Restore pybind11 2.9.0.

- PR #1218: Make highlevel __repr__ safe for typetracers.

- PR #1219: C++ refactoring: ak.mask.

- PR #1221: C++ refactoring: ak.local_index.

- PR #1222: C++ refactoring: ak.ravel.

- PR #1211: Removed v1_to_v2 from all v2 tests. (also: #962)

- PR #1215: Fixed handling of list-nested boolean slices.

- PR #1212: Drop Win32 Py3.10 test and musllinux in deployment.

- PR #1213: [pre-commit.ci] pre-commit autoupdate.

## Release 1.8.0rc1

- PR #1188: ci: try Numba RC on 3.10.

- PR #1199: chore: bump to pybind11 2.9.0.

- PR #1210: docs: add BioGeek as a contributor for doc.

- PR #1208: ak._v2 namespace is now filled with the right symbols.

- PR #1206: Highlevel non-reducers and improved testing/fixes for reducers.

- PR #1204: ak._v2.operations.convert.to_numpy is done.

- PR #1203: Don’t let ak.to_list act on v2 arrays (finishing #1201).

- PR #1202: Better error message for Content::axis_wrap_if_negative.

- PR #1201: Implemented v2 ak.to_list and switched all v2 tests to use it.

- PR #1198: Allow non-array iterables in __array_function__.

- PR #1197: Fix ak.singletons for non-optional data.

- PR #1196: Remove distutils dependence.

- PR #1195: Fix: _pack_layout should also pack projected index arrays.

- PR #1194: [pre-commit.ci] pre-commit autoupdate.

- PR #948: pictures for a tutorial.

- PR #1155: ArrayBuilder: replace shared with unique.

- PR #1011: chore: bump pybind11 to 2.8.0.

- PR #1186: feat: bump cibuildwheel, add Python 3.10.

- PR #1187: Remove duplicated text.

- PR #1184: Drop all length information from TypeTracer, get all tests working again.

- PR #1183: Bugs found by the Dask project: broaden type-tracers’ applicability.

- PR #1172: First bug found by @martindurant.

- PR #1182: Remove Python 2.7 and 3.5 support.

- PR #1181: Fixed zeros in RegularArray shape.

- PR #1175: NumpyArray::numbers_to_type must use flattened_length, not length.

- PR #1180: ak.to_numpy with RegularArray of size zero and non-zero length.

- PR #1179: Raise ValueError for incompatible union types in ak.unzip.

- PR #1178: Fix leading zeros in ak.unflatten.

- PR #1174: [pre-commit.ci] pre-commit autoupdate.

## Release 1.7.0

> (pip)

- PR #1170: Parquet files with zero record batches.

- PR #1169: remove debug printout.

- PR #1161: C++ refactoring: ak.concatenate.

- PR #1164: C++ refactoring: to and from json.

- PR #1168: avoid division by zero.

- PR #1166: Preserve order in v1 RecordForm.contents.

- PR #1165: Second try at specialized JSON: RapidJSON + custom assembly.

- PR #1162: ak.from_json_schema as a demonstration of generating AwkwardForth from a type-schema.

- PR #1163: [pre-commit.ci] pre-commit autoupdate.

- PR #1148: C++ refactoring: flatten()

- PR #1160: Better decompiled print-outs for ‘case’ and ‘enum’.

- PR #1159: Add JSON commands to AwkwardForth.

- PR #1147: C++ refactoring: fillna() operation.

- PR #1145: C++ refactoring: numbers_to_type()

- PR #1150: C++ refactoring: to_numpy()

- PR #1156: Replace leaf Nones with +-inf for argmin/argmax axis=None.

- PR #1153: ‘behaviorof’ should take Array, not layouts, and setting ‘behavior’ should set the ‘__class__’.

- PR #1154: Arrow Tables should preserve parameters.

- PR #1149: C++ refactoring: handle datetime and timedelta.

- PR #1142: C++ refactoring: prepared high-level ArrayBuilder and reducer functions, though still untested.

- PR #1146: primitive_to_dtype and dtype_to_primitive as functions.

- PR #1138: C++ refactoring: nbytes.

- PR #1143: C++ refactoring: NumPy ufuncs for v2.

- PR #1137: C++ refactoring: num()

- PR #1134: C++ refactoring: to_buffers and from_buffers.

- PR #1140: remove workaround, use merge.

- PR #1141: fix unionarray sort and enable tests.

- PR #1135: C++ Refactoring: Implement rpad and rpad_and_clip.

- PR #1111: C++ refactoring: unique and is_unique.

- PR #1128: [pre-commit.ci] pre-commit autoupdate.

- PR #1132: C++ refactoring: utility methods for high-level functions in v2.

- PR #1130: Removed ‘simplify_uniontype’ from content – already in unionarray.

- PR #1131: High-level to/from_arrow functions for v2.

- PR #1129: Update Azure Pipeline’s Windows VM image and adapt to Arrow and Numba updates.

- PR #1125: C++ refactoring: to_arrow and from_arrow in v2.

- PR #1124: Make the commented-out code in v2 a better guide.

- PR #1123: Renamed record ‘key’ -> ‘field’ to be consistent with high-level.

- PR #1122: Working on the high-level ak.Array for v2. (also: #838)

- PR #1121: Stubs for high-level interface in the src/awkward/_v2 directory.

- PR #1120: Enable codecov.

- PR #1116: C++ refactoring: project - bit/byte/unmaskedarray.

- PR #1119: Remove v2 VirtualArray (to try using Dask only).

- PR #1118: Prepare the 1.7.0 deprecation (ak.fill_none default axis).

- PR #1117: Move v2 tests into their own directory.

- PR #1082: C++ refactoring: Merge and Simplify Types.

## Release 1.5.1

> (pip)

- PR #1114: Fixes copyjson casting bug.

- PR #1110: Implemented the type tracer for Awkward-Dask. (also: #959, #1031)

- PR #1112: [pre-commit.ci] pre-commit autoupdate.

- PR #1092: C++ refactoring: argsort.

- PR #1099: C++ refactoring: reducers.

- PR #1109: “The Good Parts” of #1095, which I’m closing.

- PR #1085: Fix: add utility to check whether a string is a filepath. (also: #1084)

- PR #1108: Fixed #1071: mask_identity=False should not return option type.

- PR #1102: [pre-commit.ci] pre-commit autoupdate.

- PR #1101: C++ Refactoring: Implement validityerror for all array types.

- PR #1094: Little fixes from meeting with @ianna.

- PR #1072: C++ refactoring: sort.

- PR #1091: Respect CMAKE_ARGS if set by the environment.

## Release 1.5.0

> (pip)

(no pull requests)

## Release 1.5.0rc2

- PR #1089: Revert ‘NumPy’ spelling to ‘Numpy’ in code only.

- PR #1087: docs: add bmwiedemann as a contributor for code.

- PR #1088: docs: add SantamRC as a contributor for test.

## Release 1.5.0rc1

- PR #1086: docs: add matthewfeickert as a contributor for maintenance.

- PR #1081: Data for Remaining Kernel Functions.

- PR #1003: chore: fix spelling and check in pre-commit.

- PR #1070: Try fixing the search box by upgrading sphinx-rtd-theme.

- PR #1079: Implementing VirtualArray in Awkward v2.

- PR #1073: C++ refactoring: handling ListOffsetArray and IndexedOptionArray in _getitem_next.

- PR #1074: C++ refactoring: Implementing combinations.

- PR #1065: Unit Tests.

- PR #1078: [pre-commit.ci] pre-commit autoupdate.

- PR #1063: LayoutBuilder template using either ForthMachine32 or ForthMachine64 and a tutorial.

- PR #1036: C++ refactoring: testing_starting _getitem_next.

- PR #1059: C++ refactoring: Implementing _localindex.

- PR #1067: Fixes #1066, ak.to_numpy can return masked-structured arrays.

- PR #1045: LayoutBuilder refactoring.

- PR #1062: Optimizing common take operations.

- PR #1061: Explicit ak.Record.__iter__ (iterates over fields, like dict) and better ak.from_iter handling of nested ak.Record and ak.Array.

- PR #1050: Allow to override build date with SOURCE_DATE_EPOCH.

- PR #1058: Fix deprecation warning stack level.

- PR #1056: Fix ak.fill_none fill value’s handling of NumPy dimension.

- PR #1054: Remove debugging printout (2).

- PR #1030: Feat: add `name` parameter to `mixin_class`

- PR #1051: Remove debugging printout.

- PR #977: ArrayBuilder refactoring.

- PR #1031: C++ refactoring: starting _getitem_next.

- PR #1035: docs: add ioanaif as a contributor for code, test.

- PR #1029: Fixed #1026; jagged slicing of multidim NumpyArray.

- PR #1028: Reverting #694: SliceVarNewAxis.

- PR #1025: Rename _getitem_array as _carry and have it take Index.

- PR #1024: Chore: correct spelling of “operation”

- PR #1023: Docs: make link to layout.

- PR #1021: Feat: pack `Record``s in ``ak.packed`

- PR #1019: Fix: set `numpy_to_regular=True` in `broadcast_arrays` (also: #1017)

- PR #959: C++ refactoring: _getitem_array implementation.

- PR #1018: [pre-commit.ci] pre-commit autoupdate.

- PR #1016: Documentation: clarify left & right broadcasting.

- PR #1013: Bugfix: do not use `regular_to_jagged` in `ak.zip` (also: #1012)

- PR #1008: Bugfix: fix `ak.packed` for `RegularArray``s with ``.size=0` (also: #1006)

- PR #1004: docs: touch up contributing.

- PR #1009: Bugfix: support empty buffers in `from_buffers` (also: #1007)

- PR #1005: Fixes #595 and #630; adds a default for NEP-18.

- PR #985: Feature: add `np.ravel`

- PR #1001: Fixes #998 and #1000; argmax for ListOffsetArray with nonzero start. Also optimizes toListOffsetArray64(true).

- PR #997: Fixes #982 by accounting for an additional kind of ‘gap’ in nonlocal reducers.

- PR #993: Fix high-level ak.Array.__dir__ to include methods and properties of overridden classes.

- PR #994: Fixes two bugs in #992: double-masking of reducers and unmasking of ak.ptp.

- PR #995: Fixes #546, ak.fill_none losing the replacement value’s dtype.

- PR #917: Feature: add axis parameter to `ak.fill_none` (also: #920)

- PR #991: Fixed bug #770, #930: not a policy issue; UnionForm::purelist_parameter was incorrectly comparing its contents’ direct parameters, rather than their purelist_parameters.

- PR #987: Feature: add GitHub Issue Forms.

- PR #980: Bugfix: support n-dim `NumpyArray``s in ``ak.where`

- PR #988: fix: Unrestrict jaxlib upper bound and exclude jaxlib v0.1.68. (also: #963)

## Release 1.4.0

> (pip)

(no pull requests)

## Release 1.4.0rc6

- PR #976: Bugfix: support multidimensional NumPy mask arrays in `ak.mask` (also: #975, #975)

## Release 1.4.0rc5

- PR #946: sorting an indexed option array in `axis0` bug fix; argsort to account ``None``s.

- PR #974: Bugfix: fix #973.

## Release 1.4.0rc4

- PR #972: Feature: add layout transformer & simplify unpacked.

- PR #970: Fix #968, missing ‘import awkward._io’.

## Release 1.4.0rc3

(no pull requests)

## Release 1.4.0rc2

- PR #966: Make dev/generate-kernel-signatures.py part of the build process and add Python ctypes signatures as well.

- PR #961: ci: move to cibw on GHA.

## Release 1.4.0rc1

- PR #963: Test jaxlib<0.1.68 for segfault.

- PR #962: C++ refactoring: convert and compare v1 and v2 arrays; renamed v2 recordarray -> keys.

- PR #958: C++ refactoring: new Forms must accept old Form JSON.

- PR #957: C++ refactoring: Type and Form classes - touchups.

- PR #954: fix(setup): sync with cmake_example.

- PR #953: tests: fix loading from any directory.

- PR #914: C++ refactoring: Type and Form classes.

- PR #955: fix: manylinux1 couldn’t take None/newaxis.

- PR #951: Writing documentation on 2021-06-23.

- PR #952: Refactor: use `maybe_wrap` in source.

- PR #950: Appropriate FileNotFoundError for ak.from_json.

- PR #947: How much documentation can I get done today?

- PR #935: Separate `from_parquet` into different routines.

- PR #943: Tutorial documentation on 2021-06-18. (also: #704)

- PR #942: Bugfix: fix `with_cache` implementation.

- PR #937: Bugfix: truncate `ListOffsetArray` contents.

- PR #931: Writing tutorial documentation 2021-06-16.

- PR #924: rename TypedArrayBuilder to LayoutBuilder.

- PR #896: C++ refactoring: Content classes.

- PR #929: Refactor: remove `ak.deprecations_as_errors`

- PR #874: Should strings from __getitem__ be Python str? (and bytes?)

- PR #922: Bugfix: use `ak.packed` in `ak.unflatten` (also: #910, #910)

- PR #928: Bugfix: return correct `nbytes` value for multidimensional NumPy arrays. (also: #927, #927)

- PR #923: Bugfix: check for `file`-like objects in `from_parquet`

- PR #925: Added ‘[todo]’ to unwritten documentation, added a few nodes, and added description of ak.packed to how-to-convert-buffers.md.

- PR #916: `ak.values_astype` support `dtype` specifier `np.datetime64` to convert `?int` or `?float` typed unix timestamps to `datetime64`

- PR #912: Feature: add `ak.packed`

- PR #919: [pre-commit.ci] pre-commit autoupdate.

- PR #918: Feature: add `pass_apply` argument to util.

- PR #915: revert to datetime64 and timedelta64.

- PR #835: support ‘datetime64’ and ‘timedelta64’ types.

- PR #907: WIP: initial support for reading `pyarrow.lib.FixedSizeListType`

- PR #904: ArrayView expects contiguous NumpyArrays, so make sure they’re contiguous.

- PR #901: Distinguish cache keys for non-leaf nodes.

- PR #897: More precise Content documentation.

- PR #895: Fixes #894.

- PR #884: C++ refactoring: Index and Identities (Identifier)

- PR #890: Feature: add `ak.ptp`

- PR #891: Documentation: fix typo in reducers.

## Release 1.3.0

> (pip)

- PR #868: Matrix multiplication of a non-array vector. (also: #881)

- PR #885: [pre-commit.ci] pre-commit autoupdate.

- PR #880: Fix #879.

- PR #878: Fix some issues with null-typed Arrow/Parquet columns.

- PR #877: Buffer pointers should come from `data()`, not `ptr().get()`. (also: #876)

- PR #871: Fixes for Parquet, Numba, Dask test.

- PR #870: Simplify UnionArray::getitem_field(s) and ak.flatten axis=None.

- PR #869: [pre-commit.ci] pre-commit autoupdate.

- PR #867: Fix #865, only build forms for columns that are requested in lazy mode (ak.from_parquet)

- PR #864: Bugfix: possible fix for #863.

- PR #860: corrected the class names in documentation.

- PR #862: [pre-commit.ci] pre-commit autoupdate.

## Release 1.2.3

> (pip)

(no pull requests)

## Release 1.3.0rc4

- PR #858: arrays of complex types concatenate.

- PR #856: [pre-commit.ci] pre-commit autoupdate.

- PR #833: chore: cmake cleanup.

- PR #834: style: setup.cfg formatting.

- PR #855: This PR adds documentation for differentiation using JAX.

- PR #850: masked array sort and argsort bug fix.

- PR #847: Bugfix: fix #846 - matrix multiplication with numpy array.

- PR #851: [pre-commit.ci] pre-commit autoupdate.

- PR #848: docs: add agoose77 as a contributor.

- PR #844: Removed “ignore” from some Flake8 complaints.

- PR #793: This PR integrates JAX element wise differentiation into the main codebase.

- PR #842: [pre-commit.ci] pre-commit autoupdate.

- PR #839: Allow scalars in ak.zip and make an ak.Record if they’re all scalars.

- PR #837: Handle ndim != 1 bool arrays in to_arrow (and hence, Parquet).

- PR #831: chore: cleanup setup.py.

- PR #814: Added dtype argument to ones/zeros/full_like functions.

- PR #829: Handle Arrow’s DataType(null).

- PR #827: docs: add HenryDayHall as a contributor.

- PR #826: fixed string inequality comparison.

- PR #769: Typed Array Builder from Form.

- PR #825: Fix ak.Record’s promote to behavior.

## Release 1.2.2

> (pip)

- PR #820: Fixes issue #819: unflattening at axis>0 with a scalar.

## Release 1.3.0rc3

- PR #816: Broadcast union types to all possibilities, even ones with no instances in the array.

## Release 1.3.0rc2

- PR #812: argsort bugfix for empty arrays.

## Release 1.3.0rc1

- PR #808: Issue #805: fix an empty case when broadcasting UnionArrays.

## Release 1.2.1

> (pip)

- PR #800: [pre-commit.ci] pre-commit autoupdate.

- PR #803: argsort to return an index-type in the case that the input list array is empty.

## Release 1.2.0

> (pip)

(no pull requests)

## Release 1.2.0rc6

- PR #799: Forbid ‘pyarrow.lib.Tensor’ in ‘ak.to_parquet’.

## Release 1.2.0rc5

- PR #796: Add mechanism to cast objects before __array_ufunc__.

- PR #795: Fixed #794, ak.cartesian on an empty array.

## Release 1.2.0rc4

- PR #790: Implement ‘np.nan_to_num’ and ‘np.isclose’ for Vector.

- PR #789: When RecordArrays are lazily carried as IndexedArrays, the IndexedArrays shouldn’t copy the RecordArray parameters. Also, ‘with_name’ may be able to simplify some UnionArrays after homogenizing names.

## Release 1.2.0rc3

- PR #787: Don’t prevent other Numba extensions from using operators.

- PR #779: Adapt getitem of DifferentiableArray for JAX.

- PR #785: [pre-commit.ci] pre-commit autoupdate.

- PR #786: ci: cleanup and remove 3.9 restrictions.

- PR #784: Disambiguate offsets-index cache keys when lazily reading Parquet.

- PR #781: AwkwardForth: add an s” core word to define strings.

- PR #773: Add type parser to main codebase.

- PR #776: Fix bug raised on StackOverflow.

- PR #767: Conceptual test of TypedArrayBuilder through AwkwardForth.

- PR #772: Fixes #771; constructing Array with different length columns should raise error.

- PR #668: Study writing a type parser for TypedArrayBuilder.

- PR #766: Prevent combinations of characters (from a bug on Mattermost).

- PR #690: array builder time profiler study.

- PR #765: Consider this implementation of a DifferentiableArray for JAX.

- PR #764: Fixes #763 by assigning a better type to EmptyArray::argsort_next.

- PR #762: More documentation, starting with “how to build”.

## Release 1.2.0rc2

- PR #760: Simplify ‘ak.to_arrow’ list handling.

- PR #757: Fixes #756; ak.num on PartitionedArrays.

- PR #755: Print ak.layout.RecordArray’s ‘length’ unequivocally to aid debugging.

- PR #754: Minor tweak so that ak.unflatten works for CuPy arrays. This doesn’t count as support yet.

- PR #752: Fixes #722; better error message for bad concatenation.

- PR #751: Fixes #740; NumPy scalars should be iterated over as numbers.

- PR #750: Added ‘ak.Array.to_list’, ‘ak.Array.to_numpy’, and ‘ak.Record.to_list’, and simplified the documentation to point to the functions they call.

- PR #748: I had somehow forgotten to handle ‘row_groups’ in ‘ak.from_parquet’. Fixed now.

- PR #743: ak.unflatten should include trailing zero-length counts in the array.

## Release 1.2.0rc1

- PR #738: docs: add drahnreb as a contributor.

- PR #736: Implement argsort for strings.

- PR #737: Define the depth of an array of strings to be 1.

- PR #735: Allow ak.run_lengths to recognize strings as distinguishable values.

- PR #734: Implemented ‘ak.strings_astype’ to convert strings into numbers.

- PR #733: Implemented ‘ak.run_lengths’ to enable group-by operations.

- PR #732: Allow ‘ak.unflatten’ to be used on PartitionedArrays.

- PR #731: Add an ‘axis’ parameter to ‘ak.unflatten’.

- PR #727: fix some issues of categorical arrays. (also: #674)

## Release 1.1.2

> (pip)

- PR #729: Only ‘simplify’ed option-type and union-type arrays are now considered valid.

- PR #726: Fixed #724, a segfault in ak.flatten.

- PR #725: Ensure that a jagged slice fits the array’s length.

- PR #720: fix: add missing files to the manifest, include a check.

## Release 1.1.1

> (pip)

- PR #719: Prevent nullptr in PyArrayGenerator::caches.

- PR #717: Every function with ‘highlevel=True’ gets ‘behavior=None’, which overrides behaviors from the input arrays. Also dropped ‘ak.is_unique’ because it isn’t a well-designed high-level function.

## Release 1.1.0

> (pip)

(no pull requests)

## Release 1.1.0rc5

- PR #714: getitem_field should simplify_optiontype (for option-type arrays).

- PR #709: ARROW-10930 has been fixed, and we depend on it in the new Parquet-handling code, so the minimum Arrow is now 3.0.

## Release 1.1.0rc4

- PR #707: Python 2 can use ellipsis now.

- PR #706: Read and write Parquet datasets (sets of files).

## Release 1.1.0rc3

- PR #699: Fixing more bugs revealed by prepping for SciPy.

- PR #703: Fixed #702, ‘ak.to_arrow’ with PartitionedArrays.

## Release 1.1.0rc2

- PR #698: Remove ak.*_arrayset functions in preparation for 1.1.0.

- PR #693: Fixes for SciPy 2021 prep. (also: #694)

- PR #697: add a check in a tuple builder for an out of bounds index.

- PR #691: Fixes #689, the dimension of arrays returned by empty slices.

## Release 1.1.0rc1

- PR #688: Give lazy Parquet files information about their Forms.

- PR #687: check content length before arg/sorting.

- PR #683: refactor: pulling static info into setup.cfg.

- PR #685: chore: flake8.

- PR #676: chore: update pybind11 2.6.2.

- PR #672: Put RNTuple measurements on the performance plot.

- PR #677: docs: include GitHub button in GitHub dropdown.

- PR #682: tests: fix B015.

- PR #684: UnknownType documentation had a copy-paste error; fixed now.

- PR #681: fix: flake8 F811.

- PR #680: Remove right-broadcasting from most uses of ‘broadcast_and_apply’. It’s almost never what people want, and we’re only obliged to maintain it in functions that generalize NumPy (like ufuncs and ‘ak.where’).

- PR #652: complex numbers support.

- PR #675: style: pre-commit.

- PR #669: Avoid specifying target CUDA architecture.

- PR #673: Fixes #671 by allowing buffers in ak.from_buffers to be larger than strictly necessary (following the rules that define lengths of array nodes; https://awkward-array.readthedocs.io/en/latest/ak.layout.Content.html).

- PR #670: fix warnings and run static analyser.

- PR #667: Update CONTRIBUTING.md documentation.

- PR #666: Remove unused variable from dev/generate-cuda.py.

- PR #665: Fix generated file cleanup script.

- PR #664: Actually remember to release the GIL before doing some multithreading tests.

- PR #661: AwkwardForth additions to make Avro and Parquet parsing possible.

- PR #662: Cleanups after PR #648.

- PR #645: This PR adds the from_cuda_array_interface, to form CUDA arrays in a more general fashion.

- PR #657: With the new lazy slices, it’s now possible to get into ‘VirtualArray::getitem_next_jagged’.

- PR #653: Bugfixes in ForthMachine (discovered by writing documentation).

- PR #656: scikit-hep/uproot4#244 revealed surprising semantics of ak.zip with regular arrays. Regular array case has been changed to act the same as jagged arrays.

- PR #648: Add a ForthMachine to the codebase, copying from ‘studies’.

- PR #650: Fixes #649, wording in documentation.

- PR #647: Fix JupyterBook formatting and add the executable notebooks to CI tests.

- PR #646: Black and flake8.

- PR #639: add quick sort and argsort without recursion.

- PR #638: Prototype Forth virtual machine in C++ (close to what will be added to Awkward Array).

- PR #644: Querying array depth should never materialize if anything has a Form.

- PR #643: Prevent trivial carrying, which can also prevent materialization of some VirtualArrays.

## Release 1.0.2

> (pip)

- PR #642: Materialize virtual arrays in to_arrow.

## Release 1.0.2rc5

- PR #620: Prototype Forth VM for filling Awkward Arrays from Uproot.

- PR #636: Accept NumPy integers in slices.

## Release 1.0.2rc4

- PR #635: Fixes #634.

- PR #631: Fixes #629.

- PR #627: A dict of arrays requires ‘behaviorof(*arrays.values())’.

- PR #626: Homogenize and streamline pass-through of Array behavior.

- PR #625: Fixes #624: unhandled ‘offsets’ in pyarrow arrays.

- PR #619: Implemented column selection within multiple records.

- PR #617: Created a roadmap.

## Release 1.0.2rc3

- PR #571: validity checking based on known parameters.

- PR #613: ak.concatenate should minimally touch lazy arrays. (also: #603)

- PR #612: Added ‘axis_wrap_if_negative’ to PartitionedArray.

- PR #611: Add setuptools to requirements for pkg_resources.

- PR #610: Revise concatenate with axis != 0.

## Release 1.0.2rc2

(no pull requests)

## Release 1.0.2rc1

- PR #606: More complicated example revealed bugs in Arrow conversion.

- PR #605: fix: avoid hardcoded threads and macOS target.

- PR #604: Make tests work in 32-bit.

- PR #602: Use pyarrow.field to preserve nullability in Arrow conversion.

- PR #599: Preemtively avoid warnings in NumPy 1.20 (untested).

## Release 1.0.1

> (pip)

- PR #598: Fixes ak.from_buffers failure for ListArray.

## Release 1.0.1rc3

(no pull requests)

## Release 1.0.1rc2

- PR #592: Replace to_arrayset/from_arrayset with to_buffers/from_buffers and deprecate the original.

- PR #590: Change the definition of RegularArray to accept size == 0.

- PR #583: Implement unflatten function.

- PR #591: Now ‘ak.to_numpy(ak.layout.NumpyArray(cupy.array([1, 2, 3]))’ works.

## Release 1.0.1rc1

- PR #587: Modernize ak.is_none and add an ‘axis’ parameter.

- PR #586: Fix corner-case revealed by issue #585, but distinct from that issue.

- PR #582: Propagate ‘posaxis’ through broadcast_and_apply and recursively_apply, then implement ‘axis < 0’ for some functions.

- PR #578: Implement ak.Array.ndim in the Numba context.

- PR #577: Fix the setup.py –record argument, which is needed for bdist_rpm.

- PR #576: Actually remove deprecated features.

## Release 1.0.0

> (pip)

- PR #573: Fix ak.from_awkward0’s Table (missing _view).

- PR #570: Fix ArrayBuilder memory leak.

## Release 1.0.0rc2

- PR #569: Rename ‘master’ branch to ‘main’.

- PR #568: Options for “NaN” strings as NaN floats.

- PR #454: Add some more Loop Dependent Kernels.

- PR #565: Tool to check if kernel is implemented in all places.

- PR #566: Added the ‘initial’ argument to ak.min/ak.max.

## Release 1.0.0rc1

(no pull requests)

## Release 0.4.5

> (pip)

- PR #553: ak.with_field should not right-broadcast (by default).

- PR #551: Also implemented ak.to_regular and ak.from_regular.

- PR #548: concatenate bug-fix. (also: #545)

- PR #550: Implemented ‘np.array(ak.Array)’ in Numba.

- PR #547: Implemented ‘__contains__’ in and out of Numba.

- PR #524: argsort and sort for indexed option arrays bug fix.

- PR #544: Simplified and generalized ak.where using broadcast_and_apply.

- PR #542: Pickle-able mixin classes from decorator.

## Release 0.4.4

> (pip)

- PR #539: concatenate for a nonzero axis operation.

- PR #540: Fix issue #538’s performance issues.

- PR #537: Fix matrix multiplication.

- PR #536: Enforce minimum Arrow version 2.0.0 and fix issues due to ARROW-9556.

- PR #535: Implemented zeros_like, ones_like, and full_like, and fixed from_numpy for NumPy string arrays.

- PR #527: Fix UnionArray ufuncs and parameters in merging. (also: #459, #522, #459, #522)

- PR #495: Add a developer tool to check if kernel specification file is sorted.

- PR #526: Fix (infinite) recursion bug in Arrow translation.

- PR #525: Fix #402: Form::getitem_field must return the Form of what Content::getitem_field would return.

- PR #520: Actually remove expired deprecations (they were supposed to go in 0.4.0).

- PR #519: Provide ak.local_index.

- PR #518: to_pandas with IndexedArrays (and other types)

- PR #517: Masked take on an empty array should behave in a way that is consistent with non-empty arrays.

## Release 0.4.3

> (pip)

- PR #515: Fix fall-through that happened with the deprecation message.

- PR #514: Provides high-level access to copy and deepcopy operations.

- PR #513: Blocked ufuncs on custom types, reopened them for categoricals using a new apply_ufunc interface, updated documentation.

## Release 0.4.2

> (pip)

- PR #512: Always keep references to all caches in a ak.Array.

## Release 0.4.1

> (pip)

- PR #510: Remove broadcasting over the fields of records.

- PR #508: Fixes #499 by removing gaps from ListArray::content.

- PR #507: Fixes #501 and generalizes from_numpy/to_layout to accept NumPy arrays of strings.

- PR #505: Superflous line.

## Release 0.4.0

> (pip)

- PR #482: Add Python 3.9 to tests and deployment.

- PR #488: Add conda install instructions.

- PR #409: Fill out the ‘creating arrays’ section.

- PR #485: Update to pybind11 2.5.0. (also: #483)

- PR #478: Fix broken CUDA tests.

- PR #473: Properly broadcast over empty ListArray.

- PR #477: CPU kernel source files will have 1 file per kernel.

- PR #474: Fix broken links.

- PR #471: We do not need blacklists for kernel/test generation anymore.

- PR #468: Generate kernel header files from specification.

## Release 0.3.1

> (pip)

- PR #470: Put the ‘cmake’ PyPI package back into pyproject.toml.

- PR #469: awkward1 must use THE SAME VERSION of awkward1-cuda-kernels when it uses any.

## Release 0.3.0

> (pip)

- PR #467: Try to solve Windows installation issue by always compiling in ‘Release’ mode.

- PR #455: Check kernel specification into git.

- PR #464: Deprecate ‘keys’ -> ‘fields’ and add properties to ak.Array and ak.Record.

- PR #465: Attempt to make check for -A x64 flag more robust.

- PR #463: Generalize NumPy ufunc behavioral matching.

- PR #461: Apply conda-forge/awkward1-feedstock#2 here to test it in our CI.

- PR #462: Remove ak.Array.tojson for 0.3.0 (use ak.to_json).

- PR #460: Remove Awkward-as-a-Pandas-column feature, as discussed in #350.

## Release 0.2.38

> (pip)

- PR #458: Change the Windows build following @chrisburr’s suggestion.

- PR #456: Add numpy boolean type to ak describe.

- PR #453: Add more kernel test cases.

- PR #452: Add description field to specification.

- PR #436: Working on the Loop Dependent Kernels.

- PR #451: Change kernel specification format.

- PR #450: Explicitly cast list to CuPy array in cumsum test.

## Release 0.2.37

> (pip)

- PR #448: Set up interface between Uproot and Awkward so that Awkward can be used to optimize object-reading. (also: #449)

- PR #449: Upgrade Content::merge from a single ‘other’ argument to a std::vector of ‘others’.

- PR #433: Auto generate more CUDA kernels.

- PR #447: Fix reducer dimension regularity. (also: #434)

- PR #446: Fix ak.flatten for arrays that have been sliced.

- PR #435: intermittent error bugfix.

- PR #444: Always assuming ListArrays/ListOffsetArrays have incompatible structure is too conservative. Check for consistency and shortcut if possible.

- PR #441: Fix typo in documentation.

- PR #440: Fix cuda shared object retrieval.

- PR #438: Restructure test generation - store only roles in specification.

## Release 0.2.36

> (pip)

- PR #439: Libraries and includes should only go into the Python directory, not multiple places.

- PR #429: Generate more CUDA kernels.

- PR #431: Allow ArrayCache(None) construction.

- PR #428: Fix a bug in repr due to weak cache refs.

- PR #427: Implement weak reference to virtual array caches.

- PR #426: Generate tests for CUDA kernels.

- PR #425: Fixes #186; proper string-escape sequences in util::quote.

- PR #373: Generate CUDA kernels from kernel specification.

- PR #424: Change const representation in kernel spec.

- PR #422: Forward purelist_parameter “__doc__” in lazy slices.

- PR #423: docs: add sjperkins as a contributor.

- PR #420: NumpyArray::bytelength and NumpyArray::carry were wrong for non-contiguous; fixed. (also: #418)

## Release 0.2.35

> (pip)

(no pull requests)

## Release 0.2.34

> (pip)

- PR #417: Fix nesting structure of arrays passed to ArrayBuilder.append.

- PR #416: Fix references to np.object (where ‘np’ is a NumpyMetadata singleton).

- PR #372: Add to and from_cupy for Numpy Array and Identities.

- PR #414: Restructure test locations.

- PR #413: Better error message if unable to find cpu-kernel shared object.

- PR #412: Add const info to kernel spec.

## Release 0.2.33

> (pip)

- PR #410: Fix argmin/max positions for missing values.

- PR #407: Fix warnings reported by MacOS/Cling and try PIP_ONLY_BINARY instead of restricting cmake version.

- PR #406: Handle cases where C for loop was translated to Python while loop.

- PR #403: Introduce a ‘categorical’ type (behavioral, just as ‘string’ is) that is the only thing that passes to Arrow as DictionaryArray.

- PR #316: libawkward export tuning.

## Release 0.2.32

> (pip)

- PR #401: Missed some validity error URL reporting in #399, finished them here (because they were discovered as part of the Arrow bug-hunt).

- PR #390: VirtualArray has correct __record__ parameter.

- PR #399: All exceptions should report their version, file, and line number as GitHub links.

- PR #397: Awkward data should be registered as Numba constants so that they can be passed as closures to Numba-compiled functions. (also: #175)

- PR #398: Truncate generated outparams only to required length.

- PR #396: Fixes #395: IndexedArray was updating both the ArrayView viewport and ‘nextat’; only one is allowed.

- PR #388: Abstract all uses of NumPy, so that GPU arrays will use CuPy instead.

- PR #394: Fixed #393 (BitMaskedArray::bytemask output should be equivalent to valid_when=False).

## Release 0.2.31

> (pip)

- PR #389: Fix that cuda-kernels build!

## Release 0.2.30

> (pip)

- PR #381: Writing more awkward-array.org documentation. (also: #387)

- PR #384: Make from_arrayset even more lazy.

- PR #385: Fixed #383, prevented conversion of characters in strings, and renamed ak.numbers_to_type -> ak.values_astype.

- PR #382: Fixed broken kernel page in sphinx docs.

## Release 0.2.29

> (pip)

- PR #379: Fill in a lot of stubs on awkward-array.org.

- PR #378: Update the what-is-awkward to align with (and include) the video.

## Release 0.2.28

> (pip)

- PR #377: Rename ‘astype’ to ‘numbers_to_type’, for use as a high-level function. Also removed ‘can_cast’, since it’s exactly the same as the NumPy version(users should use NumPy).

- PR #374: Pandas deprecation version is 0.3.0 and ak.to_pandas is documented.

- PR #371: Removing the last offset parameters (missed them before because they’re in an array).

- PR #346: Operation to change the number type.

- PR #366: Remove ‘offset’ arguments from all kernels, only passing in pointers that have already been offset.

- PR #369: Improve C++ to C generator.

- PR #365: Do not iterate over lists while comparing in pytest.

- PR #307: Create specification and generate tests for kernels based on hand written labels.

- PR #364: Add Pandas deprecation warnings and other clean-ups.

- PR #363: jupyter-books 0.7.3 no longer supports ‘headers’. (also: #350)

- PR #357: Cleanup the Docker Residues like .test files and .dockerignore.

- PR #360: Ensure that Matplotlib raises ValueError on non-flat arrays and keep test_0341 from leaking Parquet files.

- PR #358: Fixed typo.

- PR #354: Mixin class decorators.

- PR #356: Adapt to pyarrow/Arrow 1.0.

- PR #353: Add docstring also to Record.

## Release 0.2.27

> (pip)

- PR #352: Replace metadata containing cache with just cache (no premature generalization).

- PR #351: Put the Awkward-in-Pandas feature up for a vote, citing #350.

- PR #349: Fix Python SyntaxWarning.

- PR #345: Prepare the Python Layer for the CUDA Kernels, and add Docker Images for CI.

## Release 0.2.26

> (pip)

- PR #348: Added form_key (optional string) to all Forms.

- PR #347: Remove redundant line from reducers kernel.

- PR #314: Implement axis_wrap_if_negative.

- PR #344: The ak.Array/ak.Record/ak.ArrayBuilder repr quotes keys that are not good identifiers.

- PR #343: Convert Arrow <–> Parquet, and hence Awkward <–> Parquet.

- PR #340: Convert 64-bit unsigned 32-bit Awkward arrays into 32-bit Arrow arrays if their indexes are small enough.

- PR #339: Adds a high-level interface to sorting (ak.sort) (also: #304)

- PR #338: Renamed keeplayout → keep_layout in ak.{from,to}_awkward0.

- PR #337: Try to fully resolve the NumPy format string issues. (also: #333)

- PR #330: Attach docstrings to newly created highlevel arrays.

## Release 0.2.25

> (pip)

- PR #327: Lookahead assignment Python code generation.

- PR #326: Fix a lot of warnings that have recently been introduced.

- PR #322: Revised getitem operation for masked jagged indexers.

- PR #325: These tests pass if you’ve pip installed awkward1, but sometimes you need to work from the localbuild directory.

- PR #293: Separation of cuda-kernels and memory_trackers implementation.

- PR #324: Fix an error in partitionedarray: array[‘field’, 10].

- PR #323: Fixed Python generation.

- PR #319: Update doctest dummy yaml to test documentation.

- PR #317: Remove redundant cpu kernels from operations.h.

- PR #261: replace carry with indexedarray.

- PR #306: Document interfaces of functions in sorting.cpp.

- PR #299: This PR moves all the template kernels from utils to kernels.

- PR #168: sort and argsort operations applied in axis.

- PR #295: Update contributing.md.

- PR #298: Touch up the kernels documentation.

## Release 0.2.24

> (pip)

- PR #270: Update the minimum Numba version to 0.50 when that becomes available. (also: numba/numba#5717)

- PR #296: Do not allow dynamic sized arrays in cpu-kernels.

- PR #269: Generate Python code for CPU kernels.

- PR #294: Fix some typos in cpu-kernels.

- PR #292: Fix some typos in cpu-kernels.

## Release 0.2.23

> (pip)

- PR #290: Bug-fixes for HATS.

- PR #288: fixes #286 broadcast single value with field.

- PR #287: docs: add nikoladze as a contributor.

- PR #283: Replace std::vector with C style code.

- PR #282: Remove redundant includes from cpu-kernels.

## Release 0.2.22

> (pip)

- PR #281: Revert to static linking libawkward.so because it broke the wheel-deployment.

## Release 0.2.21

> (pip)

- PR #280: Fix ak.pandas.dfs function for simple rows.

- PR #279: Fix ArrayBuilder’s access to type in __repr__.

- PR #266: Running black and flake8 on the Python codebase.

- PR #265: Fixes #264, reductions at axis=N inside empty lists at axis=N-1.

## Release 0.2.20

> (pip)

- PR #263: Continue from #224: fromarrow and toarrow.

- PR #260: docs: add gordonwatts as a contributor.

- PR #258: docs: add jpata as a contributor.

- PR #259: docs: add martindurant as a contributor.

- PR #257: docs: add douglasdavis as a contributor.

- PR #256: docs: add bfis as a contributor.

- PR #255: docs: add benkrikler as a contributor.

- PR #254: docs: add Jayd-1234 as a contributor.

- PR #253: docs: add guitargeek as a contributor.

- PR #252: docs: add mhedges as a contributor.

- PR #251: docs: add masonproffitt as a contributor.

- PR #250: docs: add EscottC as a contributor.

- PR #249: docs: add glass-ships as a contributor.

- PR #248: docs: add veprbl as a contributor.

- PR #247: docs: add Ellipse0934 as a contributor.

- PR #246: docs: add trickarcher as a contributor.

- PR #245: docs: add reikdas as a contributor.

- PR #244: docs: add henryiii as a contributor.

- PR #242: docs: add lgray as a contributor.

- PR #241: docs: add ianna as a contributor.

- PR #240: docs: add nsmith as a contributor.

- PR #239: docs: add jpivarski as a contributor.

## Release 0.2.19

> (pip)

- PR #237: Keep writing those tutorials.

- PR #236: Writing tutorials 2.

- PR #229: Update to JupyterBook’s new Sphinx-based build system.

- PR #234: Working on #230 segfault. (also: #233)

- PR #232: Fix bug in IndexForm possible types. (also: #231)

## Release 0.2.18

- PR #228: Prepare the second Coffea demo.

- PR #227: Write CONTRIBUTING.md. (also: #219)

## Release 0.2.17

- PR #216: VirtualArray, which loads its data on demand and interacts with a cache.

- PR #217: libawkward: pin vtables to the library.

- PR #223: Fixed #222. It failed to initialize starts and stops at the end of its output array, leaving uninitialized junk.

- PR #220: Fixed localbuild.py, args now correctly parse.

## Release 0.2.16

- PR #218: Fix a segfault I suspected but couldn’t reproduce. (also: #212)

## Release 0.2.15

- PR #212: PartitionedArray, which only applies to the root of a structure.

## Release 0.2.14

- PR #189: Update to Numba 0.49 and make that the minimal version.

## Release 0.2.13

- PR #209: Try again on visibility and also ensure -frtti. (also: #211)

## Release 0.2.12

- PR #208: Fixes #207 (missing files in tarball)

## Release 0.2.11

- PR #206: This should fix #205.

## Release 0.2.10

> (pip)

- PR #198: Wrote draft of tutorial for EIC.

- PR #201: Rename ak.choose and ak.cross.

- PR #197: All reference documentation is done.

- PR #196: Keep writing those Python docs.

- PR #195: Keep writing those Python docs.

- PR #194: Changed some names to add underscores.

- PR #190: Keep writing those Python docs.

- PR #188: Really write those Python docstrings this time.

## Release 0.2.9

- PR #187: Set up for Python documentation (including front page)

## Release 0.2.7

- PR #185: Start writing doxygen comments in C++.

- PR #183: Enforce a 79 character maximum on all lines, 72 on docstrings/comments.

- PR #180: Configure documentation (not content, just how the workflow will work).

- PR #171: Issues #166, #167, #170 in one PR.

- PR #155: fillna operation.

- PR #164: Fixes #162. Replaces all Raw Pointer Access with wrappers.

- PR #165: Implement argmin and argmax.

## Release 0.2.6

- PR #143: ByteMaskedArray, BitMaskedArray, and tomask operation.

- PR #160: argchoose and choose.

## Release 0.2.5

- PR #159: Implement ‘argcross’ and ‘cross’.

- PR #157: ak.Array and ak.Record constructors. Maybe the `ak.zip` function.

## Release 0.2.4

- PR #154: Add the ak.pandas.multiindex(array) function.

## Release 0.2.3

- PR #152: Finish the count/sizes/num operation and the flatten operation.

## Release 0.2.2

- PR #132: Merge all the rpad work (#114) into new environment.

- PR #151: Issues #149 and #150: AttributeErrors and merging ak.behavior.

- PR #148: isvalid as an operation.

## Release 0.2.1

- PR #147: RecordArray should use its length_ parameter, regardless of contents_.size()

## Release 0.2.0

> (pip)

- PR #140: Make __typestr__ a behavior, not a data property.

## Release 0.1.141

- PR #142: Fix Windows wheel and add auditwheel.

## Release 0.1.139

- PR #144: Strings in Numba.

## Release 0.1.138

(no pull requests)

## Release 0.1.137

- PR #137: Fix deployment.

- PR #139: EmptyArrays have float64 type (like NumPy), but are integer arrays when used as a slice (fixing scikit-hep/awkward-array#236).

- PR #135: Convert between Awkward0 and Awkward1.

## Release 0.1.133

- PR #133: Fix the tests that are currently skipped due to setidentity segfaults.

## Release 0.1.131

- PR #131: Reintroduce Numba “cpointers” test.

## Release 0.1.129

- PR #129: Improved build procedure building from setup.py.

- PR #130: Rename ‘FillableArray’ to ‘ArrayBuilder’ and all ‘fillable’ to ‘builder’. (also: #129)

## Release 0.1.128

> (pip)

- PR #128: Any tweaks that are necessary for Henry’s demo.

## Release 0.1.122

- PR #118: Replace Numba StructModels with CPointers and check all reference counts.

## Release 0.1.121

- PR #121: Better distribution: drop case-sensitive name and ensure that RapidJSON is in the source distribution.

## Release 0.1.120

- PR #120: Support the Autograd library in much the same way as NumExpr.

## Release 0.1.119

- PR #119: Support NumExpr and add a ‘broadcast_arrays’ function.

## Release 0.1.117

- PR #115: Add reducer operations (with an ‘axis’ parameter).

## Release 0.1.116

- PR #116: Refactor pyawkward.cpp both for compilation speed and so that arrays can be dynamically loaded by dependent Python modules.

## Release 0.1.111

- PR #111: Allow Awkward Arrays to be used as slices, including list-type and option-type.

## Release 0.1.110

- PR #110: Fix several issues and anything that looks in need of cleanup. (also: #91, #109, #109, #108, #101)

## Release 0.1.107

- PR #107: Assign fields to records (deeply, through all structure).

- PR #96: Implemented *::count for axis != 0.

## Release 0.1.106

- PR #106: Record should hold a pointer to RecordArray, not an instance.

## Release 0.1.94

- PR #93: UnionArray::simplify and IndexedOptionArray::simplify, to be used by functions that would naively return uniontypes and optiontypes. (also: #62)

- PR #105: Turn study/flatten.py into array documentation.

- PR #98: Bugfix for NumpyArray 32-bit vs 64-bit errors.

- PR #97: Guard against inspecting __main__ module.

- PR #83: *::flatten for axis != 0.

- PR #94: ak.Array.__getattr__ for record fields. (also: #62)

## Release 0.1.92

> (pip)

- PR #92: Make ak.Array a Pandas DType extension.

## Release 0.1.89

- PR #89: Address issues #88 and #61 with more complete tests.

## Release 0.1.87

- PR #87: Wrote a demo for Numba.

## Release 0.1.86

- PR #86: For issue #60, NEP 13: allow NumPy ufuncs to be called on ak.Array. (also: #66)

- PR #30: Starting cpp version of PR026 test.

## Release 0.1.84

- PR #84: UnionArray: only the basics so that any JSON can be ingested.

## Release 0.1.82

- PR #82: Finish up IndexedArray. (also: #52, #53, #52, #53)

## Release 0.1.81

- PR #81: Issue #50: IndexedArray::flatten for axis=0. (also: #51)

- PR #45: Start flatten implementation and add tests.

## Release 0.1.49

- PR #49: Use ak.Array vs ak.Record to distinguish RecordArray from Record.

## Release 0.1.47

- PR #48: Reproduce and fix issue #47.

## Release 0.1.46

- PR #46: Start IndexedArray (with and without OptionType).

## Release 0.1.43

- PR #44: Reproduce and fix issue #43.

- PR #42: Create stubs for the `flatten` operation.

## Release 0.1.40

- PR #40: Rename Identity/id -> Identities/identities and location -> identity.

- PR #41: Bring FillableArray::index to regular python interface.

## Release 0.1.39

- PR #39: Replacing hanging types with Parameters on each Content.

## Release 0.1.38

> (pip)

- PR #38: Static methods to make empty arrays of a given type.

## Release 0.1.37

- PR #37: Replace ‘lookup’ and ‘reverselookup’ with a single property (that acts like ‘reverselookup’).

## Release 0.1.36

- PR #36: Continue working on the Coffea demo.

## Release 0.1.33

- PR #33: Creating a demo for Coffea will motivate improvements.

## Release 0.1.32

- PR #32: Replace DressedType with parameters on all the Types.

## Release 0.1.31

- PR #31: Now the types need to pass through Numba.

## Release 0.1.28

- PR #28: Start the high-level layer: awkward.Array.

## Release 0.1.26

- PR #26: Add RecordArray (and Record) to Numba.

## Release 0.1.25

> (pip)

- PR #25: Start writing RecordArray (C++ and Fillable, but not Numba).

## Release 0.1.24

- PR #24: Start using RegularArray everywhere it needs to be used.

## Release 0.1.23

- PR #23: Introduce RegularArray for rectilinear blocks of any type of awkward array.

## Release 0.1.22

- PR #22: FillableArrays must be usable in Numba.

## Release 0.1.21

- PR #21: Create EmptyArray with unknown type.

## Release 0.1.20

- PR #20: Support unsigned index type for 32-bit.

## Release 0.1.19

(no pull requests)

## Release 0.1.18

- PR #19: Use a JSON library to feed FillableArray.

## Release 0.1.17

> (pip)

(no pull requests)

## Release 0.1.16

(no pull requests)

## Release 0.1.15

- PR #18: Implement `Fillable`, which are append-only, non-readable arrays.

## Release 0.1.14

- PR #17: Put all array classes in an ‘array’ directory (‘include’, ‘src’, and ‘_numba’).

## Release 0.1.13

- PR #16: Finish getitem for RawArray.

## Release 0.1.12

- PR #15: Implement all of the getitem cases for NumpyArray/ListArray in Numba.

## Release 0.1.11

- PR #14: Finish up getitem: handle all slice types but newaxis.

## Release 0.1.10

- PR #13: Error-handling as a struct, rather than just a string.

## Release 0.1.9

(no pull requests)

## Release 0.1.8

- PR #12: Access ListArray::getitem in Numba.

## Release 0.1.7

> (pip)

(no pull requests)

## Release 0.1.6

(no pull requests)

## Release 0.1.5

(no pull requests)

## Release 0.1.4

- PR #11: Implemented ListArray and ListOffsetArray’s __getitem__.

- PR #9: Propagate identity through NumpyArray::getitem.

## Release 0.1.3

(no pull requests)

## Release 0.1.2

(no pull requests)

## Release 0.1.1

- PR #8: Deep __getitem__ in C++.

- PR #7: 32-bit and 64-bit versions of Index, Identifer, and ListOffsetArray (and all future Arrays).

- PR #6: Iterators, deep iteration, iteration in Python and Numba.

- PR #5: Numba version of the Identity class.

## Release 0.1.0

> (pip)

- PR #4: Design an “identity” system, like the surrogate key in PartiQL.

- PR #3: Develop Numba extensions for NumpyArray and ListOffsetArray.