Release history

Unreleased (main branch on GitHub)

  • 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

Sunday, 21 February, 2021 (pip, tar, zip)

Fixed ak.unflatten to include trailing 0 in its counts (in the structure on the left, if axis != 0 or partitioned, at all otherwise): PR #743.

Implemented row_groups parameter of ak.from_parquet: PR #748.

Added methods: ak.Array.to_list, ak.Record.to_list (synonym for tolist), and ak.Array.to_numpy: PR #750.

NumPy scalars iterated over as numbers: PR #751.

Better error message for bad concatenation: PR #752.

Fixed ak.num on PartitionedArrays: PR #757.

  • 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

Saturday, 13 February, 2021 (pip, tar, zip)

@drahnreb fixed several issues with categorical arrays and Arrow conversion: PR #727.

@jpivarski updated ak.unflatten to have an axis parameter (PR #731), and to make it work on PartitionedArrays (#732), added ak.run_lengths (#733) and ak.strings_astype (#734), and implemented ak.argsort for strings, fixing some issues with ak.sort for strings (#736).

Significantly, the depth of arrays was changed to not count the inner dimension of strings: PR #736. Now an unnested array of strings has the same depth as an unnested array of integers: the dimension of the lists comprising the strings themselves doesn’t count.

  • 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

Thursday, 11 February, 2021 (pip, tar, zip)

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.

  • 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

Tuesday, 09 February, 2021 (pip, tar, zip)

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](https://github.com/scikit-hep/awkward-1.0#roadmap)).

  • 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

Tuesday, 09 February, 2021 (pip, tar, zip)

This is the February 2021 release (see Roadmap).

No change with respect to 1.1.0r5.

(no pull requests)

Release 1.1.0rc5

Monday, 08 February, 2021 (pip, tar, zip)

Hopefully the last prerelease before 1.1.0.

Updates to Arrow 3.0. PR #709.

getitem_field calls simplify_optiontype. PR #714.

  • 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

Saturday, 06 February, 2021 (pip, tar, zip)

Minor changes, but one is a feature, not a bug-fix, so it needs to be pre-released before 1.1.0. I need to get 1.1.0 out soon, but I want the Parquet stuff to be in it.

Can now read and write Parquet datasets (conventions for sets of multiple files): PR #706, fixes #368 (old!).

Also, Python 2 can use ellipsis because we have pybind11 2.6 now: PR #707, fixes #705.

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

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

Release 1.1.0rc3

Friday, 05 February, 2021 (pip, tar, zip)

More minor bug fixes, mostly related to partitioned arrays and Parquet files: PRs #703 and #699.

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

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

Release 1.1.0rc2

Tuesday, 02 February, 2021 (pip, tar, zip)

Actually remove the features that have been deprecated, [scheduled to be removed in 1.1.0](https://github.com/scikit-hep/awkward-1.0#roadmap): PR #698.

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

@ianna fixed tuple-building in ArrayBuilder to guard against specifying a nonexistent slot and segfaulting: #697.

Various fixes in preparation for a SciPy 2021 tutorial:

  • 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

Saturday, 30 January, 2021 (pip, tar, zip)

Reducing over-materialization of virtual arrays: PRs #643, #644, #657, added Form-aware lazy Parquet: #688

Fixed ak.from_buffers to allow unreachable elements: PR #673

Developed the AwkwardForth VM: PRs #683, #648, #653, #661, #664, #672

Removed right-broadcasting from all operations except those that require it for NumPy compliance: #656, #680

@ianna improved sorting: PRs #639, #687, added complex numbers support: PRs #652

@trickarcher generalized CuPy interop to JAX: PRs #645, #662

@reikdas cleaned up developer scripts: PRs #665, #666, #667

@henryiii added more code quality tests: PRs #675, #681, #682, #677, #676, #685, #683

Cleaned up documentation: PRs #647, #650, #684

  • 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

Wednesday, 06 January, 2021 (pip, tar, zip)

@nsmith- fixed virtual arrays in ak.to_arrow (PR #642).

Otherwise, this is identical to 1.0.2rc5.

  • PR #642: Materialize virtual arrays in to_arrow.

Release 1.0.2rc5

Tuesday, 05 January, 2021 (tar, zip)

Fixed #628, allowing np.int64(N) to be used in a slice like integer N (PR #636).

The intent is for this to be the last prerelease before 1.0.2. Test it!

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

  • PR #636: Accept NumPy integers in slices.

Release 1.0.2rc4

Monday, 04 January, 2021 (tar, zip)

Added the ability to select fields inside of nested records with syntax like array[[“pt”, “eta”, “phi”], “nominal”] (#619).

Fixed Apache Arrow → Awkward Array (ak.from_arrow) for sliced Arrow arrays: it has an offset attribute we had been ignoring (#625). Thanks to @trickarcher for the extensive tests!

Ensured that an ak.Array’s behavior always gets passed to output of any operation (#626), even if the input is a dict (#627, affected ak.zip, ak.cartesian, and ak.argcartesian).

Fixed #629, ak.with_field dropping parameters (#631), and #634, ak.fill_none not accepting a Record as a fill value (#635).

Added a roadmap and upvote/thumbs up instructions to the README.

  • 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

Tuesday, 22 December, 2020 (tar, zip)

@jpivarski revised the ak.concatenate implementation (#610), fixed a bug related to axis handling (#612), and made ak.concatenate friendlier to lazy arrays (#613; “friendlier” = “materializes arrays in fewer cases”).

@chrisburr added setuptools as a requirement because it is used for pkg_resources.

@ianna added validity-checking for strings, bytestrings, and categorical (#571), including some revisions of sorting and a partial implementation of checking for uniqueness and identifying unique elements from arrays that can later be used to implement np.unique.

  • 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

Thursday, 17 December, 2020 (tar, zip)

This release is only for getting a Zenodo DOI for this repo.

(no pull requests)

Release 1.0.2rc1

Thursday, 17 December, 2020 (tar, zip)

Updated Awkward <–> Arrow conversion to preserve nullability in type (PRs #602, #606). Preemptively avoiding warnings from NumPy 1.20 (#599) and fixed 32-bit Linux cases in the tests (#604).

@henryiii fixed hardcoded threads in MacOS compilation target (for deploying to conda-forge).

  • 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

Monday, 14 December, 2020 (pip, tar, zip)

Fixed #597 with PR #598. Otherwise identical to 1.0.1rc3.

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

Release 1.0.1rc3

Monday, 14 December, 2020 (tar, zip)

DeprecationWarning -> FutureWarning, add test samples to sdist, and do one last release candidate (1.0.1rc3).

If the source tarball for this (on PyPI) can run all tests, then we’re good and I can release 1.0.1. Hopefully, that will happen today.

(no pull requests)

Release 1.0.1rc2

Friday, 11 December, 2020 (tar, zip)

@jrueb implemented the ak.unflatten function (#583).

@jpivarski fixed segfault int ak.to_numpy(ak.layout.NumpyArray(cupy.array([1, 2, 3])) (#591), changed the definition of RegularArray to accept size == 0 (#590), which was inspired by a corner-case revealed in testing ak.unflatten, and that, in turn, required the ak.to_arrayset/ak.from_arrayset serialization to be overhauled (#592). Because any interface changes should be formally deprecated now, these functions must be renamed: ak.to_buffers/ak.from_buffers; why this had to be changed (with RegularArray examples) is described here: https://github.com/scikit-hep/awkward-1.0/pull/592#issuecomment-743430896

If no one finds any problems with this release candidate, it will be released as 1.0.1 on Monday. All other features will now target 1.0.2rc1. After 1.0.1 is out, the release candidates leading up to it will be deleted from PyPI.

  • 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

Wednesday, 09 December, 2020 (tar, zip)

Actually removed the features that were supposed to be removed in 1.0.0 (#576).

Fixed the setup.py –record argument, needed for bdist_rpm (#577).

Implemented ak.Array.ndim in the Numba context (#578).

Updated the internal broadcast_and_apply and recursively_apply interfaces to support axis < 0 for some functions (#582). Used that to add an axis parameter to ak.is_none (#587). Also fixed a corner-case in ak.flatten’s axis handling (#586).

  • 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

Saturday, 05 December, 2020 (pip, tar, zip)

First version 1.0.0 (non release candidate)! From now on, when users

`bash 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](https://github.com/pybind/pybind11/releases/tag/v2.6.0) and [RapidJSON version 1.1.0](https://github.com/Tencent/rapidjson/releases/tag/v1.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).

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

  • PR #570: Fix ArrayBuilder memory leak.

Release 1.0.0rc2

Thursday, 03 December, 2020 (tar, zip)

@reikdas added a tool to check which GPU kernels have been implemented (#565).

@ianna implemented multi-JSON reading and nan/inf/-inf string substitution (#568).

@trickarcher added more loop-dependent GPU kernels (#454).

@jpivarski added the ‘initial’ argument to ak.min/ak/max (#566), created a pass-through “awkward1” package (#564), fixed up the documentation, and renamed the master branch as main (#569).

  • 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

Monday, 30 November, 2020 (tar, zip)

First actual 1.0 version!

Also, fixed booleans in Numba (#559), setting a virtual field with __setitem__ (#561), and renamed awkward1awkward everywhere (#563).

(no pull requests)

Release 0.4.5

Tuesday, 24 November, 2020 (pip, tar, zip)

Another batch of [November bug-fixes](https://github.com/scikit-hep/awkward-1.0/projects/2):

@nsmith- made mixin classes derived from a decorator pickleable (#542).

@ianna fixed a bug in sort/argsort (#524) and concatenate (#548).

@reikdas added a script to clean up generated files (#556).

@jpivarski generalized ak.where to take a non-NumPy condition (#544), implemented __contains__ in and out of Numba (#547), np.array(ak.Array) in Numba (#550), removed the right-broadcast from ak.with_field (#553), implemented ak.to_regular and ak.from_regular (#551), updated the GitHub issue templates, and fixed a bug affecting Coffea (https://github.com/CoffeaTeam/coffea/issues/372, PR #558).

  • 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

Tuesday, 17 November, 2020 (pip, tar, zip)

Mostly bug-fixes, but a few new functions:

  • PR #495: @reikdas added a test to ensure kernel signatures match specification, are in order

  • PR #517: masked __getitem__ on empty arrays

  • PR #518: fixed ak.to_pandas with IndexedArrays and other nodes

  • PR #519: ak.local_index

  • PR #520: actually removed long-deprecated Pandas code

  • PR #525: fixed the definition of Form::getitem_field

  • PR #526: infinite recursion bug in Arrow translation

  • PR #527: definition of “mergeable” with parameters (different __doc__ is mergeable, different __record__ is not)

  • PR #535: ak.zeros_like, ak.ones_like, ak.full_like

  • PR #536: enforce minimum pyarrow version (2.0.0)

  • PR #537: fixed matrix multiplication (multiply many differently sized matrices with one @!)

  • PR #539: @ianna implemented ak.concatenate for axis > 0!

  • PR #540: performance issues in __setitem__

  • 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

Thursday, 05 November, 2020 (pip, tar, zip)

Calling ufuncs on any custom types (not just records) will raise errors unless a customization is defined for exactly that ufunc and type. Some custom types, like “categorical,” need to handle arbitrary ufuncs, so I also added a “apply_ufunc” interface to define behaviors across the board. (#513)

Added copy and deepcopy, both with the Python interface (copy module) and with the NumPy interface (np.copy). (#514)

Fixed the cache-handling of version 0.4.2. (#515)

  • 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

Wednesday, 04 November, 2020 (pip, tar, zip)

Mutable ak.Array.cache has been replaced with immutable ak.Array.caches, which always contains all the VirtualArray caches in the whole layout; it no longer needs to be maintained by users.

This is an interface-breaking change (with deprecation warnings), and a new release is needed to bring uproot4 up to date with the change.

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

Release 0.4.1

Tuesday, 03 November, 2020 (pip, tar, zip)

Broadcasting ufuncs across records is now deprecated, and will be removed in version 1.0.0 (December 1, 2020).

Fixed two bugs (#501 and #499).

  • 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

Thursday, 29 October, 2020 (pip, tar, zip)

Supports Python 3.9. (Now MacOS only supports Pythons 2.7, 3.7-3.9 (3.6 dropped). All other operating systems support Pythons 2.7, 3.5-3.9)

Based on [pybind 2.6.0](https://github.com/pybind/pybind11/releases/tag/v2.6.0). This is the first jump in pybind11 version in a while.

  • 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

Monday, 21 September, 2020 (pip, tar, zip)

Put the cmake requirement back into pyproject.toml and version-lock awkward1-cuda-kernels to awkward1.

The main reason for this release is because we hit the 10 GB limit and now I can’t deploy a complete set of wheels. (They won’t upload if a name had existed, even if manually deleted.) I’ve [requested a higher limit](https://github.com/pypa/pypi-support/issues/630).

  • 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

Monday, 21 September, 2020 (pip, tar, zip)

As discussed in #350, Awkward arrays can no longer be used as Pandas columns. Also part of this API change (#464),

  • array.tojson has been removed: use ak.to_json(array).

  • array.columns has been renamed: use array.fields.

  • ak.keys(array) has been renamed: use ak.fields(array). (ak.keys still exists with a “deprecated until 0.4.0” message)

  • array.ndim (property) is now the dimension of the array, rather than 1 (a Pandas requirement)

  • array.type has been added; it is equivalent to ak.type(array). If you had fields named “type”, they will now have to be accessed as array[“type”], rather than array.type.

Thanks to @reikdas, this is the first release with a [formal specification](https://github.com/scikit-hep/awkward-1.0/blob/master/kernel-specification.yml) for the cpu-kernels/cuda-kernels library! (The bottom layer of the 3-layer architecture, [documented here](https://awkward-array.readthedocs.io/en/latest/_auto/kernels.html).)

Furthermore, ufunc behavioral matching has been generalized (#463) to allow:

` ak.behavior[np.multiply, numbers.Number, "Vector"] = scalar_multiply ak.behavior[np.multiply, "Vector", numbers.Number] = scalar_multiply `

Two mistakes were fixed in the Windows builds (#465 by @chrisburr and #467), allowing them to be used without debug-version system libraries (#430). The first of these enabled @lgray to [deploy it on conda-forge](https://anaconda.org/conda-forge/awkward1)!

Still built on pybind 2.4.3, though we might want to update that, especially if pybind supports the NumPy datetime dtypes.

  • 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

Friday, 18 September, 2020 (pip, tar, zip)

Getting closer to finalizing @reikdas and @trickarcher’s work this summer, and @nsmith- fixed a missing case in ak.type (booleans!).

Also, the Windows build procedure was generalized to allow awkward1 to become a package on conda-forge.

  • 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

Saturday, 12 September, 2020 (pip, tar, zip)

@ianna fixed the intermittent MacOS error (issue #320)! Although this bug only manifested itself on MacOS in our tests, due to the capriciousness of memory overwriting/reading, it was really a bug on all platforms.

@reikdas auto-generated more CUDA kernels and will now be turning to consolidating what we have (i.e. cleanup). 59 of the 77 embarrassingly parallel kernels can be converted without manual intervention.

@jpivarski fixed a bug in ak.flatten and ensured that variable dimensions remain variable and regular dimension remain regular in reducers, unless there are missing values involved. I also added two performance improvements: broadcasting only compacts lists if they have to, resulting in a 40× speedup in the limit of large arrays (PR #444) and when Uproot has types that would be slow to deserialize from ROOT, it can now offload the processing to a C++ loop in Awkward, resulting in an 80× speedup in the targeted case (PR #448). This required ak.concatenate to merge in batches, rather than two at a time (TBaskets in a ROOT file present hundreds of arrays to concatenate; an _O(n²)_ algorithm is bad), which is PR #449 (merged into PR #448 before the latter was squash-and-merged).

  • 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

Tuesday, 08 September, 2020 (pip, tar, zip)

@reikdas has added a second batch of CUDA translations.

<img src=”https://user-images.githubusercontent.com/1852447/92425142-f7c5d480-f14b-11ea-8268-87672d6b824b.png” width=”600”>

@nsmith- fixed reference-cycle issues in VirtualArrays by making ArrayCache keep only a weak reference to the cache (that it might be included in).

@jpivarski fixed some odds and ends and also revamped the deployment procedure so that pip install awkward1 doesn’t install anything outside of its Python directory. (Homebrew complains about that on MacOS.) There is now a python -m awkward1.config –cflags –libs command to get a path to the installed header files and libraries, and dependent-project is now being tested regularly on Linux and MacOS.

  • 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

Wednesday, 26 August, 2020 (pip, tar, zip)

Quick fix for inability to print out partitioned arrays.

(no pull requests)

Release 0.2.34

Tuesday, 25 August, 2020 (pip, tar, zip)

@trickarcher added conversions to and from CuPy arrays, enabling all of CuPy’s ufuncs for non-structure-changing math (i.e. formulas). (#372)

@reikdas improved the kernel testing (#412, #413, #414).

@jpivarski fixed references to np.object (where np is NumpyMetadata, not numpy), which was breaking Uproot4 tests and motivated this new release.

@jpivarski also fixed #415, issues with ArrayBuilder.append and union types.

  • 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

Saturday, 22 August, 2020 (pip, tar, zip)

@veprbl fixed the warnings in Linux (gcc) and MacOS (clang): everything is clean!

@jpivarski added a categorical type with functions like ak.to_categorical. This type is high-level only, like the string type, and is used to determine which fields to convert to Arrow/Parquet’s dictionary encoding and which not to. See issue #400.

Fixed #408, a severe error in ak.argmin and ak.argmax: they returned wrong integer positions for arrays with missing values or variable-length lists with axis != -1.

  • 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

Wednesday, 19 August, 2020 (pip, tar, zip)

@nsmith- filled in missing data in VirtualArrays so they can be used in Numba in more situations.

@reikdas cleaned up the kernel tests.

@jpivarski fixed some bugs in the Numba implementation, enabled functions like enumerate and zip, added GitHub URLs to all exceptions for faster investigation of bugs, and abstracted the use of NumPy so that the Python-side calculations can be swapped for CuPy.

  • 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

Saturday, 15 August, 2020 (pip, tar, zip)

Updated the awkward1-cuda-kernels build and testing process. This is the first regular release of awkward1-cuda-kernels as a PyPI package, and henceforth all awkward1 PyPI releases will be accompanied by a awkward1-cuda-kernels PyPI release with the same version number.

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

Release 0.2.30

Tuesday, 11 August, 2020 (pip, tar, zip)

Renamed and fixed ak.values_astype, added Pandas-style ak.Array constructor, and other touch-ups as part of writing documentation.

@nsmith made ak.from_arrayset “even more lazy” by inserting a VirtualArray in every field of a RecordArray when lazy=True.

  • 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

Monday, 10 August, 2020 (pip, tar, zip)

The website can’t be updated unless the bug-fixes that the tutorials require are available as a released version. Thus, this is just a bug-fix release (there may be more, as more documentation gets written).

  • 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

Friday, 07 August, 2020 (pip, tar, zip)

As per #350, Pandas integration will be deprecated. Starting in version 0.3.0, it won’t be possible to use Awkward arrays as Pandas Series or DataFrame columns. We’re also giving up on attempts to keep Matplotlib from iterating over non-numeric data. (These are part of a theme of removing sneaky tricks from the code, such as awkward1._util.called_by_module, for robustness.)

Updated to backward-incompatible changes in Arrow 1.0.0. Now Arrow 1.0.0 is the minimum version that works with Awkward.

Updated to changes in JupyterBooks to fix documentation.

@ianna added a numbers_to_type function, which converts all numbers to a given type while maintaining an array’s structure.

@reikdas generated over three thousand unit tests for the kernels, which previously had only been tested as part of integration tests. Once the blacklist in the test generation framework is reduced to zero, line coverage of kernels will be 100%. Once the samples are carefully chosen in kernel-specification/samples.json, all the important cases will be tested as well. This testing framework will be extended to CUDA kernels as well.

@nsmith- added class and class method decorators to simplify the process of adding high-level behaviors.

Internally, all of the “offset” parameters have been removed from kernel argument lists. Instead, correctly offset pointers are passed to these functions, so they can assume that they start from (relative) array index zero. Several previously fixed bugs have been traced to this and in the conversion, I found a few more suspicious spots—now we don’t have to worry about it anymore.

Still built on pybind 2.4.3, though we might want to update that, especially if pybind supports the NumPy datetime dtypes.

  • 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

Thursday, 23 July, 2020 (pip, tar, zip)

Make Awkward-in-Pandas an opt-in feature with likely deprecation, as described in #350. (That’s where users can explain their use-cases if they want to keep it.)

Change metadata with a “cache” into just cache, since “metadata” is a legitimate word for scientific data and we don’t want a conflict. (It broke Coffea’s daily tests.)

This version includes @trickarcher’s first full example of moving an array to the GPU and computing something on it (ak.num). The necessary code does not exist in PyPI yet, though.

  • 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

Thursday, 23 July, 2020 (pip, tar, zip)

From @nsmith-, docstrings are now passed through array manipulations as a __doc__ parameter (which becomes a __doc__ attribute on ak.Array).

@ianna implemented negative axis parameters, which includes cases like:

array = ak.Array([
        {"x": [1], "y": [[], [1]]},
        {"x": [1, 2], "y": [[], [1], [1, 2]]},
        {"x": [1, 2, 3], "y": [[], [1], [1, 2], [1, 2, 3]]}])

ak.num(array, axis=-1).tolist() == [{'x': 1, 'y': [0, 1]},
                                    {'x': 2, 'y': [0, 1, 2]},
                                    {'x': 3, 'y': [0, 1, 2, 3]}]

which would be inexpressible with a nonnegative axis.

Sorting finally has a high-level function, ak.sort (and ak.argsort).

Awkward ↔ Apache Arrow conversion now prefers 32-bit Arrow types, if possible, and Awkward arrays can be written to and read from Parquet files.

Awkward Arrays can now be deconstructed into a Mapping of str → NumPy arrays (or binary blobs) and back again using ak.to_arrayset and ak.from_arrayset. This permits general serialization, though standard formats like Arrow and Parquet are to be preferred for any long-term storage.

  • 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

Saturday, 11 July, 2020 (pip, tar, zip)

Added sort/argsort; kernels are being refactored and documented to prepare for GPU support; performance tuning: RecordArray carry → IndexedArray; __getitem__ for masked, jagged slices is now correct.

  • 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

Friday, 12 June, 2020 (pip, tar, zip)

This is the first version of Awkward Array to strictly require Numba 0.50 if Numba is used at all. By incorporating numba/numba#5717 in version 0.50, importing Awkward Array does not cause Numba to be imported, yet even the first function JIT’ed by Numba can accept an Awkward Array as an argument because the Numba entry-point registers all Awkward types.

Built on pybind 2.4.3.

  • 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

Saturday, 06 June, 2020 (pip, tar, zip)

Built on pybind 2.4.3.

  • 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

Friday, 29 May, 2020 (pip, tar, zip)

Built on pybind 2.4.3.

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

Release 0.2.21

Thursday, 28 May, 2020 (pip, tar, zip)

Built on pybind 2.4.3.

  • 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

Thursday, 14 May, 2020 (pip, tar, zip)

Dropped support for Python 3.4, added badges to README, and all the collaborators (a long list of PRs).

Also added @trickarcher’s ak.to_arrow and ak.from_arrow functions: PRs #224 and #263. These functions are known to work for Arrow 0.17+.

Built on pybind 2.4.3.

  • 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

Friday, 08 May, 2020 (pip, tar, zip)

PRs #232 and #234 are bug-fixes, #229, #236, and #237 are documentation. Documentation is now fully stubbed out, though it could take a long time to fill it all in. I’ve put in notifications telling users that it will be written on demand: they can bump up certain articles in priority.

Awkward continues to be built on pybind 2.4.3.

  • 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

Thursday, 30 April, 2020 (tar, zip)

PRs #227 and #228 built on pybind 2.4.3.

  • PR #228: Prepare the second Coffea demo.

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

Release 0.2.17

Wednesday, 29 April, 2020 (tar, zip)

PRs #216, #217, #220, and fixed #222, built on pybind 2.4.3.

  • 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

Monday, 20 April, 2020 (tar, zip)

PRs #218, built on pybind 2.4.3.

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

Release 0.2.15

Sunday, 19 April, 2020 (tar, zip)

PRs #212, built on pybind 2.4.3.

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

Release 0.2.14

Friday, 17 April, 2020 (tar, zip)

PRs #189, built on pybind 2.4.3.

It is compatible with Numba 0.49 and _requires_ Numba 0.49 if Numba is to be used at all.

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

Release 0.2.13

Monday, 13 April, 2020 (tar, zip)

PRs #209, built on pybind 2.4.3.

This is the last version compatible with Numba 0.48 (and it _requires_ Numba < 0.49).

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

Release 0.2.12

Saturday, 11 April, 2020 (tar, zip)

PRs #208, built on pybind 2.4.3.

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

Release 0.2.11

Friday, 10 April, 2020 (tar, zip)

PRs #206, built on pybind 2.4.3.

Release 0.2.10

Tuesday, 07 April, 2020 (pip, tar, zip)

PRs #188, #190, #194, #195, #196, #197, #198, #201; built on pybind 2.4.3.

  • 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

Thursday, 26 March, 2020 (tar, zip)

PRs #187, built on pybind 2.4.3.

This introduces a new front page for documentation.

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

Release 0.2.7

Wednesday, 25 March, 2020 (tar, zip)

PRs #155, #164, #165, #171, #185, and established two documentation servers (only C++ doxygen is done): https://scikit-hep.org/awkward-1.0/ and https://awkward-array.readthedocs.io/en/latest/_static/. Also, built on pybind 2.4.3.

  • 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

Monday, 16 March, 2020 (tar, zip)

PRs #143 and #160, built on pybind 2.4.3.

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

  • PR #160: argchoose and choose.

Release 0.2.5

Wednesday, 11 March, 2020 (tar, zip)

PRs #157, #159, and fixed #77, built on pybind 2.4.3.

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

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

Release 0.2.4

Tuesday, 10 March, 2020 (tar, zip)

PR #154, built on pybind 2.4.3.

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

Release 0.2.3

Tuesday, 10 March, 2020 (tar, zip)

PR #152, built on pybind 2.4.3.

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

Release 0.2.2

Monday, 09 March, 2020 (tar, zip)

PRs #148, #151, and #132 built on pybind 2.4.3.

  • 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

Friday, 06 March, 2020 (tar, zip)

PR #147, built on pybind 2.4.3.

Release 0.2.0

Friday, 06 March, 2020 (pip, tar, zip)

PR #140, built on pybind 2.4.3.

By incrementing the minor version number, we break the rough connection we had between PR numbers and patch version numbers. This represents the fact that we’re entering a phase in which the work is driven by issues (which are not sequential), rather than non-issue PRs (which can be sequential enough).

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

Release 0.1.141

Thursday, 05 March, 2020 (tar, zip)

PR #142, built on pybind 2.4.3.

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

Release 0.1.139

Thursday, 05 March, 2020 (tar, zip)

PR #144, built on pybind 2.4.3.

(The version numbers no longer correspond to the PR numbers. Issue numbers are becoming more important than PR numbers.)

  • PR #144: Strings in Numba.

Release 0.1.138

Wednesday, 04 March, 2020 (tar, zip)

Commits to master, trying to fix the live deployment: https://github.com/scikit-hep/awkward-1.0/compare/9ce982595c7d324af97db289b07ee4f8d35b12c7…b610e875d2028ee6536f51ec9679b0360882a825

As always, built on pybind 2.4.3.

(no pull requests)

Release 0.1.137

Wednesday, 04 March, 2020 (tar, zip)

PRs #135, #137, #139, built on pybind 2.4.3.

If successful, this will be the first deployment with the new build procedure.

  • 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

Tuesday, 03 March, 2020 (tar, zip)

PR #133, built on pybind 2.4.3.

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

Release 0.1.131

Monday, 02 March, 2020 (tar, zip)

PR #131, built on pybind 2.4.3.

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

Release 0.1.129

Monday, 02 March, 2020 (tar, zip)

PR #129, built on pybind 2.4.3.

  • 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

Saturday, 29 February, 2020 (pip, tar, zip)

PR #128, built on pybind 2.4.3.

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

Release 0.1.122

Tuesday, 25 February, 2020 (tar, zip)

PR #118, built on pybind 2.4.3.

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

Release 0.1.121

Wednesday, 19 February, 2020 (tar, zip)

PR #121, built on pybind 2.4.3.

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

Release 0.1.120

Tuesday, 18 February, 2020 (tar, zip)

PR #120, built on pybind 2.4.3.

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

Release 0.1.119

Tuesday, 18 February, 2020 (tar, zip)

PR #119, built on pybind 2.4.3.

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

Release 0.1.117

Sunday, 16 February, 2020 (tar, zip)

PR #115, built on pybind 2.4.3.

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

Release 0.1.116

Tuesday, 11 February, 2020 (tar, zip)

PR #116, built on pybind 2.4.3.

  • 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

Sunday, 09 February, 2020 (tar, zip)

PR #111.

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

Release 0.1.110

Thursday, 06 February, 2020 (tar, zip)

PR #110, which fixes issues #91, #101, #108, #109.

Release 0.1.107

Tuesday, 04 February, 2020 (tar, zip)

PR #96 and PR #107.

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

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

Release 0.1.106

Monday, 03 February, 2020 (tar, zip)

PR #106.

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

Release 0.1.94

Monday, 03 February, 2020 (tar, zip)

PR #83, PR #93, and PR #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

Tuesday, 28 January, 2020 (pip, tar, zip)

PR #92.

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

Release 0.1.89

Friday, 24 January, 2020 (tar, zip)

PR #89.

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

Release 0.1.87

Wednesday, 22 January, 2020 (tar, zip)

PR #87, the Numba demo.

  • PR #87: Wrote a demo for Numba.

Release 0.1.86

Tuesday, 21 January, 2020 (tar, zip)

PR #86 and #30.

  • 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

Friday, 17 January, 2020 (tar, zip)

PR #84.

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

Release 0.1.82

Thursday, 16 January, 2020 (tar, zip)

PR #82.

Release 0.1.81

Wednesday, 15 January, 2020 (tar, zip)

PRs #45 and #81.

(The big jump in version number is because I’m keeping the last digit in sync with the PR number, and I recently added a lot of issues that pushes up the PR number.)

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

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

Release 0.1.49

Friday, 10 January, 2020 (tar, zip)

PR #49.

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

Release 0.1.47

Thursday, 09 January, 2020 (tar, zip)

Fixes issue #47 with PR #48.

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

Release 0.1.46

Wednesday, 08 January, 2020 (tar, zip)

PR #46.

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

Release 0.1.43

Monday, 06 January, 2020 (tar, zip)

PRs #42 and #43.

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

  • PR #42: Create stubs for the flatten operation.

Release 0.1.40

Saturday, 04 January, 2020 (tar, zip)

PRs #40 and #41.

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

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

Release 0.1.39

Saturday, 04 January, 2020 (tar, zip)

PR #39.

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

Release 0.1.38

Saturday, 28 December, 2019 (pip, tar, zip)

PR #38.

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

Release 0.1.37

Thursday, 26 December, 2019 (tar, zip)

PR #37.

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

Release 0.1.36

Friday, 20 December, 2019 (tar, zip)

PR #36, the [2019-12-20 Coffea demo](https://github.com/scikit-hep/awkward-1.0/blob/master/docs/demos/2019-12-20-coffea-demo.ipynb).

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

Release 0.1.33

Thursday, 19 December, 2019 (tar, zip)

PR #33.

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

Release 0.1.32

Friday, 13 December, 2019 (tar, zip)

PR #32.

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

Release 0.1.31

Wednesday, 11 December, 2019 (tar, zip)

PR #31.

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

Release 0.1.28

Friday, 06 December, 2019 (tar, zip)

PR #28.

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

Release 0.1.26

Tuesday, 03 December, 2019 (tar, zip)

PR #26.

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

Release 0.1.25

Wednesday, 27 November, 2019 (pip, tar, zip)

PR #25.

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

Release 0.1.24

Wednesday, 20 November, 2019 (tar, zip)

PR #24.

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

Release 0.1.23

Wednesday, 20 November, 2019 (tar, zip)

PR #23.

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

Release 0.1.22

Wednesday, 13 November, 2019 (tar, zip)

PR #22.

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

Release 0.1.21

Tuesday, 12 November, 2019 (tar, zip)

PR #21.

  • PR #21: Create EmptyArray with unknown type.

Release 0.1.20

Monday, 11 November, 2019 (tar, zip)

PR #20.

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

Release 0.1.19

Sunday, 03 November, 2019 (tar, zip)

PR #19. (Essentially the same as tag 0.1.18, but I need a new version number because the last deployment was unexpectedly successful.)

(no pull requests)

Release 0.1.18

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

Release 0.1.17

Tuesday, 22 October, 2019 (pip, tar, zip)

Maybe fixed Linux deployment.

(no pull requests)

Release 0.1.16

Tuesday, 22 October, 2019 (tar, zip)

Debug Linux deployment.

(no pull requests)

Release 0.1.15

Tuesday, 22 October, 2019 (tar, zip)

PR #18.

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

Release 0.1.14

Monday, 14 October, 2019 (tar, zip)

PR #17.

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

Release 0.1.13

Thursday, 10 October, 2019 (tar, zip)

PR #16.

  • PR #16: Finish getitem for RawArray.

Release 0.1.12

Thursday, 10 October, 2019 (tar, zip)

PR #15.

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

Release 0.1.11

Friday, 04 October, 2019 (tar, zip)

PR #14.

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

Release 0.1.10

Friday, 04 October, 2019 (tar, zip)

PR #13.

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

Release 0.1.9

Wednesday, 02 October, 2019 (tar, zip)

Test deployment from Azure running on scikit-hep.

(no pull requests)

Release 0.1.8

Wednesday, 02 October, 2019 (tar, zip)

PR #12.

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

Release 0.1.7

Thursday, 26 September, 2019 (pip, tar, zip)

The half-thought-through PR10 tests were failing in 32-bit, so I removed them for the sake of deployment. I’ll revisit RawArray someday.

(no pull requests)

Release 0.1.6

Thursday, 26 September, 2019 (tar, zip)

Try to fix manylinux1 deployment again.

(no pull requests)

Release 0.1.5

Thursday, 26 September, 2019 (tar, zip)

Try to fix manylinux1 deployment.

(no pull requests)

Release 0.1.4

Thursday, 26 September, 2019 (tar, zip)

Through PR #11 (implemented ListArray and ListOffsetArray’s __getitem__).

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

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

Release 0.1.3

Saturday, 21 September, 2019 (tar, zip)

Fix CMake version check again (for Linux2010).

(no pull requests)

Release 0.1.2

Saturday, 21 September, 2019 (tar, zip)

Protect Linux2010 from visibility setting (which is intended for MacOS, anyway).

(no pull requests)

Release 0.1.1

Saturday, 21 September, 2019 (tar, zip)

PR #8: C++ NumpyArray::getitem is done, setting the pattern for other classes (external C functions).

The Numba and Identity extensions are not done, which would be necessary to fully set the pattern.

  • 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

Tuesday, 27 August, 2019 (pip, tar, zip)

Up through PR #4: NumpyArray and ListOffsetArray usable in C++, Python, and Numpy. C++ and Python have an Identity framework for particle kinematics (see [combinatorics language](https://github.com/jpivarski/PartiQL#readme)). The dummy1 and dummy3 functions tested in deployments 0.0.x have been removed (Identity has some real code in cpu-kernels).

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

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