## bigO
`bigO` automatically measures empirical computational complexity (in both time and space) of functions.
To use `bigO`, you just need to add a `@bigO.track` decorator to your function together with a "length" function (the "n").
You can then run your function as usual, ideally along a wide range of inputs, and `bigO` will report the computational
complexity of that function.
`bigO` accumulates its results in a file named `bigO_data.json` in the local directory;
you can then generate a graph of time and space complexity for each tracked function by running `python3 -m bigO.graph`.
### Demonstration
#### Inferring Time and Space Bounds
The file `test/facts.py` is a small program that demonstrates `bigO`.
```python
import bigO
def fact(x: int) -> int:
v = 1
for i in range(x):
v *= i
return v
@bigO.track(lambda xs: len(xs))
def factorialize(xs: list[int]) -> list[int]:
new_list = [fact(x) for x in xs]
return new_list
# Exercise the function - more inputs are better!
for i in range(30):
factorialize([i for i in range(i * 100)])
```
Now run the program as usual:
```bash
python3 test/facts.py
```
Now you can easily generate a graph of all tracked functions. Just run the following command in the same directory.
```bash
python3 -m bigO
```
This command creates the file `bigO.pdf` that contains graphs like this:

#### Verifying Time and Space Bounds
`bigO` will also verify declared bounds of functions. The file `test/facts_bounds.py` declares
`factorialize` as follows:
```python
@bigO.bounds(lambda xs: len(xs),
time="O(n*log(n))",
mem="O(n)")
def factorialize(xs: list[int]) -> list[int]:
...
```
Running
```bash
python3 -m bigO
```
now creates this plot, showing that the timing data matches a worse bound than the declared bound
and that the memory data matches the declared bound:

The analysis currently supports these performance models:
`O(1)`, `O(log(log(n)))`, `O(log(n))`, `O(log(n)**2)`, `O(log(n)**3)`, `O(sqrt(n))`, `O(n)`, `O(n*log(n))`, `O(n**2)`, `O(n**3)`, `O(n**k)`, and `O(2**n)`. It is trivial to add additional forms.
#### Lightweight A/B Performance Experiments
`bigO` also lets you run light-weight A/B performance tests. The file `tests/test_ab_sort.py` demonstrates this.
It includes two sorting functions:
```python
import random
import numpy as np
from bigO.bigO import ab_test
def insertion_sort(arr: np.ndarray) -> np.ndarray:
...
@ab_test(lambda x: len(x), alt=insertion_sort)
def quick_sort(arr: np.ndarray) -> np.ndarray:
...
for i in range(200):
quick_sort(np.random.rand(random.randint(1, 100)))
```
The `quick_sort` function is annotated to indicate the `bigO` should
compare the time and memory of that function to `insertion_sort`. At run time,
`bigO` will randomly select which of the two functions to run on each call to `quick_sort`.
After running the program,
```bash
python3 -m bigO
```
compares the running times across the input size range, identifying segments where one
function performs statistically significantly better than the other, as in the following,
which shows smoothed performance curves, shaded regions where one function is better than the other, as
well as the p-values for each segment's statistical test.

#### Verifying Hard Limits on Time, Space, and Input Size
`bigO` also lets you verify at run time that function calls do not exceed hard limits on
time, memory, or input size. The file `test/test_limits_insertion_sort.py` demonstrates
this:
```python
@limits(len,
time=0.1,
mem=1_000_000,
length=1800)
def insertion_sort(arr: np.ndarray) -> np.ndarray:
...
```
After running that program
```bash
python3 -m bigO
```
produces the following plots, showing the histograms of those metrics, as well as the
specified limits.

You can also specify only one or two of the limits instead of all three.
### Technical Details
#### Curve-fitting
`bigO`'s curve-fitting based approach is directly inspired by
["Measuring Empirical Computational
Complexity"](https://theory.stanford.edu/~aiken/publications/papers/fse07.pdf)
by Goldsmith et al., FSE 2007, using log-log plots to fit a power-law distribution.
Unlike that work, `bigO` also measures space complexity by
tracking memory allocations during function execution.
In addition, `bigO` uses a more general curve fitting approach that can handle
complexity classes that do not follow the power law, and it uses
the [AIC](https://en.wikipedia.org/wiki/Akaike_information_criterion) to
select the best model. Further, `bigO` measures the statistical significance of its complexity inference
results via p-values computed by the technique outlined in [An Empirical Investigation of Statistical Significance in NLP"](https://aclanthology.org/D12-1091.pdf) by Berg-Kirkpatrick, Burkett, and Klein, Joint Conference on Empirical Methods in Natural Language Processing and Computational Natural 2012.
For A/B testing, `bigO` smooths the performance curves for the two functions, segments the input range by approximating crossover points for those curves, and then performs a standard permutation test to determine whether the different in performance between the function across that range is statistically significant. The test statistic is the area between the two curves, as approximated by numerical integration via the trapezoid rule.
A version of `bigO` matching the log-log approach of the paper above can be run as follows:
```bash
python3 -m bigO.graph
```
This command creates the file `bigO.pdf` that contains graphs like this:

Raw data
{
"_id": null,
"home_page": "https://github.com/plasma-umass/bigO",
"name": "bigO",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "performance, profiler",
"author": "Emery Berger",
"author_email": "Emery Berger <emery.berger@gmail.com>, Stephen Freund <sfreund@williams.edu>",
"download_url": null,
"platform": null,
"description": "## bigO\n\n`bigO` automatically measures empirical computational complexity (in both time and space) of functions.\nTo use `bigO`, you just need to add a `@bigO.track` decorator to your function together with a \"length\" function (the \"n\").\nYou can then run your function as usual, ideally along a wide range of inputs, and `bigO` will report the computational\ncomplexity of that function.\n\n`bigO` accumulates its results in a file named `bigO_data.json` in the local directory;\nyou can then generate a graph of time and space complexity for each tracked function by running `python3 -m bigO.graph`.\n\n### Demonstration\n\n#### Inferring Time and Space Bounds\n\nThe file `test/facts.py` is a small program that demonstrates `bigO`.\n\n```python\nimport bigO\n\ndef fact(x: int) -> int:\n v = 1\n for i in range(x):\n v *= i\n return v\n\n@bigO.track(lambda xs: len(xs))\ndef factorialize(xs: list[int]) -> list[int]:\n new_list = [fact(x) for x in xs]\n return new_list\n\n# Exercise the function - more inputs are better!\nfor i in range(30):\n factorialize([i for i in range(i * 100)])\n```\n\nNow run the program as usual:\n\n```bash\npython3 test/facts.py\n```\n\nNow you can easily generate a graph of all tracked functions. Just run the following command in the same directory.\n\n```bash\npython3 -m bigO\n```\n\nThis command creates the file `bigO.pdf` that contains graphs like this:\n\n\n\n#### Verifying Time and Space Bounds\n\n`bigO` will also verify declared bounds of functions. The file `test/facts_bounds.py` declares\n`factorialize` as follows:\n\n```python\n@bigO.bounds(lambda xs: len(xs),\n time=\"O(n*log(n))\",\n mem=\"O(n)\")\ndef factorialize(xs: list[int]) -> list[int]:\n ...\n```\n\nRunning\n```bash\npython3 -m bigO\n```\n\nnow creates this plot, showing that the timing data matches a worse bound than the declared bound\nand that the memory data matches the declared bound:\n \n\n\nThe analysis currently supports these performance models:\n`O(1)`, `O(log(log(n)))`, `O(log(n))`, `O(log(n)**2)`, `O(log(n)**3)`, `O(sqrt(n))`, `O(n)`, `O(n*log(n))`, `O(n**2)`, `O(n**3)`, `O(n**k)`, and `O(2**n)`. It is trivial to add additional forms.\n\n#### Lightweight A/B Performance Experiments\n\n`bigO` also lets you run light-weight A/B performance tests. The file `tests/test_ab_sort.py` demonstrates this.\nIt includes two sorting functions:\n\n```python\nimport random\nimport numpy as np\nfrom bigO.bigO import ab_test\n\ndef insertion_sort(arr: np.ndarray) -> np.ndarray:\n ...\n\n@ab_test(lambda x: len(x), alt=insertion_sort)\ndef quick_sort(arr: np.ndarray) -> np.ndarray:\n ...\n\nfor i in range(200):\n quick_sort(np.random.rand(random.randint(1, 100)))\n```\n\nThe `quick_sort` function is annotated to indicate the `bigO` should \ncompare the time and memory of that function to `insertion_sort`. At run time,\n`bigO` will randomly select which of the two functions to run on each call to `quick_sort`.\n\nAfter running the program,\n\n```bash\npython3 -m bigO\n```\n\ncompares the running times across the input size range, identifying segments where one \nfunction performs statistically significantly better than the other, as in the following,\nwhich shows smoothed performance curves, shaded regions where one function is better than the other, as\nwell as the p-values for each segment's statistical test.\n\n\n\n#### Verifying Hard Limits on Time, Space, and Input Size\n\n`bigO` also lets you verify at run time that function calls do not exceed hard limits on\ntime, memory, or input size. The file `test/test_limits_insertion_sort.py` demonstrates\nthis:\n\n```python\n@limits(len, \n time=0.1, \n mem=1_000_000, \n length=1800)\ndef insertion_sort(arr: np.ndarray) -> np.ndarray:\n ...\n```\n\nAfter running that program\n\n```bash\npython3 -m bigO\n```\n\nproduces the following plots, showing the histograms of those metrics, as well as the\nspecified limits.\n\n\n\nYou can also specify only one or two of the limits instead of all three.\n\n### Technical Details\n\n#### Curve-fitting\n\n`bigO`'s curve-fitting based approach is directly inspired by\n[\"Measuring Empirical Computational\nComplexity\"](https://theory.stanford.edu/~aiken/publications/papers/fse07.pdf)\nby Goldsmith et al., FSE 2007, using log-log plots to fit a power-law distribution.\n\nUnlike that work, `bigO` also measures space complexity by\ntracking memory allocations during function execution. \n\nIn addition, `bigO` uses a more general curve fitting approach that can handle\ncomplexity classes that do not follow the power law, and it uses\nthe [AIC](https://en.wikipedia.org/wiki/Akaike_information_criterion) to\nselect the best model. Further, `bigO` measures the statistical significance of its complexity inference\nresults via p-values computed by the technique outlined in [An Empirical Investigation of Statistical Significance in NLP\"](https://aclanthology.org/D12-1091.pdf) by Berg-Kirkpatrick, Burkett, and Klein, Joint Conference on Empirical Methods in Natural Language Processing and Computational Natural 2012.\n\nFor A/B testing, `bigO` smooths the performance curves for the two functions, segments the input range by approximating crossover points for those curves, and then performs a standard permutation test to determine whether the different in performance between the function across that range is statistically significant. The test statistic is the area between the two curves, as approximated by numerical integration via the trapezoid rule.\n\nA version of `bigO` matching the log-log approach of the paper above can be run as follows:\n\n```bash\npython3 -m bigO.graph\n```\n\nThis command creates the file `bigO.pdf` that contains graphs like this:\n\n\n\n",
"bugtrack_url": null,
"license": null,
"summary": "Track asymptotic complexity in time and space.",
"version": "0.0.4",
"project_urls": {
"Homepage": "https://github.com/plasma-umass/bigO",
"Repository": "https://github.com/plasma-umass/bigO"
},
"split_keywords": [
"performance",
" profiler"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "c3bcceb621a87f0ea112646fc687c8a5d3a257007fc5698dde3ecb91796f7fda",
"md5": "b3cb2ec9c15186d5c8b092b7a29f5a00",
"sha256": "044c284a57cd831a645ddcb60198d6c756d95adcef24c82a0c3197272a524e0d"
},
"downloads": -1,
"filename": "bigo-0.0.4-cp310-cp310-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "b3cb2ec9c15186d5c8b092b7a29f5a00",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 37951,
"upload_time": "2025-02-26T19:56:40",
"upload_time_iso_8601": "2025-02-26T19:56:40.005369Z",
"url": "https://files.pythonhosted.org/packages/c3/bc/ceb621a87f0ea112646fc687c8a5d3a257007fc5698dde3ecb91796f7fda/bigo-0.0.4-cp310-cp310-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "1f5dfcba1f1eb66e7a3c63384b31f19324a6eb977a7c058916c7e8fbf4168929",
"md5": "d5a18729ff1425ab28ced8f73437095a",
"sha256": "89226616b6c189e17ca83b652bf4605542b07776c05eb91c2f2f3cc2deea606a"
},
"downloads": -1,
"filename": "bigo-0.0.4-cp310-cp310-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "d5a18729ff1425ab28ced8f73437095a",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 38127,
"upload_time": "2025-02-26T19:56:41",
"upload_time_iso_8601": "2025-02-26T19:56:41.854479Z",
"url": "https://files.pythonhosted.org/packages/1f/5d/fcba1f1eb66e7a3c63384b31f19324a6eb977a7c058916c7e8fbf4168929/bigo-0.0.4-cp310-cp310-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "87336beed55d5f9838608cebf6a6b383230c589cbefe68200e5f8e0ebb8dff38",
"md5": "33d06f71f944a52d6213f25396c81122",
"sha256": "3afc8e68ca7b8ec5f159a81b84e6f651a4bb11e671b0c01fcab7d4c896653225"
},
"downloads": -1,
"filename": "bigo-0.0.4-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "33d06f71f944a52d6213f25396c81122",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 90827,
"upload_time": "2025-02-26T19:56:43",
"upload_time_iso_8601": "2025-02-26T19:56:43.605823Z",
"url": "https://files.pythonhosted.org/packages/87/33/6beed55d5f9838608cebf6a6b383230c589cbefe68200e5f8e0ebb8dff38/bigo-0.0.4-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f6cf88000ee7b19ad805b01c379460ef4487612dd36f75161aac1939edc427c2",
"md5": "263d63877844f7a68947006a85fd0b45",
"sha256": "25e97a3543cdeb94fe938837e52ad99ccc506f6817674ce3a45b6d7443575515"
},
"downloads": -1,
"filename": "bigo-0.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "263d63877844f7a68947006a85fd0b45",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 91532,
"upload_time": "2025-02-26T19:56:45",
"upload_time_iso_8601": "2025-02-26T19:56:45.357231Z",
"url": "https://files.pythonhosted.org/packages/f6/cf/88000ee7b19ad805b01c379460ef4487612dd36f75161aac1939edc427c2/bigo-0.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7b0235344d21f5e962bbe284219232e79a950b41afe8ae2687e6d98d2049b095",
"md5": "fa81a44ffd0a65406d318a87b1afbf54",
"sha256": "316a7acb50e2f82cf38c20e0ccd010c9866eef0cb10cd05d4e80a1cea53f120f"
},
"downloads": -1,
"filename": "bigo-0.0.4-cp310-cp310-musllinux_1_2_i686.whl",
"has_sig": false,
"md5_digest": "fa81a44ffd0a65406d318a87b1afbf54",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 1169736,
"upload_time": "2025-02-26T19:56:47",
"upload_time_iso_8601": "2025-02-26T19:56:47.286504Z",
"url": "https://files.pythonhosted.org/packages/7b/02/35344d21f5e962bbe284219232e79a950b41afe8ae2687e6d98d2049b095/bigo-0.0.4-cp310-cp310-musllinux_1_2_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "dc6e96cc8165076221230b4e198d64d2808cca79ddc74121931e4554543219a2",
"md5": "7b4fd5de005c963662253e5745b5d35a",
"sha256": "6f0a5ef6bd1b835225da7449afa410f01913201d3df4a9c5095de110c038172b"
},
"downloads": -1,
"filename": "bigo-0.0.4-cp310-cp310-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "7b4fd5de005c963662253e5745b5d35a",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 1078386,
"upload_time": "2025-02-26T19:56:48",
"upload_time_iso_8601": "2025-02-26T19:56:48.897942Z",
"url": "https://files.pythonhosted.org/packages/dc/6e/96cc8165076221230b4e198d64d2808cca79ddc74121931e4554543219a2/bigo-0.0.4-cp310-cp310-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "027f13b2101039b703cf73609baeee160d6010726f8c4242e1c5fc6e75ce5731",
"md5": "d0464700b0432260db726241edbe3ad0",
"sha256": "5edf81038d4e2bfea2205fbaf807482f9ca23d75386a17d98a9ab5c0182f95ea"
},
"downloads": -1,
"filename": "bigo-0.0.4-cp310-cp310-win32.whl",
"has_sig": false,
"md5_digest": "d0464700b0432260db726241edbe3ad0",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 41213,
"upload_time": "2025-02-26T19:56:50",
"upload_time_iso_8601": "2025-02-26T19:56:50.167538Z",
"url": "https://files.pythonhosted.org/packages/02/7f/13b2101039b703cf73609baeee160d6010726f8c4242e1c5fc6e75ce5731/bigo-0.0.4-cp310-cp310-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "17b115951fdaad6b3d1fd407cd0ab1218677dfb0eba9290d684e856e5d925770",
"md5": "c31fbd4637812446efc2df3e957ae478",
"sha256": "e437fef5a038c80164f31041a520e90c55fb88894582f84e67b4f2e4ae739403"
},
"downloads": -1,
"filename": "bigo-0.0.4-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "c31fbd4637812446efc2df3e957ae478",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 41727,
"upload_time": "2025-02-26T19:56:51",
"upload_time_iso_8601": "2025-02-26T19:56:51.845673Z",
"url": "https://files.pythonhosted.org/packages/17/b1/15951fdaad6b3d1fd407cd0ab1218677dfb0eba9290d684e856e5d925770/bigo-0.0.4-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e93a77fbfd946fb66c4a8851574a058f085111bff9c39405e8fc65b264d856de",
"md5": "9ebe9daf211b8e8034664d5c8b0492c3",
"sha256": "91a45f37d6ed7ca37f2f0fdeced89ae66d44f04756040f0c6e2998f6dfece6c9"
},
"downloads": -1,
"filename": "bigo-0.0.4-cp311-cp311-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "9ebe9daf211b8e8034664d5c8b0492c3",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 37950,
"upload_time": "2025-02-26T19:56:52",
"upload_time_iso_8601": "2025-02-26T19:56:52.789763Z",
"url": "https://files.pythonhosted.org/packages/e9/3a/77fbfd946fb66c4a8851574a058f085111bff9c39405e8fc65b264d856de/bigo-0.0.4-cp311-cp311-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "112eebdd9d91bc7b6deba5c78f8f4f38d17c2bc2bb4ae7800952b8eab500402f",
"md5": "d02062822414cfd22db618b8de4d6d56",
"sha256": "4808914fc904d9665618af4a837d9fe5968c12912e7760477aeb46c3946d350a"
},
"downloads": -1,
"filename": "bigo-0.0.4-cp311-cp311-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "d02062822414cfd22db618b8de4d6d56",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 38130,
"upload_time": "2025-02-26T19:56:53",
"upload_time_iso_8601": "2025-02-26T19:56:53.754004Z",
"url": "https://files.pythonhosted.org/packages/11/2e/ebdd9d91bc7b6deba5c78f8f4f38d17c2bc2bb4ae7800952b8eab500402f/bigo-0.0.4-cp311-cp311-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ffd311258ee72da848f1aa17f45403ae42b8c49ad932de4f100e83f84eddfc1b",
"md5": "5a1a400c8ff96d8976ee781e50ae4cbf",
"sha256": "5e548f92a861dcec047c654733cba478d42d0b344decdc9dc68c055967a35ce5"
},
"downloads": -1,
"filename": "bigo-0.0.4-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "5a1a400c8ff96d8976ee781e50ae4cbf",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 90846,
"upload_time": "2025-02-26T19:56:54",
"upload_time_iso_8601": "2025-02-26T19:56:54.768693Z",
"url": "https://files.pythonhosted.org/packages/ff/d3/11258ee72da848f1aa17f45403ae42b8c49ad932de4f100e83f84eddfc1b/bigo-0.0.4-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "83e1c0e439a3146c3b3c904448ca399d59b2f124183fa5d8e25d47a2630aabaf",
"md5": "0970731b9f4bcbff539c66c99c0214f1",
"sha256": "befe2b7f305c977d1094f31cf49fe51df32adbd74d4389a8479e83a13efb4ad5"
},
"downloads": -1,
"filename": "bigo-0.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "0970731b9f4bcbff539c66c99c0214f1",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 91554,
"upload_time": "2025-02-26T19:56:56",
"upload_time_iso_8601": "2025-02-26T19:56:56.593083Z",
"url": "https://files.pythonhosted.org/packages/83/e1/c0e439a3146c3b3c904448ca399d59b2f124183fa5d8e25d47a2630aabaf/bigo-0.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "fe331ec3bd5a12a4b70f0d52183d8de1eccb9cfbb1106f62478b997fc7dcb76b",
"md5": "9f1f5ac5381f49f3350bbe8945c6564b",
"sha256": "05addecfe022027e876d618f3672a96c20e8cfa48e273df1571d654cb6bcb546"
},
"downloads": -1,
"filename": "bigo-0.0.4-cp311-cp311-musllinux_1_2_i686.whl",
"has_sig": false,
"md5_digest": "9f1f5ac5381f49f3350bbe8945c6564b",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 1169755,
"upload_time": "2025-02-26T19:56:57",
"upload_time_iso_8601": "2025-02-26T19:56:57.889858Z",
"url": "https://files.pythonhosted.org/packages/fe/33/1ec3bd5a12a4b70f0d52183d8de1eccb9cfbb1106f62478b997fc7dcb76b/bigo-0.0.4-cp311-cp311-musllinux_1_2_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f6330df9cdbd345250d99a946590f6b3b126e71c5fc6874b9adf5bfa52e133ac",
"md5": "4fbe39a9396e98e236442976d1b7aa8f",
"sha256": "f0b7b20f488e3bab00d352b0f917fc030ddb3b8e70304a41b952ec826c5110f1"
},
"downloads": -1,
"filename": "bigo-0.0.4-cp311-cp311-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "4fbe39a9396e98e236442976d1b7aa8f",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 1078440,
"upload_time": "2025-02-26T19:56:59",
"upload_time_iso_8601": "2025-02-26T19:56:59.322702Z",
"url": "https://files.pythonhosted.org/packages/f6/33/0df9cdbd345250d99a946590f6b3b126e71c5fc6874b9adf5bfa52e133ac/bigo-0.0.4-cp311-cp311-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "672288fce6d85f4d6b0a6c58ec08285e78efaff45296dfe25dd6e216c53afcdb",
"md5": "ed22b22aa857fc7b74d9c73e388b1208",
"sha256": "9a5cdaf463bd7511ed3e5bbfa7bb3407973232d350037543963a891922da113b"
},
"downloads": -1,
"filename": "bigo-0.0.4-cp311-cp311-win32.whl",
"has_sig": false,
"md5_digest": "ed22b22aa857fc7b74d9c73e388b1208",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 41214,
"upload_time": "2025-02-26T19:57:01",
"upload_time_iso_8601": "2025-02-26T19:57:01.420432Z",
"url": "https://files.pythonhosted.org/packages/67/22/88fce6d85f4d6b0a6c58ec08285e78efaff45296dfe25dd6e216c53afcdb/bigo-0.0.4-cp311-cp311-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "1214b6f3ea5bf50589cb29036193b15c155347d2e7539a4b4ce6a2907b6b4170",
"md5": "6252b8a45111c8e4ded754300620ee04",
"sha256": "aa853cdd398a4dfa1a0e894a4e44911948cf6809e259327d32c2f00b259da871"
},
"downloads": -1,
"filename": "bigo-0.0.4-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "6252b8a45111c8e4ded754300620ee04",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 41722,
"upload_time": "2025-02-26T19:57:02",
"upload_time_iso_8601": "2025-02-26T19:57:02.481255Z",
"url": "https://files.pythonhosted.org/packages/12/14/b6f3ea5bf50589cb29036193b15c155347d2e7539a4b4ce6a2907b6b4170/bigo-0.0.4-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "6e4437a20bbb313f52f2d57093893c154df5ee1b7fc55c8489952d10785b5c5b",
"md5": "320deae31c71ddf4148eec298707a240",
"sha256": "292abe46ae17c18de851b2e068a239ad061a89ade9226184556a9dd0179037ec"
},
"downloads": -1,
"filename": "bigo-0.0.4-cp312-cp312-macosx_10_13_x86_64.whl",
"has_sig": false,
"md5_digest": "320deae31c71ddf4148eec298707a240",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 37921,
"upload_time": "2025-02-26T19:57:03",
"upload_time_iso_8601": "2025-02-26T19:57:03.473460Z",
"url": "https://files.pythonhosted.org/packages/6e/44/37a20bbb313f52f2d57093893c154df5ee1b7fc55c8489952d10785b5c5b/bigo-0.0.4-cp312-cp312-macosx_10_13_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "5922321af6332d1987622ddce813e4ad11ba323afcf44768cd8fa0fdc59f89dc",
"md5": "34cbc4fb3199110ff81d00e103051f33",
"sha256": "2eaf1962108b3d90a5695118f9445ba4b42e4c3cfb69e255be16ffababd1b6a9"
},
"downloads": -1,
"filename": "bigo-0.0.4-cp312-cp312-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "34cbc4fb3199110ff81d00e103051f33",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 38120,
"upload_time": "2025-02-26T19:57:05",
"upload_time_iso_8601": "2025-02-26T19:57:05.338125Z",
"url": "https://files.pythonhosted.org/packages/59/22/321af6332d1987622ddce813e4ad11ba323afcf44768cd8fa0fdc59f89dc/bigo-0.0.4-cp312-cp312-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "1c1a88c9567268b2f3d0942ed1fb3ec4b7db233fe7bcd8a53dfc5388eb06e4fa",
"md5": "ffbd2579b6823728fb04a88714111ae8",
"sha256": "345cdf8c9aec5f0dfe445a899c1996c8717d3588107af747fdc43ebe21dcfced"
},
"downloads": -1,
"filename": "bigo-0.0.4-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "ffbd2579b6823728fb04a88714111ae8",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 90728,
"upload_time": "2025-02-26T19:57:07",
"upload_time_iso_8601": "2025-02-26T19:57:07.337460Z",
"url": "https://files.pythonhosted.org/packages/1c/1a/88c9567268b2f3d0942ed1fb3ec4b7db233fe7bcd8a53dfc5388eb06e4fa/bigo-0.0.4-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "4b4d3a9664d30438b941e850ebce0b1c8724a81d0f04af4cc2f5c978492057c7",
"md5": "eeaf6da7a4b0250c6d4ee4954c373c0a",
"sha256": "b445772f52452deafd4858b0b730d2268beebfa50ec2753519591f4b4cbb08d2"
},
"downloads": -1,
"filename": "bigo-0.0.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "eeaf6da7a4b0250c6d4ee4954c373c0a",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 91441,
"upload_time": "2025-02-26T19:57:09",
"upload_time_iso_8601": "2025-02-26T19:57:09.802648Z",
"url": "https://files.pythonhosted.org/packages/4b/4d/3a9664d30438b941e850ebce0b1c8724a81d0f04af4cc2f5c978492057c7/bigo-0.0.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "5d7d84f8a2cd0eddceebc4878b18e08d2bcd0d24ac3a0e01c5de8a11a95e1130",
"md5": "0d8cedab7aa835859555807552d9bad8",
"sha256": "b04f21fb0e05f51aed2124bf143dfe779ce3db7ef56e4cfa6a43ee72bb5932b6"
},
"downloads": -1,
"filename": "bigo-0.0.4-cp312-cp312-musllinux_1_2_i686.whl",
"has_sig": false,
"md5_digest": "0d8cedab7aa835859555807552d9bad8",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 1169656,
"upload_time": "2025-02-26T19:57:11",
"upload_time_iso_8601": "2025-02-26T19:57:11.088389Z",
"url": "https://files.pythonhosted.org/packages/5d/7d/84f8a2cd0eddceebc4878b18e08d2bcd0d24ac3a0e01c5de8a11a95e1130/bigo-0.0.4-cp312-cp312-musllinux_1_2_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "d5a6f582a9023839204ac1406c584493aad7af31633b4c349e44d1b59834cb72",
"md5": "c53b796d2e1e64febdb2c2fcb590816a",
"sha256": "6bf117addde8462b6db7dbd11b0568677837e1e710e91b727a308d6a4f08fa8b"
},
"downloads": -1,
"filename": "bigo-0.0.4-cp312-cp312-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "c53b796d2e1e64febdb2c2fcb590816a",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 1078353,
"upload_time": "2025-02-26T19:57:12",
"upload_time_iso_8601": "2025-02-26T19:57:12.437554Z",
"url": "https://files.pythonhosted.org/packages/d5/a6/f582a9023839204ac1406c584493aad7af31633b4c349e44d1b59834cb72/bigo-0.0.4-cp312-cp312-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7f7634ae8a66758e2e2254e1ca71135d8f8fcc3daa308f36d49b72459a204617",
"md5": "7d1a6c2c54d34da9f0db71ec6f3beaf9",
"sha256": "571bf77c2e30f1ffcf8cba657ea4c4d2648dbfeed74e56b3ae20f9bb90b8789c"
},
"downloads": -1,
"filename": "bigo-0.0.4-cp312-cp312-win32.whl",
"has_sig": false,
"md5_digest": "7d1a6c2c54d34da9f0db71ec6f3beaf9",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 41217,
"upload_time": "2025-02-26T19:57:13",
"upload_time_iso_8601": "2025-02-26T19:57:13.647360Z",
"url": "https://files.pythonhosted.org/packages/7f/76/34ae8a66758e2e2254e1ca71135d8f8fcc3daa308f36d49b72459a204617/bigo-0.0.4-cp312-cp312-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "fea400bb8708ac2eee72b3c5a7e0b08c4df3abe6b233083c9c7a30e4a8c509cb",
"md5": "81919b1e4d4c481c9708b7e85ffe72c4",
"sha256": "bf7ff8f2f4f33b34c53e2802c1cebeb193f66f477a48a06a11e09a3a8a2ab49e"
},
"downloads": -1,
"filename": "bigo-0.0.4-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "81919b1e4d4c481c9708b7e85ffe72c4",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 41738,
"upload_time": "2025-02-26T19:57:14",
"upload_time_iso_8601": "2025-02-26T19:57:14.608664Z",
"url": "https://files.pythonhosted.org/packages/fe/a4/00bb8708ac2eee72b3c5a7e0b08c4df3abe6b233083c9c7a30e4a8c509cb/bigo-0.0.4-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "be0feee4c257e18fb0fbbdb9b94da3b9a441f3cdf07d46992434a6583cbcf57d",
"md5": "26993782805694c5e74fb959eb480b15",
"sha256": "91317e72e4e33e6efce715c01393168e675588ce23d506f11b4da42f61940a08"
},
"downloads": -1,
"filename": "bigo-0.0.4-cp39-cp39-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "26993782805694c5e74fb959eb480b15",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 37945,
"upload_time": "2025-02-26T19:57:15",
"upload_time_iso_8601": "2025-02-26T19:57:15.601333Z",
"url": "https://files.pythonhosted.org/packages/be/0f/eee4c257e18fb0fbbdb9b94da3b9a441f3cdf07d46992434a6583cbcf57d/bigo-0.0.4-cp39-cp39-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "640748ea9848a01efb9f5635fc80ebb57bfae3e1a741ba46fe3a420a60e06d1d",
"md5": "37758a6d3c09d49bfde24530ceed177d",
"sha256": "da73f0e23a794e2ef4a229886b2eb2bfa280f067fada8c8392d8f2676cda16a6"
},
"downloads": -1,
"filename": "bigo-0.0.4-cp39-cp39-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "37758a6d3c09d49bfde24530ceed177d",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 38127,
"upload_time": "2025-02-26T19:57:17",
"upload_time_iso_8601": "2025-02-26T19:57:17.250832Z",
"url": "https://files.pythonhosted.org/packages/64/07/48ea9848a01efb9f5635fc80ebb57bfae3e1a741ba46fe3a420a60e06d1d/bigo-0.0.4-cp39-cp39-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7bb1decb60392f23a5907d759d07fd616c6e3671aaaae727256b512c53c7016e",
"md5": "7fb40b1a1b33923092236813a234d06a",
"sha256": "7665edfc602beac57acf6e2e753f399bd12a69cbaaa642a4e913bf3519aae76b"
},
"downloads": -1,
"filename": "bigo-0.0.4-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "7fb40b1a1b33923092236813a234d06a",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 90599,
"upload_time": "2025-02-26T19:57:18",
"upload_time_iso_8601": "2025-02-26T19:57:18.337762Z",
"url": "https://files.pythonhosted.org/packages/7b/b1/decb60392f23a5907d759d07fd616c6e3671aaaae727256b512c53c7016e/bigo-0.0.4-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2385f07fbd298a17e29a3f176c00526aa9b9bf395f57a00102076cdc423e728c",
"md5": "80aef1c6d6a94d54aeeac0da765c4439",
"sha256": "f480ab9ebddaf429a15e5fdfafc895c181e7baf9b40ba4e0cd25852df1d978d4"
},
"downloads": -1,
"filename": "bigo-0.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "80aef1c6d6a94d54aeeac0da765c4439",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 91282,
"upload_time": "2025-02-26T19:57:19",
"upload_time_iso_8601": "2025-02-26T19:57:19.392556Z",
"url": "https://files.pythonhosted.org/packages/23/85/f07fbd298a17e29a3f176c00526aa9b9bf395f57a00102076cdc423e728c/bigo-0.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9ae18e4ee2f14c549dadb6e65935d75a60471d56a9999c4ba5815c3f1cad80bf",
"md5": "a91be107b84091f92b2d8dbc8a42ce24",
"sha256": "b8c079f336fadf61414faaf3a1fa588e12758ef364531b6d181a341e0dcdbe28"
},
"downloads": -1,
"filename": "bigo-0.0.4-cp39-cp39-musllinux_1_2_i686.whl",
"has_sig": false,
"md5_digest": "a91be107b84091f92b2d8dbc8a42ce24",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 1169503,
"upload_time": "2025-02-26T19:57:21",
"upload_time_iso_8601": "2025-02-26T19:57:21.337249Z",
"url": "https://files.pythonhosted.org/packages/9a/e1/8e4ee2f14c549dadb6e65935d75a60471d56a9999c4ba5815c3f1cad80bf/bigo-0.0.4-cp39-cp39-musllinux_1_2_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "960a4aa0d3c4edc458b51a39be14ece01efeb98f4efe45a26fd7a6893ac06ca6",
"md5": "273bfa2a980c4474188d6dcd766586bc",
"sha256": "3c9b9d6578fe3293397206fb1f182c000e847601573534710fd794067499705c"
},
"downloads": -1,
"filename": "bigo-0.0.4-cp39-cp39-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "273bfa2a980c4474188d6dcd766586bc",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 1078133,
"upload_time": "2025-02-26T19:57:22",
"upload_time_iso_8601": "2025-02-26T19:57:22.700544Z",
"url": "https://files.pythonhosted.org/packages/96/0a/4aa0d3c4edc458b51a39be14ece01efeb98f4efe45a26fd7a6893ac06ca6/bigo-0.0.4-cp39-cp39-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "0f279714db4db64590efa08507a858bc65eaf8720c492622f73768aeb41a3890",
"md5": "319b57d1e984cea84b44b3ad56e7964d",
"sha256": "f4ee1681a541fb615d81993bce1a7f2bf115ab7412cdb83b3a923668b300964a"
},
"downloads": -1,
"filename": "bigo-0.0.4-cp39-cp39-win32.whl",
"has_sig": false,
"md5_digest": "319b57d1e984cea84b44b3ad56e7964d",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 41220,
"upload_time": "2025-02-26T19:57:23",
"upload_time_iso_8601": "2025-02-26T19:57:23.856392Z",
"url": "https://files.pythonhosted.org/packages/0f/27/9714db4db64590efa08507a858bc65eaf8720c492622f73768aeb41a3890/bigo-0.0.4-cp39-cp39-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "5a106fc23e9df48fd856146a1db3cc2ac6415ab27bbab8c28619f9151d92edff",
"md5": "3567171a3c11de9c6c0cf8ee6cbd3835",
"sha256": "abd5face5ce356beaa2d8b2afe2e90580c597f164104a4652873dd9824b122b6"
},
"downloads": -1,
"filename": "bigo-0.0.4-cp39-cp39-win_amd64.whl",
"has_sig": false,
"md5_digest": "3567171a3c11de9c6c0cf8ee6cbd3835",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 41729,
"upload_time": "2025-02-26T19:57:24",
"upload_time_iso_8601": "2025-02-26T19:57:24.847972Z",
"url": "https://files.pythonhosted.org/packages/5a/10/6fc23e9df48fd856146a1db3cc2ac6415ab27bbab8c28619f9151d92edff/bigo-0.0.4-cp39-cp39-win_amd64.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-02-26 19:56:40",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "plasma-umass",
"github_project": "bigO",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "bigo"
}