pythermalcomfort

Package to calculate several thermal comfort indices (e.g. PMV, PPD, SET, adaptive) and convert physical variables.
https://github.com/CenterForTheBuiltEnvironment/pythermalcomfort

Category: Consumption
Sub Category: Buildings and Heating

Keywords from Contributors

transforms observation optimize archiving measur conversion compose animals generic projection

Last synced: about 12 hours ago
JSON representation

Repository metadata

Package to calculate several thermal comfort indices (e.g. PMV, PPD, SET, adaptive) and convert physical variables.

README.rst

          .. image:: https://github.com/CenterForTheBuiltEnvironment/pythermalcomfort/raw/development/docs/images/pythermalcomfort-3-short.png
  :align: center
  :alt: pythermalcomfort logo

================
pythermalcomfort
================

The ``pythermalcomfort`` Python package is a comprehensive toolkit for calculating
thermal comfort indices, heat/cold stress metrics, and thermophysiological
responses based on international standards and peer-reviewed research. Designed
for researchers, engineers, and building-science professionals, it simplifies
complex calculations while promoting accuracy and standards compliance.

Cite pythermalcomfort
=====================

If you use ``pythermalcomfort`` in your research, please cite it as follows:

.. code-block:: text

   Tartarini, F., Schiavon, S., 2020.
   pythermalcomfort: A Python package for thermal comfort research.
   SoftwareX 12, 100578.
   https://doi.org/10.1016/j.softx.2020.100578

Key Features
============

- **Thermal Comfort Calculations**:
  Supports multiple models, including **PMV**, **PPD**, **adaptive comfort**, and
  **SET**.
- **Heat and Cold Stress Indices**:
  Calculate **UTCI**, **Heat Index**, **Wind Chill Index**, and **Humidex**.
- **Thermophysiological Models**:
  Includes the **two-node (Gagge)** and **multinode (JOS-3)** models to estimate
  physiological responses such as core temperature, skin temperature, and skin
  wettedness.
- **Standards Compliance**:
  Implements calculations based on **ASHRAE 55**, **ISO 7730**, **EN 16798**, and
  more.
- **Ease of Use**:
  Intuitive API for seamless integration into Python projects.
- **Extensive Documentation**:
  Detailed guides, examples, and tutorials.
- **Active Development**:
  Regularly updated with new features, improvements, and bug fixes.
- **Open Source**:
  Licensed under the MIT License.

Why Use pythermalcomfort?
=========================

- **Accurate Assessments**:
  Reliable thermal comfort and stress evaluations for diverse environments.
- **Time-Saving**:
  Automates complex calculations, saving time and effort.
- **Versatility**:
  Useful for building science, HVAC design, environmental design, thermal
  physiology, sports science, and biometeorology.
- **Enhanced Decision-Making**:
  Supports data-driven decisions for HVAC systems, building performance, and
  occupant comfort.

Installation
============

Install ``pythermalcomfort`` via pip:

.. code-block:: bash

   pip install pythermalcomfort

For advanced installation options, refer to the
`Installation Instructions `_.

Requirements
============

A typical environment includes:

- Python 3.9+ (or the minimum version used in CI)
- NumPy, SciPy, pandas (installed automatically as package dependencies)
- Optional: Matplotlib / other plotting libraries for examples and visualizations

Quick Start
===========

Get started with ``pythermalcomfort`` in just a few lines of code:

.. code-block:: python

   from pythermalcomfort.models import pmv_ppd_iso, utci

   # Calculate PMV and PPD using ISO 7730 standard
   result = pmv_ppd_iso(
       tdb=25,  # Dry Bulb Temperature in °C
       tr=25,  # Mean Radiant Temperature in °C
       vr=0.1,  # Relative air speed in m/s
       rh=50,  # Relative Humidity in %
       met=1.4,  # Metabolic rate in met
       clo=0.5,  # Clothing insulation in clo
       model="7730-2005"  # Year of the ISO standard
   )
   print(f"PMV: {result.pmv}, PPD: {result.ppd}")

   # Calculate UTCI for heat stress assessment
   utci_value = utci(tdb=30, tr=30, v=0.5, rh=50)
   print(utci_value)

For more examples and detailed usage, check out models and indices in the models section of the documentation.

Support pythermalcomfort
========================

If you find this project useful, consider supporting the maintainers. Maintaining
an open-source scientific package requires time for development, review, CI,
and user support.

Ways to support
---------------

- Sponsor via GitHub: https://github.com/sponsors/FedericoTartarini
- Contribute code, tests, or documentation: open a PR against `pythermalcomfort`
- Report bugs or request features with a minimal reproduction in `issues`
- Help with testing, translations, or reviewing pull requests
- Star or share the project to increase visibility

Any support—financial or contribution-based—is appreciated and helps keep the
project healthy.

Contribute
==========

We welcome contributions! Whether reporting a bug, suggesting a feature, or
submitting a pull request, your input helps make ``pythermalcomfort`` better for
everyone. See the `contributing guide `_ for full contribution instructions.

Quick checklist
---------------

* Open an issue first for larger features to discuss scope and design.
* Fork the repo and create a feature branch for your work.
* Add tests for new behavior and run the test suite locally.
* Run linters and formatters and fix reported issues.
* Update documentation and changelog entries for public API changes.
* Submit a clear, focused pull request referencing any related issues.

Common commands
---------------

.. code-block:: bash

    # clone your fork and add upstream remote
    git clone git@github.com:your-username/pythermalcomfort.git
    cd pythermalcomfort
    git remote add upstream git@github.com:CenterForTheBuiltEnvironment/pythermalcomfort.git
    git fetch upstream

    # create a branch and work on it
    git checkout -b Feature/awesome-feature

    # run the full test matrix (may be slow)
    tox

    # run a single test env locally (replace py312 with the env you want)
    tox -e py312

    # run a subset of pytest tests
    pytest -k test_name_fragment

    # fix linting/formatting
    ruff check --fix
    ruff format
    docformatter --in-place --wrap-summaries 88 --wrap-descriptions 88 pythermalcomfort/*.py

    # commit and push
    git add .
    git commit -m "feat: short description of change"
    git push origin Feature/awesome-feature

Where to get help
-----------------

* Open an issue on GitHub with a minimal reproduction for bugs.
* Ask questions in PR comments for implementation guidance.
* See the `contribution guidelines `_ for detailed guidance on testing,
  documentation, and changelog expectations.
* For API reference and examples, consult the online docs:
  https://pythermalcomfort.readthedocs.io/en/latest/

Documentation
-------------

Detailed docs, examples and API references are available at:
https://pythermalcomfort.readthedocs.io/en/latest/

License
=======

``pythermalcomfort`` is released under the MIT License.

=====
Stats
=====

.. start-badges

.. list-table::
    :stub-columns: 1

    * - Documentation
      - |docs|
    * - License
      - |license|
    * - Downloads
      - |downloads|
    * - Tests
      - | |codecov|
        | |tests|
    * - Package
      - | |version| |wheel|
        | |supported-ver|
        | |package-health|

.. |tests| image:: https://github.com/CenterForTheBuiltEnvironment/pythermalcomfort/actions/workflows/build-test-publish.yml/badge.svg
    :target: https://github.com/CenterForTheBuiltEnvironment/pythermalcomfort/actions/workflows/build-test-publish.yml
    :alt: Tests to ensure pythermalcomfort works on different Python versions and OS

.. |package-health| image:: https://snyk.io/advisor/python/pythermalcomfort/badge.svg
    :target: https://snyk.io/advisor/python/pythermalcomfort
    :alt: pythermalcomfort

.. |license| image:: https://img.shields.io/pypi/l/pythermalcomfort?color=brightgreen
    :target: https://github.com/CenterForTheBuiltEnvironment/pythermalcomfort/blob/master/LICENSE
    :alt: pythermalcomfort license

.. |docs| image:: https://readthedocs.org/projects/pythermalcomfort/badge/?style=flat
    :target: https://readthedocs.org/projects/pythermalcomfort
    :alt: Documentation Status

.. |downloads| image:: https://img.shields.io/pypi/dm/pythermalcomfort?color=brightgreen
    :alt: PyPI - Downloads

.. |codecov| image:: https://codecov.io/github/CenterForTheBuiltEnvironment/pythermalcomfort/coverage.svg?branch=master
    :alt: Coverage Status
    :target: https://codecov.io/github/CenterForTheBuiltEnvironment/pythermalcomfort

.. |version| image:: https://img.shields.io/pypi/v/pythermalcomfort.svg
    :alt: PyPI Package latest release
    :target: https://pypi.org/project/pythermalcomfort

.. |wheel| image:: https://img.shields.io/pypi/wheel/pythermalcomfort.svg
    :alt: pythermalcomfort wheel
    :target: https://pypi.org/project/pythermalcomfort

.. |supported-ver| image:: https://img.shields.io/pypi/pyversions/pythermalcomfort.svg
    :alt: Supported versions
    :target: https://pypi.org/project/pythermalcomfort

.. |supported-implementations| image:: https://img.shields.io/pypi/implementation/pythermalcomfort.svg
    :alt: Supported implementations
    :target: https://pypi.org/project/pythermalcomfort

.. end-badges

        

Citation (CITATION.bib)

@article{Tartarini2020a,
author = {Tartarini, Federico and Schiavon, Stefano},
doi = {10.1016/j.softx.2020.100578},
issn = {23527110},
journal = {SoftwareX},
month = {jul},
pages = {100578},
publisher = {Elsevier B.V.},
title = {{pythermalcomfort: A Python package for thermal comfort research}},
url = {https://doi.org/10.1016/j.softx.2020.100578 https://linkinghub.elsevier.com/retrieve/pii/S2352711020302910},
volume = {12},
year = {2020}
}

Owner metadata


GitHub Events

Total
Last Year

Committers metadata

Last synced: 20 days ago

Total Commits: 1,159
Total Committers: 19
Avg Commits per committer: 61.0
Development Distribution Score (DDS): 0.241

Commits in past year: 373
Committers in past year: 11
Avg Commits per committer in past year: 33.909
Development Distribution Score (DDS) in past year: 0.193

Name Email Commits
federico tartarini f****i@g****m 880
AkihisaNomoto 6****o 133
royce-chen c****i@g****m 47
Twin Gan t****n@g****m 30
Lars Buntemeyer l****r@h****e 16
number9527-12 l****0@g****m 15
Yehui Huang y****d@g****m 6
Jiayi Wang j****8@u****u 5
Charles Simpson c****n@u****k 5
周小希 z****i@z****l 4
copilot-swe-agent[bot] 1****t 4
grjonathan j****m@r****a 4
Jonas Kittner j****r@r****e 3
Tyler Hoyt t****t@g****m 2
Lorenzo Donadio 4****o 1
benterich 1****h 1
dependabot[bot] 4****] 1
Freya Li f****i@F****l 1
t-kramer t****r@b****u 1

Committer domains:


Issue and Pull Request metadata

Last synced: 13 days ago

Total issues: 150
Total pull requests: 133
Average time to close issues: 3 months
Average time to close pull requests: 5 days
Total issue authors: 46
Total pull request authors: 24
Average comments per issue: 1.8
Average comments per pull request: 1.63
Merged pull request: 98
Bot issues: 0
Bot pull requests: 9

Past year issues: 59
Past year pull requests: 82
Past year average time to close issues: about 2 months
Past year average time to close pull requests: 6 days
Past year issue authors: 11
Past year pull request authors: 16
Past year average comments per issue: 1.22
Past year average comments per pull request: 1.91
Past year merged pull request: 54
Past year bot issues: 0
Past year bot pull requests: 9

More stats: https://issues.ecosyste.ms/repositories/lookup?url=https://github.com/CenterForTheBuiltEnvironment/pythermalcomfort

Top Issue Authors

  • FedericoTartarini (85)
  • TwinGan (5)
  • AkihisaNomoto (4)
  • number9527-12 (4)
  • adibantwal (4)
  • grjonathan (3)
  • oylinv (2)
  • stefanoschiavon (2)
  • eddes (2)
  • LeylayqZhang (2)
  • benterich (2)
  • ProteekChaudhuriBertLabs (1)
  • amitche8 (1)
  • haze1986 (1)
  • FazelGanji (1)

Top Pull Request Authors

  • FedericoTartarini (53)
  • rcqz (16)
  • TwinGan (9)
  • dependabot[bot] (8)
  • jkittner (7)
  • AkihisaNomoto (5)
  • benterich (5)
  • t-kramer (4)
  • Copilot (4)
  • LianqiWang111 (3)
  • C-H-Simpson (2)
  • windsoul124 (2)
  • yehui-h (2)
  • KristinaM93 (2)
  • larsbuntemeyer (2)

Top Issue Labels

  • enhancement (24)
  • new model (17)
  • bug (7)
  • wontfix (3)
  • documentation (2)
  • question (1)
  • help wanted (1)
  • python (1)

Top Pull Request Labels

  • dependencies (8)
  • python (8)
  • enhancement (5)

Package metadata

pypi.org: pythermalcomfort

pythermalcomfort is a comprehensive toolkit for calculating thermal comfort indices, heat/cold stress metrics, and thermophysiological responses. It supports multiple models, including PMV, PPD, adaptive comfort, SET, UTCI, Heat Index, Wind Chill Index, and Humidex. The package also includes thermophysiological models like the two-node (Gagge) and multinode (JOS-3) models to estimate physiological responses such as core temperature, skin temperature, and skin wettedness.

  • Homepage: https://github.com/CenterForTheBuiltEnvironment/pythermalcomfort
  • Documentation: https://pythermalcomfort.readthedocs.io/
  • Licenses: MIT
  • Latest release: 3.7.0 (published 15 days ago)
  • Last Synced: 2025-10-29T11:05:47.755Z (14 days ago)
  • Versions: 96
  • Dependent Packages: 0
  • Dependent Repositories: 4
  • Downloads: 16,408 Last month
  • Docker Downloads: 38,775
  • Rankings:
    • Downloads: 3.394%
    • Forks count: 6.058%
    • Average: 6.235%
    • Stargazers count: 6.762%
    • Dependent packages count: 7.31%
    • Dependent repos count: 7.649%
  • Maintainers (1)
proxy.golang.org: github.com/CenterForTheBuiltEnvironment/pythermalcomfort

proxy.golang.org: github.com/centerforthebuiltenvironment/pythermalcomfort


Dependencies

ci/requirements.txt pypi
  • pip >=19.1.1
  • setuptools >=18.0.1
  • virtualenv >=16.6.0
docs/requirements.txt pypi
  • docutils <0.18
  • sphinx >=1.3
  • sphinx-rtd-theme *
setup.py pypi
  • jos3 *
  • numba *
  • numpy *
  • scipy *
.github/workflows/build-test-publish.yml actions
  • actions/checkout v3 composite
  • actions/checkout v2 composite
  • actions/setup-python v4 composite
  • actions/setup-python v2 composite

Score: 19.313996369777033