Revised Enskog theory for Mie fluids, and other spherical potentials. Allows prediction of transport coefficients such as diffusion coefficients, viscosities, thermal diffusion coefficients and thermal conductivities. In dense, multicomponent gas mixtures and supercritical mixtures.
Project description
KineticGas
KineticGas is an implementation of Revised Enskog Theory (RET) for spherical potentials. The most notable of which is the implementation of RETMie, the Revised Enskog Theory for Mie fluids.
The package is implemented mostly in C++ to handle the numerical computations involved in evaluating the collision integrals and the radial distribution function at contact for the target fluids, with the possibility of setting up multithreading at compile time.
KineticGas can be used to predict diffusion coefficients, thermal diffusion coefficients, viscosities and thermal conductivities in gas mixtures, and is reliable over a large range of temperatures and pressures. The package also contains an extensive database of fluid parameters collected from the open literature.
Table of contents
Please cite
KineticGas has been developed throughout a series of two works. If you are referencing the package, please cite the works
 Revised Enskog theory for Mie fluids: Prediction of diffusion coefficients, thermal diffusion coefficients, viscosities and thermal conductivities (Vegard G. Jervell and Øivind Wilhelmsen, 2023)
 The Kinetic Gas theory of Mie fluids (Vegard G. Jervell, 2022)
Acknowledgments and sources
This implementation of the Revised Enskog solutions is build upon the work presented by M. López de Haro, E. D. G. Cohen, and J. Kincaid in the series of papers The Enskog Theory for multicomponent mixtures I  IV, J. Chem. Phys. (1983  1987) (I, II, III, IV).
The implementation utilises the explicit summational expressions for the square bracket integrals published by Tompson, Tipton and Loyalka in Chapman–Enskog solutions to arbitrary order in Sonine polynomials I  IV (Physica A, E. J. Mech.  B) 20072009 (I, II, III, IV).
The work by T. Lafitte, A. Apostolakou, C. Avendaño, A. Galindo, C. Adjiman, E. Müller and G. Jackson, Accurate statistical associating fluid theory for chain molecules formed from Mie segments J. Chem. Phys. 2013 is also of great importance to this implementation.
Licence
The KineticGas package is distributed as free software under the MIT licence.
Getting started: In Python
In addition to this explanation, some examples may be found in the pyExamples directory.
Initializing a model
The available models are HardSphere
 The RET for Hard Spheres, MieKinGas
 The RETMie. They are initialized by passing the appropriate component identifiers to the class constructors.
from pykingas.HardSphere import HardSphere
from pykingas.MieKinGas import MieKinGas
mie = MieKinGas('CO2,C1') # RETMie for CO2/CH4 mixture
hs = HardSphere('AR,KR,XE') # RETHS for Ar/Kr/He mixture
The component identifiers are equivalent to the file names in the pykingas/fluids
directory, and are consistent with the identifiers used by ThermoPack
. A list of all available fluids and their identifiers can be found in the Fluid identifiers section.
Note on pure components
When doing computations for a single component, two mole fractions must be supplied.
Internally pure components are treated as binary mixtures of equivalent species, such that a model initialized with e.g. MieKinGas('H2')
will treat pure hydrogen as a mixture of "Hydrogen with hydrogen". This allows computation of the selfdiffusion coefficient through the normal interdiffusion
method, but carries the caveat mentioned above.
Properties are not dependent on the supplied mole fractions, but it has been found that for numerical stability, the choice x = [0.5, 0.5
is best.
This may be changed in future versions, such that no mole fraction needs to be supplied when working with pure fluids.
Specifying parameters
If we wish to pass specific parameters to the models, this is done through various keyword arguments, as
# Continued
mie = MieKinGas('LJF,LJF', mole_weights=[5, 10], sigma=[2.5e10, 3e10], eps_div_k=[150, 200], la=[6, 7], lr=[12, 13])
the mole_weights
argument sets the molar masses of the components, the sigma
argument sets the miepotential $\sigma$parameters (in m), the eps_div_k
argument sets the miepotential $\epsilon$parameters, the la
argument sets the attractive exponents ($\lambda_a$), and the lr
argument sets the repulsive exponents ($\lambda_r$).
Classes will only accept keyword arguments that are relevant to them, i.e.
hs = HardSphere('LJF,LJF', eps_div_k=[100, 200]) # Throws an error
will throw an error.
To specify the parameters for only one component, and use default parameters for another, set the parameter for the components that are to use default values to None
, as
# Continued
mie = MieKinGas('AR,KR', la=[None, 7], lr=[None, 14]) # Uses the default values for Ar, and specified values for Kr
mie = MieKinGas('AR,KR', la=[6, None], lr=[None, 14]) # Uses default la for Kr, and default lr for Ar.
For isotopic mixtures, one can specify masses in the same way
from pykingas.MieKinGas import MieKinGas
mie = MieKinGas('CH4,CH4,CH4,CH4', mole_weights=[16, 17, 18, 19]) # Isotopic mixture of 1, 2, 3, and 4 times deuterised methane
The Equation of State
KineticGas uses an Equation of State (EoS) internally to compute the derivatives of chemical potential with respect to molar density. Additionally, the tpinteface
methods for predicting transport coefficients use the EoS to compute molar volume at a given T, p, x. This each models stores its own equation of state in the self.eos
attribute. By default, this is a ThermoPack
equation of state object, which can be specified using the use_eos
kwarg upon initialization, as
from pykingas.MieKinGas import MieKinGas
from thermopack.cubic import cubic
comps = 'AR,H2O' # The components we wish to model
eos = cubic(comps, 'SRK') # SoaveRedlichKwong EoS for Argonwater mixture
mie = MieKinGas(comps, use_eos=eos)
This can be useful if the components to be modeled do not have parameters for the default eos (thermopack.saftvrmie
for MieKinGas
), or if one wishes to use some other eos.
In the latter case, the only requirement is that the EoS object implements a method with signature equivalent to thermopack
's chemical_potential_tv
. If the tpinterface
is to be used, the object must also implement a method with signature equivalent to thermopack
's specific_volume
.
Properties at infinite dilution
Properties at infinite dilution can be of interest. Note that at infinite dilution, viscosity, thermal conductivity, and the thermal diffusion factor are independent of density, while the diffusion coefficient and thermal diffusion coefficient are inversely proportional to the density. To initialize a model where the species have negligible covolume (i.e. the radial distribution function is uniformly equal to one), set the kwarg is_idealgas=True
, as
from pykingas.MieKinGas import MieKinGas
mie = MieKinGas('H2', is_idealgas=True) # Properties of hydrogen at infinite dilution
Making predictions
In addition to the methods here, a Tpinterface exists for the same methods, consisting of the methods thermal_conductivity_tp
, viscosity_tp
, interdiffusion_tp
, theramal_diffusion_coeff_tp
and thermal_diffusion_factor_tp
. These methods are only wrappers for ease of use, that use the internal equation of state of the object (self.eos
) to compute the molar volume at given (T, p, x) (assuming vapour phase), and passes the call to the methods documented here. Those methods have signatures equivalent to these, but with molar volume swapped out for pressure.
Please note that the Enskog solutions are explicit in density (not pressure), such that when making predictions as a function of pressure, an accurate equation of state is required to translate from a (T, V, n) state to a (T, p, n) state.
Thermal conductivity
Thermal conductivities are predicted with the method thermal_conductivity(self, T, Vm, x, N=None)
, where T
is the temperature, Vm
is the molar volume, x
is the molar composition and N
is the Enskog approximation order.
Example:
from pykingas.MieKinGas import MieKinGas
kin = MieKinGas('O2,N2,CO2,C1') # Mixture of air with carbon dioxide and methane, modeled with RETMie
T = 800 # Kelvin
Vm = 66.5 # cubic meter per mole, approximately equivalent to a pressure of 1 bar
x = [0.05, 0.25, 0.5, 0.2] # Molar composition
cond = kin.thermal_conductivity(T, Vm, x, N=2) # Thermal conductivity [W / m K]
Shear viscosity
Shear viscosities are predicted with the method viscosity(self, T, Vm, x, N=None)
, where T
is the temperature, Vm
is the molar volume, x
is the molar composition and N
is the Enskog approximation order.
Example:
from pykingas.MieKinGas import MieKinGas
kin = MieKinGas('O2,N2,CO2,C1') # Mixture of air with carbon dioxide and methane, modeled with RETMie
T = 800 # Kelvin
Vm = 66.5 # cubic meter per mole, approximately equivalent to a pressure of 1 bar
x = [0.05, 0.25, 0.5, 0.2] # Molar composition
visc = kin.viscosity(T, Vm, x, N=2) # Shear viscosity [Pa s]
Diffusion coefficients
Diffusion coefficients may be defined in many different ways, and depend upon the frame of reference (FoR). For a more indepth discussion on this see the supporting information of Revised Enskog Theory for Mie fluids: Prediction of diffusion coefficients, thermal diffusion coefficients, viscosities and thermal conductivities.
The interface to all diffusion coefficients is the method interdiffusion(self, T, Vm, x, N)
, where T
is the temperature, Vm
is the molar volume, x
is the molar composition and N
is the Enskog approximation order.
The default definition of the diffusion coefficient is
$$J_i^{(n)} =  \sum_{i \neq l} D_{ij} \nabla n_j$$
where $J_i$ is the molar flux of species $i$ in the centre of moles (CoN) FoR, and $i \neq l$ are the independent molar density gradients. $l$ is by default the last component in the mixture, such that for a binary system, this reduces to
$$J_1 =  D \nabla n_1$$
The common Fickean diffusion coefficient. The diffusion coefficients are then computed as
from pykingas.MieKinGas import MieKinGas
kin = MieKinGas('AR,KR') # RETMie for a mixture of argon and krypton
T = 300 # Kelvin
Vm = 25 # cubic meter per mole, approximately equivalent to a pressure of 1 bar
x = [0.3, 0.7] # Molar composition
D = kin.interdiffusion(T, Vm, x, N=2) # Binary diffusion coefficient [m^2 / s]
Note: For binary mixtures, if the kwarg use_binary=True
and use_independent=True
(default behaviour), only a single diffusion coefficient is returned (not an array).
Variations of the diffusion coefficient
To compute diffusion coefficients in other frames of reference, use the frame_of_reference
kwarg, the valid options are 'CoN'
(centre of moles, default), 'CoM'
(centre of mass / barycentric), 'CoV'
(centre of volume), and 'solvent'
, in combination with the solvent_idx
kwarg.
Example:
from pykingas.MieKinGas import MieKinGas
kin = MieKinGas('AR,KR') # RETMie for a mixture of argon and krypton
T = 300 # Kelvin
Vm = 25 # cubic meter per mole, approximately equivalent to a pressure of 1 bar
x = [0.3, 0.7] # Molar composition
D_CoN = kin.interdiffusion(T, Vm, x, N=2, frame_of_reference='CoN') # Diffusion coefficient in the CoN FoR
D_CoM = kin.interdiffusion(T, Vm, x, N=2, frame_of_reference='CoM') # Diffusion coefficient in the CoM FoR (barycentric)
D_CoV = kin.interdiffusion(T, Vm, x, N=2, frame_of_reference='CoV') # Diffusion coefficient in the CoV FoR
D_solv_Ar = kin.interdiffusion(T, Vm, x, N=2, frame_of_reference='solvent', solvent_idx=0) # Diffusion coefficient in the solvent FoR, with Argon as the solvent
D_solv_Kr = kin.interdiffusion(T, Vm, x, N=2, frame_of_reference='solvent', solvent_idx=1) # Diffusion coefficient in the solvent FoR, with Krypton as the solvent
When using the solvent
FoR, the dependent molar density gradient is by default set to be the solvent.
To explicitly set the dependent molar density gradient (default is the last component), use the dependent_idx
kwarg, as
# Continued
D_1 = kin.interdiffusion(T, Vm, x, N=2, dependent_idx=0) # Diffusion coefficeint in the CoN FoR, with \nabla n_{Ar} as the dependent gradient
D_2 = kin.interdiffusion(T, Vm, x, N=2, dependent_idx=1) # Diffusion coefficeint in the CoN FoR, with \nabla n_{Kr} as the dependent gradient
The dependent_idx
, the specifies the value of $l$ in the equation
$$J_i^{(n)} =  \sum_{i \neq l} D_{ij} \nabla n_j$$
defining the diffusion coefficient. The two diffusion coefficients computed above would thus correspond to the diffusion coefficients
$$J_1^{(n)} = D_1 \nabla n_2 $$ $$J_2^{(n)} = D_1 \nabla n_2 $$
and
$$J_1^{(n)} = D_2 \nabla n_1 $$ $$J_2^{(n)} = D_2 \nabla n_1 $$
where the superscript $^(n)$ denotes that the fluxes are in the centre of moles frame of reference.
To compute diffusion coefficients corresponding to a dependent set of fluxes and forces, defined by
$$J_i^{(FoR)} =  \sum_j D_{ij} \nabla n_j,$$
set the kwarg use_independent=False
, as
# Continued
D = kin.interdiffusion(T, Vm, x, N=2, use_independent=False) # Dependent diffusion coefficients in the CoN FoR
For the current system this corresponds to the coefficients of the equation
$$J_1^{(n)} =  D[0, 0] \nabla n_1  D[0, 1] \nabla n_2$$
and
$$J_2^{(n)} =  D[1, 0] \nabla n_1  D[1, 1] \nabla n_2.$$
where D[i, j]
are the elements of the matrix returned by kin.interdiffusion(T, Vm, x, N=2, use_independent=False)
.
The frame_of_reference
kwarg works as normal when use_independet=False
.
Thermal diffusion
Thermal diffusion is characterised by several common coefficients, the thermal diffusion coefficients $D_{T,i}^{(FoR)}$, the thermal diffusion factor $\alpha_{ij}$, the thermal diffusion ratios $k_{T, i}$ and the Soret coefficients $S_{T,i}$.
Of these, the thermal diffusion coefficients, $D_{T,i}^{(FoR)}$, carry the same ambiguity as the diffusion coefficients in their dependency on the frame of reference (FoR) and choice of dependent gradient.
The Thermal diffusion factors
The thermal diffusion factor gives the ratio
$$\nabla \ln (x_i / x_j) =  \alpha_{ij} \nabla \ln T$$
in the absence of mass fluxes, and can be directly related to the Onsager phenomenological coefficients. They are computed as
from pykingas.MieKinGas import MieKinGas
kin = MieKinGas('C1,C3,CO2') # RETMie for a mixture of methane, propane and CO2
T = 300 # Kelvin
Vm = 25 # cubic meter per mole, approximately equivalent to a pressure of 1 bar
x = [0.3, 0.6, 0.1] # Molar composition
alpha = kin.thermal_diffusion_factor(T, Vm, x, N=2) # Thermal diffusion factors [dimensionless]
The thermal diffusion ratios
The thermal diffusion ratios satisfy the relation
$$\nabla n_i =  k_{T,i} \nabla \ln T$$
in the absence of mass fluxes, and can be directly related to the Onsager phenomenological coefficients. They are computed as
# Continued
kT = kin.thermal_diffusion_ratio(T, Vm, x, N=2) # Thermal diffusion ratios [dimensionless]
The thermal diffusion coefficients
The thermal diffusion coefficients are by default defined by
$$J_i^{(n)} = D_{T, i} \nabla \ln T  \sum_{j \neq l} D_{ij} \nabla n_j,$$
where $J_i^{(n)}$ is the molar flux of species $i$ in the centre of moles (CoN) FoR, $\nabla n_j$ is the molar density gradient of component $j$, and $l$ is the index of the dependent gradient. This is computed by
from pykingas.MieKinGas import MieKinGas
kin = MieKinGas('C1,O2,CO2') # RETMie for a mixture of methane, oxygen and CO2
T = 300 # Kelvin
Vm = 25 # cubic meter per mole, approximately equivalent to a pressure of 1 bar
x = [0.3, 0.6, 0.1] # Molar composition
DT = kin.thermal_diffusion_coeff(T, Vm, x, N=2) # Thermal diffusion coefficients in the CoN FoR [mol / m s]
Variations of the thermal diffusion coefficients
For other frames of reference, use the frame_of_reference
kwarg, with options equivalent to those for interdiffusion
, that is: 'CoN'
(centre of moles, default), 'CoM'
(centre of mass / barycentric), 'CoV'
(centre of volume), and 'solvent'
, in combination with the solvent_idx
kwarg.
Example:
# Continued
DT_CoN = kin.thermal_diffusion_coeff(T, Vm, x, N=2, frame_of_reference='CoN') # Thermal diffusion coefficient in the CoN FoR
DT_CoM = kin.thermal_diffusion_coeff(T, Vm, x, N=2, frame_of_reference='CoM') # Thermal diffusion coefficient in the CoM FoR (barycentric)
DT_CoV = kin.thermal_diffusion_coeff(T, Vm, x, N=2, frame_of_reference='CoV') # Thermal diffusion coefficient in the CoV FoR
DT_solv_C1 = kin.thermal_diffusion_coeff(T, Vm, x, N=2, frame_of_reference='solvent', solvent_idx=0) # Thermal diffusion coefficient in the solvent FoR, with methane as the solvent
DT_solv_C3 = kin.thermal_diffusion_coeff(T, Vm, x, N=2, frame_of_reference='solvent', solvent_idx=1) # Thermal diffusion coefficient in the solvent FoR, with propane as the solvent
DT_solv_CO2 = kin.thermal_diffusion_coeff(T, Vm, x, N=2, frame_of_reference='solvent', solvent_idx=2) # Thermal diffusion coefficient in the solvent FoR, with CO2 as the solvent
To explicitly select the dependent molar gradient (default is the last component), use the dependent_idx
kwarg, equivalently to interdiffusion
.
Example:
# Continued
DT = kin.thermal_diffusion_coeff(T, Vm, x, N=2, dependent_idx=0) # Thermal diffusion coefficient in the CoN FoR, with \nabla n_{C1} as the dependent gradient
D = kin.interdiffusion(T, Vm, x, N=2, dependent_idx=0) # Diffusion coefficient in the CoN FoR with \nabla n_{C1} as the dependent gradient
This gives the coefficients corresponding to the flux equations
$$J_{C1} = D_{T}[0] \nabla \ln T  D[0, 1] \nabla n_{O2}  D[0, 2] \nabla n_{CO2}, $$
$$J_{O2} = D_{T}[1] \nabla \ln T  D[1, 1] \nabla n_{O2}  D[1, 2] \nabla n_{CO2}, $$
$$J_{CO2} = D_{T}[2] \nabla \ln T  D[2, 1] \nabla n_{O2}  D[2, 2] \nabla n_{CO2}. $$
To compute coefficients corresponding to flux equation with all forces and fluxes (not an independent set), set the kwarg use_independent=False
, as
# Continued
DT = kin.thermal_diffusion_coeff(T, Vm, x, N=2, use_independent=False) # Thermal diffusion coefficient in the CoN FoR, with all gradients
D = kin.interdiffusion(T, Vm, x, N=2, use_independent=False) # Diffusion coefficient in the CoN FoR with all gradients
This gives the coefficients corresponding to the flux equations
$$J_{C1} = D_{T}[0] \nabla \ln T  D[0, 0] \nabla n_{C1}  D[0, 1] \nabla n_{O2}  D[0, 2] \nabla n_{CO2}, $$
$$J_{O2} = D_{T}[1] \nabla \ln T  D[1, 0] \nabla n_{C1}  D[1, 1] \nabla n_{O2}  D[1, 2] \nabla n_{CO2}, $$
$$J_{CO2} = D_{T}[2] \nabla \ln T  D[2, 0] \nabla n_{C1}  D[2, 1] \nabla n_{O2}  D[2, 2] \nabla n_{CO2}. $$
The frame_of_reference
kwarg works as normal when setting use_independent=False
.
Fluid identifiers
Fluid name  Fluid identifyer  CAS 

Argon  AR  7440371 
Methane  C1  74828 
Ethane  C2  74840 
Propane  C3  74986 
Carbon dioxide  CO2  124389 
Deuterium  D2  7782390 
Hydrogen  H2  1333740 
Water  H2O  7732185 
Helium4  HE  7440597 
Krypton  KR  7439909 
Lennardjones_fluid  LJF  
Nitrogen  N2  7727379 
Ndecane  NC10  124185 
Npentadecane  NC15  629629 
Neicosane  NC20  112958 
Ndocosane  NC22  629970 
Nbutane  NC4  106978 
Npentan  NC5  109660 
Nhexane  NC6  110543 
Nheptane  NC7  142825 
Noctane  NC8  111659 
Nnonane  NC9  111842 
Neon  NE  7440019 
Orthohydrogen  OH2  1333740 
Oxygen  O2  7782447 
Parahydrogen  PH2  1333740 
Xenon  XE  7440633 
Project details
Release history Release notifications  RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Hashes for pykingas2.0.0cp311nonewin_amd64.whl
Algorithm  Hash digest  

SHA256  bed3430b5ccbf2bc9142fc1af70d335a3aa70d5b32719f091ad72d16e114bba9 

MD5  546615e31a719e8bc4faa29fc3f3e447 

BLAKE2b256  fb624cfed4db4c848b1ca3051db993acc773c533ad2175c93e1b3ac94813f716 
Hashes for pykingas2.0.0cp311nonemanylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm  Hash digest  

SHA256  43d214c02eccabd23bddae07587450a2413a2ceb784cc4e1b9a71361b000a922 

MD5  2884488486176d36b056981e4b30e133 

BLAKE2b256  5e2a4403f1e8cacfc76c1c70f60c019ff5868306c6a7b73b37fc998837eb46a4 
Hashes for pykingas2.0.0cp311nonemacosx_11_0_arm64.whl
Algorithm  Hash digest  

SHA256  8572101a35c8084174cec17dfafeeac6f9080ffac7c4118eb8184e4af7b895bb 

MD5  7b3fadb4b0ea990d659522ba6b412d9d 

BLAKE2b256  1af07c5631fb435f6bb377fad6e754a3a26a9fce9fae9221742bfe01191f581a 
Hashes for pykingas2.0.0cp310nonewin_amd64.whl
Algorithm  Hash digest  

SHA256  453e22e7902673a8b013446b6ca1cbe1fba5a5c9163459b10cdc85215c4cb614 

MD5  05eec02972fae2126278ac64f2fd9642 

BLAKE2b256  13998255d0b8144354c8f7a208fe72c197d1d0273832043e52e4e6b7da478333 
Hashes for pykingas2.0.0cp310nonemanylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm  Hash digest  

SHA256  27695921e86898693a53fb63d402a00b35b208025691af452023c1cb484e83a9 

MD5  325dc652c063c6fda3eb18b333c78ac4 

BLAKE2b256  3aa8eec481d40c5b2fb34ab6873d4b722a0448adcf001c173256d4b021799e67 
Hashes for pykingas2.0.0cp310nonemacosx_11_0_arm64.whl
Algorithm  Hash digest  

SHA256  7e90122ba54270d2a5f6e348e54737c5db034ecc9004215bfbdd42dfcce64f47 

MD5  7d7ab6b1e5bd830e71759e7407a353e0 

BLAKE2b256  7c5cbd53ce5fd67cbf6d0ccbaf64ce6921b69711b1aa312f1b772b9eebf556ed 
Hashes for pykingas2.0.0cp39nonewin_amd64.whl
Algorithm  Hash digest  

SHA256  9c3ef36f9eb741bcb6ab0fdeb149241c72cc952ba06aa4f7b38b0313069e8add 

MD5  399fc56c889a7df866aa55949a89c015 

BLAKE2b256  590069bfdb6724063f0ff1740ed54155e4d5bfcec6484414895996bd79586736 
Hashes for pykingas2.0.0cp39nonemanylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm  Hash digest  

SHA256  917137d3cea1de7922ba08c08d79a15cd9134e995af572057c20fa0bcdf9b30b 

MD5  7dda8cbf421f8da87c13277e9ec242b5 

BLAKE2b256  2cdbcdad8e866337474596f51c196db312bc204d7e2d2101ae67e82637d5d6ba 
Hashes for pykingas2.0.0cp39nonemacosx_11_0_arm64.whl
Algorithm  Hash digest  

SHA256  e64cb88f6f655608feac75b7c4526074aa15aebe67fe321ebf14dc679d9118cc 

MD5  ec62d9460b0969d9ed79e7e7459eba35 

BLAKE2b256  87854f432e6aad34de46bdbb6bc092da001ec504399d52faa02a2eac3d0ad81a 
Hashes for pykingas2.0.0cp38nonewin_amd64.whl
Algorithm  Hash digest  

SHA256  9e7669423154f94d4bcf20279668144d6526b61d228b0556a9508f6b13a628de 

MD5  3ec022be58a3475ebd6ee248f4b0d1ce 

BLAKE2b256  7d11914385543da7009ca54bfb9ce62b0f61b2bde47aa0f828543080b0f7c2b4 
Hashes for pykingas2.0.0cp38nonemanylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm  Hash digest  

SHA256  b53157c09a81b5db88a7d9c48eeb2af52d8669ffe20b28df40b04f13dc70e0ed 

MD5  efb7bf8b443d1a2881427b76da2827e5 

BLAKE2b256  034b0e331b8d4b0a6fb302cdfb07a48f16a96ef42c0756f690cf8477c5ad58c4 
Hashes for pykingas2.0.0cp38nonemacosx_11_0_arm64.whl
Algorithm  Hash digest  

SHA256  91cceaffe23a70e3257209c67523970f1c3a63d8db0451ff39c2fa6998407c5a 

MD5  d03ea8260ac1835342ef5c7ccc6a2985 

BLAKE2b256  b3a72c5192dce25f20f28c1bae72e3ee53c426a811b6c24921c1adfed08e7310 