Gaspype provides two main classes: fluid and elements . A fluid object can have multiple compositions. A multidimensional fluid object can be created for example by multiplication with a numpy array: In some cases not the molecular but the atomic composition is of interest. The elements class can be used for atom based balances and works similar: el = gp . elements ({ 'N' : 1 , 'Cl' : 2 }) el . get_mass () np . float64 ( 0.08490700000000001 ) A elements object can be as well instantiated from a fluid object. Arithmetic operations between elements and fluid result in an elements object: el2 = gp . elements ( fl ) + el - 0.3 * fl el2 Cl 2.000e+00 mol H 4.200e+00 mol N 1.000e+00 mol O 7.000e-01 mol Going from an atomic composition to an molecular composition is possible as well. One way is to calculate the thermodynamic equilibrium for a mixture: fs = gp . fluid_system ( 'CH4, H2, CO, CO2, O2' ) el3 = gp . elements ({ 'C' : 1 , 'H' : 2 , 'O' : 1 }, fs ) fl3 = gp . equilibrium ( el3 , t = 800 ) fl3 Total 1.204e+00 mol CH4 33.07 % H2 16.93 % CO 16.93 % CO2 33.07 % O2 0.00 % The equilibrium function can be called with a fluid or elements object as first argument. fluid and elements referencing a fluid_system object witch can be be set as shown above during the object instantiation. If not provided, a new one will be created automatically. Providing a fluid_system gives more control over which molecular species are included in derived fluid objects. Furthermore arithmetic operations between objects with the same fluid_system are potentially faster: fl3 + gp . fluid ({ 'CH4' : 1 }, fs ) Total 2.204e+00 mol CH4 63.44 % H2 9.24 % CO 9.24 % CO2 18.07 % O2 0.00 % Especially if the fluid_system of one of the operants has not a subset of molecular species of the other fluid_system a new fluid_system will be created for the operation which might degrade performance: fl3 + gp . fluid ({ 'NH3' : 1 })