{ "info": { "author": "Wessel Bruinsma", "author_email": "wessel.p.bruinsma@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "# [LAB](http://github.com/wesselb/lab)\n\n[![CI](https://github.com/wesselb/lab/workflows/CI/badge.svg?branch=master)](https://github.com/wesselb/lab/actions?query=workflow%3ACI)\n[![Coverage Status](https://coveralls.io/repos/github/wesselb/lab/badge.svg?branch=master&service=github)](https://coveralls.io/github/wesselb/lab?branch=master)\n[![Latest Docs](https://img.shields.io/badge/docs-latest-blue.svg)](https://wesselb.github.io/lab)\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n\nA generic interface for linear algebra backends: code it once, run it on any \nbackend\n\n* [Requirements and Installation](#requirements-and-installation)\n* [Basic Usage](#basic-usage)\n* [List of Types](#list-of-types)\n - [General](#general)\n - [NumPy](#numpy)\n - [AutoGrad](#autograd)\n - [TensorFlow](#tensorflow)\n - [PyTorch](#pytorch)\n - [JAX](#jax)\n* [List of Methods](#list-of-methods)\n - [Constants](#constants)\n - [Generic](#generic)\n - [Linear Algebra](#linear-algebra)\n - [Random](#random)\n - [Shaping](#shaping)\n* [Devices](#devices)\n* [Lazy Shapes](#lazy-shapes)\n* [Random Numbers](#random-numbers)\n* [Control Flow Cache](#control-flow-cache)\n\n## Requirements and Installation\n\nSee [the instructions here](https://gist.github.com/wesselb/4b44bf87f3789425f96e26c4308d0adc).\nThen simply\n\n```\npip install backends\n```\n\n## Basic Usage\n\nThe basic use case for the package is to write code that automatically \ndetermines the backend to use depending on the types of its arguments.\n\nExample:\n\n```python\nimport lab as B\nimport lab.autograd # Load the AutoGrad extension.\nimport lab.torch # Load the PyTorch extension.\nimport lab.tensorflow # Load the TensorFlow extension.\nimport lab.jax # Load the JAX extension.\n\n\ndef objective(matrix):\n outer_product = B.matmul(matrix, matrix, tr_b=True)\n return B.mean(outer_product)\n```\n\nThe AutoGrad, PyTorch, TensorFlow, and JAX extensions are not loaded automatically to\nnot enforce a dependency on all three frameworks.\nAn extension can alternatively be loaded via `import lab.autograd as B`.\n\nRun it with NumPy and AutoGrad:\n\n```python\n>>> import autograd.numpy as np\n\n>>> objective(B.randn(np.float64, 2, 2))\n0.15772589216756833\n\n>>> grad(objective)(B.randn(np.float64, 2, 2))\narray([[ 0.23519042, -1.06282928],\n [ 0.23519042, -1.06282928]])\n```\n\nRun it with TensorFlow:\n```python\n>>> import tensorflow as tf\n\n>>> objective(B.randn(tf.float64, 2, 2))\n\n```\n\nRun it with PyTorch:\n```python\n>>> import torch\n\n>>> objective(B.randn(torch.float64, 2, 2))\ntensor(1.9557, dtype=torch.float64)\n```\n\nRun it with JAX:\n```python\n>>> import jax\n\n>>> import jax.numpy as jnp\n\n>>> jax.jit(objective)(B.randn(jnp.float32, 2, 2))\nDeviceArray(0.3109299, dtype=float32)\n\n>>> jax.jit(jax.grad(objective))(B.randn(jnp.float32, 2, 2))\nDeviceArray([[ 0.2525182, -1.26065 ],\n [ 0.2525182, -1.26065 ]], dtype=float32)\n```\n\n## List of Types\nThis section lists all available types, which can be used to check types of \nobjects or extend functions.\n\nExample:\n\n```python\n>>> import lab as B\n\n>>> from plum import List, Tuple\n\n>>> import numpy as np\n\n>>> isinstance([1., np.array([1., 2.])], List(B.NPNumeric))\nTrue\n\n>>> isinstance([1., np.array([1., 2.])], List(B.TFNumeric))\nFalse\n\n>>> import tensorflow as tf\n\n>>> import lab.tensorflow\n\n>>> isinstance((tf.constant(1.), tf.ones(5)), Tuple(B.TFNumeric))\nTrue\n```\n\n### General\n\n```\nInt # Integers\nFloat # Floating-point numbers\nComplex # Complex numbers\nBool # Booleans\nNumber # Numbers\nNumeric # Numerical objects, including booleans\nDType # Data type\nFramework # Anything accepted by supported frameworks\nDevice # Any device type\n```\n\n### NumPy\n\n```\nNPNumeric\nNPDType\nNPRandomState\n \nNP # Anything NumPy\n```\n\n### AutoGrad\n\n```\nAGNumeric\nAGDType\nAGRandomState\n \nAG # Anything AutoGrad\n```\n\n### TensorFlow\n\n```\nTFNumeric\nTFDType\nTFRandomState\nTFDevice\n \nTF # Anything TensorFlow\n```\n\n\n### PyTorch\n\n```\nTorchNumeric\nTorchDType\nTorchDevice\nTorchRandomState\n \nTorch # Anything PyTorch\n```\n\n\n### JAX\n\n```\nJAXNumeric\nJAXDType\nJAXDevice\nJAXRandomState\n \nJAX # Anything JAX\n```\n\n\n## List of Methods\nThis section lists all available constants and methods.\n\n*\n Arguments *must* be given as arguments and keyword arguments *must* be \n given as keyword arguments.\n For example, `sum(tensor, axis=1)` is valid, but `sum(tensor, 1)` is not.\n \n* The names of arguments are indicative of their function:\n - `a`, `b`, and `c` indicate general tensors.\n -\n `dtype` indicates a data type. E.g, `np.float32` or `tf.float64`; and\n `rand(np.float32)` creates a NumPy random number, whereas\n `rand(tf.float64)` creates a TensorFlow random number.\n Data types are always given as the first argument.\n -\n `shape` indicates a shape.\n The dimensions of a shape are always given as separate arguments to \n the function.\n E.g., `reshape(tensor, 2, 2)` is valid, but `reshape(tensor, (2, 2))`\n is not.\n -\n `axis` indicates an axis over which the function may perform its action.\n An axis is always given as a keyword argument.\n -\n `device` refers to a device on which a tensor can placed, which can\n either be a framework-specific type or a string, e.g. `\"cpu\"`.\n -\n `ref` indicates a *reference tensor* from which properties, like its\n shape and data type, will be used. E.g., `zeros(tensor)` creates a \n tensor full of zeros of the same shape and data type as `tensor`.\n \nSee the documentation for more detailed descriptions of each function. \n\n### Special Variables\n```\ndefault_dtype # Default data type.\nepsilon # Magnitude of diagonal to regularise matrices with.\ncholesky_retry_factor # Retry the Cholesky, increasing `epsilon` by a factor at most this.\n```\n\n### Constants\n```\nnan\npi\nlog_2_pi\n```\n\n### Data Types\n```\ndtype(a)\ndtype_float(dtype)\ndtype_float(a)\ndtype_int(dtype)\ndtype_int(a)\n\npromote_dtypes(*dtype)\nissubdtype(dtype1, dtype2)\n```\n\n### Generic\n```\nisabstract(a)\njit(f, **kw_args)\n\nisnan(a)\nreal(a)\nimag(a)\n\ndevice(a)\non_device(device)\non_device(a)\nset_global_device(device)\nto_active_device(a)\n\nzeros(dtype, *shape)\nzeros(*shape)\nzeros(ref)\n\nones(dtype, *shape)\nones(*shape)\nones(ref)\n\nzero(dtype)\nzero(*refs)\n\none(dtype)\none(*refs)\n\neye(dtype, *shape)\neye(*shape)\neye(ref)\n\nlinspace(dtype, a, b, num)\nlinspace(a, b, num)\n\nrange(dtype, start, stop, step)\nrange(dtype, stop)\nrange(dtype, start, stop)\nrange(start, stop, step)\nrange(start, stop)\nrange(stop)\n\ncast(dtype, a)\n\nidentity(a)\nround(a)\nfloor(a)\nceil(a)\nnegative(a)\nabs(a)\nsign(a)\nsqrt(a)\nexp(a)\nlog(a)\nlog1p(a)\nsin(a)\narcsin(a)\ncos(a)\narccos(a)\ntan(a)\narctan(a)\ntanh(a)\narctanh(a)\nerf(a)\nsigmoid(a)\nsoftplus(a)\nrelu(a)\n\nadd(a, b)\nsubtract(a, b)\nmultiply(a, b)\ndivide(a, b)\npower(a, b)\nminimum(a, b)\nmaximum(a, b)\nleaky_relu(a, alpha)\n\nsoftmax(a, axis=None)\n\nmin(a, axis=None, squeeze=True)\nmax(a, axis=None, squeeze=True)\nsum(a, axis=None, squeeze=True)\nprod(a, axis=None, squeeze=True)\nmean(a, axis=None, squeeze=True)\nstd(a, axis=None, squeeze=True)\nlogsumexp(a, axis=None, squeeze=True)\nall(a, axis=None, squeeze=True)\nany(a, axis=None, squeeze=True)\n\nnansum(a, axis=None, squeeze=True)\nnanprod(a, axis=None, squeeze=True)\nnanmean(a, axis=None, squeeze=True)\nnanstd(a, axis=None, squeeze=True)\n\nargmin(a, axis=None)\nargmax(a, axis=None)\n\nlt(a, b)\nle(a, b)\ngt(a, b)\nge(a, b)\neq(a, b)\nne(a, b)\n\nbvn_cdf(a, b, c)\n\ncond(condition, f_true, f_false, xs**)\nwhere(condition, a, b)\nscan(f, xs, *init_state)\n\nsort(a, axis=-1, descending=False)\nargsort(a, axis=-1, descending=False)\nquantile(a, q, axis=None)\n\nto_numpy(a)\njit_to_numpy(a) # Caches results for `B.jit`.\n```\n\n### Linear Algebra\n```\ntranspose(a, perm=None) (alias: t, T)\nmatmul(a, b, tr_a=False, tr_b=False) (alias: mm, dot)\neinsum(equation, *elements)\ntrace(a, axis1=0, axis2=1)\nkron(a, b)\nsvd(a, compute_uv=True)\neig(a, compute_eigvecs=True)\nsolve(a, b)\ninv(a)\npinv(a)\ndet(a) \nlogdet(a) \nexpm(a)\nlogm(a)\ncholesky(a) (alias: chol)\n\ncholesky_solve(a, b) (alias: cholsolve)\ntriangular_solve(a, b, lower_a=True) (alias: trisolve)\ntoeplitz_solve(a, b, c) (alias: toepsolve)\ntoeplitz_solve(a, c)\n\nouter(a, b)\nreg(a, diag=None, clip=True)\n\npw_dists2(a, b)\npw_dists2(a)\npw_dists(a, b)\npw_dists(a)\n\new_dists2(a, b)\new_dists2(a)\new_dists(a, b)\new_dists(a)\n\npw_sums2(a, b)\npw_sums2(a)\npw_sums(a, b)\npw_sums(a)\n\new_sums2(a, b)\new_sums2(a)\new_sums(a, b)\new_sums(a)\n```\n\n### Random\n```\nset_random_seed(seed) \ncreate_random_state(dtype, seed=0)\nglobal_random_state(dtype)\nglobal_random_state(a)\nset_global_random_state(state)\n\nrand(state, dtype, *shape)\nrand(dtype, *shape)\nrand(*shape)\nrand(state, ref)\nrand(ref)\n\nrandn(state, dtype, *shape)\nrandn(dtype, *shape)\nrandn(*shape)\nrandn(state, ref)\nrandn(ref)\n\nchoice(a, n)\nchoice(a)\n\nrandint(state, dtype, *shape, lower=0, upper)\nrandint(dtype, *shape, lower=0, upper)\nrandint(*shape, lower=0, upper)\nrandint(state, ref, lower=0, upper)\nrandint(ref, lower=0, upper)\n\nrandperm(state, dtype, n)\nrandperm(dtype, n)\nrandperm(n)\n```\n\n### Shaping\n```\nshape(a, *dims)\nrank(a)\nlength(a) (alias: size)\nis_scalar(a)\nexpand_dims(a, axis=0, times=1)\nsqueeze(a, axis=None)\nuprank(a, rank=2)\ndownrank(a, rank=2, preserve=False)\nbroadcast_to(a, *shape)\n\ndiag(a)\ndiag_extract(a)\ndiag_construct(a)\nflatten(a)\nvec_to_tril(a, offset=0)\ntril_to_vec(a, offset=0)\nstack(*elements, axis=0)\nunstack(a, axis=0, squeeze=True)\nreshape(a, *shape)\nconcat(*elements, axis=0)\nconcat2d(*rows)\ntile(a, *repeats)\ntake(a, indices_or_mask, axis=0)\nsubmatrix(a, indices_or_mask)\n```\n\n## Devices\nYou can get the device of a tensor with `B.device(a)`,\nand you can execute a computation on a device by entering `B.on_device(device)`\nas a context:\n\n```python\nwith B.on_device(\"gpu:0\"):\n a = B.randn(tf.float32, 2, 2)\n b = B.randn(tf.float32, 2, 2)\n c = a @ b\n```\n\nWithin such a context, a tensor that is not on the active device can be moved to the\nactive device with `B.to_active_device(a)`.\n\nYou can also globally set the active device with `B.set_global_device(\"gpu:0\")`.\n\n## Lazy Shapes\nIf a function is evaluated abstractly, then elements of the shape of a tensor, e.g.\n`B.shape(a)[0]`, may also be tensors, which can break dispatch.\nBy entering `B.lazy_shapes()`, shapes and elements of shapes will be wrapped in a custom \ntype to fix this issue.\n\n```python\nwith B.lazy_shapes():\n a = B.eye(2)\n print(type(B.shape(a)))\n # \n print(type(B.shape(a)[0]))\n # \n```\n\n## Random Numbers\nIf you call a random number generator without providing a random state, e.g.\n`B.randn(np.float32, 2)`, the global random state from the corresponding\nbackend is used.\nFor JAX, since there is no global random state, LAB provides a JAX global\nrandom state accessible through `B.jax_global_random_state` once `lab.jax`\nis loaded.\n\nIf you do not want to use a global random state but rather explicitly maintain\none, you can create a random state with `B.create_random_state` and then\npass this as the first argument to the random number generators.\nThe random number generators will then return a tuple containing the updated\nrandom state and the random result.\n\n```python\n# Create random state.\nstate = B.create_random_state(tf.float32, seed=0)\n\n# Generate two random arrays.\nstate, x = B.randn(state, tf.float32, 2)\nstate, y = B.randn(state, tf.float32, 2)\n```\n\n\n## Control Flow Cache\nComing soon!\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/wesselb/lab", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "backends", "package_url": "https://pypi.org/project/backends/", "platform": null, "project_url": "https://pypi.org/project/backends/", "project_urls": { "Homepage": "https://github.com/wesselb/lab" }, "release_url": "https://pypi.org/project/backends/1.4.25/", "requires_dist": null, "requires_python": ">=3.6", "summary": "A generic interface for linear algebra backends", "version": "1.4.25", "yanked": false, "yanked_reason": null }, "last_serial": 13781072, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "f5638a7a3225f8ed7f68b14bbd62b274", "sha256": "cc1e039bf586cb12f511a13b2bb8152bd998a195183b6f6edd3e1bc4d72a2da2" }, "downloads": -1, "filename": "backends-0.1.0.tar.gz", "has_sig": false, "md5_digest": "f5638a7a3225f8ed7f68b14bbd62b274", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42798, "upload_time": "2019-06-13T15:04:31", "upload_time_iso_8601": "2019-06-13T15:04:31.501769Z", "url": "https://files.pythonhosted.org/packages/2a/d0/6ea113f6956e96aacceb521a989e7cc4d4b4c6b984892d9a949d1649dca9/backends-0.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "f8e0ad0853dbe1bf3a06e674e843fea8", "sha256": "5a37ff907f0b4dd2e57440d294b3f1314ba13c4d833468b80775ce069cd93ef3" }, "downloads": -1, "filename": "backends-0.1.1.tar.gz", "has_sig": false, "md5_digest": "f8e0ad0853dbe1bf3a06e674e843fea8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42693, "upload_time": "2019-06-13T17:22:35", "upload_time_iso_8601": "2019-06-13T17:22:35.521155Z", "url": "https://files.pythonhosted.org/packages/1b/09/04d1cfd631a003699b88f03d17390ca70914868007d2ab44f950f0992027/backends-0.1.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "b6e50c4ba549439a80a55cc24d1d0995", "sha256": "a625d1cc199526a435cdb2ff1bc59f8404434c84ad1940de0fe3971c4a871f30" }, "downloads": -1, "filename": "backends-0.1.2.tar.gz", "has_sig": false, "md5_digest": "b6e50c4ba549439a80a55cc24d1d0995", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42803, "upload_time": "2019-06-13T17:57:17", "upload_time_iso_8601": "2019-06-13T17:57:17.982883Z", "url": "https://files.pythonhosted.org/packages/ed/17/6c664de9742340a98313b4e521a6bf9a1999d08435b4a5188383f60e60f9/backends-0.1.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "ef0aa7f812e6d97cf2941977f0e7d705", "sha256": "7b9bb4e6a4f43d7f83b0f52553c816ccab68dc7ff6dae2dd15aa1cc7234518c6" }, "downloads": -1, "filename": "backends-0.2.0.tar.gz", "has_sig": false, "md5_digest": "ef0aa7f812e6d97cf2941977f0e7d705", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 43822, "upload_time": "2019-07-09T22:37:30", "upload_time_iso_8601": "2019-07-09T22:37:30.013086Z", "url": "https://files.pythonhosted.org/packages/0b/16/294001ee3d99495916eeff191b592a9c806624c7581ad4aaca7f026f0e97/backends-0.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "60fd1abe77d1afd84bbfb553624b321e", "sha256": "3121147cab6db243646f8b09bfba1d6cb1192922f349cfabe1a044ce218347aa" }, "downloads": -1, "filename": "backends-0.3.0.tar.gz", "has_sig": false, "md5_digest": "60fd1abe77d1afd84bbfb553624b321e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 45838, "upload_time": "2019-10-29T17:31:46", "upload_time_iso_8601": "2019-10-29T17:31:46.030933Z", "url": "https://files.pythonhosted.org/packages/da/f1/610907b46e206cb4f57ead0255e310905da7ee4c3469a1e9157977f1cd0d/backends-0.3.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "562a4c70b2ee2ad97060adcfb346354f", "sha256": "ee20abfde34a4a3f48eada76352a1c1ff2e0f67cfc740191f3985a0d825c3974" }, "downloads": -1, "filename": "backends-0.3.1.tar.gz", "has_sig": false, "md5_digest": "562a4c70b2ee2ad97060adcfb346354f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 45916, "upload_time": "2019-10-29T21:46:54", "upload_time_iso_8601": "2019-10-29T21:46:54.974328Z", "url": "https://files.pythonhosted.org/packages/ae/88/5940d2fd516f2f2fdc451165916989b68de09c7ec65edcda9163087ac0ff/backends-0.3.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "48783d42d8cab9e018389cc5d7b788d7", "sha256": "d432bba08d79f0eddbc2520c9f7fd9e581f9a2d05ec70930c9639af5e7cab122" }, "downloads": -1, "filename": "backends-0.3.2.tar.gz", "has_sig": false, "md5_digest": "48783d42d8cab9e018389cc5d7b788d7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 46202, "upload_time": "2019-11-01T15:47:01", "upload_time_iso_8601": "2019-11-01T15:47:01.482788Z", "url": "https://files.pythonhosted.org/packages/6b/a5/a673d18022b177cd9ca2d8a8b2b27d73c696170e01d139a5c76af88a2c1a/backends-0.3.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "01ed64417040a5ee41868218fb30c4c5", "sha256": "af46f2481b138d12a213649b3d064423a4639baaab5650fd28bcfb6652d72a77" }, "downloads": -1, "filename": "backends-0.3.4.tar.gz", "has_sig": false, "md5_digest": "01ed64417040a5ee41868218fb30c4c5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 46158, "upload_time": "2019-11-06T00:30:49", "upload_time_iso_8601": "2019-11-06T00:30:49.819250Z", "url": "https://files.pythonhosted.org/packages/6c/35/ee94b44559575d320f829eb8a619023506127c0304854022c252154f8d20/backends-0.3.4.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.5": [ { "comment_text": "", "digests": { "md5": "ba39f37dfd2a58e6ac4cd7e0e2b12d34", "sha256": "b548d9d483da6ba5ac2d83e241704255b5d33078a3e16cd7d27842eb7a4e0660" }, "downloads": -1, "filename": "backends-0.3.5.tar.gz", "has_sig": false, "md5_digest": "ba39f37dfd2a58e6ac4cd7e0e2b12d34", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 46273, "upload_time": "2019-11-09T16:01:44", "upload_time_iso_8601": "2019-11-09T16:01:44.721927Z", "url": "https://files.pythonhosted.org/packages/9c/29/fc23ad44a5a2249615b14b79cdb39c4bb49559be39775dbe163d5eec801c/backends-0.3.5.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.6": [ { "comment_text": "", "digests": { "md5": "5b1f8bda1b92f63855873bb1aa6de724", "sha256": "610452177cf84b3856e6d4f1dd5171ea0b118e56948f9f616f7d12872ace1e2f" }, "downloads": -1, "filename": "backends-0.3.6.tar.gz", "has_sig": false, "md5_digest": "5b1f8bda1b92f63855873bb1aa6de724", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 45498, "upload_time": "2019-12-26T13:13:46", "upload_time_iso_8601": "2019-12-26T13:13:46.966367Z", "url": "https://files.pythonhosted.org/packages/5c/d9/3c4ea9579aa2c44f769eb8ebad807b1b100623738bc370efdb69d5757775/backends-0.3.6.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.7": [ { "comment_text": "", "digests": { "md5": "b0f1957a79447c9b50c5219508c202e0", "sha256": "a6b0e55fb41d7525da2aad550ca7982caa290fc01aa6be09d9bbc368e7d4fb70" }, "downloads": -1, "filename": "backends-0.3.7.tar.gz", "has_sig": false, "md5_digest": "b0f1957a79447c9b50c5219508c202e0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 45923, "upload_time": "2020-01-18T18:02:26", "upload_time_iso_8601": "2020-01-18T18:02:26.818870Z", "url": "https://files.pythonhosted.org/packages/9c/d6/9b60cf9d301c1140a0a4b64f5513ad464804f98b54520d0057fc4830fdf8/backends-0.3.7.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.8": [ { "comment_text": "", "digests": { "md5": "b867dc3ea5f0b5fd3f47823a0e42cd31", "sha256": "29887a777c2bf6a613648564d79eec9cd1439ebce2ceaa586f8a32c9f17c4b1a" }, "downloads": -1, "filename": "backends-0.3.8.tar.gz", "has_sig": false, "md5_digest": "b867dc3ea5f0b5fd3f47823a0e42cd31", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 46413, "upload_time": "2020-10-06T12:21:14", "upload_time_iso_8601": "2020-10-06T12:21:14.098782Z", "url": "https://files.pythonhosted.org/packages/e6/9f/45739a0444520bc29044d712bc213d93d7523c88dbf1915a1a678f565c78/backends-0.3.8.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "c139d633ea037ee2d257c2e98b8825a2", "sha256": "c6bf85b51017f0b0cc765f620530240e680183a90ce27904ec91056f37777fe8" }, "downloads": -1, "filename": "backends-0.4.0.tar.gz", "has_sig": false, "md5_digest": "c139d633ea037ee2d257c2e98b8825a2", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 48875, "upload_time": "2020-11-28T13:01:42", "upload_time_iso_8601": "2020-11-28T13:01:42.691023Z", "url": "https://files.pythonhosted.org/packages/46/fb/8dbd4a477429182e5e15e26df0d65fc20a1e01f6bb4480f90a2601b3d30f/backends-0.4.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "6eef9f4ad606549b881bd00f29478f30", "sha256": "7233386acacd0a613703620849efe07c49711b5d433f65211de4504ecba2db5d" }, "downloads": -1, "filename": "backends-0.4.1.tar.gz", "has_sig": false, "md5_digest": "6eef9f4ad606549b881bd00f29478f30", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 48742, "upload_time": "2020-12-01T00:20:49", "upload_time_iso_8601": "2020-12-01T00:20:49.015736Z", "url": "https://files.pythonhosted.org/packages/9d/23/38d409387bee39574d830ec7175ed660b01f566f3d25f12c7acf4535af88/backends-0.4.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "f65e1a6de15d71ecd0cc5deb46696a90", "sha256": "90a553d62beb5ee82745ea1fe08a142958f46de7aaa193b483bd7baf34555844" }, "downloads": -1, "filename": "backends-0.4.2.tar.gz", "has_sig": false, "md5_digest": "f65e1a6de15d71ecd0cc5deb46696a90", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 48774, "upload_time": "2020-12-01T01:05:29", "upload_time_iso_8601": "2020-12-01T01:05:29.320595Z", "url": "https://files.pythonhosted.org/packages/e9/35/7171e0b9789cfab19186e36d8fa15aa1f4709665a50d33208467aaeee6dd/backends-0.4.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.3": [ { "comment_text": "", "digests": { "md5": "a9295d5a7432e7b9844e65d92f66a3a2", "sha256": "b4e6375a9e2956d98b2c8e5d160729a426fa38cfc0e0f28a8d1b6c75aef86fd7" }, "downloads": -1, "filename": "backends-0.4.3.tar.gz", "has_sig": false, "md5_digest": "a9295d5a7432e7b9844e65d92f66a3a2", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 49191, "upload_time": "2020-12-02T20:00:30", "upload_time_iso_8601": "2020-12-02T20:00:30.955423Z", "url": "https://files.pythonhosted.org/packages/25/8a/7d0f1cb7664c3b0874546805d9e697efe154480f5ce1850c985480c467ea/backends-0.4.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.4": [ { "comment_text": "", "digests": { "md5": "cfd92f01206c8933acf1b0a5525a525b", "sha256": "dc6351b67aacd8a25974a4aab3fb5f02ebeee8b8ee5c59d8144832f4cbe382e2" }, "downloads": -1, "filename": "backends-0.4.4.tar.gz", "has_sig": false, "md5_digest": "cfd92f01206c8933acf1b0a5525a525b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 50348, "upload_time": "2020-12-03T17:43:03", "upload_time_iso_8601": "2020-12-03T17:43:03.660913Z", "url": "https://files.pythonhosted.org/packages/1d/78/8d5f8d2026b372e50385d26652462b5974e2d1f6713076a921add341d7aa/backends-0.4.4.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.5": [ { "comment_text": "", "digests": { "md5": "2ebb28ac2c44e82101d40b438a201db0", "sha256": "02b37acbb98c0adf43a39625e05b75b392f9b7909215267e6fb9f0a8023472cd" }, "downloads": -1, "filename": "backends-0.4.5.tar.gz", "has_sig": false, "md5_digest": "2ebb28ac2c44e82101d40b438a201db0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 50334, "upload_time": "2020-12-03T18:05:18", "upload_time_iso_8601": "2020-12-03T18:05:18.511934Z", "url": "https://files.pythonhosted.org/packages/a2/04/3fa9733672649201afbb9ec7fea7088c88cc938fd1481d09c9b736ffd990/backends-0.4.5.tar.gz", "yanked": false, "yanked_reason": null } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "8e312150e086b8a761142000a9b7c6ab", "sha256": "8c43ce19ba62bd6528f917f76b0508c3e2bb1a728e1149dad4c6343fd1361466" }, "downloads": -1, "filename": "backends-0.5.0.tar.gz", "has_sig": false, "md5_digest": "8e312150e086b8a761142000a9b7c6ab", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 52289, "upload_time": "2020-12-05T19:30:01", "upload_time_iso_8601": "2020-12-05T19:30:01.320517Z", "url": "https://files.pythonhosted.org/packages/7b/95/d780b439e523e7f57408ce0da563250e1a2ddcff34c51958327400183d8f/backends-0.5.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "628bde30a1626730c263000d44f71e97", "sha256": "a9c1331ac4f52a939ccefbc405ab3282841fba896b6c97b299ecfdd55fb78ddd" }, "downloads": -1, "filename": "backends-0.5.1.tar.gz", "has_sig": false, "md5_digest": "628bde30a1626730c263000d44f71e97", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 52594, "upload_time": "2020-12-21T14:46:36", "upload_time_iso_8601": "2020-12-21T14:46:36.970787Z", "url": "https://files.pythonhosted.org/packages/c3/f9/3711e238ac05d951172a36f4215e015538dc2d15ea4060436c915d14d484/backends-0.5.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.5.2": [ { "comment_text": "", "digests": { "md5": "cc2782406cf49fa318431fbf0e455492", "sha256": "a815f33396582c5368a07c3586430cc44ba5cec0f678a6c650e22a7cf34b03df" }, "downloads": -1, "filename": "backends-0.5.2.tar.gz", "has_sig": false, "md5_digest": "cc2782406cf49fa318431fbf0e455492", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 54369, "upload_time": "2020-12-24T15:00:57", "upload_time_iso_8601": "2020-12-24T15:00:57.253053Z", "url": "https://files.pythonhosted.org/packages/b9/b2/7e3d9d179d1fab4c4a58ef93c6321e45872f9c4020f65cd4c6bdd91f3cfd/backends-0.5.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.5.3": [ { "comment_text": "", "digests": { "md5": "0333769f78b31155b1d443a2c4859735", "sha256": "96d7a6e5271e532e2c2b53065fe7882ccf93e063f1a493c45c2957085467bafe" }, "downloads": -1, "filename": "backends-0.5.3.tar.gz", "has_sig": false, "md5_digest": "0333769f78b31155b1d443a2c4859735", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 54579, "upload_time": "2020-12-25T09:35:39", "upload_time_iso_8601": "2020-12-25T09:35:39.166209Z", "url": "https://files.pythonhosted.org/packages/9d/52/1fc69bf0a401a651d028e4b657592619333964448135f3d978805681e326/backends-0.5.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.5.4": [ { "comment_text": "", "digests": { "md5": "96c11e5969d54fefecb91f9402880547", "sha256": "659fdb8955108501fead9590da745e0341940c283ec5130973bb7e142a78c79a" }, "downloads": -1, "filename": "backends-0.5.4.tar.gz", "has_sig": false, "md5_digest": "96c11e5969d54fefecb91f9402880547", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 54826, "upload_time": "2021-01-19T11:03:32", "upload_time_iso_8601": "2021-01-19T11:03:32.219596Z", "url": "https://files.pythonhosted.org/packages/44/9f/7eda7252a770bd89dcb190ca0998c44ac0b53a3758f3fb49c8952946fb63/backends-0.5.4.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "39f53091a4f56007e803a30c4ba49b8b", "sha256": "f3b69b00373bf769b61d97566706908d1e0a449a42f2f5545b77f9442cc7d425" }, "downloads": -1, "filename": "backends-1.0.0.tar.gz", "has_sig": false, "md5_digest": "39f53091a4f56007e803a30c4ba49b8b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 55715, "upload_time": "2021-04-22T07:25:59", "upload_time_iso_8601": "2021-04-22T07:25:59.494860Z", "url": "https://files.pythonhosted.org/packages/3f/aa/6d21786d3f4342cf6609b7c48c8a7c2a3b032e0ee553bfb0b81b965797c1/backends-1.0.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "6fe2eb85c5b15e736019aad6c6c2dc09", "sha256": "ef7db78aef0609f38beb05ba0ebba04a9ab136dc8a049c2bbd4c6c2df4a29c56" }, "downloads": -1, "filename": "backends-1.0.1.tar.gz", "has_sig": false, "md5_digest": "6fe2eb85c5b15e736019aad6c6c2dc09", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 57245, "upload_time": "2021-04-26T12:01:30", "upload_time_iso_8601": "2021-04-26T12:01:30.157869Z", "url": "https://files.pythonhosted.org/packages/81/44/d0d08afe191312144012917970ae5179220c123232a3599a54e4fe29251c/backends-1.0.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "c13d27d2eb69fa02bf9a46802eee45e7", "sha256": "faf0faa59cb34bd48703d3ffeab9a82cfbffcfd1a8bdf392eb71bad3e66ca1f2" }, "downloads": -1, "filename": "backends-1.0.2.tar.gz", "has_sig": false, "md5_digest": "c13d27d2eb69fa02bf9a46802eee45e7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 57260, "upload_time": "2021-04-27T10:57:45", "upload_time_iso_8601": "2021-04-27T10:57:45.438417Z", "url": "https://files.pythonhosted.org/packages/92/82/0279875c052451f80145f046f43aac909b805a1f3583701fda8e8ade854f/backends-1.0.2.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "8aa9779fe76e022361f4faf4d638ca09", "sha256": "c5d0ae335d860d5998ef5a0886722350042cb8935f1e374b0429d1218dff6cb6" }, "downloads": -1, "filename": "backends-1.0.3.tar.gz", "has_sig": false, "md5_digest": "8aa9779fe76e022361f4faf4d638ca09", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 57398, "upload_time": "2021-05-14T16:18:28", "upload_time_iso_8601": "2021-05-14T16:18:28.544127Z", "url": "https://files.pythonhosted.org/packages/90/8d/f8343c75ffd9445acc3c96df1858179f8d87030ee69638b31e0caeb2e3e6/backends-1.0.3.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "4a8c558937e6df6ad08eb9479d2ee21f", "sha256": "5983b81f72370479860826ee5f5ea135b27b8bb3d64337dca18759d67a89910a" }, "downloads": -1, "filename": "backends-1.1.0.tar.gz", "has_sig": false, "md5_digest": "4a8c558937e6df6ad08eb9479d2ee21f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 58053, "upload_time": "2021-05-16T22:36:04", "upload_time_iso_8601": "2021-05-16T22:36:04.133321Z", "url": "https://files.pythonhosted.org/packages/c4/0e/1e3f9946a819e8a010a6651c58668a54e5c103fc75fb554d4a6d659f4730/backends-1.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "6d3367a022e327a35a61887533177f67", "sha256": "2a6848a9b8daf2d1c3fa928e35ad8bd87fe26dd2e13eddf511101072f8c69833" }, "downloads": -1, "filename": "backends-1.1.1.tar.gz", "has_sig": false, "md5_digest": "6d3367a022e327a35a61887533177f67", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 58105, "upload_time": "2021-05-16T23:05:05", "upload_time_iso_8601": "2021-05-16T23:05:05.223180Z", "url": "https://files.pythonhosted.org/packages/98/86/2802b04d40e3b1ddebd1a5fe49e8ac686b3043ce311ea7ac9d8e1e63a4f1/backends-1.1.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "d5530a16e217e572329f2382d5086fea", "sha256": "aeffc4c0bbd2330e08f640a7982043de965c2bc6f71a95857826847b93c9f918" }, "downloads": -1, "filename": "backends-1.2.0.tar.gz", "has_sig": false, "md5_digest": "d5530a16e217e572329f2382d5086fea", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 60129, "upload_time": "2021-06-22T15:51:48", "upload_time_iso_8601": "2021-06-22T15:51:48.825207Z", "url": "https://files.pythonhosted.org/packages/99/4d/867a442373ab03b2a0d08e465859ad9117042e93e394a49ed42fed0c46b6/backends-1.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "1edeffcb7c80ee8b1f60db81748b48db", "sha256": "6b7017e9007e869bd4757fe4fd389e8f992f75d4d0d343895bf660647db3d4d0" }, "downloads": -1, "filename": "backends-1.2.1.tar.gz", "has_sig": false, "md5_digest": "1edeffcb7c80ee8b1f60db81748b48db", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 60412, "upload_time": "2021-06-23T19:20:55", "upload_time_iso_8601": "2021-06-23T19:20:55.458377Z", "url": "https://files.pythonhosted.org/packages/fd/e9/e731485486e7c4fae1ccc884e29c0e98c4e83b355b8f04da0641bbfadeb2/backends-1.2.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "b6d44cbd389e3b5fa0c64a333b0e9f2d", "sha256": "5f91ba0978cb65a7e2f25baf2c868f8ecfcf6ce243d190516637f66bb09feb17" }, "downloads": -1, "filename": "backends-1.3.0.tar.gz", "has_sig": false, "md5_digest": "b6d44cbd389e3b5fa0c64a333b0e9f2d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 61202, "upload_time": "2021-06-24T17:22:06", "upload_time_iso_8601": "2021-06-24T17:22:06.860738Z", "url": "https://files.pythonhosted.org/packages/86/7f/f941db8254ad1f7ec2cf366c7dd0d9f8f8c7a37538ec330e6d18f9bae075/backends-1.3.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.3.1": [ { "comment_text": "", "digests": { "md5": "dfe7dad36ede4541ddb53997816a2765", "sha256": "dc199946fad47a545c9f539a70c7a1824b6b8382aeaac1deee1810286ed6ff1b" }, "downloads": -1, "filename": "backends-1.3.1.tar.gz", "has_sig": false, "md5_digest": "dfe7dad36ede4541ddb53997816a2765", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 61554, "upload_time": "2021-06-25T09:35:16", "upload_time_iso_8601": "2021-06-25T09:35:16.110436Z", "url": "https://files.pythonhosted.org/packages/fb/bd/8b9e2b7173140cc9f617cb7e00e8e5d2f1c339a85d7c7a63e6654afcfc22/backends-1.3.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.3.2": [ { "comment_text": "", "digests": { "md5": "74f0e19ffb482601255b810b22f42dca", "sha256": "287e550afadb28a714de31b6c74c406feb5bb14a7bed03681f1dc491e187a24e" }, "downloads": -1, "filename": "backends-1.3.2.tar.gz", "has_sig": false, "md5_digest": "74f0e19ffb482601255b810b22f42dca", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 61937, "upload_time": "2021-06-28T16:49:25", "upload_time_iso_8601": "2021-06-28T16:49:25.829421Z", "url": "https://files.pythonhosted.org/packages/52/4b/f8fd6af84de3d6bb999b84d331fe0ac602dd3d657a334adf70f7752d4aa8/backends-1.3.2.tar.gz", "yanked": false, "yanked_reason": null } ], "1.3.3": [ { "comment_text": "", "digests": { "md5": "cf4be5ba1eb600c9b21401f7ac1fd9c9", "sha256": "2ed9012d9f20f6e6bc8e0698e62ec17ebade748afda7a66d49f61f32178e13a2" }, "downloads": -1, "filename": "backends-1.3.3.tar.gz", "has_sig": false, "md5_digest": "cf4be5ba1eb600c9b21401f7ac1fd9c9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 62375, "upload_time": "2021-07-03T17:57:41", "upload_time_iso_8601": "2021-07-03T17:57:41.527640Z", "url": "https://files.pythonhosted.org/packages/3f/14/7503741ed1b9833f12c204c09e9755983243208680a83bd31e96fb6e3597/backends-1.3.3.tar.gz", "yanked": false, "yanked_reason": null } ], "1.3.4": [ { "comment_text": "", "digests": { "md5": "b72bd55d5699666da07bd2a35cb835fb", "sha256": "a265a0b921dfe16f6009be9077c94d40eff09c341264ef9707c22d08279e08aa" }, "downloads": -1, "filename": "backends-1.3.4.tar.gz", "has_sig": false, "md5_digest": "b72bd55d5699666da07bd2a35cb835fb", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 62429, "upload_time": "2021-07-03T20:43:13", "upload_time_iso_8601": "2021-07-03T20:43:13.940430Z", "url": "https://files.pythonhosted.org/packages/c4/5f/32b6d834ccb81376843baaa4a3e2523c751c8a084d46005825fe7a2f081a/backends-1.3.4.tar.gz", "yanked": false, "yanked_reason": null } ], "1.3.5": [ { "comment_text": "", "digests": { "md5": "130fc1b9289e15be69380a098ab37ae6", "sha256": "47c827350c6ced452e738e7fe72552d685350772a7e3b6bbc22cd289669805f3" }, "downloads": -1, "filename": "backends-1.3.5.tar.gz", "has_sig": false, "md5_digest": "130fc1b9289e15be69380a098ab37ae6", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 62592, "upload_time": "2021-07-03T21:20:46", "upload_time_iso_8601": "2021-07-03T21:20:46.203784Z", "url": "https://files.pythonhosted.org/packages/c0/62/c0847f6839f5da88944e7b55de40ecb7be3300f0185d4420a09e73d68c33/backends-1.3.5.tar.gz", "yanked": false, "yanked_reason": null } ], "1.3.6": [ { "comment_text": "", "digests": { "md5": "b3d42b713a9b7b302cfdaf43883efbea", "sha256": "4e285d3098da59525864ce4bee60559ae3ae5faab96e094ea9be7a5ba3844fcf" }, "downloads": -1, "filename": "backends-1.3.6.tar.gz", "has_sig": false, "md5_digest": "b3d42b713a9b7b302cfdaf43883efbea", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 62717, "upload_time": "2021-07-14T09:43:41", "upload_time_iso_8601": "2021-07-14T09:43:41.865277Z", "url": "https://files.pythonhosted.org/packages/47/32/36e6e0e3730ec03c60144fd46269728ce9375dd63295375c4c13a1ed654a/backends-1.3.6.tar.gz", "yanked": false, "yanked_reason": null } ], "1.3.7": [ { "comment_text": "", "digests": { "md5": "89986d97686bf25029be8c7c75f3e9a9", "sha256": "7c29d951aa7598a5cf873b68645b37af626025b46f9bba768c669e51ca63bff9" }, "downloads": -1, "filename": "backends-1.3.7.tar.gz", "has_sig": false, "md5_digest": "89986d97686bf25029be8c7c75f3e9a9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 67867, "upload_time": "2021-08-25T09:59:26", "upload_time_iso_8601": "2021-08-25T09:59:26.596680Z", "url": "https://files.pythonhosted.org/packages/5f/66/318b1354b7d7e192a8d9243ddce6b592146ad74297e67658a83195294b95/backends-1.3.7.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "1c26b7a31cdceda36e201957fe46f350", "sha256": "9f3d093d02eb61fd8d45c11a9e13dd37b600a085b19fa556865eb364727dc2d8" }, "downloads": -1, "filename": "backends-1.4.0.tar.gz", "has_sig": false, "md5_digest": "1c26b7a31cdceda36e201957fe46f350", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 71284, "upload_time": "2021-08-27T12:41:32", "upload_time_iso_8601": "2021-08-27T12:41:32.749125Z", "url": "https://files.pythonhosted.org/packages/e5/32/37254e572470304380aa21eab303ac258ba861f38a76481fb8457824e7e1/backends-1.4.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4.1": [ { "comment_text": "", "digests": { "md5": "cabed1e151ae080a6959c4c7afd9473a", "sha256": "f8795a0e82f15191c25427335b64cc252fdb3ba1fb58d81f527d342d5acc2c8d" }, "downloads": -1, "filename": "backends-1.4.1.tar.gz", "has_sig": false, "md5_digest": "cabed1e151ae080a6959c4c7afd9473a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 71359, "upload_time": "2021-08-27T14:18:59", "upload_time_iso_8601": "2021-08-27T14:18:59.375272Z", "url": "https://files.pythonhosted.org/packages/d8/58/2a1a1668ed1451403d4021ab894874837af9259a1abe092512fa2ea114e6/backends-1.4.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4.10": [ { "comment_text": "", "digests": { "md5": "d8c80038644485e18519670adb81a73c", "sha256": "5dc83ad6adf95938318eefbd3e7eaf2b828261accc53ff94439c335690262559" }, "downloads": -1, "filename": "backends-1.4.10.tar.gz", "has_sig": false, "md5_digest": "d8c80038644485e18519670adb81a73c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 73417, "upload_time": "2021-10-28T16:38:19", "upload_time_iso_8601": "2021-10-28T16:38:19.463107Z", "url": "https://files.pythonhosted.org/packages/a9/e5/922fa180ad120e421707faf95c152c9b6ce4c5353cea0685d301396a844d/backends-1.4.10.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4.11": [ { "comment_text": "", "digests": { "md5": "d720f8fd33a49ed58da3ddd0985121b9", "sha256": "310f8d2903311477baeb125670c63787f904629bdbcec9847c35581f96faabfe" }, "downloads": -1, "filename": "backends-1.4.11.tar.gz", "has_sig": false, "md5_digest": "d720f8fd33a49ed58da3ddd0985121b9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 73489, "upload_time": "2021-10-31T17:38:13", "upload_time_iso_8601": "2021-10-31T17:38:13.541152Z", "url": "https://files.pythonhosted.org/packages/a0/c6/0d8b0d41d2154e898503eecd372ea5da862ee7b6307c9ab9256c1d5c3c86/backends-1.4.11.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4.12": [ { "comment_text": "", "digests": { "md5": "367cebaca48fb87d7b80168df09299a1", "sha256": "158c51fafb56de978efe3dedcb78b73c5b4de67023c80ac7849b51841926155b" }, "downloads": -1, "filename": "backends-1.4.12.tar.gz", "has_sig": false, "md5_digest": "367cebaca48fb87d7b80168df09299a1", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 73937, "upload_time": "2021-11-01T17:57:57", "upload_time_iso_8601": "2021-11-01T17:57:57.086325Z", "url": "https://files.pythonhosted.org/packages/49/ea/6e3cf01f85ce66394c2c7d60f9ba10fb7ab72b63d0447534bf691c26237b/backends-1.4.12.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4.13": [ { "comment_text": "", "digests": { "md5": "7e2a0ed9625ccad7b3fd4108e8cc0a12", "sha256": "abc06bb16ab43022aab8695470c4ecd671d7cfdd42f27e689f671eec1336a2b3" }, "downloads": -1, "filename": "backends-1.4.13.tar.gz", "has_sig": false, "md5_digest": "7e2a0ed9625ccad7b3fd4108e8cc0a12", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 73980, "upload_time": "2021-11-01T18:23:52", "upload_time_iso_8601": "2021-11-01T18:23:52.394950Z", "url": "https://files.pythonhosted.org/packages/6a/42/e2c721e6070e5483926513de7392d33ed23fd128ee23daeed63256a9dae3/backends-1.4.13.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4.14": [ { "comment_text": "", "digests": { "md5": "f087edba1dac2ab628343386f4a6e019", "sha256": "e83729ba1ca3f93a311a2c956864f0550ce4151cc45b0adcc8a90ef67008b7c3" }, "downloads": -1, "filename": "backends-1.4.14.tar.gz", "has_sig": false, "md5_digest": "f087edba1dac2ab628343386f4a6e019", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 75314, "upload_time": "2021-12-14T15:54:03", "upload_time_iso_8601": "2021-12-14T15:54:03.852785Z", "url": "https://files.pythonhosted.org/packages/2c/ac/177531d2c23f34bea89ec6b5ecd32182ee3cade7092b20154305c6fa03d2/backends-1.4.14.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4.15": [ { "comment_text": "", "digests": { "md5": "0165017029a55118491df4921950458c", "sha256": "34817de2da685afa395e530f832613bc994b5bb934ccc77c6199ab769bc9a97b" }, "downloads": -1, "filename": "backends-1.4.15.tar.gz", "has_sig": false, "md5_digest": "0165017029a55118491df4921950458c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 75399, "upload_time": "2021-12-15T15:34:31", "upload_time_iso_8601": "2021-12-15T15:34:31.808312Z", "url": "https://files.pythonhosted.org/packages/5b/ce/2386aa54cee387fd77ba146ccefccf969cda9d7b8ba64561b54fe3d9854d/backends-1.4.15.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4.16": [ { "comment_text": "", "digests": { "md5": "b16fa67dca0eaa4a56f1db0757dfd539", "sha256": "a42dca2671e52125b88c9158428cfd32681c6228a870501370197e688e0bb014" }, "downloads": -1, "filename": "backends-1.4.16.tar.gz", "has_sig": false, "md5_digest": "b16fa67dca0eaa4a56f1db0757dfd539", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 75404, "upload_time": "2021-12-15T16:05:24", "upload_time_iso_8601": "2021-12-15T16:05:24.862481Z", "url": "https://files.pythonhosted.org/packages/40/5e/80b54970c59991cec4633aa21dbec6928dd4888fd32420ef1f606cf1cd6f/backends-1.4.16.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4.17": [ { "comment_text": "", "digests": { "md5": "31cdf812f3aa95b0c20219f2e3952196", "sha256": "1adc5fef3d7ae219827e25e16b4e55e8b90e51df256b88f2b3b86e89cf19ca85" }, "downloads": -1, "filename": "backends-1.4.17.tar.gz", "has_sig": false, "md5_digest": "31cdf812f3aa95b0c20219f2e3952196", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 76168, "upload_time": "2021-12-15T19:15:00", "upload_time_iso_8601": "2021-12-15T19:15:00.148773Z", "url": "https://files.pythonhosted.org/packages/06/00/3e92c5999f12a734dd5a5109d008e754d9b4c23a3c631373eea64553ac7c/backends-1.4.17.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4.18": [ { "comment_text": "", "digests": { "md5": "ca22fb28e7bbb9ee8baf4b1a32ec401a", "sha256": "d47616639e306fcb7ccab8b85784b9713d88434ab5fbcbdd972120aa1885ff08" }, "downloads": -1, "filename": "backends-1.4.18.tar.gz", "has_sig": false, "md5_digest": "ca22fb28e7bbb9ee8baf4b1a32ec401a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 76216, "upload_time": "2021-12-17T12:11:27", "upload_time_iso_8601": "2021-12-17T12:11:27.050815Z", "url": "https://files.pythonhosted.org/packages/2b/fa/f6604ff84b2d383f702f947c88931167586033f6e33429af4ad57a6f1c84/backends-1.4.18.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4.19": [ { "comment_text": "", "digests": { "md5": "651e33a23ca98b51b00c9ca8b3a2d643", "sha256": "dbafa7474fabbb1bd68c0e5c06a6a306a852030ae389a6ba8343d05d708d89f2" }, "downloads": -1, "filename": "backends-1.4.19.tar.gz", "has_sig": false, "md5_digest": "651e33a23ca98b51b00c9ca8b3a2d643", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 76363, "upload_time": "2022-02-18T12:38:28", "upload_time_iso_8601": "2022-02-18T12:38:28.231519Z", "url": "https://files.pythonhosted.org/packages/c3/7b/5c1705e694f586f7b9f8917ba74f8a898b0309a4355c0b9ec71c22862f95/backends-1.4.19.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4.2": [ { "comment_text": "", "digests": { "md5": "88c06b6889cc114ff09de6371f69c527", "sha256": "af63f66749dd5dcd1bcd2ded93d2d7b86056de425a6f183b868d04caea359bc0" }, "downloads": -1, "filename": "backends-1.4.2.tar.gz", "has_sig": false, "md5_digest": "88c06b6889cc114ff09de6371f69c527", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 72404, "upload_time": "2021-08-28T08:22:56", "upload_time_iso_8601": "2021-08-28T08:22:56.205177Z", "url": "https://files.pythonhosted.org/packages/ee/e0/c5377941a8a652a48ab9af359d9403c1769c99d413c9830725f9c01bc2d2/backends-1.4.2.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4.20": [ { "comment_text": "", "digests": { "md5": "641047964033180c3df2cd5dce8b0d76", "sha256": "99fbb7099913a94b2ca584630b5b319521fbf01350ce09f8b346cf0c41679f82" }, "downloads": -1, "filename": "backends-1.4.20.tar.gz", "has_sig": false, "md5_digest": "641047964033180c3df2cd5dce8b0d76", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 76565, "upload_time": "2022-04-20T08:06:42", "upload_time_iso_8601": "2022-04-20T08:06:42.092406Z", "url": "https://files.pythonhosted.org/packages/ab/14/4287c6d7cfd6b981f4a87b0fb9cd926565457053e35e5ddfb7c8fc006128/backends-1.4.20.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4.21": [ { "comment_text": "", "digests": { "md5": "34beb252e9b0ddb5b5077817cc159a97", "sha256": "9826ee33401acf50f577e4246a0f7e418312750f6d10aa49f1f332ffdb0d6b50" }, "downloads": -1, "filename": "backends-1.4.21.tar.gz", "has_sig": false, "md5_digest": "34beb252e9b0ddb5b5077817cc159a97", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 76989, "upload_time": "2022-04-25T17:49:58", "upload_time_iso_8601": "2022-04-25T17:49:58.971801Z", "url": "https://files.pythonhosted.org/packages/85/12/fb867385823ac9336ae0cf5d4996d43151780d6ff48b082ca5fb0e4cea09/backends-1.4.21.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4.22": [ { "comment_text": "", "digests": { "md5": "bf7f1293652278b5dd65da9ae89632fe", "sha256": "5fb2210587f0c3350e35bac791c94484e7f6fc27ba210ac140930fe6377ac26c" }, "downloads": -1, "filename": "backends-1.4.22.tar.gz", "has_sig": false, "md5_digest": "bf7f1293652278b5dd65da9ae89632fe", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 77005, "upload_time": "2022-04-27T15:38:17", "upload_time_iso_8601": "2022-04-27T15:38:17.488425Z", "url": "https://files.pythonhosted.org/packages/19/9c/8b9cbfb3173fab1c6f578bca83daeb67215a9c6be3bb0965e3a300ca6cc9/backends-1.4.22.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4.23": [ { "comment_text": "", "digests": { "md5": "e90a137eda75fb546c7be867f9ee1c6c", "sha256": "c9235d51d3a0e68d52fd5ccbafda4bb841047c951535ec87530dd6b94b0462b9" }, "downloads": -1, "filename": "backends-1.4.23.tar.gz", "has_sig": false, "md5_digest": "e90a137eda75fb546c7be867f9ee1c6c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 77510, "upload_time": "2022-04-28T14:04:05", "upload_time_iso_8601": "2022-04-28T14:04:05.599989Z", "url": "https://files.pythonhosted.org/packages/33/e9/ead778a85d517443f29e498bc07527da512940a415f6fb719021716cd866/backends-1.4.23.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4.24": [ { "comment_text": "", "digests": { "md5": "a85bb0830afcbbd0f86150d68a92245c", "sha256": "9ff598e412f502411acdcbcb97f8cbadaa12a5cd5808f69d006c6604a5c52204" }, "downloads": -1, "filename": "backends-1.4.24.tar.gz", "has_sig": false, "md5_digest": "a85bb0830afcbbd0f86150d68a92245c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 77680, "upload_time": "2022-05-04T14:55:00", "upload_time_iso_8601": "2022-05-04T14:55:00.748515Z", "url": "https://files.pythonhosted.org/packages/cd/17/13031f9bf440a0c743020daeda228f7e3599f349eb915b94d0131f3e1c4c/backends-1.4.24.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4.25": [ { "comment_text": "", "digests": { "md5": "c6a1ec208fe4588354ce85c026bf72d9", "sha256": "1131711a29adc5f0017106099aa134fad87f505e13b99069f290244c55531649" }, "downloads": -1, "filename": "backends-1.4.25.tar.gz", "has_sig": false, "md5_digest": "c6a1ec208fe4588354ce85c026bf72d9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 78161, "upload_time": "2022-05-11T10:45:30", "upload_time_iso_8601": "2022-05-11T10:45:30.800890Z", "url": "https://files.pythonhosted.org/packages/0c/26/ab2597896de3c3059e64307c5500f5bdaab3ebaf9f5cf4aa8a4bee4c71e6/backends-1.4.25.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4.3": [ { "comment_text": "", "digests": { "md5": "27c218af256a5e8d61aafd2f8581b71b", "sha256": "a9507ff7c10fffd8dbac732aabc1f77a34944aaa797f89c22a62dce66c274e40" }, "downloads": -1, "filename": "backends-1.4.3.tar.gz", "has_sig": false, "md5_digest": "27c218af256a5e8d61aafd2f8581b71b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 72688, "upload_time": "2021-08-28T14:16:24", "upload_time_iso_8601": "2021-08-28T14:16:24.854050Z", "url": "https://files.pythonhosted.org/packages/4b/14/51b30db5e9e4a35210c006c37e438b0e5e748acc096236d6015de532168a/backends-1.4.3.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4.4": [ { "comment_text": "", "digests": { "md5": "c5ee5d3297717506bea020a566bcf39e", "sha256": "e1e6160631f38995e3c0c970ead1d1688c349d35066fdaf37e6208bce808eab9" }, "downloads": -1, "filename": "backends-1.4.4.tar.gz", "has_sig": false, "md5_digest": "c5ee5d3297717506bea020a566bcf39e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 73143, "upload_time": "2021-09-04T13:43:39", "upload_time_iso_8601": "2021-09-04T13:43:39.206785Z", "url": "https://files.pythonhosted.org/packages/27/00/2447963bfa946ed02509f2df57d3923c2b67d94080415f7fcb93dcbf943d/backends-1.4.4.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4.5": [ { "comment_text": "", "digests": { "md5": "d53f2ee35420677858811bc07c47c9cd", "sha256": "711792b0b68b61c7963227e089d5e9f472f229f38d87258f52a318f0fdc70ec8" }, "downloads": -1, "filename": "backends-1.4.5.tar.gz", "has_sig": false, "md5_digest": "d53f2ee35420677858811bc07c47c9cd", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 73259, "upload_time": "2021-09-15T19:34:09", "upload_time_iso_8601": "2021-09-15T19:34:09.579622Z", "url": "https://files.pythonhosted.org/packages/6e/e2/5df686c20c596a566cf15cd45eb8508bff4cc75e9d5400997bf3083acc3b/backends-1.4.5.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4.6": [ { "comment_text": "", "digests": { "md5": "0ae0aeb28d2432c6cb43debfe7ea8c4a", "sha256": "07ba1a6e041140b92ca73313e3536b9fa77fcff6b28831e3348c4b15ef604ea0" }, "downloads": -1, "filename": "backends-1.4.6.tar.gz", "has_sig": false, "md5_digest": "0ae0aeb28d2432c6cb43debfe7ea8c4a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 73356, "upload_time": "2021-09-29T11:15:42", "upload_time_iso_8601": "2021-09-29T11:15:42.949994Z", "url": "https://files.pythonhosted.org/packages/7e/23/a365a57035cbecab25741ec6f34590f44a1515c83f0468951e2ded3dc2ad/backends-1.4.6.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4.7": [ { "comment_text": "", "digests": { "md5": "f144716e647716c884ed845a18f163f9", "sha256": "6361ea545b424a374b34b22b9ffb47f201dd6ab8f154316054c278c1f60d2746" }, "downloads": -1, "filename": "backends-1.4.7.tar.gz", "has_sig": false, "md5_digest": "f144716e647716c884ed845a18f163f9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 73367, "upload_time": "2021-10-02T17:19:32", "upload_time_iso_8601": "2021-10-02T17:19:32.536006Z", "url": "https://files.pythonhosted.org/packages/2a/66/f92b533b385231ab0c2b181ed264b6c36b9aa6ebf34fe41344976386a4c9/backends-1.4.7.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4.8": [ { "comment_text": "", "digests": { "md5": "4dce62831f4d362bf880ead3eb825ea1", "sha256": "2a900bab1b595c03b454d817e9d81cbd73c76c127fe4eff2c2ab4e48052580da" }, "downloads": -1, "filename": "backends-1.4.8.tar.gz", "has_sig": false, "md5_digest": "4dce62831f4d362bf880ead3eb825ea1", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 73404, "upload_time": "2021-10-03T13:09:23", "upload_time_iso_8601": "2021-10-03T13:09:23.128530Z", "url": "https://files.pythonhosted.org/packages/06/c6/f413d85b1f2a5e7f87a5425fbbf4c594b6fe2443fff8ec60dd0f50579a27/backends-1.4.8.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4.9": [ { "comment_text": "", "digests": { "md5": "fbecafc826fd688e475b78c85102e83a", "sha256": "4b8af82093851239f1514fcaa54e9a6931a277beef5fc38b9b49e2637780f81b" }, "downloads": -1, "filename": "backends-1.4.9.tar.gz", "has_sig": false, "md5_digest": "fbecafc826fd688e475b78c85102e83a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 73373, "upload_time": "2021-10-04T09:02:05", "upload_time_iso_8601": "2021-10-04T09:02:05.588346Z", "url": "https://files.pythonhosted.org/packages/5b/ed/ed2ea384f33d5b9dc2f65968ff670ea2bd9281dbe3a6841540436a50f326/backends-1.4.9.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c6a1ec208fe4588354ce85c026bf72d9", "sha256": "1131711a29adc5f0017106099aa134fad87f505e13b99069f290244c55531649" }, "downloads": -1, "filename": "backends-1.4.25.tar.gz", "has_sig": false, "md5_digest": "c6a1ec208fe4588354ce85c026bf72d9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 78161, "upload_time": "2022-05-11T10:45:30", "upload_time_iso_8601": "2022-05-11T10:45:30.800890Z", "url": "https://files.pythonhosted.org/packages/0c/26/ab2597896de3c3059e64307c5500f5bdaab3ebaf9f5cf4aa8a4bee4c71e6/backends-1.4.25.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }