{"id":17202812,"url":"https://github.com/oboulant/tamis","last_synced_at":"2026-05-01T01:31:55.934Z","repository":{"id":45638509,"uuid":"380243175","full_name":"oboulant/tamis","owner":"oboulant","description":"Implementation in C, wrapped in Python of the exact solution by Block Coordinate Descent for fast detection of multiple change-points","archived":false,"fork":false,"pushed_at":"2021-12-03T09:59:46.000Z","size":183,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-25T09:21:35.379Z","etag":null,"topics":["change-point-detection","changepoint","python","science","scientific-computing","signal-processing"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oboulant.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-06-25T13:15:11.000Z","updated_at":"2024-10-11T15:24:03.000Z","dependencies_parsed_at":"2022-09-03T01:05:11.787Z","dependency_job_id":null,"html_url":"https://github.com/oboulant/tamis","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/oboulant/tamis","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oboulant%2Ftamis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oboulant%2Ftamis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oboulant%2Ftamis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oboulant%2Ftamis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oboulant","download_url":"https://codeload.github.com/oboulant/tamis/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oboulant%2Ftamis/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32482460,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"ssl_error","status_checked_at":"2026-04-30T13:12:06.837Z","response_time":57,"last_error":"SSL_read: 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":["change-point-detection","changepoint","python","science","scientific-computing","signal-processing"],"created_at":"2024-10-15T02:16:02.170Z","updated_at":"2026-05-01T01:31:55.903Z","avatar_url":"https://github.com/oboulant.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# tamis\n\nPython wrapping of an implementation in C of the exact solution by Block Coordinate Descent for fast detection of multiple change-points.\n\nIt follows the following paper :\n\n* J.-P. Vert and K. Bleakley, \"Fast detection of multiple change-points shared by many signals using group LARS\", In J. Lafferty, C. K. I. Williams, J. Shawe-Taylor, R.S. Zemel and A. Culotta (Eds), Advances in Neural Information Processing Systems 23 (NIPS), p.2343-2351, 2010. [[paper]](https://members.cbio.mines-paristech.fr/~jvert/svn/ngs/Lasso/article/groupLARS/nips2010/nips2010.pdf) [[supplementary informations]](https://members.cbio.mines-paristech.fr/~jvert/svn/ngs/Lasso/article/groupLARS/nips2010/supplementary.pdf) [[poster]](https://members.cbio.mines-paristech.fr/~jvert/publi/nips2010poster/poster.pdf)\n\nThe Matlab implementation by the authors can be found [here](https://members.cbio.mines-paristech.fr/~jvert/svn/GFLseg/html/).\n\nDetails about the pseudo code by the same authors can be found [here](https://hal.archives-ouvertes.fr/hal-00602121).\n\n## Local Build\n\nA local build requires to have a working C compilation suite.\n\n### From the source\n\nIn case you have cloned the repo on your machine and wish to build from the source :\n\nIf you are using `bash` :\n```bash\n\u003e python -m pip install .[dev,display]\n```\n\nIf you are using `zsh` :\n```zsh\n\u003e python -m pip install .\\[dev,display\\]\n```\n\n### From the github repository\n\nYou can also build using `pip` by providing the link to the remote repo :\n\nIf you are using `zsh` :\n```zsh\n\u003e pip install git+https://github.com/oboulant/tamis.git\n```\n\nThis still need to have configured on the machine a working C compilation chain.\n\n\n## Contributing\n\nIf you wish to contribute, please install the pre-commit hooks. If you performed a previous local install with `python -m pip install .\\[dev,display\\]`, then the `pre-commit` package should already be installed. Then, you just have to tell `pre-commit` to install the hooks.\n\n```zsh\n\u003e pre-commit install\n```\n\n## Examples\n\n### Run built-in example\n\n```zsh\n\u003e python -m examples.example\n```\n\n### Code example\n\n```python\nimport tamis as tam\nimport numpy as np\nimport ruptures as rpt\nimport matplotlib.pylab as plt\n\n\ndef get_default_weights(n):\n    i = np.arange(1, n)\n    return np.sqrt(n * 1.0 / (i * 1.0 * (n - i)))\n\n\n#######################################\n#   Generate signal\n#######################################\nn, dim = 500, 3  # number of samples, dimension\nn_bkps, sigma = 3, 0.2  # number of change points, noise standard deviation\nsignal, bkps = rpt.pw_constant(n, dim, n_bkps, noise_std=sigma, seed=1234)\n\n#######################################\n#   Compute change points\n#######################################\nweights = get_default_weights(n)\nregularization_lambda = 30.0\nn_A, A, U = tam.ebcd(signal, weights, regularization_lambda)\n\n\n#######################################\n#   Communicate on results\n#######################################\nprint(f\"{n_A} break points found :\")\nprint(list(A))\nprint(f\"True break points are :\")\nprint(bkps)\n\nrpt.display(signal, bkps, A)\nplt.show()\n```\n\n![](./images/tamis_example_graph.png)\n\n## Run tests\n\n### All tests\n\nIn order to start both tests in C and Python, from the top directory :\n\n```zsh\n\u003e make test \u0026\u0026 make clean\n```\n\n### Python test\n\nThe package has to be installed with the `.[dev,test]` options (so that `pytest` is installed)\n\n```zsh\n\u003e python -m pip install .[dev,test]\n\u003e python -m pytest\n```\n\nIt is to be noted that this repository being just a wrapper on the C implementation, tests in python only perform a high level test (we check that with a multidimensional signal without any noise, it outputs the true break points).\n\nUnit tests are performed in C.\n\n### C tests\n\nFrom the top directory:\n\n```zsh\n\u003e (cd tests/c \u0026\u0026 make test \u0026\u0026 ./test \u0026\u0026 make clean)\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foboulant%2Ftamis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foboulant%2Ftamis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foboulant%2Ftamis/lists"}