Skip to main content

C level implementation of H2MM algorithm by Pirchi. 2016

Project description

H2MM_C

Build and Test Documentation Status

Project Desciption

H2MM_C is a python extension module that implements the H2MM algorithm originally developed by Pirchi, Tsukanov et. al. J. Phys. Chem B. 2016, 120, 13065-12075 in a highly efficent and multithreaded manner, along with functions for posterior analysis with the Viterbi algorithm.

H2MM_C was designed from the ground up to handle multiparameter models, described in Harris, P.D., Narducci, A., Gebhardt, C. et al. Multi-parameter photon-by-photon hidden Markov modeling. Nat Commun 13, 1000 (2022)., which also introduced this package.

The API is intended to be user friendly, while still allowing for great flexibility. Suggestions are welcome for ways to improve the code and interface.

Full Documentation

Full codumentation can be found at h2mmpythonlib.readthedocs.io

See Also

This package is offers the basic function to perform H2MM, which means that it does not restrict the use of H2MM to any particular modality. However this means that much of the analysis specific to smFRET applications is left up to the user.

For those

Core Features

  • H2MM model optimization: finding the ideal model given a set of data.
    • limit functions to bound the values that a model can take
  • Viterbi analysis: finds the most likely state path through a set of data given a H2MM model
    • Reporting of model reliability statistics BIC and ICL
  • Simulation functions: Monte Carlo type simulations based on a hidden Markov model
    • Useful for verifying results

Installation

The easiest way to install H2MM_C is via pip:

$ pip install H2MM-C

It should be noted that the setup files require a recent version of numpy, and at least Python 3.7. This is not because the code actually requires features introduced in these verstions, but rather because in Linux, with the numpy version change, the size of certain numpy data-types changed, making compiles with recent versions of numpy incompatible with earler versions. These recent numpy versions do not support Python 3.6. Therefore, the intrepid programmer can download the code, edit the setup files, and compile with earlier versions of numpy and/or Python, and the code should still work.

Alternative Installation Methods

If for some reason installing from PyPi doesn't work, you can try installing directly from github:

$ pip install git+https://github.com/harripd/H2MMpythonlib

Or, if you download the repository, and have the files stored locally, from the top directory of the project (where the setup.py file is):

$ python setup.py install

or if you only want to have it accessible from the current directory, use:

$ python setup.py build_ext --inplace

*Note on some systems the commands are pip3 and python3 instead of pip and python respectively.

Compatibility

We are trying to provide the broadest degree of compatibility as possible, but there are limitations, and assistance is welcome to expand compatibility as much as possible. Currently we are using github actions and cibuildwheel to generate wheels that are uploaded to PyPi, as well as the sdist archive (.tar.gz file), however we are having trouble building certain wheels.

Working wheels:

  • Windows wheels
  • manylinux wheels
  • MacOS X wheels

Currently we do not have wheels for:

  • musllinux

For systems we do not have wheels for, it may still be possible to compile from the sdist archive (.tar.gz file). cibuildwheel uses the most recent version of numpy. This means that these wheels will generally not work if you have a version of numpy before 1.20.0, and therefore this is given as a minimum version requirement. However, we have been able to compile working versions with lesser versions of numpy. Therefore, if you wish to keep your version of numpy, we suggest downloading the github repository, editing the setup.py file to support your version of numpy, and compiling with the following commands (run from the base directory where you have your local copy).

$ python setup.py bdist_wheel sdist
$ pip install *path to wheel file*

Tutorial Code

For a full tutorial on H2MM_C, please see the zenodo repository: DOI

Below is a small sample of tutorial code.

	# H2MM_C accepts numpy arrays, so we mush import numpy
	import numpy as np
	import H2MM_C
	# note: it can be more convenient to use from H2MM_C import * so that it is unnecessary to type H2MM_C. repeatedly

	###Data must be defined, so here is some data *made purely for demonstration, and not meant to be realistic*

	# lets define sum fake bursts IMPORTANT: this is ENTIRELY FOR DEMONSTRATION, the fake data below is not based on any model
	# burst 1
	burst_stream1 = np.array([  0,  1,  0,  1,  0,  2,  0,  1,  2,  0,  1,  2]) 
	burst_times1 =  np.array([100,110,112,117,123,124,128,131,139,148,168,182]) # note that burst_stream1 is of the same length as burst_times1
	
	# burst 2
	burst_stream2 = np.array([  2,  1,  0,  0,  2,  1,  0,  1,  0,  0])
	burst_times2  = np.array([202,231,340,370,372,381,390,405,410,430]) # note that burst_stream2 is of the same length as burst_times2, but different from burst_stream1 and burst_stream1
	
	# burst N
	burst_streamN = np.array([  0,  2,  1,  2,  0,  2,  1,  0,  1,  2,  1,  0,  1,  0,  0])
	burst_timesN  = np.array([500,502,511,515,518,522,531,540,544,548,561,570,581,590,593]) # again burst_streamN is the same length as burst_timeN


	###The burst arrays must now be put into two lists, one for the photon streams and one for the arrival times


	# Now the bursts must be put into lists (real data should have hundreds to thousands of bursts)
	# Also, normally, you will be importing the data from a file, so the previous definition of burst_streamN and burst_timesN
	# will more likely be done with a file read, or by using your burst-analysis software to split your data into bursts
	streams = [burst_stream1, burst_stream2, burst_streamN] # each element is a numpy array of indexes identifying the stream of each photon
	times = [burst_times1, burst_times2, burst_timesN] # each element is a numpy array of arrival times, must be in in order


	###The above does not invoke H2MM_C (except the import statements), they are purely for demonstrating how to format the data that H2MM_C accepts.
	###The rest is actually using H2MM_C, first, an initial model must be defined, (an object of the 'H2MM_C.h2mm_model' class) and then initial model and data can be given to the  'H2MM_C.EM_H2MM_C' for optimization.


	# first define the initial arrays for the initial guess
	prior = np.array([0.3, 0.7]) # 1D array, the size is the number of states, here we have 2, the array will sum to 1
	trans = np.array([[0.99, 0.01],[0.01,0.99]]) # 2D square array, each dimenstion the number of states
	obs = np.array([[0.1, 0.4, 0.5],[0.3, 0.2, 0.5]]) # 2D array, number of rows is the number of states, the number of columns is the number of detectors
	
	# Now make the initial model
	initial_model = H2MM_C.h2mm_model(prior,trans,obs) 
	
	# Run the main algorithm
	optimized_model = H2MM_C.EM_H2MM_C(initial_model,streams,times)
	
	# Printing out the main results
	print(optimized_model.prior, optimized_model.trans, optimized_model.obs)
	# Print out the number of iterations it took to converge
	print(optimized_model.niter)


	###And viterbi analysis


	# doing the fitting
	fitting = H2MM_C.viterbi_sort(optimized_model,streams,times)
	
	print(fitting[0]) # print the ICL
	# the state path is in index 1
	print(fitting[1])

Classes

  1. h2mm_model: the core python extension type of the package: this contains the H2MM model, which has the core fields:

    • nstate: the number of states in the model
    • ndet: the number of photon streams in the model
    • trans: the transition probability matrix
    • obs: the emmision probability matrix, shape nstate x ndet
    • prior: the prior probability, shape nstate
    • k: the number of free parameters in the model
    • loglik: the loglikelihood of the model
    • nphot: the number of photons in the dataset that the model is optimized against
    • bic: the Baysian Information Criterion of the model
    • converged: True if the model reached convergence criterion, False if the optimization stopped due to reaching the maximum number of iterations or if an error occured in the next iteration.
  2. h2mm_limits: class for bounding the values a model can take, min/max values can be specified for all 3 core arrays (trans, obs, and prior) of an h2mm_model, either as single floats, or full arrays, values are specified as keyword arguments, not specifiying a value for a particular field will mean that field will be unbounded

    • min_trans: the minimum values for the trans array (ie the slowest possible transition rate(s) allowed), values on the diagonal will be ignored
    • max_trans: the maximum values for the trans array (ie the fastest possible transition rate(s) allowed), values on the diagonal will be ignored
    • min_obs: the minimum values for the obs array
    • max_obs: the maximum values for the obs array
    • min_prior: the minimum value for the prior array
    • max_prior: the maximum value for the prior array

Functions

  1. EM_H2MM_C: the core function of the package, used to perform model optimizations.

    Arguments:

    • Initial model : an h2mm_model object that will be optimized.
    • Streams: a set of burst photon indeces. Must be given as a list, tuple or 1-D object numpy.ndarray of 1D numpy.ndarrays of photon indeces, must be of integer type, and positive. The indeces will be converted to unsigned long int when given to C-code
    • Times: a set of burst photon times (macrotimes), Must be given as a list, tuple or 1-D object numpy.ndarray of 1D numpy.ndarrays. The macrotimes will be converted to unsigned long long int when given to C-code. Therefore while floating point arrays are accepted, they are strongly discouraged. Must be same length as streams

    Returns:

    • Optimized model: the h2mm_model optimized for the given input data.
  2. H2MM_arr: calculate the loglik of a bunch of h2mm_model objects at once, but with no optimization. The first agruments can be an h2mm_model, of a list, tuple, or numpy array of h2mm_model objects. The second and third arguments are the same as in EM_H2MM_C

    Arguments:

    • Models : a list, tuple or numpy.ndarray of h2mm_model objects whose loglikelihood will be calculated agains the given data.
    • Streams: a set of burst photon indeces. Must be given as a list, tuple or 1-D object numpy.ndarray of 1D numpy.ndarrays of photon indeces, must be of integer type, and positive. The indeces will be converted to unsigned long int when given to C-code
    • Times: a set of burst photon times (macrotimes), Must be given as a list, tuple or 1-D object numpy.ndarray of 1D numpy.ndarrays. The macrotimes will be converted to unsigned long long int when given to C-code. Therefore while floating point arrays are accepted, they are strongly discouraged. Must be same length as streams

    Returns:

    • Calculated Models: a set of h2mm_model objects organized in the same way as Models
  3. viterbi_path: takes the same inputs as EM_H2MM_C, but the 'h2mm_model' should be optimized through 'EM_H2MM_C' first, returns a tuple the: Arguments:

    • Model : an h2mm_model object that will has been optimized against the given data.
    • Streams: a set of burst photon indeces. Must be given as a list, tuple or 1-D object numpy.ndarray of 1D numpy.ndarrays of photon indeces, must be of integer type, and positive. The indeces will be converted to unsigned long int when given to C-code
    • Times: a set of burst photon times (macrotimes), Must be given as a list, tuple or 1-D object numpy.ndarray of 1D numpy.ndarrays. The macrotimes will be converted to unsigned long long int when given to C-code. Therefore while floating point arrays are accepted, they are strongly discouraged. Must be same length as streams

    Returns:

    • path: the most likely state path
    • scale: the posterior probability of each photon
    • ll: the loglikelihood of the path for each burst
    • icl: the Integrated Complete Likelihood (ICL) of the state path given the model and data, provides an extremum based criterion for selecting the ideal number of states
  4. viterbi_sort: the viterbi algorithm but with additional parameters included: Arguments:

    • Model : an h2mm_model object that will has been optimized against the given data.
    • Streams: a set of burst photon indeces. Must be given as a list, tuple or 1-D object numpy.ndarray of 1D numpy.ndarrays of photon indeces, must be of integer type, and positive. The indeces will be converted to unsigned long int when given to C-code
    • Times: a set of burst photon times (macrotimes), Must be given as a list, tuple or 1-D object numpy.ndarray of 1D numpy.ndarrays. The macrotimes will be converted to unsigned long long int when given to C-code. Therefore while floating point arrays are accepted, they are strongly discouraged. Must be same length as streams

    Returns:

    • icl: the Integrated Complete Likelihood (ICL) of the state path given the model and data, provides an extremum based criterion for selecting the ideal number of states
    • path: the most likely state path
    • scale: the posterior probability of each photon
    • ll: the loglikelihood of the path for each burst
    • burst_type: a binary classification of which states are in each burst
    • dwell_mid: returns the lengths of dwells in each state, for dwells with full residence time in the burst
    • dwell_beg: same as dwell_mid, except for dwells that begin each burst
    • dwell_end: same as dwell_beg, but for ending dwells
    • ph_counts: gives counts of photons per stream per dwell
    • ph_mid: same as ph_counts, but further sorted as in dwell_mid
    • ph_beg: same as ph_counts, but futher sorted as in dwell_beg
    • ph_end: same as ph_counts, but futher sorted as in dwell_end
    • ph_burst: same as ph_counts, but futher soreted as in dwell_burst
  5. sim_statepath: from an model, generate a random state path of equally spaced time points

    Arguments:

    • Model: a h2mm_model object to use as the defined parameters of the simulation
    • Length: the number of time steps to simulate, defines the number of elements in the ouput array

    Returns:

    • Path: an array of the states of the system at each time point, based on Monte-Carlo simulation
  6. sim_sparsestatepath: from a model and a set of sparse times, generate a random state path

    Arguments:

    • Model: a h2mm_model object to use as the defined parameters of the simulation
    • Times: a 1D numpy.ndarray object of times for a simulated burst

    Returns:

    • Path: the states of the simulated photons based on the input times
  7. sim_phtraj_from_state: randomly select photons given a set of states and a model Arguments:

    • Model: a h2mm_model object to use as the defined parameters of the simulation.. Note: the model transition rates are ignored, only the emission probability matrix is considered
    • states: a 1D numpy.ndarray of positive integers, specifying the state of each photon. Note: this state path over-rides any transition probability matrix used in the model

    Returns:

    • Stream: the indeces (photon indeces) of the simulated photons
  8. sim_phtraj_from_times: from a model and a set of sparse times, generate a random photon trajectory

    Arguments:

    • Model: a h2mm_model object to use as the defined parameters of the simulation
    • Times: a 1D numpy.ndarray object of times for a simulated burst

    Returns:

    • Path:
    • Stream: a 1D numpy.ndarray of the simulated photon indeces (streams)

Acknowledgements

Significant advice and help in understanding C code was provided by William Harris, who was also responsible for porting the code to Windows

License and Copyright

This work falls under the MIT open source lisence

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

h2mm_c-1.0.5.tar.gz (3.3 MB view details)

Uploaded Source

Built Distributions

H2MM_C-1.0.5-cp312-cp312-win_amd64.whl (807.4 kB view details)

Uploaded CPython 3.12 Windows x86-64

H2MM_C-1.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

H2MM_C-1.0.5-cp312-cp312-macosx_11_0_arm64.whl (869.9 kB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

H2MM_C-1.0.5-cp311-cp311-win_amd64.whl (810.7 kB view details)

Uploaded CPython 3.11 Windows x86-64

H2MM_C-1.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

H2MM_C-1.0.5-cp311-cp311-macosx_11_0_arm64.whl (869.3 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

H2MM_C-1.0.5-cp310-cp310-win_amd64.whl (808.7 kB view details)

Uploaded CPython 3.10 Windows x86-64

H2MM_C-1.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

H2MM_C-1.0.5-cp310-cp310-macosx_11_0_arm64.whl (869.7 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

H2MM_C-1.0.5-cp39-cp39-win_amd64.whl (810.1 kB view details)

Uploaded CPython 3.9 Windows x86-64

H2MM_C-1.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

H2MM_C-1.0.5-cp39-cp39-macosx_11_0_arm64.whl (870.2 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

H2MM_C-1.0.5-cp38-cp38-win_amd64.whl (817.2 kB view details)

Uploaded CPython 3.8 Windows x86-64

H2MM_C-1.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

H2MM_C-1.0.5-cp38-cp38-macosx_11_0_arm64.whl (869.1 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

H2MM_C-1.0.5-cp37-cp37m-win_amd64.whl (793.3 kB view details)

Uploaded CPython 3.7m Windows x86-64

H2MM_C-1.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

File details

Details for the file h2mm_c-1.0.5.tar.gz.

File metadata

  • Download URL: h2mm_c-1.0.5.tar.gz
  • Upload date:
  • Size: 3.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.9.19

File hashes

Hashes for h2mm_c-1.0.5.tar.gz
Algorithm Hash digest
SHA256 553ab4fc24aebe7a08fe97c624aa64b72265fe8e1c51a929df9fe8d9d94da17b
MD5 cad13be048be918299e759da5a651836
BLAKE2b-256 570e6ff78797bd3ff827f1a03a026de61deb7b68efd98671fa3aa420992b9aab

See more details on using hashes here.

File details

Details for the file H2MM_C-1.0.5-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: H2MM_C-1.0.5-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 807.4 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.9.19

File hashes

Hashes for H2MM_C-1.0.5-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 820e6803ab723928323b945e8db209e3e901ab3b2f16864e44dffbfc1c925d49
MD5 a729daca3285b130d7f998542d547a51
BLAKE2b-256 977dd42837792d9d124653233d787c3feec0c6bae00475bfed0f39b849d2cc62

See more details on using hashes here.

File details

Details for the file H2MM_C-1.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for H2MM_C-1.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3c6312cc688510c91ac69bcc081425cfc85b332ed9f3ee308c1364a2b1479695
MD5 e981862e1eed5a8356ac8d088bdffa62
BLAKE2b-256 3733e5e307b17d083b6738a914831b5b395bac1ce0626a3d7643f18608c8b50a

See more details on using hashes here.

File details

Details for the file H2MM_C-1.0.5-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for H2MM_C-1.0.5-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 01b8ec3fb8e61df72450529897d988431d4b1cba39ca58754f075a5274eb4e53
MD5 7c51482ea59409205d7866f462f9e2e9
BLAKE2b-256 deb8db88600ccfee2a69a3dcddafcc40ba9b8dc5c3e6db8d4f1c45b338820433

See more details on using hashes here.

File details

Details for the file H2MM_C-1.0.5-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: H2MM_C-1.0.5-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 810.7 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.9.19

File hashes

Hashes for H2MM_C-1.0.5-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 f0cc7ffba28a87a51f3ee4396cc5eab0b64370cb97f23c142476a9fcaaa29c27
MD5 a6375a7bd51b147728b9044444d65cfb
BLAKE2b-256 5a76164a4b26d0ebf971314e6ceb6cddf5308329a276b704e3f9d8aa1dc67e6d

See more details on using hashes here.

File details

Details for the file H2MM_C-1.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for H2MM_C-1.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 99224d1e6d726d5308988ec22bfab206f896129cbc6d7010022775184268ef3c
MD5 3bf2c778aeef298418378dbcda5b36df
BLAKE2b-256 b9166d577aa7e480c1248287a7717a9f49c2e907c8da3db5fe81d501ccc3cb44

See more details on using hashes here.

File details

Details for the file H2MM_C-1.0.5-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for H2MM_C-1.0.5-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 337b23809e36e1f0cbc2be0e989dc769fc7044a0cd1ff6be6dd0b09c535c3517
MD5 b40b6982e437e0c52e22f22aeeb0e440
BLAKE2b-256 9f84792d57a53ca5a433c8b8dc792eee035cb043550d6684e1310e8b86907305

See more details on using hashes here.

File details

Details for the file H2MM_C-1.0.5-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: H2MM_C-1.0.5-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 808.7 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.9.19

File hashes

Hashes for H2MM_C-1.0.5-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 7a26863643aa3359460e051b2863a4af602e4fda475c9737d5c5ed7fdf2ff030
MD5 ce32133856df8fbc47207a2160ba0d73
BLAKE2b-256 5a1024f4fe4f10770fdedc24a8348b976970a925a257c42014dc30200ad80c29

See more details on using hashes here.

File details

Details for the file H2MM_C-1.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for H2MM_C-1.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3a76fca0950fd7c2288068743e0409b8491933e55f50f7f468aca8a85f11cd1d
MD5 b7ae70530d5a43e1b1e040e8578f9e4f
BLAKE2b-256 e51942af96e1cd06fb82a25f800d6dbb155c343eab76afc0ee10392f3767c894

See more details on using hashes here.

File details

Details for the file H2MM_C-1.0.5-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for H2MM_C-1.0.5-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9ec2840a2e863ce63ad8ce807e850312da76dc7f7b849f7693212c320d8436f2
MD5 f2de7d7144b832412bd96fb526a0ad5f
BLAKE2b-256 020d7886a73840f579ea003f407a9bb638a3d2e2aafa33b2d30cba00ab0dfc33

See more details on using hashes here.

File details

Details for the file H2MM_C-1.0.5-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: H2MM_C-1.0.5-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 810.1 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.9.19

File hashes

Hashes for H2MM_C-1.0.5-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 fe6ac30fc984ff1bce8cae764ef7d7f61261ac11cd16f5b95c31569653b083ea
MD5 08d6860168de4334fc603896f67f2710
BLAKE2b-256 2035360d676c44221f4207db0144d01f36a5b513f864a6fa6e90623bce5ecccf

See more details on using hashes here.

File details

Details for the file H2MM_C-1.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for H2MM_C-1.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c950aeedec00333e0cb530378d58d7099d92ff5d0fe624a69b8986d60e1bcd03
MD5 8acabc73f1aa7bc5b2be537db39d6d05
BLAKE2b-256 61c037dfd85cde4ef65c61d6362c726fc066cfec5c4bcea8d54e8cd17617e07b

See more details on using hashes here.

File details

Details for the file H2MM_C-1.0.5-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for H2MM_C-1.0.5-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 de959cc331ca146725102b99ced28a27f3d0f2f353b831036c37319072fd92db
MD5 0fd40866e69c672f95a06dc071880bce
BLAKE2b-256 f0d0ed4f1bbf8904ddd2889f547c3bb9eecbc015d0438949bb15f75a2d674bec

See more details on using hashes here.

File details

Details for the file H2MM_C-1.0.5-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: H2MM_C-1.0.5-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 817.2 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.9.19

File hashes

Hashes for H2MM_C-1.0.5-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 cb2b8563f7e716e4ec0873c32fdfce4db48a4261e8e7c5eeaf8fe4b225dc49e0
MD5 312cb65eb72642768f98d33e12523b44
BLAKE2b-256 70903b0b9130ca64c2f56d7fa5002c8568338fc83e3acd3dc3257246da4822ac

See more details on using hashes here.

File details

Details for the file H2MM_C-1.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for H2MM_C-1.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 33e7019b1529c9750b349a78440428be4e3e34c88c6877fa1db82db6d36ce095
MD5 e5c04ecc797316cd92564726ab8ac66d
BLAKE2b-256 af020161af106a4824abfd2079a1c66c6ff5e27b6b330de4b026d5023a0679ac

See more details on using hashes here.

File details

Details for the file H2MM_C-1.0.5-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for H2MM_C-1.0.5-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 78d8ddb7958a94d6acfec8c18c00333bb2515327ba318a6931ebaba7a23a8388
MD5 3022718b0735d86f341db7dbae03b1bd
BLAKE2b-256 9ac0bd82f0cc64b51a7dde9914f44cd06d1a5ff7e4f258b408618634619f4bf1

See more details on using hashes here.

File details

Details for the file H2MM_C-1.0.5-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: H2MM_C-1.0.5-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 793.3 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.9.19

File hashes

Hashes for H2MM_C-1.0.5-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 a757ce0cc25413c4be45a622d09451dfab08cad91260264212d941d113ab28a0
MD5 48ee3d43d0115945db220832d2bc60f4
BLAKE2b-256 11823bceb43e78908806140719e8e48762c9be778819d18765a85126d7729f08

See more details on using hashes here.

File details

Details for the file H2MM_C-1.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for H2MM_C-1.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 686e4c1cf8dd22d7ed843fdcc6fded3a5eb971fe179e86c0ad841bd54eca0bd7
MD5 a86c52ba296036142084bceccc6cb560
BLAKE2b-256 0204f01c32437882dcf616d9c7e39cc4cacc354cc62f8df40a8b47aa72586f9f

See more details on using hashes here.

Supported by

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