Giter Club home page Giter Club logo

awkward's Introduction

PyPI version Conda-Forge Python 3.7โ€’3.11 BSD-3 Clause License Build Test

Scikit-HEP NSF-1836650 DOI Documentation Gitter

Awkward Array is a library for nested, variable-sized data, including arbitrary-length lists, records, mixed types, and missing data, using NumPy-like idioms.

Arrays are dynamically typed, but operations on them are compiled and fast. Their behavior coincides with NumPy when array dimensions are regular and generalizes when they're not.

Motivating example

Given an array of lists of objects with x, y fields (with nested lists in the y field),

import awkward as ak

array = ak.Array([
    [{"x": 1.1, "y": [1]}, {"x": 2.2, "y": [1, 2]}, {"x": 3.3, "y": [1, 2, 3]}],
    [],
    [{"x": 4.4, "y": [1, 2, 3, 4]}, {"x": 5.5, "y": [1, 2, 3, 4, 5]}]
])

the following slices out the y values, drops the first element from each inner list, and runs NumPy's np.square function on everything that is left:

output = np.square(array["y", ..., 1:])

The result is

[
    [[], [4], [4, 9]],
    [],
    [[4, 9, 16], [4, 9, 16, 25]]
]

The equivalent using only Python is

output = []
for sublist in array:
    tmp1 = []
    for record in sublist:
        tmp2 = []
        for number in record["y"][1:]:
            tmp2.append(np.square(number))
        tmp1.append(tmp2)
    output.append(tmp1)

The expression using Awkward Arrays is more concise, using idioms familiar from NumPy, and it also has NumPy-like performance. For a similar problem 10 million times larger than the one above (single-threaded on a 2.2 GHz processor),

  • the Awkward Array one-liner takes 1.5 seconds to run and uses 2.1 GB of memory,
  • the equivalent using Python lists and dicts takes 140 seconds to run and uses 22 GB of memory.

Awkward Array is even faster when used in Numba's JIT-compiled functions.

See the Getting started documentation on awkward-array.org for an introduction, including a no-install demo you can try in your web browser.

Getting help

Installation

Awkward Array can be installed from PyPI using pip:

pip install awkward

The awkward package is pure Python, and it will download the awkward-cpp compiled components as a dependency. If there is no awkward-cpp binary package (wheel) for your platform and Python version, pip will attempt to compile it from source (which has additional dependencies, such as a C++ compiler).

Awkward Array is also available on conda-forge:

conda install -c conda-forge awkward

Because of the two packages (awkward-cpp may be updated in GitHub but not on PyPI), pip install through git (pip install git+https://...) will not work. Instead, use the Installation for developers section below.

Installation for developers

Clone this repository recursively to get the header-only C++ dependencies, then generate sources with nox, compile and install awkward-cpp, and finally install awkward as an editable installation:

git clone --recursive https://github.com/scikit-hep/awkward.git
cd awkward

nox -s prepare
python -m pip install -v ./awkward-cpp
python -m pip install -e .

Tests can be run in parallel with pytest:

python -m pytest -n auto tests

For more details, see CONTRIBUTING.md, or one of the links below.

Documentation, Release notes, Roadmap, Citations

The documentation is on awkward-array.org, including

The Release notes for each version are in the GitHub Releases tab.

The Roadmap, Plans, and Deprecation Schedule are in the GitHub Wiki.

To cite Awkward Array in a paper, see the "Cite this repository" drop-down menu on the top-right of the GitHub front page. The BibTeX is

@software{Pivarski_Awkward_Array_2018,
author = {Pivarski, Jim and Osborne, Ianna and Ifrim, Ioana and Schreiner, Henry and Hollands, Angus and Biswas, Anish and Das, Pratyush and Roy Choudhury, Santam and Smith, Nicholas and Goyal, Manasvi},
doi = {10.5281/zenodo.4341376},
month = {10},
title = {{Awkward Array}},
year = {2018}
}

Acknowledgements

Support for this work was provided by NSF cooperative agreement OAC-1836650 (IRIS-HEP), grant OAC-1450377 (DIANA/HEP), PHY-2121686 (US-CMS LHC Ops), and OAC-2103945 (Awkward Array).

We also thank Erez Shinan and the developers of the Lark standalone parser, which is used to parse type strings as type objects.

Thanks especially to the gracious help of Awkward Array contributors (including the original repository).

Jim Pivarski
Jim Pivarski

๐Ÿ’ป ๐Ÿ“– ๐Ÿš‡ ๐Ÿšง
Ianna Osborne
Ianna Osborne

๐Ÿ’ป
Pratyush Das
Pratyush Das

๐Ÿ’ป
Anish Biswas
Anish Biswas

๐Ÿ’ป
glass-ships
glass-ships

๐Ÿ’ป โš ๏ธ
Henry Schreiner
Henry Schreiner

๐Ÿ’ป ๐Ÿš‡
Nicholas Smith
Nicholas Smith

๐Ÿ’ป โš ๏ธ
Lindsey Gray
Lindsey Gray

๐Ÿ’ป โš ๏ธ
Ellipse0934
Ellipse0934

โš ๏ธ
Dmitry Kalinkin
Dmitry Kalinkin

๐Ÿš‡
Charles Escott
Charles Escott

๐Ÿ’ป
Mason Proffitt
Mason Proffitt

๐Ÿ’ป
Michael Hedges
Michael Hedges

๐Ÿ’ป
Jonas Rembser
Jonas Rembser

๐Ÿ’ป
Jaydeep Nandi
Jaydeep Nandi

๐Ÿ’ป
benkrikler
benkrikler

๐Ÿ’ป
bfis
bfis

๐Ÿ’ป
Doug Davis
Doug Davis

๐Ÿ’ป
Joosep Pata
Joosep Pata

๐Ÿค”
Martin Durant
Martin Durant

๐Ÿค”
Gordon Watts
Gordon Watts

๐Ÿค”
Nikolai Hartmann
Nikolai Hartmann

๐Ÿ’ป
Simon Perkins
Simon Perkins

๐Ÿ’ป
.hard
.hard

๐Ÿ’ป โš ๏ธ
HenryDayHall
HenryDayHall

๐Ÿ’ป
Angus Hollands
Angus Hollands

โš ๏ธ ๐Ÿ’ป
ioanaif
ioanaif

๐Ÿ’ป โš ๏ธ
Bernhard M. Wiedemann
Bernhard M. Wiedemann

๐Ÿšง
Matthew Feickert
Matthew Feickert

๐Ÿšง
Santam Roy Choudhury
Santam Roy Choudhury

โš ๏ธ
Jeroen Van Goey
Jeroen Van Goey

๐Ÿ“–
Ahmad-AlSubaie
Ahmad-AlSubaie

๐Ÿ’ป
Manasvi Goyal
Manasvi Goyal

๐Ÿ’ป
Aryan Roy
Aryan Roy

๐Ÿ’ป
Saransh
Saransh

๐Ÿ’ป
Laurits Tani
Laurits Tani

๐Ÿ“–
Daniel Savoiu
Daniel Savoiu

๐Ÿ’ป
Ray Bell
Ray Bell

๐Ÿ“–

๐Ÿ’ป: code, ๐Ÿ“–: documentation, ๐Ÿš‡: infrastructure, ๐Ÿšง: maintenance, โš : tests and feedback, ๐Ÿค”: foundational ideas.

awkward's People

Contributors

jpivarski avatar agoose77 avatar ianna avatar ioanaif avatar pre-commit-ci[bot] avatar henryiii avatar reikdas avatar dependabot[bot] avatar allcontributors[bot] avatar sw5sh avatar nsmith- avatar nikoladze avatar veprbl avatar chrisburr avatar lgray avatar douglasdavis avatar manasvigoyal avatar saransh-cpp avatar drahnreb avatar santamrc avatar raybellwaves avatar martindurant avatar henrydayhall avatar aryan26roy avatar ahmad-alsubaie avatar dsavoiu avatar biogeek avatar moelf avatar jrueb avatar laurits7 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.