{ "info": { "author": "Uber AI Labs", "author_email": "", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "Intended Audience :: Education", "Intended Audience :: Science/Research", "License :: OSI Approved :: Apache Software License", "Operating System :: MacOS :: MacOS X", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10" ], "description": "# Funsor\n\nFunsor is a tensor-like library for functions and distributions.\n\nSee\n[Functional tensors for probabilistic programming](https://arxiv.org/abs/1910.10775)\nfor a system description.\n\n## Installing\n\n**Install using pip:**\n\nFunsor supports Python 3.7+.\n\n```sh\npip install funsor\n```\n\n**Install from source:**\n```sh\ngit clone git@github.com:pyro-ppl/funsor.git\ncd funsor\ngit checkout master\npip install .\n```\n\n## Using funsor\n\nFunsor can be used through a number of interfaces:\n\n- Funsors can be used directly for probabilistic computations, using PyTorch\n optimizers in a standard training loop. Start with these examples:\n [discrete_hmm](examples/discrete_hmm.py),\n [eeg_slds](examples/eeg_slds.py),\n [kalman_filter](examples/kalman_filter.py),\n [pcfg](examples/pcfg.py),\n [sensor](examples/sensor.py),\n [slds](examples/slds.py), and\n [vae](examples/vae.py).\n- Funsors can be used to implement custom inference algorithms within Pyro,\n using custom elbo implementations in standard\n [pyro.infer.SVI](http://docs.pyro.ai/en/stable/inference_algos.html#pyro.infer.svi.SVI)\n training. See these examples:\n [mixed_hmm](examples/mixed_hmm/model.py) and\n [bart forecasting](https://github.com/pyro-ppl/sandbox/blob/master/2019-08-time-series/bart/forecast.py).\n- [funsor.pyro](https://funsor.readthedocs.io/en/latest/pyro.html) provides a\n number of Pyro-compatible (and PyTorch-compatible) distribution classes\n that use funsors under the hood, as well\n [utilities](https://funsor.readthedocs.io/en/latest/pyro.html#module-funsor.pyro.convert)\n to convert between funsors and distributions.\n- [funsor.minipyro](https://funsor.readthedocs.io/en/latest/minipyro.html)\n provides a limited alternate backend for the Pyro probabilistic programming\n language, and can perform some ELBO computations exactly.\n\n## Design\n\nSee [design doc](https://docs.google.com/document/d/1NVlfQnNQ0Aebg8vfIGcJKsnSqAhB4bbClQrb5dwm2OM). \n\nThe goal of this library is to generalize [Pyro](http://pyro.ai)'s delayed\ninference algorithms from discrete to continuous variables, and to create\nmachinery to enable partially delayed sampling compatible with universality. To\nachieve this goal this library makes three orthogonal design choices:\n\n1. Open terms are objects. Funsors generalize the tensor interface\n to also cover arbitrary functions of multiple variables (\"inputs\"), where\n variables may be integers, real numbers, or real tensors. Function\n evaluation / substitution is the basic operation, generalizing tensor\n indexing. This allows probability distributions to be first-class Funsors\n and make use of existing tensor machinery, for example we can generalize\n tensor contraction to computing analytic integrals in conjugate\n probabilistic models.\n\n2. Support nonstandard interpretation. Funsors support user-defined\n interpretations, including, eager, lazy, mixed eager+lazy, memoized (like\n opt\\_einsum's sharing), and approximate interpretations like Monte Carlo\n approximations of integration operations (e.g. `.sum()` over a funsor\n dimension).\n\n3. Named dimensions. Substitution is the most basic operation of Funsors. To\n avoid the difficulties of broadcasting and advanced indexing in\n positionally-indexed tensor libraries, all Funsor dimensions are named.\n Indexing uses the `.__call__()` method and can be interpreted as\n substitution (with well-understood semantics). Funsors are viewed as\n algebraic expressions with one algebraic free variable per dimension. Each\n dimension is either covariant (an output) or contravariant (an input).\n\nUsing `funsor` we can easily implement Pyro-style\n[delayed sampling](http://pyro.ai/examples/enumeration.html), roughly:\n\n```py\ntrace_log_prob = 0.\n\ndef pyro_sample(name, dist, obs=None):\n assert isinstance(dist, Funsor)\n if obs is not None:\n value = obs\n elif lazy:\n # delayed sampling (like Pyro's parallel enumeration)\n value = funsor.Variable(name, dist.support)\n else:\n value = dist.sample('value')[0]['value']\n\n # save log_prob in trace\n trace_log_prob += dist(value)\n\n return value\n\n# ...later during inference...\nloss = -trace_log_prob.reduce(logaddexp) # collapses delayed variables\n```\nSee [funsor/minipyro.py](funsor/minipyro.py) for complete implementation.\n\n## Related projects\n\n- Pyro's [ops.packed](https://github.com/uber/pyro/blob/dev/pyro/ops/packed.py),\n [ops.einsum](https://github.com/uber/pyro/blob/dev/pyro/ops/einsum), and\n [ops.contract](https://github.com/uber/pyro/blob/dev/pyro/ops/contract.py)\n- [Birch](https://birch-lang.org/)'s [delayed sampling](https://arxiv.org/abs/1708.07787)\n- [autoconj](https://arxiv.org/abs/1811.11926)\n- [dyna](http://www.cs.jhu.edu/~nwf/datalog20-paper.pdf)\n- [PSI solver](https://psisolver.org)\n- [Hakaru](https://hakaru-dev.github.io)\n- [sympy](https://www.sympy.org/en/index.html)\n- [namedtensor](https://github.com/harvardnlp/namedtensor)\n\n## Citation\n\nIf you use Funsor, please consider citing:\n```\n@article{obermeyer2019functional,\n author = {Obermeyer, Fritz and Bingham, Eli and Jankowiak, Martin and\n Phan, Du and Chen, Jonathan P},\n title = {{Functional Tensors for Probabilistic Programming}},\n journal = {arXiv preprint arXiv:1910.10775},\n year = {2019}\n}\n```\n\n\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/pyro-ppl/funsor", "keywords": "probabilistic machine learning bayesian statistics pytorch jax", "license": "", "maintainer": "", "maintainer_email": "", "name": "funsor", "package_url": "https://pypi.org/project/funsor/", "platform": null, "project_url": "https://pypi.org/project/funsor/", "project_urls": { "Documentation": "https://funsor.pyro.ai", "Homepage": "https://github.com/pyro-ppl/funsor" }, "release_url": "https://pypi.org/project/funsor/0.4.3/", "requires_dist": [ "makefun", "multipledispatch", "numpy (>=1.7)", "opt-einsum (>=2.3.2)", "typing-extensions", "black ; extra == 'dev'", "flake8 ; extra == 'dev'", "isort (>=5.0) ; extra == 'dev'", "nbsphinx ; extra == 'dev'", "pandas ; extra == 'dev'", "pillow (==8.2.0) ; extra == 'dev'", "pytest (==4.3.1) ; extra == 'dev'", "pytest-xdist (==1.27.0) ; extra == 'dev'", "scipy ; extra == 'dev'", "sphinx (>=2.0) ; extra == 'dev'", "sphinx-gallery ; extra == 'dev'", "sphinx-rtd-theme ; extra == 'dev'", "torchvision (>=0.12.0) ; extra == 'dev'", "numpyro (>=0.7.0) ; extra == 'jax'", "jax (>=0.2.13) ; extra == 'jax'", "jaxlib (>=0.1.65) ; extra == 'jax'", "black ; extra == 'test'", "flake8 ; extra == 'test'", "isort (>=5.0) ; extra == 'test'", "pandas ; extra == 'test'", "pillow (==8.2.0) ; extra == 'test'", "pyro-api (>=0.1.2) ; extra == 'test'", "pytest (==4.3.1) ; extra == 'test'", "pytest-xdist (==1.27.0) ; extra == 'test'", "requests ; extra == 'test'", "scipy ; extra == 'test'", "torchvision (>=0.12.0) ; extra == 'test'", "pyro-ppl (>=1.8.0) ; extra == 'torch'", "torch (>=1.11.0) ; extra == 'torch'" ], "requires_python": ">=3.7", "summary": "A tensor-like library for functions and distributions", "version": "0.4.3", "yanked": false, "yanked_reason": null }, "last_serial": 13239627, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "cce3b1fd1e332f3e33d21f9dfad7a591", "sha256": "6a10d5133482fd764ebd8c172f6dcd885e4a16258590fa433b22bfed7eb99d2e" }, "downloads": -1, "filename": "funsor-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "cce3b1fd1e332f3e33d21f9dfad7a591", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 95084, "upload_time": "2019-10-23T05:39:04", "upload_time_iso_8601": "2019-10-23T05:39:04.530573Z", "url": "https://files.pythonhosted.org/packages/a0/33/6ce0cdb1f63c66687c5cd28d61c5cbba745a53f9330924a9c3f61052f8dc/funsor-0.1.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "efdd58b97af3f99caa3bb6584688577d", "sha256": "b01cdfe42976d7012ad9814350c487e40898988520a093d77f598dcd4d8d57a3" }, "downloads": -1, "filename": "funsor-0.1.0.tar.gz", "has_sig": false, "md5_digest": "efdd58b97af3f99caa3bb6584688577d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 115525, "upload_time": "2019-10-23T05:39:07", "upload_time_iso_8601": "2019-10-23T05:39:07.010782Z", "url": "https://files.pythonhosted.org/packages/86/8c/188d09fb911077276597c869be573908d68b8180cb25ed5df3bc2fa44b1e/funsor-0.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "8e8fb3a95005dd1bf3fec2117171e09b", "sha256": "c32ff4fa06f7810bcbae63f5e2bee2d8e1fedea72206823155866fe92d082473" }, "downloads": -1, "filename": "funsor-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "8e8fb3a95005dd1bf3fec2117171e09b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 95077, "upload_time": "2019-10-23T16:31:05", "upload_time_iso_8601": "2019-10-23T16:31:05.891021Z", "url": "https://files.pythonhosted.org/packages/78/44/67d122f15d17c194e99e3b7d5bc23efe52e401d3bc83ae81f827676cdb78/funsor-0.1.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "ac4d4a6f4b5efaf1544026d626a5fa9a", "sha256": "fc94f1ea8ec1e842fbcfa134cc19949e59da26141edcd03eea0eb5afba5367a2" }, "downloads": -1, "filename": "funsor-0.1.1.tar.gz", "has_sig": false, "md5_digest": "ac4d4a6f4b5efaf1544026d626a5fa9a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 115537, "upload_time": "2019-10-23T16:31:07", "upload_time_iso_8601": "2019-10-23T16:31:07.536991Z", "url": "https://files.pythonhosted.org/packages/ea/b1/8131f61b1590b0140e10d1e4ea88d87669e7e27df3b8f14af34880bb0928/funsor-0.1.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "3594142ec93f213e104bcfc3ad54ce42", "sha256": "791cc4c06e88b662d647e12a7f6bbac8e07ff32cfd65ae548e3270a9ac247a1d" }, "downloads": -1, "filename": "funsor-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "3594142ec93f213e104bcfc3ad54ce42", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 95083, "upload_time": "2019-10-23T20:10:55", "upload_time_iso_8601": "2019-10-23T20:10:55.410061Z", "url": "https://files.pythonhosted.org/packages/0b/a1/f4af75e8d8972829bacc678bb9ea63d41aaee5ee74147bfcb19ac3886ce9/funsor-0.1.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "c18d7a0e6fea22714974030debeb73d0", "sha256": "90cf2e85b8d164d8512d63633ba8a908d9544b80dae07d75b31974c39930abcb" }, "downloads": -1, "filename": "funsor-0.1.2.tar.gz", "has_sig": false, "md5_digest": "c18d7a0e6fea22714974030debeb73d0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 115590, "upload_time": "2019-10-23T20:10:56", "upload_time_iso_8601": "2019-10-23T20:10:56.961694Z", "url": "https://files.pythonhosted.org/packages/65/3c/7409f1cd07797ba0f059127535c5f8288c14acfaf508ef90643b92cb92c0/funsor-0.1.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "2e4710527b775a765a45193ef9b85507", "sha256": "c8f853f40c493da06cedea8180a724f230f5ddb857e833d0f5d78734a33728ba" }, "downloads": -1, "filename": "funsor-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "2e4710527b775a765a45193ef9b85507", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 114994, "upload_time": "2020-07-27T05:19:47", "upload_time_iso_8601": "2020-07-27T05:19:47.445132Z", "url": "https://files.pythonhosted.org/packages/c6/e9/31b9c75828a0d19c75c6bacf02ecb06ac0f4fcf296faa53cc148b495b667/funsor-0.2.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "266e97e8dfbf652e821363d487546c00", "sha256": "d71160cf8903a0a0aee9d9091f38789d9af2899e1ab90ed96d3f5c5160970b5a" }, "downloads": -1, "filename": "funsor-0.2.0.tar.gz", "has_sig": false, "md5_digest": "266e97e8dfbf652e821363d487546c00", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 134383, "upload_time": "2020-07-27T05:19:48", "upload_time_iso_8601": "2020-07-27T05:19:48.959301Z", "url": "https://files.pythonhosted.org/packages/a0/07/1ff0a6a39a9b1014376c6c03ba16cbbc609e2d1ff0f5a96657b674e64c26/funsor-0.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "3a061b53f3d3fe6802cb8be460cec283", "sha256": "64e84e7b905625c49971ec52474a9757301e6c6586eb73a9974c3b574b5170ae" }, "downloads": -1, "filename": "funsor-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "3a061b53f3d3fe6802cb8be460cec283", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 122929, "upload_time": "2020-10-15T15:54:49", "upload_time_iso_8601": "2020-10-15T15:54:49.890576Z", "url": "https://files.pythonhosted.org/packages/39/1c/d097199e82dbce3f709f9d5cf38b5948eef7544eee1608017232a3f7a2ff/funsor-0.3.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "30dbb1e20ff874db96e3c8eed5c8e5f5", "sha256": "b25f55db682cc974bf4b0e6cf7b10242a04f369df3d48c4312d586d9a152643e" }, "downloads": -1, "filename": "funsor-0.3.0.tar.gz", "has_sig": false, "md5_digest": "30dbb1e20ff874db96e3c8eed5c8e5f5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 140214, "upload_time": "2020-10-15T15:54:51", "upload_time_iso_8601": "2020-10-15T15:54:51.489841Z", "url": "https://files.pythonhosted.org/packages/3c/ff/feb00acf96ec6203cae9ae40b08482acdcbd8fb42bcd33b88b45e59d6405/funsor-0.3.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "8f2e2408ac94b3cbee8eda6d685f88dd", "sha256": "c12bdcb648277a767e32812e1a613f6bdae358fbb35d06413b3aa5e17aa25342" }, "downloads": -1, "filename": "funsor-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "8f2e2408ac94b3cbee8eda6d685f88dd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 129944, "upload_time": "2021-01-24T17:26:50", "upload_time_iso_8601": "2021-01-24T17:26:50.845225Z", "url": "https://files.pythonhosted.org/packages/b7/b1/6e49f70ed8ad5fa9043b47bf85595ec40bf2a8fdd280e06977de0324a408/funsor-0.4.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "4a5e543ebefb7e959229b9e0d1a55875", "sha256": "f5e6f5d39ef5150413175ef4bd610c0a594a8bd30881c502b1e0d01b28e0b066" }, "downloads": -1, "filename": "funsor-0.4.0.tar.gz", "has_sig": false, "md5_digest": "4a5e543ebefb7e959229b9e0d1a55875", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 157672, "upload_time": "2021-01-24T17:26:52", "upload_time_iso_8601": "2021-01-24T17:26:52.416744Z", "url": "https://files.pythonhosted.org/packages/d8/7c/c82fb7722b212e89438e52c3c4c50c2068c66d7a8ac17080dba0f3af6d70/funsor-0.4.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "276cd56193c2059a230efe1566e8ea44", "sha256": "8b6293a029af5e3f7785ef08848ca33720921473e931dd686d599b9c0cef8c48" }, "downloads": -1, "filename": "funsor-0.4.1-py3-none-any.whl", "has_sig": false, "md5_digest": "276cd56193c2059a230efe1566e8ea44", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 154683, "upload_time": "2021-07-02T04:09:26", "upload_time_iso_8601": "2021-07-02T04:09:26.774819Z", "url": "https://files.pythonhosted.org/packages/fb/68/dfe3bb6196c1193d9d2528b01b0b762a8b1701d6e9a717116f8b56faf6c3/funsor-0.4.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "eb524df7ebd28a90cd114d432eaaea03", "sha256": "3f85c19156c03b47a32122c7099cd44eb1fa8a8ab6385f08f397414c2e30de34" }, "downloads": -1, "filename": "funsor-0.4.1.tar.gz", "has_sig": false, "md5_digest": "eb524df7ebd28a90cd114d432eaaea03", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 190141, "upload_time": "2021-07-02T04:09:28", "upload_time_iso_8601": "2021-07-02T04:09:28.756763Z", "url": "https://files.pythonhosted.org/packages/bd/dc/71e76c05b9c367656c86d9f512b37278695123804033b273c4978b6b9934/funsor-0.4.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "2f6e0154a7fb72abc30ef07ff7c2f591", "sha256": "f5562640c263006919f60d6a62b760ed3e68d0c23a21992d6c9aa11d23eca7f7" }, "downloads": -1, "filename": "funsor-0.4.2-py3-none-any.whl", "has_sig": false, "md5_digest": "2f6e0154a7fb72abc30ef07ff7c2f591", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 174112, "upload_time": "2021-12-13T22:27:14", "upload_time_iso_8601": "2021-12-13T22:27:14.668626Z", "url": "https://files.pythonhosted.org/packages/78/43/3d797ceab29c45b5593d27edab628c277ff04834c56bf272f33de5175a80/funsor-0.4.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "c20ba130849b0a39cdabe6a5e8e489d9", "sha256": "7a845db68237e1b6b8250cb2084810c4c5335d2e8996e6eecd4b88c008b72851" }, "downloads": -1, "filename": "funsor-0.4.2.tar.gz", "has_sig": false, "md5_digest": "c20ba130849b0a39cdabe6a5e8e489d9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 214040, "upload_time": "2021-12-13T22:27:16", "upload_time_iso_8601": "2021-12-13T22:27:16.597050Z", "url": "https://files.pythonhosted.org/packages/ed/4c/19988d52efb91046336ec6e8810643f263c51f5a69fffbdc4fce3d2398bf/funsor-0.4.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.3": [ { "comment_text": "", "digests": { "md5": "327ee0f08a1be62955cb2c1ab32d4325", "sha256": "4a47e46e502b1e9c0645e0ac092eefac9929070e9cd2c6c7efb0b2325123d4c0" }, "downloads": -1, "filename": "funsor-0.4.3-py3-none-any.whl", "has_sig": false, "md5_digest": "327ee0f08a1be62955cb2c1ab32d4325", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 174839, "upload_time": "2022-03-21T15:16:11", "upload_time_iso_8601": "2022-03-21T15:16:11.131326Z", "url": "https://files.pythonhosted.org/packages/4e/3f/d0af61beef23cabb43cdcefd7d7ce595baa6e1e575e3013cafe4e8c4ad0c/funsor-0.4.3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "997f480a4fc338d650ca676783d24721", "sha256": "d6b58ab42c64de96917664424e107e9f0e8414121f1ab1d76dbe87d23ce9c68e" }, "downloads": -1, "filename": "funsor-0.4.3.tar.gz", "has_sig": false, "md5_digest": "997f480a4fc338d650ca676783d24721", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 219023, "upload_time": "2022-03-21T15:16:13", "upload_time_iso_8601": "2022-03-21T15:16:13.226431Z", "url": "https://files.pythonhosted.org/packages/ca/9a/dc6c08cda5264d66b38d6e0b5701f35ec735b09842afa11214feb7c6b03d/funsor-0.4.3.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "327ee0f08a1be62955cb2c1ab32d4325", "sha256": "4a47e46e502b1e9c0645e0ac092eefac9929070e9cd2c6c7efb0b2325123d4c0" }, "downloads": -1, "filename": "funsor-0.4.3-py3-none-any.whl", "has_sig": false, "md5_digest": "327ee0f08a1be62955cb2c1ab32d4325", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 174839, "upload_time": "2022-03-21T15:16:11", "upload_time_iso_8601": "2022-03-21T15:16:11.131326Z", "url": "https://files.pythonhosted.org/packages/4e/3f/d0af61beef23cabb43cdcefd7d7ce595baa6e1e575e3013cafe4e8c4ad0c/funsor-0.4.3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "997f480a4fc338d650ca676783d24721", "sha256": "d6b58ab42c64de96917664424e107e9f0e8414121f1ab1d76dbe87d23ce9c68e" }, "downloads": -1, "filename": "funsor-0.4.3.tar.gz", "has_sig": false, "md5_digest": "997f480a4fc338d650ca676783d24721", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 219023, "upload_time": "2022-03-21T15:16:13", "upload_time_iso_8601": "2022-03-21T15:16:13.226431Z", "url": "https://files.pythonhosted.org/packages/ca/9a/dc6c08cda5264d66b38d6e0b5701f35ec735b09842afa11214feb7c6b03d/funsor-0.4.3.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }