{"id":37081558,"url":"https://github.com/scope-lab/pyest","last_synced_at":"2026-01-14T09:54:41.464Z","repository":{"id":295823115,"uuid":"941604532","full_name":"scope-lab/pyest","owner":"scope-lab","description":"Python library for adaptive Gaussian mixture state estimation. Useful for navigation and tracking in nonlinear non-Gaussian systems. Capable of incorporating negative information and other imprecise evidence.","archived":false,"fork":false,"pushed_at":"2025-11-23T03:04:27.000Z","size":585,"stargazers_count":4,"open_issues_count":1,"forks_count":4,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-11-23T03:26:26.550Z","etag":null,"topics":["bayesian-filtering","gaussian-mixture","gaussian-splitting","negative-information","nonlinear-estimation","state-estimation","target-tracking","uncertainty-propagation"],"latest_commit_sha":null,"homepage":"https://pyest.readthedocs.io/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/scope-lab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-03-02T17:22:12.000Z","updated_at":"2025-11-23T02:49:20.000Z","dependencies_parsed_at":null,"dependency_job_id":"e6ff9278-022e-46f8-8de7-bc6302345223","html_url":"https://github.com/scope-lab/pyest","commit_stats":null,"previous_names":["scope-lab/pyest"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/scope-lab/pyest","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scope-lab%2Fpyest","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scope-lab%2Fpyest/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scope-lab%2Fpyest/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scope-lab%2Fpyest/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/scope-lab","download_url":"https://codeload.github.com/scope-lab/pyest/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scope-lab%2Fpyest/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28416129,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T08:38:59.149Z","status":"ssl_error","status_checked_at":"2026-01-14T08:38:43.588Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bayesian-filtering","gaussian-mixture","gaussian-splitting","negative-information","nonlinear-estimation","state-estimation","target-tracking","uncertainty-propagation"],"created_at":"2026-01-14T09:54:40.839Z","updated_at":"2026-01-14T09:54:41.458Z","avatar_url":"https://github.com/scope-lab.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"![pyest_logo](https://github.com/scope-lab/pyest/blob/main/docs/image/pyest_logo.png?raw=true)\n\n# PyEst: Adaptive Gaussian Mixture State Estimation\n\n[![Python application](https://github.com/scope-lab/pyest/actions/workflows/pythonapp.yml/badge.svg)](https://github.com/scope-lab/pyest/actions/workflows/pythonapp.yml)\n\n\u003e **Not pytest**: PyEst is a Python library for **adaptive Gaussian mixture state estimation**.\n\u003e For the Python test framework, see [pytest](https://pytest.org).\n\n## Basic Usage\n\nImport the `gm` module of PyEst as well as numpy and matplotlib\n```\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport pyest.gm as gm\n```\n\nCreate a three-mixand two-dimensional Gaussian mixture:\n```\n# mixand means (nc,nx)\nm = np.array([[0,0], [1,2], [0,-1]])\n# mixand covariance matrices (nc,nx,nx)\nP = np.array([[[1,0], [0,1]],\n              [[2, 0.5], [0.5,3]],\n              [[0.5, -0.1], [-0.1, 1]]])\n# mixand weights (nc,)\nw = gm.equal_weights(3)\n# contruct the Gaussian mixture\np = gm.GaussianMixture(w, m, P)\n```\n\nCompute the mean and covariance of the distribution:\n```\n# compute and print the mean\nprint(p.mean())\n# compute and print the covariance\nprint(p.cov())\n```\n\nPlot the Gaussian mixture\n```\npp, XX, YY = p.pdf_2d()\nfig = plt.figure()\nax = fig.add_axes(111)\nax.contourf(XX,YY,pp,100)\n```\n\nApply a linear transformation to the mixture\n```\ndt = 5\nF = np.array([[1, dt], [0, 1]])\nmy = np.array([F@m for m in p.m])\nPy = np.array([F@P@F.T for P in p.P])\npy = gm.GaussianMixture(p.w, my, Py)\n```\n\nPlot the transformed Gaussian mixture\n```\npp, XX, YY = py.pdf_2d()\nfig = plt.figure()\nax = fig.add_axes(111)\nax.contourf(XX,YY,pp,100)\nplt.show()\n```\n\n## Installation\n\n### OS X (zsh)\nTo install, run\n```shell\npip install pyest\n```\n\nTo install packages needed for running the examples, run\n ```shell\npip install 'pyest[examples]'\n```\n\n### OS X (bash), Windows (cmd prompt)\nTo install, run\n```shell\npip install pyest\n```\n\nTo install packages needed for running the examples, run\n ```shell\npip install pyest[examples]\n```\n\n\n## Citing this work\n\nIf you use this package in your scholarly work, please cite the following articles:\n\n[K.A. LeGrand and S. Ferrari, “Split Happens! Imprecise and Negative Information in Gaussian Mixture Random Finite Set Filtering,” Journal of Advances in Information Fusion,  Vol 17, No. 2, December, 2022](http://keithlegrand.com/wp/wp-content/uploads/2023/05/LeGrand-2022-Split-Happens-Imprecise-and-Negative-Information-in-Gaussian-Mixture-Random-Finite-Set-Filtering.pdf)\n\nJ. Kulik and K.A. LeGrand, “Nonlinearity and Uncertainty Informed Moment-Matching Gaussian Mixture Splitting,” https://arxiv.org/abs/2412.00343\n\n\n```\n@article{legrand2022SplitHappensImprecise,\n  title = {Split {{Happens}}! Imprecise and Negative Information in {G}aussian Mixture Random Finite Set Filtering},\n  author = {LeGrand, Keith A. and Ferrari, Silvia},\n  year = {2022},\n  month = dec,\n  journal = {Journal of Advances in Information Fusion},\n  volume = {17},\n  number = {2},\n  eprint = {2207.11356},\n  primaryclass = {cs, eess},\n  pages = {78--96},\n  doi = {10.48550/arXiv.2207.11356},\n}\n@misc{kulik2024NonlinearityUncertaintyInformed,\n  title = {Nonlinearity and {{Uncertainty Informed Moment-Matching Gaussian Mixture Splitting}}},\n  author = {Kulik, Jackson and LeGrand, Keith A.},\n  year = {2024},\n  month = nov,\n  number = {arXiv:2412.00343},\n  eprint = {2412.00343},\n  primaryclass = {stat},\n  publisher = {arXiv},\n  doi = {10.48550/arXiv.2412.00343},\n  urldate = {2025-01-01},\n  archiveprefix = {arXiv}\n}\n\n```\n\n## Documentation\n\nFor more information about PyEst, please see the [documentation](https://pyest.readthedocs.io/en/latest/).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscope-lab%2Fpyest","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fscope-lab%2Fpyest","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscope-lab%2Fpyest/lists"}