%global _empty_manifest_terminate_build 0 Name: python-psychrochart Version: 0.9.1 Release: 1 Summary: A python 3 library to make psychrometric charts and overlay information on them License: MIT URL: https://github.com/azogue/psychrochart Source0: https://mirrors.aliyun.com/pypi/web/packages/90/a3/66e53b930dafdc8d25fbe787f63e60620f988df4cff25632c597818ad97d/psychrochart-0.9.1.tar.gz BuildArch: noarch Requires: python3-matplotlib Requires: python3-scipy Requires: python3-psychrolib Requires: python3-pydantic Requires: python3-slugify %description [![pre-commit.ci Status][pre-commit-ci-image]][pre-commit-ci-url] [![Build Status][build-image]][build-url] [![PyPI Version][pypi-image]][pypi-url] [pre-commit-ci-image]: https://results.pre-commit.ci/badge/github/azogue/psychrochart/master.svg [pre-commit-ci-url]: https://results.pre-commit.ci/latest/github/azogue/psychrochart/master [build-image]: https://github.com/azogue/psychrochart/actions/workflows/main.yml/badge.svg [build-url]: https://github.com/azogue/psychrochart/actions/workflows/main.yml [pypi-image]: https://img.shields.io/pypi/v/psychrochart [pypi-url]: https://pypi.org/project/psychrochart/ # Psychrochart A python 3 library to make **[psychrometric charts](https://en.wikipedia.org/wiki/Psychrometrics)** and overlay information on them. It implements a useful collection of psychrometric equations for moisture and humid air calculations, and the generation of beautiful and high customizable **psychrometric charts in SVG** with [`matplotlib`](https://matplotlib.org). **Psychrometric calculations to make the chart data are done with [`PsychroLib`](https://github.com/psychrometrics/psychrolib)** (summary paper in https://doi.org/10.21105/joss.01137). ## Install Get it **[from pypi](https://pypi.python.org/pypi?:action=display&name=psychrochart)** or **[clone it](https://github.com/azogue/psychrochart.git)** if you want to run the tests. ```shell pip install psychrochart ``` ## Features - **SI** units (with temperatures in celsius for better readability), with _partial_ compatibility with IP system (imperial units) - Easy style customization based on [**pydantic**](https://docs.pydantic.dev/latest/) models and config presets for full customization of **chart limits**, included lines and labels, colors, line styles, line widths, etc.. - Psychrometric charts within temperature and humidity ratio ranges, for any pressure\*, with: - **Saturation line** - **Constant RH lines** - **Constant enthalpy lines** - **Constant wet-bulb temperature lines** - **Constant specific volume lines** - **Constant dry-bulb temperature lines** (internal orthogonal grid, vertical) - **Constant humidity ratio lines** (internal orthogonal grid, horizontal) - Plot legend for each family of lines, labeled zones and annotations - Specify labels for each family of lines - Overlay points, arrows, **data-series** (numpy arrays or pandas series), and convex hulls around points - Define multiple kinds of **zones limited by psychrometric values**: - 'dbt-rh' for areas between dry-bulb temperature and relative humidity values, - 'enthalpy-rh' for areas between constant enthalpy and relative humidity values - 'volume-rh' for areas between constant volume and relative humidity values - 'dbt-wmax' for an area between dry-bulb temperature and water vapor content values (:= a rectangle cut by the saturation line), - 'xy-points' to define arbitrary closed paths in plot coordinates (dbt, abs humidity) - **Export as SVG, PNG files**, or generate dynamic SVGs with extra CSS and with `chart.make_svg(...)` > NOTE: The ranges of temperature, humidity and pressure where this library should provide good results are within the normal environments for people to live in. > > Don't expect right results if doing other type of thermodynamic calculations. > > ⚠️ **Over saturated water vapor states are not implemented**. This library is intended for HVAC applications only ⚠️ ## Usage ```python from psychrochart import PsychroChart # Load default style: chart_default = PsychroChart.create() # customize anything chart_default.limits.range_temp_c = (15.0, 35.0) chart_default.limits.range_humidity_g_kg = (5, 25) chart_default.config.saturation.linewidth = 1 chart_default.config.constant_wet_temp.color = "darkblue" # plot axes = chart_default.plot() axes.get_figure() # or store on disk chart_default.save("my-custom-chart.svg") ``` Called from the terminal (`python psychrochart`), it plots and shows the default chart using the default matplotlib backend, equivalent to this python script: ```python from psychrochart import PsychroChart import matplotlib.pyplot as plt PsychroChart.create().plot(ax=plt.gca()) plt.show() ``` ### Chart customization The default styling for charts is defined in JSON files that you can change, or you can pass a path of a file in JSON, or a dict, when you create the psychrometric chart object. Included styles are: `default`, `ashrae`, `ashrae_ip` (adjusted for IP units), `interior`, and `minimal`. ```python from pathlib import Path from psychrochart import load_config, PsychroChart # Load preconfigured styles: chart_ashrae_style = PsychroChart.create('ashrae') chart_ashrae_style.plot() chart_minimal = PsychroChart.create('minimal') chart_minimal.plot() # Get a preconfigured style model and customize it chart_config = load_config('interior') chart_config.limits.range_temp_c = (18.0, 32.0) chart_config.limits.range_humidity_g_kg = (1.0, 40.0) chart_config.limits.altitude_m = 3000 custom_chart = PsychroChart.create(chart_config) custom_chart.save("custom-chart.svg") # serialize the config for future uses assert chart_config.json() == custom_chart.config.json() Path('path/to/chart_config_file.json').write_text(chart_config.json()) custom_chart_bis = PsychroChart.create('path/to/chart_config_file.json') # or even the full psychrochart Path('path/to/chart_file.json').write_text(custom_chart.json()) custom_chart_bis_2 = PsychroChart.parse_file('path/to/chart_file.json') # Specify the styles JSON file: chart_custom = PsychroChart.create('/path/to/json_file.json') chart_custom.plot() # Pass a dict with the changes wanted: custom_style = { "figure": { "figsize": [12, 8], "base_fontsize": 12, "title": "My chart", "x_label": None, "y_label": None, "partial_axis": False }, "limits": { "range_temp_c": [15, 30], "range_humidity_g_kg": [0, 25], "altitude_m": 900, "step_temp": .5 }, "saturation": {"color": [0, .3, 1.], "linewidth": 2}, "constant_rh": {"color": [0.0, 0.498, 1.0, .7], "linewidth": 2.5, "linestyle": ":"}, "chart_params": { "with_constant_rh": True, "constant_rh_curves": [25, 50, 75], "constant_rh_labels": [25, 50, 75], "with_constant_v": False, "with_constant_h": False, "with_constant_wet_temp": False, "with_zones": False } } chart_custom_2 = PsychroChart.create(custom_style) chart_custom_2.plot() ``` The custom configuration does not need to include all fields, but only the fields you want to change. To play with it and see the results, look at this **[notebook with usage examples](https://github.com/azogue/psychrochart/blob/master/notebooks/Usage%20example%20of%20psychrochart.ipynb)**. ## Development and testing To run the tests, clone the repository, `poetry install` it, and run `poetry run pytest`. Run `poetry run pre-commit run --all-files` to apply linters for changes in the code 😜. ## License [MIT license](https://github.com/azogue/psychrochart/blob/master/LICENSE), so do with it as you like ;-) ## Included styling examples **Default style**: **ASHRAE Handbook black and white style**: (preset: `ashrae`) **ASHRAE Handbook black and white style (IP units)**: (preset: `ashrae_ip`) **Minimal style**: (preset: `minimal`) %package -n python3-psychrochart Summary: A python 3 library to make psychrometric charts and overlay information on them Provides: python-psychrochart BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pip %description -n python3-psychrochart [![pre-commit.ci Status][pre-commit-ci-image]][pre-commit-ci-url] [![Build Status][build-image]][build-url] [![PyPI Version][pypi-image]][pypi-url] [pre-commit-ci-image]: https://results.pre-commit.ci/badge/github/azogue/psychrochart/master.svg [pre-commit-ci-url]: https://results.pre-commit.ci/latest/github/azogue/psychrochart/master [build-image]: https://github.com/azogue/psychrochart/actions/workflows/main.yml/badge.svg [build-url]: https://github.com/azogue/psychrochart/actions/workflows/main.yml [pypi-image]: https://img.shields.io/pypi/v/psychrochart [pypi-url]: https://pypi.org/project/psychrochart/ # Psychrochart A python 3 library to make **[psychrometric charts](https://en.wikipedia.org/wiki/Psychrometrics)** and overlay information on them. It implements a useful collection of psychrometric equations for moisture and humid air calculations, and the generation of beautiful and high customizable **psychrometric charts in SVG** with [`matplotlib`](https://matplotlib.org). **Psychrometric calculations to make the chart data are done with [`PsychroLib`](https://github.com/psychrometrics/psychrolib)** (summary paper in https://doi.org/10.21105/joss.01137). ## Install Get it **[from pypi](https://pypi.python.org/pypi?:action=display&name=psychrochart)** or **[clone it](https://github.com/azogue/psychrochart.git)** if you want to run the tests. ```shell pip install psychrochart ``` ## Features - **SI** units (with temperatures in celsius for better readability), with _partial_ compatibility with IP system (imperial units) - Easy style customization based on [**pydantic**](https://docs.pydantic.dev/latest/) models and config presets for full customization of **chart limits**, included lines and labels, colors, line styles, line widths, etc.. - Psychrometric charts within temperature and humidity ratio ranges, for any pressure\*, with: - **Saturation line** - **Constant RH lines** - **Constant enthalpy lines** - **Constant wet-bulb temperature lines** - **Constant specific volume lines** - **Constant dry-bulb temperature lines** (internal orthogonal grid, vertical) - **Constant humidity ratio lines** (internal orthogonal grid, horizontal) - Plot legend for each family of lines, labeled zones and annotations - Specify labels for each family of lines - Overlay points, arrows, **data-series** (numpy arrays or pandas series), and convex hulls around points - Define multiple kinds of **zones limited by psychrometric values**: - 'dbt-rh' for areas between dry-bulb temperature and relative humidity values, - 'enthalpy-rh' for areas between constant enthalpy and relative humidity values - 'volume-rh' for areas between constant volume and relative humidity values - 'dbt-wmax' for an area between dry-bulb temperature and water vapor content values (:= a rectangle cut by the saturation line), - 'xy-points' to define arbitrary closed paths in plot coordinates (dbt, abs humidity) - **Export as SVG, PNG files**, or generate dynamic SVGs with extra CSS and with `chart.make_svg(...)` > NOTE: The ranges of temperature, humidity and pressure where this library should provide good results are within the normal environments for people to live in. > > Don't expect right results if doing other type of thermodynamic calculations. > > ⚠️ **Over saturated water vapor states are not implemented**. This library is intended for HVAC applications only ⚠️ ## Usage ```python from psychrochart import PsychroChart # Load default style: chart_default = PsychroChart.create() # customize anything chart_default.limits.range_temp_c = (15.0, 35.0) chart_default.limits.range_humidity_g_kg = (5, 25) chart_default.config.saturation.linewidth = 1 chart_default.config.constant_wet_temp.color = "darkblue" # plot axes = chart_default.plot() axes.get_figure() # or store on disk chart_default.save("my-custom-chart.svg") ``` Called from the terminal (`python psychrochart`), it plots and shows the default chart using the default matplotlib backend, equivalent to this python script: ```python from psychrochart import PsychroChart import matplotlib.pyplot as plt PsychroChart.create().plot(ax=plt.gca()) plt.show() ``` ### Chart customization The default styling for charts is defined in JSON files that you can change, or you can pass a path of a file in JSON, or a dict, when you create the psychrometric chart object. Included styles are: `default`, `ashrae`, `ashrae_ip` (adjusted for IP units), `interior`, and `minimal`. ```python from pathlib import Path from psychrochart import load_config, PsychroChart # Load preconfigured styles: chart_ashrae_style = PsychroChart.create('ashrae') chart_ashrae_style.plot() chart_minimal = PsychroChart.create('minimal') chart_minimal.plot() # Get a preconfigured style model and customize it chart_config = load_config('interior') chart_config.limits.range_temp_c = (18.0, 32.0) chart_config.limits.range_humidity_g_kg = (1.0, 40.0) chart_config.limits.altitude_m = 3000 custom_chart = PsychroChart.create(chart_config) custom_chart.save("custom-chart.svg") # serialize the config for future uses assert chart_config.json() == custom_chart.config.json() Path('path/to/chart_config_file.json').write_text(chart_config.json()) custom_chart_bis = PsychroChart.create('path/to/chart_config_file.json') # or even the full psychrochart Path('path/to/chart_file.json').write_text(custom_chart.json()) custom_chart_bis_2 = PsychroChart.parse_file('path/to/chart_file.json') # Specify the styles JSON file: chart_custom = PsychroChart.create('/path/to/json_file.json') chart_custom.plot() # Pass a dict with the changes wanted: custom_style = { "figure": { "figsize": [12, 8], "base_fontsize": 12, "title": "My chart", "x_label": None, "y_label": None, "partial_axis": False }, "limits": { "range_temp_c": [15, 30], "range_humidity_g_kg": [0, 25], "altitude_m": 900, "step_temp": .5 }, "saturation": {"color": [0, .3, 1.], "linewidth": 2}, "constant_rh": {"color": [0.0, 0.498, 1.0, .7], "linewidth": 2.5, "linestyle": ":"}, "chart_params": { "with_constant_rh": True, "constant_rh_curves": [25, 50, 75], "constant_rh_labels": [25, 50, 75], "with_constant_v": False, "with_constant_h": False, "with_constant_wet_temp": False, "with_zones": False } } chart_custom_2 = PsychroChart.create(custom_style) chart_custom_2.plot() ``` The custom configuration does not need to include all fields, but only the fields you want to change. To play with it and see the results, look at this **[notebook with usage examples](https://github.com/azogue/psychrochart/blob/master/notebooks/Usage%20example%20of%20psychrochart.ipynb)**. ## Development and testing To run the tests, clone the repository, `poetry install` it, and run `poetry run pytest`. Run `poetry run pre-commit run --all-files` to apply linters for changes in the code 😜. ## License [MIT license](https://github.com/azogue/psychrochart/blob/master/LICENSE), so do with it as you like ;-) ## Included styling examples **Default style**: **ASHRAE Handbook black and white style**: (preset: `ashrae`) **ASHRAE Handbook black and white style (IP units)**: (preset: `ashrae_ip`) **Minimal style**: (preset: `minimal`) %package help Summary: Development documents and examples for psychrochart Provides: python3-psychrochart-doc %description help [![pre-commit.ci Status][pre-commit-ci-image]][pre-commit-ci-url] [![Build Status][build-image]][build-url] [![PyPI Version][pypi-image]][pypi-url] [pre-commit-ci-image]: https://results.pre-commit.ci/badge/github/azogue/psychrochart/master.svg [pre-commit-ci-url]: https://results.pre-commit.ci/latest/github/azogue/psychrochart/master [build-image]: https://github.com/azogue/psychrochart/actions/workflows/main.yml/badge.svg [build-url]: https://github.com/azogue/psychrochart/actions/workflows/main.yml [pypi-image]: https://img.shields.io/pypi/v/psychrochart [pypi-url]: https://pypi.org/project/psychrochart/ # Psychrochart A python 3 library to make **[psychrometric charts](https://en.wikipedia.org/wiki/Psychrometrics)** and overlay information on them. It implements a useful collection of psychrometric equations for moisture and humid air calculations, and the generation of beautiful and high customizable **psychrometric charts in SVG** with [`matplotlib`](https://matplotlib.org). **Psychrometric calculations to make the chart data are done with [`PsychroLib`](https://github.com/psychrometrics/psychrolib)** (summary paper in https://doi.org/10.21105/joss.01137). ## Install Get it **[from pypi](https://pypi.python.org/pypi?:action=display&name=psychrochart)** or **[clone it](https://github.com/azogue/psychrochart.git)** if you want to run the tests. ```shell pip install psychrochart ``` ## Features - **SI** units (with temperatures in celsius for better readability), with _partial_ compatibility with IP system (imperial units) - Easy style customization based on [**pydantic**](https://docs.pydantic.dev/latest/) models and config presets for full customization of **chart limits**, included lines and labels, colors, line styles, line widths, etc.. - Psychrometric charts within temperature and humidity ratio ranges, for any pressure\*, with: - **Saturation line** - **Constant RH lines** - **Constant enthalpy lines** - **Constant wet-bulb temperature lines** - **Constant specific volume lines** - **Constant dry-bulb temperature lines** (internal orthogonal grid, vertical) - **Constant humidity ratio lines** (internal orthogonal grid, horizontal) - Plot legend for each family of lines, labeled zones and annotations - Specify labels for each family of lines - Overlay points, arrows, **data-series** (numpy arrays or pandas series), and convex hulls around points - Define multiple kinds of **zones limited by psychrometric values**: - 'dbt-rh' for areas between dry-bulb temperature and relative humidity values, - 'enthalpy-rh' for areas between constant enthalpy and relative humidity values - 'volume-rh' for areas between constant volume and relative humidity values - 'dbt-wmax' for an area between dry-bulb temperature and water vapor content values (:= a rectangle cut by the saturation line), - 'xy-points' to define arbitrary closed paths in plot coordinates (dbt, abs humidity) - **Export as SVG, PNG files**, or generate dynamic SVGs with extra CSS and with `chart.make_svg(...)` > NOTE: The ranges of temperature, humidity and pressure where this library should provide good results are within the normal environments for people to live in. > > Don't expect right results if doing other type of thermodynamic calculations. > > ⚠️ **Over saturated water vapor states are not implemented**. This library is intended for HVAC applications only ⚠️ ## Usage ```python from psychrochart import PsychroChart # Load default style: chart_default = PsychroChart.create() # customize anything chart_default.limits.range_temp_c = (15.0, 35.0) chart_default.limits.range_humidity_g_kg = (5, 25) chart_default.config.saturation.linewidth = 1 chart_default.config.constant_wet_temp.color = "darkblue" # plot axes = chart_default.plot() axes.get_figure() # or store on disk chart_default.save("my-custom-chart.svg") ``` Called from the terminal (`python psychrochart`), it plots and shows the default chart using the default matplotlib backend, equivalent to this python script: ```python from psychrochart import PsychroChart import matplotlib.pyplot as plt PsychroChart.create().plot(ax=plt.gca()) plt.show() ``` ### Chart customization The default styling for charts is defined in JSON files that you can change, or you can pass a path of a file in JSON, or a dict, when you create the psychrometric chart object. Included styles are: `default`, `ashrae`, `ashrae_ip` (adjusted for IP units), `interior`, and `minimal`. ```python from pathlib import Path from psychrochart import load_config, PsychroChart # Load preconfigured styles: chart_ashrae_style = PsychroChart.create('ashrae') chart_ashrae_style.plot() chart_minimal = PsychroChart.create('minimal') chart_minimal.plot() # Get a preconfigured style model and customize it chart_config = load_config('interior') chart_config.limits.range_temp_c = (18.0, 32.0) chart_config.limits.range_humidity_g_kg = (1.0, 40.0) chart_config.limits.altitude_m = 3000 custom_chart = PsychroChart.create(chart_config) custom_chart.save("custom-chart.svg") # serialize the config for future uses assert chart_config.json() == custom_chart.config.json() Path('path/to/chart_config_file.json').write_text(chart_config.json()) custom_chart_bis = PsychroChart.create('path/to/chart_config_file.json') # or even the full psychrochart Path('path/to/chart_file.json').write_text(custom_chart.json()) custom_chart_bis_2 = PsychroChart.parse_file('path/to/chart_file.json') # Specify the styles JSON file: chart_custom = PsychroChart.create('/path/to/json_file.json') chart_custom.plot() # Pass a dict with the changes wanted: custom_style = { "figure": { "figsize": [12, 8], "base_fontsize": 12, "title": "My chart", "x_label": None, "y_label": None, "partial_axis": False }, "limits": { "range_temp_c": [15, 30], "range_humidity_g_kg": [0, 25], "altitude_m": 900, "step_temp": .5 }, "saturation": {"color": [0, .3, 1.], "linewidth": 2}, "constant_rh": {"color": [0.0, 0.498, 1.0, .7], "linewidth": 2.5, "linestyle": ":"}, "chart_params": { "with_constant_rh": True, "constant_rh_curves": [25, 50, 75], "constant_rh_labels": [25, 50, 75], "with_constant_v": False, "with_constant_h": False, "with_constant_wet_temp": False, "with_zones": False } } chart_custom_2 = PsychroChart.create(custom_style) chart_custom_2.plot() ``` The custom configuration does not need to include all fields, but only the fields you want to change. To play with it and see the results, look at this **[notebook with usage examples](https://github.com/azogue/psychrochart/blob/master/notebooks/Usage%20example%20of%20psychrochart.ipynb)**. ## Development and testing To run the tests, clone the repository, `poetry install` it, and run `poetry run pytest`. Run `poetry run pre-commit run --all-files` to apply linters for changes in the code 😜. ## License [MIT license](https://github.com/azogue/psychrochart/blob/master/LICENSE), so do with it as you like ;-) ## Included styling examples **Default style**: **ASHRAE Handbook black and white style**: (preset: `ashrae`) **ASHRAE Handbook black and white style (IP units)**: (preset: `ashrae_ip`) **Minimal style**: (preset: `minimal`) %prep %autosetup -n psychrochart-0.9.1 %build %py3_build %install %py3_install install -d -m755 %{buildroot}/%{_pkgdocdir} if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi pushd %{buildroot} if [ -d usr/lib ]; then find usr/lib -type f -printf "\"/%h/%f\"\n" >> filelist.lst fi if [ -d usr/lib64 ]; then find usr/lib64 -type f -printf "\"/%h/%f\"\n" >> filelist.lst fi if [ -d usr/bin ]; then find usr/bin -type f -printf "\"/%h/%f\"\n" >> filelist.lst fi if [ -d usr/sbin ]; then find usr/sbin -type f -printf "\"/%h/%f\"\n" >> filelist.lst fi touch doclist.lst if [ -d usr/share/man ]; then find usr/share/man -type f -printf "\"/%h/%f.gz\"\n" >> doclist.lst fi popd mv %{buildroot}/filelist.lst . mv %{buildroot}/doclist.lst . %files -n python3-psychrochart -f filelist.lst %dir %{python3_sitelib}/* %files help -f doclist.lst %{_docdir}/* %changelog * Tue Jun 20 2023 Python_Bot - 0.9.1-1 - Package Spec generated