awkward


Nameawkward JSON
Version 2.7.0 PyPI version JSON
download
home_pageNone
SummaryManipulate JSON-like data with NumPy-like idioms.
upload_time2024-11-08 01:24:20
maintainerNone
docs_urlNone
authorNone
requires_python>=3.9
licenseBSD-3-Clause
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <a href="https://github.com/scikit-hep/awkward-1.0">
    <img src="https://github.com/scikit-hep/awkward-1.0/raw/main/docs-img/logo/logo-300px.png">
</a>


[![PyPI version](https://badge.fury.io/py/awkward.svg)](https://pypi.org/project/awkward)
[![Conda-Forge](https://img.shields.io/conda/vn/conda-forge/awkward)](https://github.com/conda-forge/awkward-feedstock)
[![Python 3.9‒3.13](https://img.shields.io/badge/python-3.9%E2%80%923.13-blue)](https://www.python.org)
[![BSD-3 Clause License](https://img.shields.io/badge/license-BSD%203--Clause-blue.svg)](https://opensource.org/licenses/BSD-3-Clause)
[![Build Test](https://github.com/scikit-hep/awkward/actions/workflows/test.yml/badge.svg?branch=main)](https://github.com/scikit-hep/awkward/actions/workflows/test.yml)

[![Scikit-HEP](https://scikit-hep.org/assets/images/Scikit--HEP-Project-blue.svg)](https://scikit-hep.org/)
[![NSF-1836650](https://img.shields.io/badge/NSF-1836650-blue.svg)](https://nsf.gov/awardsearch/showAward?AWD_ID=1836650)
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.4341376.svg)](https://doi.org/10.5281/zenodo.4341376)
[![Documentation](https://img.shields.io/badge/docs-online-success)](https://awkward-array.org/)
[![Gitter](https://img.shields.io/badge/chat-online-success)](https://gitter.im/Scikit-HEP/awkward-array)

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),

```python
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:

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

The result is

```python
[
    [[], [4], [4, 9]],
    [],
    [[4, 9, 16], [4, 9, 16, 25]]
]
```

The equivalent using only Python is

```python
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](https://numba.pydata.org/)'s JIT-compiled functions.

See the [Getting started](https://awkward-array.org/doc/main/getting-started/index.html) documentation on [awkward-array.org](https://awkward-array.org) for an introduction, including a [no-install demo](https://awkward-array.org/doc/main/getting-started/try-awkward-array.html) you can try in your web browser.

# Getting help

   * View the documentation on [awkward-array.org](https://awkward-array.org/).
   * Report bugs, request features, and ask for additional documentation on [GitHub Issues](https://github.com/scikit-hep/awkward/issues).
   * If you have a "How do I...?" question, start a [GitHub Discussion](https://github.com/scikit-hep/awkward/discussions) with category "Q&A".
   * Alternatively, ask about it on [StackOverflow with the [awkward-array] tag](https://stackoverflow.com/questions/tagged/awkward-array). Be sure to include tags for any other libraries that you use, such as Pandas or PyTorch.
   * To ask questions in real time, try the Gitter [Scikit-HEP/awkward-array](https://gitter.im/Scikit-HEP/awkward-array) chat room.

# Installation

Awkward Array can be installed from [PyPI](https://pypi.org/project/awkward) using pip:

```bash
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](https://conda-forge.org/docs/user/introduction.html#how-can-i-install-packages-from-conda-forge):

```bash
conda install -c conda-forge awkward
```


            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "awkward",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": null,
    "author": null,
    "author_email": "Jim Pivarski <pivarski@princeton.edu>",
    "download_url": "https://files.pythonhosted.org/packages/3d/32/408479603c58f511cfcedca696b7d9ba25ce0074e454b26e4f9b55a47d74/awkward-2.7.0.tar.gz",
    "platform": null,
    "description": "<a href=\"https://github.com/scikit-hep/awkward-1.0\">\n    <img src=\"https://github.com/scikit-hep/awkward-1.0/raw/main/docs-img/logo/logo-300px.png\">\n</a>\n\n\n[![PyPI version](https://badge.fury.io/py/awkward.svg)](https://pypi.org/project/awkward)\n[![Conda-Forge](https://img.shields.io/conda/vn/conda-forge/awkward)](https://github.com/conda-forge/awkward-feedstock)\n[![Python 3.9\u20123.13](https://img.shields.io/badge/python-3.9%E2%80%923.13-blue)](https://www.python.org)\n[![BSD-3 Clause License](https://img.shields.io/badge/license-BSD%203--Clause-blue.svg)](https://opensource.org/licenses/BSD-3-Clause)\n[![Build Test](https://github.com/scikit-hep/awkward/actions/workflows/test.yml/badge.svg?branch=main)](https://github.com/scikit-hep/awkward/actions/workflows/test.yml)\n\n[![Scikit-HEP](https://scikit-hep.org/assets/images/Scikit--HEP-Project-blue.svg)](https://scikit-hep.org/)\n[![NSF-1836650](https://img.shields.io/badge/NSF-1836650-blue.svg)](https://nsf.gov/awardsearch/showAward?AWD_ID=1836650)\n[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.4341376.svg)](https://doi.org/10.5281/zenodo.4341376)\n[![Documentation](https://img.shields.io/badge/docs-online-success)](https://awkward-array.org/)\n[![Gitter](https://img.shields.io/badge/chat-online-success)](https://gitter.im/Scikit-HEP/awkward-array)\n\nAwkward Array is a library for **nested, variable-sized data**, including arbitrary-length lists, records, mixed types, and missing data, using **NumPy-like idioms**.\n\nArrays 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.\n\n# Motivating example\n\nGiven an array of lists of objects with `x`, `y` fields (with nested lists in the `y` field),\n\n```python\nimport awkward as ak\n\narray = ak.Array([\n    [{\"x\": 1.1, \"y\": [1]}, {\"x\": 2.2, \"y\": [1, 2]}, {\"x\": 3.3, \"y\": [1, 2, 3]}],\n    [],\n    [{\"x\": 4.4, \"y\": [1, 2, 3, 4]}, {\"x\": 5.5, \"y\": [1, 2, 3, 4, 5]}]\n])\n```\n\nthe 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:\n\n```python\noutput = np.square(array[\"y\", ..., 1:])\n```\n\nThe result is\n\n```python\n[\n    [[], [4], [4, 9]],\n    [],\n    [[4, 9, 16], [4, 9, 16, 25]]\n]\n```\n\nThe equivalent using only Python is\n\n```python\noutput = []\nfor sublist in array:\n    tmp1 = []\n    for record in sublist:\n        tmp2 = []\n        for number in record[\"y\"][1:]:\n            tmp2.append(np.square(number))\n        tmp1.append(tmp2)\n    output.append(tmp1)\n```\n\nThe 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),\n\n   * the Awkward Array one-liner takes **1.5 seconds** to run and uses **2.1 GB** of memory,\n   * the equivalent using Python lists and dicts takes **140 seconds** to run and uses **22 GB** of memory.\n\nAwkward Array is even faster when used in [Numba](https://numba.pydata.org/)'s JIT-compiled functions.\n\nSee the [Getting started](https://awkward-array.org/doc/main/getting-started/index.html) documentation on [awkward-array.org](https://awkward-array.org) for an introduction, including a [no-install demo](https://awkward-array.org/doc/main/getting-started/try-awkward-array.html) you can try in your web browser.\n\n# Getting help\n\n   * View the documentation on [awkward-array.org](https://awkward-array.org/).\n   * Report bugs, request features, and ask for additional documentation on [GitHub Issues](https://github.com/scikit-hep/awkward/issues).\n   * If you have a \"How do I...?\" question, start a [GitHub Discussion](https://github.com/scikit-hep/awkward/discussions) with category \"Q&A\".\n   * Alternatively, ask about it on [StackOverflow with the [awkward-array] tag](https://stackoverflow.com/questions/tagged/awkward-array). Be sure to include tags for any other libraries that you use, such as Pandas or PyTorch.\n   * To ask questions in real time, try the Gitter [Scikit-HEP/awkward-array](https://gitter.im/Scikit-HEP/awkward-array) chat room.\n\n# Installation\n\nAwkward Array can be installed from [PyPI](https://pypi.org/project/awkward) using pip:\n\n```bash\npip install awkward\n```\n\nThe `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).\n\nAwkward Array is also available on [conda-forge](https://conda-forge.org/docs/user/introduction.html#how-can-i-install-packages-from-conda-forge):\n\n```bash\nconda install -c conda-forge awkward\n```\n\n",
    "bugtrack_url": null,
    "license": "BSD-3-Clause",
    "summary": "Manipulate JSON-like data with NumPy-like idioms.",
    "version": "2.7.0",
    "project_urls": {
        "Bug Tracker": "https://github.com/scikit-hep/awkward-1.0/issues",
        "Chat": "https://gitter.im/Scikit-HEP/awkward-array",
        "Discussions": "https://github.com/scikit-hep/awkward-1.0/discussions",
        "Documentation": "https://awkward-array.org",
        "Homepage": "https://github.com/scikit-hep/awkward-1.0",
        "Releases": "https://github.com/scikit-hep/awkward-1.0/releases",
        "Source Code": "https://github.com/scikit-hep/awkward-1.0"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f224bc9497221a4c635a1e71e294cb2e368bd2b506ad8853ae6782ffefbf6a4b",
                "md5": "a92fd6df267f54d85a48c28e6cc1dd07",
                "sha256": "e257f5d943313ca57ebe12c788a86a88a3fe133bcd5bebf04261de9047f6609d"
            },
            "downloads": -1,
            "filename": "awkward-2.7.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "a92fd6df267f54d85a48c28e6cc1dd07",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 863913,
            "upload_time": "2024-11-08T01:24:16",
            "upload_time_iso_8601": "2024-11-08T01:24:16.937395Z",
            "url": "https://files.pythonhosted.org/packages/f2/24/bc9497221a4c635a1e71e294cb2e368bd2b506ad8853ae6782ffefbf6a4b/awkward-2.7.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3d32408479603c58f511cfcedca696b7d9ba25ce0074e454b26e4f9b55a47d74",
                "md5": "9736db05c207518985e1ddc2fb320d2b",
                "sha256": "b85c5d3442745028ef17d3390dd2bef44ac59a0787e2a9a535481bae4b02eb78"
            },
            "downloads": -1,
            "filename": "awkward-2.7.0.tar.gz",
            "has_sig": false,
            "md5_digest": "9736db05c207518985e1ddc2fb320d2b",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 6149614,
            "upload_time": "2024-11-08T01:24:20",
            "upload_time_iso_8601": "2024-11-08T01:24:20.698715Z",
            "url": "https://files.pythonhosted.org/packages/3d/32/408479603c58f511cfcedca696b7d9ba25ce0074e454b26e4f9b55a47d74/awkward-2.7.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-11-08 01:24:20",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "scikit-hep",
    "github_project": "awkward-1.0",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "awkward"
}
        
Elapsed time: 1.29075s