{"id":13557326,"url":"https://github.com/oemof/tespy","last_synced_at":"2025-10-21T19:31:46.880Z","repository":{"id":38802613,"uuid":"113834202","full_name":"oemof/tespy","owner":"oemof","description":"Thermal Engineering Systems in Python (TESPy). This package provides a powerful simulation toolkit for thermodynamic modeling of thermal engineering plants such as power plants, heat pumps or refrigeration machines.","archived":false,"fork":false,"pushed_at":"2025-10-19T06:49:14.000Z","size":17071,"stargazers_count":344,"open_issues_count":67,"forks_count":117,"subscribers_count":25,"default_branch":"dev","last_synced_at":"2025-10-19T07:14:16.744Z","etag":null,"topics":["cooling","energy-system","exergy","heating","powerplant","process-engineering","python","refrigeration","simulation","thermodynamic-cycles","thermodynamics"],"latest_commit_sha":null,"homepage":"https://tespy.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/oemof.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":"docs/support.rst","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":"2017-12-11T08:44:12.000Z","updated_at":"2025-10-19T06:49:04.000Z","dependencies_parsed_at":"2024-04-03T12:01:55.642Z","dependency_job_id":"487b13ef-7b66-4110-b4dd-4a8237256ba1","html_url":"https://github.com/oemof/tespy","commit_stats":{"total_commits":3068,"total_committers":28,"mean_commits":"109.57142857142857","dds":0.1013689700130378,"last_synced_commit":"8d47499fb1669fb368df43b06c681d25faa6ab98"},"previous_names":[],"tags_count":74,"template":false,"template_full_name":null,"purl":"pkg:github/oemof/tespy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oemof%2Ftespy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oemof%2Ftespy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oemof%2Ftespy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oemof%2Ftespy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oemof","download_url":"https://codeload.github.com/oemof/tespy/tar.gz/refs/heads/dev","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oemof%2Ftespy/sbom","scorecard":{"id":702831,"data":{"date":"2025-08-11","repo":{"name":"github.com/oemof/tespy","commit":"a5d61fc5317a0680b5bf87e48a0afbbff5b6b173"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5.4,"checks":[{"name":"Maintained","score":10,"reason":"30 commit(s) and 26 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":1,"reason":"Found 1/10 approved changesets -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/packaging.yml:1","Warn: no topLevel permission defined: .github/workflows/tox_checks.yml:1","Warn: no topLevel permission defined: .github/workflows/tox_pytest.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/packaging.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/oemof/tespy/packaging.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/packaging.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/oemof/tespy/packaging.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/packaging.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/oemof/tespy/packaging.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tox_checks.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/oemof/tespy/tox_checks.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tox_checks.yml:33: update your workflow using https://app.stepsecurity.io/secureworkflow/oemof/tespy/tox_checks.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tox_checks.yml:38: update your workflow using https://app.stepsecurity.io/secureworkflow/oemof/tespy/tox_checks.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tox_pytest.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/oemof/tespy/tox_pytest.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tox_pytest.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/oemof/tespy/tox_pytest.yml/dev?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/packaging.yml:29","Warn: pipCommand not pinned by hash: .github/workflows/tox_checks.yml:47","Warn: pipCommand not pinned by hash: .github/workflows/tox_checks.yml:48","Warn: pipCommand not pinned by hash: .github/workflows/tox_pytest.yml:31","Warn: pipCommand not pinned by hash: .github/workflows/tox_pytest.yml:32","Info:   0 out of   8 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   5 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"SAST","score":7,"reason":"SAST tool is not run on all commits -- score normalized to 7","details":["Warn: 19 commits out of 24 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-22T05:36:45.855Z","repository_id":38802613,"created_at":"2025-08-22T05:36:45.855Z","updated_at":"2025-08-22T05:36:45.855Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279827866,"owners_count":26232958,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-19T02:00:07.647Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["cooling","energy-system","exergy","heating","powerplant","process-engineering","python","refrigeration","simulation","thermodynamic-cycles","thermodynamics"],"created_at":"2024-08-01T12:04:16.925Z","updated_at":"2025-10-21T19:31:46.832Z","avatar_url":"https://github.com/oemof.png","language":"Python","readme":"Thermal Engineering Systems in Python\n=====================================\nTESPy stands for \"Thermal Engineering Systems in Python\" and provides a\npowerful simulation toolkit for thermal engineering plants such as various\ntypes of power plants (including organic rankine cycles), heat pumps or\nrefrigeration machines. Due to its flexibility it is actually possible to\nmodel any kind of thermal energy conversion process, this also includes energy\nbalancing of industrial processes, district heating or HVAC systems. It is\npart of the Open Energy Modelling Framework `oemof \u003chttps://oemof.org/\u003e`_ and\ncan be used as a standalone package.\n\n.. figure:: https://raw.githubusercontent.com/oemof/tespy/9915f013c40fe418947a6e4c1fd0cd0eba45893c/docs/api/_images/logo_tespy_big.svg\n    :align: center\n\nWith the TESPy package you are able to calculate stationary operation in order\nto design the process of thermal energy systems. From that point it is possible\nto simulate the offdesign behavior of your plant using underlying\ncharacteristics for each of the plants components. The package includes basic\ncomponents, such as turbines, pumps, compressors, heat exchangers, pipes,\nmixers and splitters as well as some advanced components (derivatives of heat\nexchangers, drum).\n\nEverybody is welcome to use and/or develop TESPy. Contribution is already\npossible on a low level by simply fixing typos in TESPy's documentation or\nrephrasing sections which are unclear. If you want to support us that way\nplease fork the TESPy repository to your own GitHub account and make changes\nas described in the GitHub guidelines:\nhttps://guides.github.com/activities/hello-world/\n\nKey Features\n============\n* **Open** Source\n* **Generic** thermal engineering applications\n* **Extendable** framework for the implementation of custom components, fluid\n  property formulations and equations\n* **Integration** of optimization capabilities through an API to pygmo\n* **Postprocessing** features like exergy analysis and fluid property plotting\n\n.. start-badges\n\n.. list-table::\n    :stub-columns: 1\n\n    * - docs\n      - |docs|\n    * - tests\n      - |pytests| |checks| |packaging| |coveralls|\n    * - package\n      - | |version| |wheel| |supported-versions| |commits-since|\n    * - reference\n      - |joss| |zenodo|\n\n.. |docs| image:: https://readthedocs.org/projects/tespy/badge/?style=flat\n    :target: https://readthedocs.org/projects/tespy\n    :alt: Documentation Status\n\n.. |pytests| image:: https://github.com/oemof/tespy/workflows/tox%20pytests/badge.svg\n    :target: https://github.com/oemof/tespy/actions?query=workflow%3A%22tox+pytests%22\n    :alt: tox pytest\n\n.. |checks| image:: https://github.com/oemof/tespy/workflows/tox%20checks/badge.svg\n    :target: https://github.com/oemof/tespy/actions?query=workflow%3A%22tox+checks%22\n    :alt: tox checks\n\n.. |packaging| image:: https://github.com/oemof/tespy/workflows/packaging/badge.svg\n    :target: https://github.com/oemof/tespy/actions?query=workflow%3Apackaging\n    :alt: packaging\n\n.. |coveralls| image:: https://coveralls.io/repos/oemof/tespy/badge.svg?branch=main\u0026service=github\n    :alt: Coverage Status\n    :target: https://coveralls.io/r/oemof/tespy\n\n.. |version| image:: https://img.shields.io/pypi/v/tespy.svg\n    :alt: PyPI Package latest release\n    :target: https://pypi.org/project/tespy\n\n.. |wheel| image:: https://img.shields.io/pypi/wheel/tespy.svg\n    :alt: PyPI Wheel\n    :target: https://pypi.org/project/tespy\n\n.. |supported-versions| image:: https://img.shields.io/pypi/pyversions/tespy.svg\n    :alt: Supported Python versions\n    :target: https://pypi.org/project/tespy\n\n.. |commits-since| image:: https://img.shields.io/github/commits-since/oemof/tespy/latest/dev\n    :alt: Commits since latest release\n    :target: https://github.com/oemof/tespy/compare/main...dev\n\n.. |zenodo| image:: https://zenodo.org/badge/DOI/10.5281/zenodo.2555866.svg\n   :alt: Release archive\n   :target: https://doi.org/10.5281/zenodo.2555866\n\n.. |joss| image:: https://joss.theoj.org/papers/590b0b4767606bce4d0ebe397d4b7a4f/status.svg\n   :alt: Software Paper in JOSS\n   :target: https://joss.theoj.org/papers/590b0b4767606bce4d0ebe397d4b7a4f\n\n.. end-badges\n\nDocumentation\n=============\nYou can find the full documentation at\n`readthedocs \u003chttp://tespy.readthedocs.org\u003e`_. Use the\n`project site \u003chttp://readthedocs.org/projects/tespy\u003e`_ of readthedocs to\nchoose the version of the documentation.\n\nTo get the latest news visit and follow our `website \u003chttps://www.oemof.org\u003e`_.\n\nInstalling TESPy\n================\nIf you have a working Python3 environment, use pypi to install the latest\ntespy version:\n\n.. code:: bash\n\n  pip install tespy\n\nIf you want to use the latest features, you might want to install the\n**developer version**. See section\n`Developing TESPy \u003chttp://tespy.readthedocs.io/en/dev/development/how.html\u003e`_\nfor more information. The developer version is not recommended for productive\nuse.\n\nGet in touch\n============\n\nOnline \"Stammtisch\"\n-------------------\n\nWe have decided to start a reoccurring \"Stammtisch\" meeting for all interested\nTESPy users and (potential) developers. You are invited to join us on every 3rd\nMonday of a month at 17:00 CE(S)T for a casual get together. The first meeting\nwill be held at June, 20, 2022. The intent of this meeting is to establish a\nmore active and well-connected network of TESPy users and developers.\n\nIf you are interested, you can simply join the meeting at\nhttps://meet.jit.si/tespy_user_meeting. We are looking forward to seeing you!\n\nUser forum\n----------\nWe have implemented a\n`discussion room on GitHub \u003chttps://github.com/oemof/tespy/discussions\u003e`__ as\nuser forum. If you have issues with setting up your model or any other question\nabout using the software, you are invited to start a discussion there.\n\nExamples\n========\n\nFor a short introduction on how TESPy works and how you can use it, we provide\nan extensive `user guide \u003chttps://tespy.readthedocs.io/en/main/\u003e`__. You can\ndownload all python scripts of the examples and tutorials from this GitHub\nrepository. They are included in the \"tutorial\" directory.\n\nCitation\n========\nThe scope and functionalities of TESPy have been documented in a paper\npublished in the Journal of Open Source Software with an Open-Access license.\nDownload the paper from https://doi.org/10.21105/joss.02178. As TESPy is a free\nsoftware, we kindly ask that you add a reference to TESPy if you use the\nsoftware for your scientific work. Please cite the article with the BibTeX\ncitation below.\n\nBibTeX citation::\n\n    @article{Witte2020,\n        doi = {10.21105/joss.02178},\n        year = {2020},\n        publisher = {The Open Journal},\n        volume = {5},\n        number = {49},\n        pages = {2178},\n        author = {Francesco Witte and Ilja Tuschy},\n        title = {{TESPy}: {T}hermal {E}ngineering {S}ystems in {P}ython},\n        journal = {Journal of Open Source Software}\n    }\n\nFurthermore, a paper on the exergy analysis feature has been published in\nthe mdpi journal energies. You can download the pdf at\nhttps://doi.org/10.3390/en15114087. If you are using this feature specifically,\nyou can reference it with the following BibTeX citation:\n\nBibTeX citation::\n\n    @article{Witte2022,\n        doi = {10.3390/en15114087},\n        year = {2022},\n        volume = {15},\n        number = {11},\n        article-number = {4087},\n        issn = {1996-1073},\n        author = {Witte, Francesco and Hofmann, Mathias and Meier, Julius and Tuschy, Ilja and Tsatsaronis, George},\n        title = {Generic and Open-Source Exergy Analysis\u0026mdash;Extending the Simulation Framework TESPy},\n        journal = {Energies}\n    }\n\n\nAdditionally, you have the possibility to cite a specific version of TESPy to\nmake your work reproducible. The source code of every version is published on\nzenodo. Find your version here: https://doi.org/10.5281/zenodo.2555866.\n\nLicense\n=======\nCopyright (c) Francesco Witte\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","funding_links":[],"categories":["Consumption","Python","python"],"sub_categories":["Buildings and Heating"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foemof%2Ftespy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foemof%2Ftespy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foemof%2Ftespy/lists"}