Skip to main content

Python package for calculating the masses of substances required for chemical synthesis directly from the reaction string. It includes solutions for all intermidiate steps, including chemical formula parsing, molar mass calculation and reaction balancing with different matrix methods.

Project description

Chemical synthesis calculator

Python package for calculating the masses of substances required for chemical synthesis directly from the reaction string. It includes solutions for all intermediate steps, including chemical formula parsing, molar mass calculation and reaction balancing with different matrix methods.

Prerequisites

Installation

Install from pypi:

pip install chemsynthcalc

Documentation

Read the documentation

Example use

Let's say that we need to prepare 3 grams of YBCO by solid-state synthesis from respective carbonates. The reaction string will look something like this (to simplify, let's leave it without oxygen nonstoichiometry):

from chemsynthcalc import ChemicalReaction

reaction_string = "BaCO3 + Y2(CO3)3 + CuCO3 + O2 → YBa2Cu3O7 + CO2"

Now, we can create a chemical reaction object of the ChemicalReaction class, which will be used in the calculation. We need to specify the arguments for our particular case:

>>> reaction = ChemicalReaction(
    reaction = reaction_string, # our reaction string
    target = 0, # index of target compound in the product list
    target_mass = 3, # desired mass of target compound,
    mode = "balance" # mode of coefficients calculations,
)

Now, to perform the automatic calculation, all we need to do is to put:

>>> reaction.print_results(print_rounding_order=4) 
# assuming that we use analytical balances with 4 digit presicion

And we get our output in the terminal:

initial reaction: BaCO3+Y2(CO3)3+CuCO3+O2YBa2Cu3O7+CO2
reaction matrix:
 [[1. 0. 0. 0. 2. 0.]
 [1. 3. 1. 0. 0. 1.]
 [3. 9. 3. 2. 7. 2.]
 [0. 2. 0. 0. 1. 0.]
 [0. 0. 1. 0. 3. 0.]]
mode: balance
formulas: ['BaCO3', 'Y2(CO3)3', 'CuCO3', 'O2', 'YBa2Cu3O7', 'CO2']
coefficients: [8, 2, 12, 1, 4, 26]
normalized coefficients: [2, 0.5, 3, 0.25, 1, 6.5]
algorithm: inverse
is balanced: True
final reaction: 8BaCO3+2Y2(CO3)3+12CuCO3+O24YBa2Cu3O7+26CO2
final reaction normalized: 2BaCO3+0.5Y2(CO3)3+3CuCO3+0.25O2YBa2Cu3O7+6.5CO2
molar masses: [197.335, 357.835676, 123.554, 31.998, 666.190838, 44.009]
target: YBa2Cu3O7
masses: [1.7773, 0.8057, 1.6692, 0.036, 3.0, 1.2882]
BaCO3: M = 197.3350 g/mol, m = 1.7773 g
Y2(CO3)3: M = 357.8357 g/mol, m = 0.8057 g
CuCO3: M = 123.5540 g/mol, m = 1.6692 g
O2: M = 31.9980 g/mol, m = 0.0360 g
YBa2Cu3O7: M = 666.1908 g/mol, m = 3.0000 g
CO2: M = 44.0090 g/mol, m = 1.2882 g

Now, we've got all the masses ready for our planned synthesis!

Features

  • Formula parsing
    >>> from chemsynthcalc import ChemicalFormula
    
    >>> ChemicalFormula("C2H5OH").parsed_formula
    {'C': 2.0, 'H': 6.0, 'O': 1.0}
    
  • Calculation of the molar mass
    >>> ChemicalFormula("C2H5OH").molar_mass
    46.069
    
  • Mass, atomic, and oxide percent calculations with mass_percent, atomic_percent and oxide_percent (including user-defined oxides) properties of ChemicalFormula.
  • Auto-balancing chemical equations by 4 different matrix methods in balance mode:
    >>> from chemsynthcalc import ChemicalReaction
    
    >>> reaction_string = "K4Fe(CN)6 + KMnO4 + H2SO4 = KHSO4 + Fe2(SO4)3 + MnSO4 + HNO3 + CO2 + H2O"
    
    >>> ChemicalReaction(reaction_string, mode="balance").final_reaction
    10K4Fe(CN)6+122KMnO4+299H2SO4=162KHSO4+5Fe2(SO4)3+122MnSO4+60HNO3+60CO2+188H2O
    
  • Calculation of masses for user-defined coefficients in force (calculates regardless of balance) and check (checks if reaction is balanced by user-defined coefficients) modes.
    >>> ChemicalReaction("BaCO3+TiO2=BaTiO3", mode="force").masses #we can drop CO2 product and still get masses in this mode. 
    [0.84623763, 0.34248749, 1.0]
    
    >>> ChemicalReaction("2H2+O2=2H2O", mode="check").coefficients #we can be sure that reaction is balanced with our coefficients in this mode
    [2, 1, 2]
    
    Setting the coefficients directly into ChemicalReaction instance:
    >>> reaction = ChemicalReaction("H2+O2=H2O", mode="check")
    >>> reaction.coefficients = [2,1,2]
    >>> reaction.coefficients
    [2, 1, 2]
    >>> reaction.is_balanced
    True
    
  • Calculation of coefficients with ChemicalReaction.balance object individually by each of 4 different algorithms (inverse, general pseudoinverse, partial pseudoinverse and combinatorial algorithms).
  • Export of results of both ChemicalFormula and ChemicalReaction into .txt file (with .to_txt()), into JSON object (with .to_json()) or JSON file (with .to_json_file()).

License

The code is provided under the MIT license.

Contact

If you have any questions, please contact Egor Syrov at syrov_ev@mail.ru or create an issue at github https://github.com/Syrov-Egor/chemsynthcalc/issues.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

chemsynthcalc-2.1.0.tar.gz (24.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

chemsynthcalc-2.1.0-py3-none-any.whl (33.8 kB view details)

Uploaded Python 3

File details

Details for the file chemsynthcalc-2.1.0.tar.gz.

File metadata

  • Download URL: chemsynthcalc-2.1.0.tar.gz
  • Upload date:
  • Size: 24.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for chemsynthcalc-2.1.0.tar.gz
Algorithm Hash digest
SHA256 a194aaeeedc2e049bd4074d7611ad4ea0f2a736b8d48693a25fc706fcf9f74c2
MD5 a2bf9a8292091c7721cb7c48910a183d
BLAKE2b-256 0c675eb67cfbdfb3d1c734aa63a6daf0e8485876ee0639284466aa3e6800882e

See more details on using hashes here.

File details

Details for the file chemsynthcalc-2.1.0-py3-none-any.whl.

File metadata

  • Download URL: chemsynthcalc-2.1.0-py3-none-any.whl
  • Upload date:
  • Size: 33.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for chemsynthcalc-2.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e3dae4d82ae5e6a3572dc2ea30440a2c5a904fd74b5fa59552b14002f807f998
MD5 70913d63bca1a4130074ca5322772ac7
BLAKE2b-256 c7d155c95d4b29dc54a613c97d20f7816dcc80bc85139c892fe7f9b48a2dd28a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page