PyPI Downloads PyPI Python Version License Read the Docs
PyThermoDB is a lightweight and user-friendly Python package designed to provide quick access to essential thermodynamic data. Whether you're a student, researcher, or engineer, this package serves as a valuable resource for retrieving thermodynamic properties, equations, and constants from your custom thermodynamic database (csv files).
- ๐ Handbook Data: The package sources its data from well-established thermodynamics handbooks, ensuring accuracy and reliability (updated regularly).
- ๐ง Custom Thermodynamic Database: It is possible to builtin your own thermodynamic databook for your project.
- ๐งฉ Minimal Dependencies: Built with simplicity in mind, the package has minimal external dependencies, making it easy to integrate into your projects.
- ๐ Open Source: Feel free to explore, contribute, and customize the package according to your needs.
PyThermoAI is an intelligent Python package that revolutionizes thermodynamic data acquisition and processing by leveraging advanced AI agents and web search capabilities.
Built with LangGraph for creating sophisticated multi-agent workflows, PyThermoAI employs intelligent agents to collect thermodynamic data and equations. The system utilizes Tavily as its primary web search engine, enabling agents to efficiently discover and retrieve thermodynamic data from authoritative online sources. These agents can search for thermodynamic data and automatically convert the results into PyThermoDB reference formats, streamlining the process of building and updating your custom thermodynamic database.
Try PyThermoDB directly in your browser without any installation using Binder. You can find examples regarding the following contents:
- Import Libraries: Import the necessary libraries including pyThermoDB and rich.
- Check Versions: Print the version of pyThermoDB.
- App Initialization: Initialize the pyThermoDB application.
- Databook List: List all available databooks.
- Table List: List all tables in a specific databook.
- Table Info: Get information about a specific table.
- Load Tables: Load and display data and equations from tables.
- Check Component Availability: Check if a component is available in a specific table.
- Build Data: Build data for a specific component from a table.
- Build Equation: Build an equation for a specific component from a table.
Click on any of the following links to launch interactive Jupyter notebooks:
The repository includes an examples folder with various sample applications and use cases to help you get started with PyThermoDB. These examples demonstrate different methods and features of the package, including:
- ๐งฐ Basic Usage Examples: Learn how to use PyThermoDB for common tasks.
- ๐ Custom Thermodynamic Databases: Work with your own thermodynamic data.
- ๐ Data Manipulation: Load, search, and manipulate thermodynamic data.
- ๐ Equations and Calculations: Use equations for thermodynamic calculations.
Browse through these examples to learn how to use different methods and features of PyThermoDB in your own projects.
Try PyThermoDB directly in your browser with these interactive examples:
-
๐ Search Database Open In Colab
-
๐ CO2 Thermodynamic Data Open In Colab
-
๐ Check Component Availability Open In Colab
-
๐ Basic Usage 2 Open In Colab
-
๐ฐ Basic Usage 1 Open In Colab
Check out PyThermoDB live! ๐ PyThermoDB on Streamlit
Install PyThermoDB with pip:
import pyThermoDB as ptdb # check version print(ptdb.__version__)
PyThermoDB allows you to search for a specific component by its name or formula within a databook and table. This feature helps you quickly locate the relevant data and makes it easier to build a ThermoDB for the component.
Use the following method to search for a component:
# Search for a component in a databook and table # open all tables in the browser tdb.tables_view()
The search results will include:
- ๐ Databook Name and ID: The databook where the component is found.
- ๐ Table Name and ID: The table containing the component's data.
- Databook reference initialization:
# databook reference initialization tdb = ptdb.init()
- ๐ DATABOOK LIST:
# databook db_list = tdb.list_databooks() print(db_list)
- ๐ TABLE LIST:
list_tables(databook_name or databook_id)
# table list tb_lists = tdb.list_tables(1) print(tb_lists)
- i๏ธ TABLE INFO:
table_info(databook_name or id, table_name or id)
# display a table tb_info = tdb.table_info(1, 2) print(tb_info)
- ๐ LOAD TABLE DATA/EQUATION:
table_data(databook_name or id, table_name or id)
# table load res_ = tdb.table_data(1, 2) print(res_)
- ๐ VIEW TABLE CONTENT IN THE BROWSER
table_view(databook_name or id, table_name or id)
# install Jinja2 pip install Jinja2 # VIEW table CONTENT tdb.table_view(1, 2)
- ๐ฅ LOAD TABLES DATA|EQUATION STRUCTURE (before building):
equation_load(databook_name or id, table_name or id)
# load equation to check vapor_pressure_tb = tdb.equation_load(1, 4) print(vapor_pressure_tb.eq_structure(1)) # load data to check data_table = tdb.data_load(1, 2) print(data_table.data_structure())
- ๐ CHECK COMPONENT AVAILABILITY IN A TABLE:
get_component_data(component name, databook_name or id, table_name or id, ...)
# check component availability in the databook and table comp1 = "carbon Dioxide" # method 1 # CO2_check_availability = tdb.check_component(comp1, 1, 2) # method 2: comp_data = tdb.get_component_data(comp1, 1, 2, dataframe=True) print(comp_data)
- ๐๏ธ BUILD DATA OBJECT:
build_data(component name, databook_name or id, table_name or id)
# build data CO2_data = tdb.build_data(comp1, 1, 2) print(CO2_data.data_structure()) print(CO2_data.get_property(4))
- ๐ BUILD EQUATION OBJECT:
build_equation(component name, databook_name or id, table_name or id)
# build an equation eq = tdb.build_equation(comp1, 1, 4) print(eq.args) res = eq.cal(T=298.15) print(res*1e-5)
DataTable & EquationTable saved as an object in Carbon Dioxide.pkl
- ๐จ BUILD THERMODB:
# build a thermodb thermo_db = ptdb.build_thermodb() print(type(thermo_db)) # version print(thermo_db.build_version) # thermodb name print(thermo_db.thermodb_name) # * add TableData thermo_db.add_data('general', comp1_data) # * add TableEquation thermo_db.add_data('heat-capacity', comp1_eq) thermo_db.add_data('vapor-pressure', vapor_pressure_eq) # add string # thermo_db.add_data('dHf', {'dHf_IG': 152}) # file name # thermodb_file_path = os.path.join(os.getcwd(), f'{comp1}') # save thermo_db.save( f'{comp1}', file_path='..\\pyThermoDB\\tests')
- ๐ CHECK THERMODB:
# check all properties and functions registered print(thermo_db.check_properties()) print(thermo_db.check_functions())
Carbon Dioxide.pkl can be loaded as:
- ๐ค LOAD THERMODB FILE:
# ref thermodb_file = 'Carbon Dioxide.pkl' thermodb_path = os.path.join(os.getcwd(), thermodb_file) print(thermodb_path)
- ๐ฅ LOAD THERMODB:
# load thermodb CO2_thermodb = ptdb.load_thermodb(thermodb_path) print(type(CO2_thermodb))
- โ CHECK THERMODB:
# check all properties and functions registered print(CO2_thermodb.check())
-
Step 1:
Modify
yml fileby addingCUSTOM-INTEGRAL. -
Step 2:
Add a name for the new integral body.
-
Step 3:
Add a list containing the integral body.
CUSTOM-INTEGRAL: Cp/R: - A1 = parms['a0']*args['T1'] - B1 = (parms['a1']/2)*(args['T1']**2) - C1 = (parms['a2']/3)*(args['T1']**3) - D1 = (parms['a3']/4)*(args['T1']**4) - E1 = (parms['a4']/5)*(args['T1']**5) - res1 = A1 + B1 + C1 + D1 + E1 - A2 = parms['a0']*args['T2'] - B2 = (parms['a1']/2)*(args['T2']**2) - C2 = (parms['a2']/3)*(args['T2']**3) - D2 = (parms['a3']/4)*(args['T2']**4) - E2 = (parms['a4']/5)*(args['T2']**5) - res2 = A2 + B2 + C2 + D2 + E2 - res = res2 - res1
- ๐ฌ CHECK AS:
# check custom integral print(comp1_eq.custom_integral) # check body print(comp1_eq.check_custom_integral_equation_body('Cp/R')) # Cp/R Cp_cal_custom_integral_Cp__R = comp1_eq.cal_custom_integral( 'Cp/R', T1=298.15, T2=320) print(Cp_cal_custom_integral_Cp__R)
PyThermoDB allows you to define and use custom databooks and tables for your specific thermodynamic data needs. Here's how you can set up and use a custom databook and table:
- ๐ Define Custom Reference
Check csv and yml files to be familiar with the right format!
# Define custom reference custom_ref = { 'reference': ['nrtl.yml'], 'tables': [ 'Non-randomness parameters of the NRTL equation.csv', 'Interaction parameters of the NRTL equation.csv' ] }
- ๐ List Tables in Databook
# List tables in databook tb_lists = tdb.list_tables('NRTL', res_format='json') print(tb_lists)
- ๐ Load Table Data
table_data(databook_name or id, table_name or id)
# Load table data tb_data = tdb.table_data(7, 1) print(tb_data)
- ๐๏ธ Build ThermoDB for the Custom Reference
# Build ThermoDB thermo_db = ptdb.build_thermodb() thermo_db.add_data('nrtl_alpha', nrtl_alpha) thermo_db.add_data('nrtl_tau', nrtl_tau_eq) thermo_db.save('thermodb_nrtl_0', file_path='notebooks')
This project is licensed under the MIT License. You are free to use, modify, and distribute this software in your own applications or projects. However, if you choose to use this app in another app or software, please ensure that my name, Sina Gilassi, remains credited as the original author. This includes retaining any references to the original repository or documentation where applicable. By doing so, you help acknowledge the effort and time invested in creating this project.
The MIT License applies solely to the source code contained in this repository. This project does NOT distribute, sublicense, or grant any rights to third-party thermodynamic data. Any thermodynamic data used with this software must be obtained independently by the user from its original source and used in accordance with the applicable license or terms of use.
For any question, contact me on LinkedIn