# IMCtermite
_IMCtermite_ provides access to the proprietary data format
_IMC Bus Format_ with the file extension _.raw_ introduced and developed by
[imc Test & Measurement GmbH](https://www.imc-tm.de/). This data format is
employed i.a. by the measurement hardware
[imc CRONOSflex](https://www.imc-tm.de/produkte/messtechnik-hardware/imc-cronosflex/ueberblick/)
to dump and store data and the software packages
[imc Studio](https://www.imc-tm.de/produkte/messtechnik-software/imc-studio/ueberblick/)
& [imc FAMOS](https://www.imc-tm.de/produkte/messtechnik-software/imc-famos/)
for measurement data control and analysis. Thanks to the integrated Python module,
the extracted measurement data can be stored in any open-source file format
accessible by Python like i.a. _csv_, _json_ or _parquet_.
On the [Record Evolution Platform](https://www.record-evolution.de/en/home-en/), the library can be used both as a command line tool for interactive usage and as a Python module to integrate the _.raw_ format into any ETL workflow.
## Overview
* [File format](#Fileformat)
* [Build and Installation](#Installation)
* [Usage and Examples](#Usage)
* [References](#References)
## File format
[Warning: Take a look at [this issue](https://github.com/RecordEvolution/IMCtermite/issues/14) when reading this section regarding the file format.]
A data file of the _IMC Bus Format_ type with the extension _.raw_ is a _mixed text/binary
file_ featuring a set of markers (keys) that indicate the start of various blocks
of data that provide meta information and the actual measurement data. Every single
marker is introduced by the character `"|" = 0x 7c` followed by two uppercase letters that characterize the type of marker. Each block is further divided into several
parameters separated by commata `"," = 0x 2c` and terminated by a semicolon
`";" = 0x 3b`. For instance, the header - first 600 bytes - of a raw file may
look like this (in UTF-8 encoding):
```
|CF,2,1,1;|CK,1,3,1,1;
|NO,1,86,0,78,imc STUDIO 5.0 R10 (04.08.2017)@imc DEVICES 2.9R7 (25.7.2017)@imcDev__15190567,0,;
|CG,1,5,1,1,1; |CD,2, 63, 5.0000000000000001E-03,1,1,s,0,0,0, 0.0000000000000000E+00,1;
|NT,1,16,1,1,1980,0,0,0.0; |CC,1,3,1,1;|CP,1,16,1,4,7,32,0,0,1,0;
|CR,1,60,0, 1.0000000000000000E+00, 0.0000000000000000E+00,1,4,mbar;|CN,1,27,0,0,0,15,pressure_Vacuum,0,;
|Cb,1, 117,1,0, 1, 1, 0, 9608, 0, 9608,1, 2.0440300000000000E+03, 1.2416717060000000E+09,;
|CS,1, 9619, 1,�oD �nD6�nD)�nD�
```
Line breaks are introduced for readability. Most of the markers introduce
blocks of text, while only the last block identified by `|CS` contains binary data.
The format supports the storage of _multiple data sets (channels)_ in a single
file. The channels may be ordered in _multiplex_ mode (ordering w.r.t. time) or
_block_ mode (ordering w.r.t. to channels).
The markers (keys) are introduced by `"|" = 0x 7c` followed by two uppercase
letters. There are _two types_ of markers distinguished by the first letter:
1. _critical_ markers: introduced by `|C` featuring uppercase `C`
1. _noncritical_ markers: introduced by `|N` featuring uppercase `N`
The second letter represents further details of the specific key. Note that
while the _noncritical_ keys are optional, any _.raw_ file _cannot be_ correctly
decoded if any of the _critical_ markers are misinterpreted, invalid or damaged.
The second uppercase letter is followed by the first comma and the _version_
of the key starting from 1. After the next comma, an _(long) integer_ (in text
representation) specifies the length of the entire block, i.e. the number of
bytes between the following comma and the block-terminating semicolon. The further
structure of a block is not defined and may feature different numbers of additional
parameters. The format allows for any number of carriage returns (`CR = 0x0d`)
and line feeds (`LF = 0x 0a`) between keys, i.e. the block-terminating semicolon
and the vertical bar (pipe) of the next key. The following _critical markers_
are defined:
| marker | description |
|--------|-----------------------------------------------------------------------------------------------------|
| CF | format version and processor |
| CK | start of group of keys, no. parameters = 3, indicates (in)correct closure of the measurement series |
| CB | defines a group of channels |
| CT | text definition including group association index |
| CG | introduces group of components corresponding to CC keys |
| CD1,2 | old/new version of abscissa description |
| CZ | scaling of z-axis for segments |
| CC | start of a component |
| CP | information about buffer, datatype and samples of component |
| Cb | buffer description |
| CR | permissible range of values in component |
| CN | name and comment of channel |
| CS | raw binary data |
| CI | single numerical value (including unit) |
| Ca | add reference key |
Among the _noncritical_ markers, there are
| marker | description |
|--------|--------------------------------------------|
| NO | origin of data |
| NT | timestamp of trigger |
| ND | (color) display properties |
| NU | user defined key |
| Np | property of a channel |
| NE | extraction rule for channels from BUS data |
The format loosely defines some rules for the ordering of the markers in the
file stream. The rules for critical keys include: _CK_ has to follow up on _CF_,
_CK_ may be followed by any number of _CG_ blocks, each _CG_ has to be followed
by (any number of) component sequences comprised of the series _CC_ , _CP_,
(_CR_), (_ND_) and terminated by either _CS_ or the start of a new group,
component, text field or buffer.
## Installation
The _IMCtermite_ library may be employed both as a _CLI_ tool and a _python_
module.
### CLI tool
To build the CLI tool locally, use the default target `make` resulting
in the binary `imctermite`. To ensure system-wide availability, the installation
of the tool (in the default location `/usr/local/bin`) is done via
```
make install
````
which may require root permissions.
### Python
To integrate the library into a customized ETL toolchain, several cython targets
are available. For a local build that enables you to run the examples, use:
```
make cython-build
```
However, in a production environment, a proper installation of the module with
`make cython-install` is recommended for system-wide availability of the module.
#### Installation with pip
The package is also available in the [Python Package Index](https://pypi.org)
at [IMCtermite](https://pypi.org/project/IMCtermite/).
To install the latest version simply do
```Shell
python3 -m pip install IMCtermite
```
which provides binary wheels for multiple architectures on _Windows_ and _Linux_
and most _Python 3.x_ distributions. However, if your platform/architecture is
not supported you can still compile the source distribution yourself, which
requires _python3_setuptools_ and an up-to-date compiler supporting C++11
standard (e.g. _gcc version >= 10.2.0_).
## Usage
### CLI
The usage of the `imctermite` binary looks like this:
```
imctermite <raw-file> [options]
```
You have to provide a single _raw_ file and any option to specify what
to do with the data. All available options can be listed with `imctermite --help`:
```
Options:
-c, --listchannels list channels
-b, --listblocks list IMC key-blocks
-d, --output output directory to print channels
-s, --delimiter csv delimiter/separator char for output
-h, --help show this help message
-v, --version display version
```
For instance, to show a list of all channels included in `sample-data.raw`, you
do `imctermite sample-data.raw --listchannels`. No output files are
written by default. Output files are written only when an existing (!) directory
is provided as argument to the `--output` option. By default, every output file
is written using a `,` delimiter. You may provide any custom separator with the
option `--delimiter`. For example, in order to use `|`, the binary is called with
options `imctermite sample-data.raw -b -c -s '|'`.
### Python
Given the `IMCtermite` module is available, we can import it and declare an instance
of it by passing a _raw_ file to the constructor:
```Python
import IMCtermite
imcraw = IMCtermite.imctermite(b"sample/sampleA.raw")
```
An example of how to create an instance and obtain the list of channels is:
```Python
import IMCtermite
# declare and initialize instance of "imctermite" by passing a raw-file
try :
imcraw = IMCtermite.imctermite(b"samples/sampleA.raw")
except RuntimeError as e :
print("failed to load/parse raw-file: " + str(e))
# obtain list of channels as list of dictionaries (without data)
channels = imcraw.get_channels(False)
print(channels)
```
A more complete [example](python/examples/usage.py), including the methods for
obtaining the channels, i.a. their data and/or directly printing them to files,
can be found in the `python/examples` folder.
## References
- https://www.imc-tm.de/produkte/messtechnik-software/imc-famos/funktionen/im-und-export/
- https://www.imc-tm.de/produkte/messtechnik-hardware/imc-cronosflex/ueberblick/
- https://cython.readthedocs.io/en/latest/src/userguide/wrapping_CPlusPlus.html
- https://github.com/Apollo3zehn/ImcFamosFile
- https://apollo3zehn.github.io/ImcFamosFile/api/ImcFamosFile.FamosFileKeyType.html
- https://pypi.org/help/#apitoken
- https://sgoel.dev/posts/uploading-binary-wheels-to-pypi-from-github-actions/
- https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idstepsrun
- https://github.com/pypa/cibuildwheel/blob/main/examples/github-deploy.yml
- https://cibuildwheel.readthedocs.io/en/stable/deliver-to-pypi/
- https://www.gnu.org/software/libiconv/
- https://vcpkg.io/en/packages.html
- https://vcpkg.io/en/getting-started
Raw data
{
"_id": null,
"home_page": "https://github.com/RecordEvolution/IMCtermite.git",
"name": "IMCtermite",
"maintainer": "Record Evolution GmbH",
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": "IMC, raw, imcFAMOS, imcSTUDIO, imcCRONOS",
"author": "Record Evolution GmbH",
"author_email": "mario.fink@record-evolution.de",
"download_url": "https://files.pythonhosted.org/packages/30/58/5cf4bbd2a9f07a1dba2344b15fad169159af04a960a069bae866651afcbc/IMCtermite-2.0.20.tar.gz",
"platform": null,
"description": "# IMCtermite\n\n_IMCtermite_ provides access to the proprietary data format\n_IMC Bus Format_ with the file extension _.raw_ introduced and developed by\n[imc Test & Measurement GmbH](https://www.imc-tm.de/). This data format is\nemployed i.a. by the measurement hardware\n[imc CRONOSflex](https://www.imc-tm.de/produkte/messtechnik-hardware/imc-cronosflex/ueberblick/)\nto dump and store data and the software packages\n[imc Studio](https://www.imc-tm.de/produkte/messtechnik-software/imc-studio/ueberblick/)\n& [imc FAMOS](https://www.imc-tm.de/produkte/messtechnik-software/imc-famos/)\nfor measurement data control and analysis. Thanks to the integrated Python module,\nthe extracted measurement data can be stored in any open-source file format\naccessible by Python like i.a. _csv_, _json_ or _parquet_.\n\nOn the [Record Evolution Platform](https://www.record-evolution.de/en/home-en/), the library can be used both as a command line tool for interactive usage and as a Python module to integrate the _.raw_ format into any ETL workflow. \n\n## Overview\n\n* [File format](#Fileformat)\n* [Build and Installation](#Installation)\n* [Usage and Examples](#Usage)\n* [References](#References)\n\n## File format\n\n[Warning: Take a look at [this issue](https://github.com/RecordEvolution/IMCtermite/issues/14) when reading this section regarding the file format.]\n\nA data file of the _IMC Bus Format_ type with the extension _.raw_ is a _mixed text/binary\nfile_ featuring a set of markers (keys) that indicate the start of various blocks\nof data that provide meta information and the actual measurement data. Every single\nmarker is introduced by the character `\"|\" = 0x 7c` followed by two uppercase letters that characterize the type of marker. Each block is further divided into several\nparameters separated by commata `\",\" = 0x 2c` and terminated by a semicolon\n`\";\" = 0x 3b`. For instance, the header - first 600 bytes - of a raw file may\nlook like this (in UTF-8 encoding):\n\n```\n|CF,2,1,1;|CK,1,3,1,1;\n|NO,1,86,0,78,imc STUDIO 5.0 R10 (04.08.2017)@imc DEVICES 2.9R7 (25.7.2017)@imcDev__15190567,0,;\n|CG,1,5,1,1,1; |CD,2, 63, 5.0000000000000001E-03,1,1,s,0,0,0, 0.0000000000000000E+00,1;\n|NT,1,16,1,1,1980,0,0,0.0; |CC,1,3,1,1;|CP,1,16,1,4,7,32,0,0,1,0;\n|CR,1,60,0, 1.0000000000000000E+00, 0.0000000000000000E+00,1,4,mbar;|CN,1,27,0,0,0,15,pressure_Vacuum,0,;\n|Cb,1, 117,1,0, 1, 1, 0, 9608, 0, 9608,1, 2.0440300000000000E+03, 1.2416717060000000E+09,;\n|CS,1, 9619, 1,\ufffdoD\t\ufffdnD6\ufffdnD)\ufffdnD\ufffd\n```\n\nLine breaks are introduced for readability. Most of the markers introduce\nblocks of text, while only the last block identified by `|CS` contains binary data.\nThe format supports the storage of _multiple data sets (channels)_ in a single\nfile. The channels may be ordered in _multiplex_ mode (ordering w.r.t. time) or\n_block_ mode (ordering w.r.t. to channels).\n\nThe markers (keys) are introduced by `\"|\" = 0x 7c` followed by two uppercase\nletters. There are _two types_ of markers distinguished by the first letter:\n\n1. _critical_ markers: introduced by `|C` featuring uppercase `C`\n1. _noncritical_ markers: introduced by `|N` featuring uppercase `N` \n\nThe second letter represents further details of the specific key. Note that\nwhile the _noncritical_ keys are optional, any _.raw_ file _cannot be_ correctly\ndecoded if any of the _critical_ markers are misinterpreted, invalid or damaged.\nThe second uppercase letter is followed by the first comma and the _version_\nof the key starting from 1. After the next comma, an _(long) integer_ (in text\nrepresentation) specifies the length of the entire block, i.e. the number of\nbytes between the following comma and the block-terminating semicolon. The further\nstructure of a block is not defined and may feature different numbers of additional\nparameters. The format allows for any number of carriage returns (`CR = 0x0d`)\nand line feeds (`LF = 0x 0a`) between keys, i.e. the block-terminating semicolon\nand the vertical bar (pipe) of the next key. The following _critical markers_\nare defined:\n\n\n| marker | description |\n|--------|-----------------------------------------------------------------------------------------------------|\n| CF | format version and processor |\n| CK | start of group of keys, no. parameters = 3, indicates (in)correct closure of the measurement series |\n| CB | defines a group of channels |\n| CT | text definition including group association index |\n| CG | introduces group of components corresponding to CC keys |\n| CD1,2 | old/new version of abscissa description |\n| CZ | scaling of z-axis for segments |\n| CC | start of a component |\n| CP | information about buffer, datatype and samples of component |\n| Cb | buffer description |\n| CR | permissible range of values in component |\n| CN | name and comment of channel |\n| CS | raw binary data |\n| CI | single numerical value (including unit) |\n| Ca | add reference key |\n\nAmong the _noncritical_ markers, there are\n\n| marker | description |\n|--------|--------------------------------------------|\n| NO | origin of data |\n| NT | timestamp of trigger |\n| ND | (color) display properties |\n| NU | user defined key |\n| Np | property of a channel |\n| NE | extraction rule for channels from BUS data |\n\nThe format loosely defines some rules for the ordering of the markers in the\nfile stream. The rules for critical keys include: _CK_ has to follow up on _CF_,\n_CK_ may be followed by any number of _CG_ blocks, each _CG_ has to be followed\nby (any number of) component sequences comprised of the series _CC_ , _CP_,\n(_CR_), (_ND_) and terminated by either _CS_ or the start of a new group,\ncomponent, text field or buffer.\n\n## Installation\n\nThe _IMCtermite_ library may be employed both as a _CLI_ tool and a _python_\nmodule.\n\n### CLI tool\n\nTo build the CLI tool locally, use the default target `make` resulting\nin the binary `imctermite`. To ensure system-wide availability, the installation\nof the tool (in the default location `/usr/local/bin`) is done via\n\n```\nmake install\n````\n\nwhich may require root permissions.\n\n### Python\n\nTo integrate the library into a customized ETL toolchain, several cython targets\nare available. For a local build that enables you to run the examples, use:\n\n```\nmake cython-build\n```\n\nHowever, in a production environment, a proper installation of the module with\n`make cython-install` is recommended for system-wide availability of the module.\n\n#### Installation with pip\n\nThe package is also available in the [Python Package Index](https://pypi.org)\nat [IMCtermite](https://pypi.org/project/IMCtermite/).\nTo install the latest version simply do\n\n```Shell\npython3 -m pip install IMCtermite\n```\n\nwhich provides binary wheels for multiple architectures on _Windows_ and _Linux_\nand most _Python 3.x_ distributions. However, if your platform/architecture is\nnot supported you can still compile the source distribution yourself, which\nrequires _python3_setuptools_ and an up-to-date compiler supporting C++11\nstandard (e.g. _gcc version >= 10.2.0_).\n\n## Usage\n\n### CLI\n\nThe usage of the `imctermite` binary looks like this:\n\n```\nimctermite <raw-file> [options]\n```\n\nYou have to provide a single _raw_ file and any option to specify what\nto do with the data. All available options can be listed with `imctermite --help`:\n\n```\nOptions:\n\n -c, --listchannels list channels\n -b, --listblocks list IMC key-blocks\n -d, --output output directory to print channels\n -s, --delimiter csv delimiter/separator char for output\n -h, --help show this help message\n -v, --version display version\n```\n\nFor instance, to show a list of all channels included in `sample-data.raw`, you\ndo `imctermite sample-data.raw --listchannels`. No output files are\nwritten by default. Output files are written only when an existing (!) directory\nis provided as argument to the `--output` option. By default, every output file\nis written using a `,` delimiter. You may provide any custom separator with the\noption `--delimiter`. For example, in order to use `|`, the binary is called with\noptions `imctermite sample-data.raw -b -c -s '|'`.\n\n### Python\n\nGiven the `IMCtermite` module is available, we can import it and declare an instance\nof it by passing a _raw_ file to the constructor:\n\n```Python\nimport IMCtermite\n\nimcraw = IMCtermite.imctermite(b\"sample/sampleA.raw\")\n```\n\nAn example of how to create an instance and obtain the list of channels is:\n\n```Python\nimport IMCtermite\n\n# declare and initialize instance of \"imctermite\" by passing a raw-file\ntry :\n imcraw = IMCtermite.imctermite(b\"samples/sampleA.raw\")\nexcept RuntimeError as e :\n print(\"failed to load/parse raw-file: \" + str(e))\n\n# obtain list of channels as list of dictionaries (without data)\nchannels = imcraw.get_channels(False)\nprint(channels)\n```\n\nA more complete [example](python/examples/usage.py), including the methods for\nobtaining the channels, i.a. their data and/or directly printing them to files,\ncan be found in the `python/examples` folder.\n\n## References\n\n- https://www.imc-tm.de/produkte/messtechnik-software/imc-famos/funktionen/im-und-export/\n- https://www.imc-tm.de/produkte/messtechnik-hardware/imc-cronosflex/ueberblick/\n- https://cython.readthedocs.io/en/latest/src/userguide/wrapping_CPlusPlus.html\n- https://github.com/Apollo3zehn/ImcFamosFile\n- https://apollo3zehn.github.io/ImcFamosFile/api/ImcFamosFile.FamosFileKeyType.html\n- https://pypi.org/help/#apitoken\n- https://sgoel.dev/posts/uploading-binary-wheels-to-pypi-from-github-actions/\n- https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idstepsrun\n- https://github.com/pypa/cibuildwheel/blob/main/examples/github-deploy.yml\n- https://cibuildwheel.readthedocs.io/en/stable/deliver-to-pypi/\n- https://www.gnu.org/software/libiconv/\n- https://vcpkg.io/en/packages.html\n- https://vcpkg.io/en/getting-started\n",
"bugtrack_url": null,
"license": "MIT License",
"summary": "Enables extraction of measurement data from binary files with extension 'raw' used by proprietary software imcFAMOS and imcSTUDIO and facilitates its storage in open source file formats",
"version": "2.0.20",
"project_urls": {
"Homepage": "https://github.com/RecordEvolution/IMCtermite.git"
},
"split_keywords": [
"imc",
" raw",
" imcfamos",
" imcstudio",
" imccronos"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "3585a1c032097579a28a5aebf0d9db5b679ab8f06c043fd4ed1e77a8395d97e1",
"md5": "7a5aed149cd61a928eb0f48a55979d57",
"sha256": "46be9e680906856eb488aace144a09e6f80f810c2a760e8b6f361470014c9924"
},
"downloads": -1,
"filename": "IMCtermite-2.0.20-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl",
"has_sig": false,
"md5_digest": "7a5aed149cd61a928eb0f48a55979d57",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": null,
"size": 1061453,
"upload_time": "2024-06-12T09:34:53",
"upload_time_iso_8601": "2024-06-12T09:34:53.926730Z",
"url": "https://files.pythonhosted.org/packages/35/85/a1c032097579a28a5aebf0d9db5b679ab8f06c043fd4ed1e77a8395d97e1/IMCtermite-2.0.20-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "0eb506ebc04570232655e8c1d40e7b378dbf26bd7145c025e98b05744934e36b",
"md5": "f0b86e9a59cc85d1d2a02e65e3aafc2b",
"sha256": "d4d96290c17d79548f121de6cdec3425b7d0a47a4d58beb2b0c3198ddd43b1fb"
},
"downloads": -1,
"filename": "IMCtermite-2.0.20-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl",
"has_sig": false,
"md5_digest": "f0b86e9a59cc85d1d2a02e65e3aafc2b",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": null,
"size": 1094309,
"upload_time": "2024-06-12T09:34:56",
"upload_time_iso_8601": "2024-06-12T09:34:56.836752Z",
"url": "https://files.pythonhosted.org/packages/0e/b5/06ebc04570232655e8c1d40e7b378dbf26bd7145c025e98b05744934e36b/IMCtermite-2.0.20-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "56b17a850e8bbb49e99ffdc801567768c9f65c9caa941dcdf466e599014a93ab",
"md5": "4efb2473b0c9df89baf601db347e2c83",
"sha256": "2fb16d707ae89f8164e09a6da020d6d654e88a054b17ac1e98eca8897a477877"
},
"downloads": -1,
"filename": "IMCtermite-2.0.20-cp310-cp310-win32.whl",
"has_sig": false,
"md5_digest": "4efb2473b0c9df89baf601db347e2c83",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": null,
"size": 86732,
"upload_time": "2024-06-12T09:34:57",
"upload_time_iso_8601": "2024-06-12T09:34:57.961106Z",
"url": "https://files.pythonhosted.org/packages/56/b1/7a850e8bbb49e99ffdc801567768c9f65c9caa941dcdf466e599014a93ab/IMCtermite-2.0.20-cp310-cp310-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b406974c47246572f333b89e92d54a3cd7e727f1e5f477375de06501aa68df5d",
"md5": "02cffdf5a48be6f5c897a37a60d93af6",
"sha256": "8d378bbea8b44fda51ef39e7c5a7aeecbb91c757c103bb37e8eeb8653ad4e6e5"
},
"downloads": -1,
"filename": "IMCtermite-2.0.20-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "02cffdf5a48be6f5c897a37a60d93af6",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": null,
"size": 94265,
"upload_time": "2024-06-12T09:34:59",
"upload_time_iso_8601": "2024-06-12T09:34:59.021249Z",
"url": "https://files.pythonhosted.org/packages/b4/06/974c47246572f333b89e92d54a3cd7e727f1e5f477375de06501aa68df5d/IMCtermite-2.0.20-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "c29874dcd4513ee76897abd3779d9765c4af590978dd76fe1cb61ba90fb559e3",
"md5": "a9f1203a335a4f7baf87b4eda5541dd1",
"sha256": "ef52e5d884f51641742874202a9563de374a043025dacf32a23aee475b0a9f28"
},
"downloads": -1,
"filename": "IMCtermite-2.0.20-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.whl",
"has_sig": false,
"md5_digest": "a9f1203a335a4f7baf87b4eda5541dd1",
"packagetype": "bdist_wheel",
"python_version": "cp36",
"requires_python": null,
"size": 1048038,
"upload_time": "2024-06-12T09:35:00",
"upload_time_iso_8601": "2024-06-12T09:35:00.252296Z",
"url": "https://files.pythonhosted.org/packages/c2/98/74dcd4513ee76897abd3779d9765c4af590978dd76fe1cb61ba90fb559e3/IMCtermite-2.0.20-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "3eb92a540da9aee92c2c230ac45804b9c0b40bfcbd3241603734cac46bf2d3c1",
"md5": "051b36ca82219671173ebd41b26fffdf",
"sha256": "a8cff4d785afe096491ba1029d8ce5b3601f0052e61a60f09d223eeaebed6339"
},
"downloads": -1,
"filename": "IMCtermite-2.0.20-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl",
"has_sig": false,
"md5_digest": "051b36ca82219671173ebd41b26fffdf",
"packagetype": "bdist_wheel",
"python_version": "cp36",
"requires_python": null,
"size": 1081891,
"upload_time": "2024-06-12T09:35:03",
"upload_time_iso_8601": "2024-06-12T09:35:03.956023Z",
"url": "https://files.pythonhosted.org/packages/3e/b9/2a540da9aee92c2c230ac45804b9c0b40bfcbd3241603734cac46bf2d3c1/IMCtermite-2.0.20-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "1dad6d92d4ed6818ba9f9d5fb646725210cb1702e4b2db9f495554c8935b86ec",
"md5": "e44bedc51d1fe0a266b940d70171ab38",
"sha256": "bb6cfe8e6cf0e18ac4075654a9c137bd91ea0fd1979e6fb9cf0e09c06280dae9"
},
"downloads": -1,
"filename": "IMCtermite-2.0.20-cp36-cp36m-win32.whl",
"has_sig": false,
"md5_digest": "e44bedc51d1fe0a266b940d70171ab38",
"packagetype": "bdist_wheel",
"python_version": "cp36",
"requires_python": null,
"size": 88967,
"upload_time": "2024-06-12T09:35:05",
"upload_time_iso_8601": "2024-06-12T09:35:05.433131Z",
"url": "https://files.pythonhosted.org/packages/1d/ad/6d92d4ed6818ba9f9d5fb646725210cb1702e4b2db9f495554c8935b86ec/IMCtermite-2.0.20-cp36-cp36m-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "32213b6e0909e0810b8f83562757bb71257406869e25c7689cef966cc70f097f",
"md5": "fcf6ae7a371ff0947a2f3ce266e57b65",
"sha256": "27ad7cc214175d8b23f1dbfdb2f2d24e61040e839088f08bc341dc87efef4b23"
},
"downloads": -1,
"filename": "IMCtermite-2.0.20-cp36-cp36m-win_amd64.whl",
"has_sig": false,
"md5_digest": "fcf6ae7a371ff0947a2f3ce266e57b65",
"packagetype": "bdist_wheel",
"python_version": "cp36",
"requires_python": null,
"size": 99493,
"upload_time": "2024-06-12T09:35:06",
"upload_time_iso_8601": "2024-06-12T09:35:06.614688Z",
"url": "https://files.pythonhosted.org/packages/32/21/3b6e0909e0810b8f83562757bb71257406869e25c7689cef966cc70f097f/IMCtermite-2.0.20-cp36-cp36m-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "08d2f6bc7f9ac8d4ab16ce629bf67bbbf1b6b92bf01830007a5a20c55276e130",
"md5": "469abe57d608c60df1851a694dcd17c6",
"sha256": "e35721dd6c4e2ce6ab09e3c1166b85f6578abcc5f7f0a557e20cb7e0d04da88b"
},
"downloads": -1,
"filename": "IMCtermite-2.0.20-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl",
"has_sig": false,
"md5_digest": "469abe57d608c60df1851a694dcd17c6",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": null,
"size": 1053586,
"upload_time": "2024-06-12T09:35:07",
"upload_time_iso_8601": "2024-06-12T09:35:07.677151Z",
"url": "https://files.pythonhosted.org/packages/08/d2/f6bc7f9ac8d4ab16ce629bf67bbbf1b6b92bf01830007a5a20c55276e130/IMCtermite-2.0.20-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "5ccebabde020380b7d87945e8f5b8595c12cca7fa428bdc5fba4d4acc9a93151",
"md5": "ba36049e678d8c4dd08a3178832d6052",
"sha256": "b637244b4f60a51273a4265f8ee85614f4076d088a1ea556d7258f1dfaeeef31"
},
"downloads": -1,
"filename": "IMCtermite-2.0.20-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl",
"has_sig": false,
"md5_digest": "ba36049e678d8c4dd08a3178832d6052",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": null,
"size": 1089096,
"upload_time": "2024-06-12T09:35:09",
"upload_time_iso_8601": "2024-06-12T09:35:09.230934Z",
"url": "https://files.pythonhosted.org/packages/5c/ce/babde020380b7d87945e8f5b8595c12cca7fa428bdc5fba4d4acc9a93151/IMCtermite-2.0.20-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "619c04f747a50b61e426ec6d3f933edf925cb9089f833ad1472512ae981bf325",
"md5": "4a8157f2d0793c45b09e27a97c7a205c",
"sha256": "bbff54a58e9fff95d32ff829bd7d52d48316fa85148e676984b64812976cac8c"
},
"downloads": -1,
"filename": "IMCtermite-2.0.20-cp37-cp37m-win32.whl",
"has_sig": false,
"md5_digest": "4a8157f2d0793c45b09e27a97c7a205c",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": null,
"size": 86919,
"upload_time": "2024-06-12T09:35:10",
"upload_time_iso_8601": "2024-06-12T09:35:10.433721Z",
"url": "https://files.pythonhosted.org/packages/61/9c/04f747a50b61e426ec6d3f933edf925cb9089f833ad1472512ae981bf325/IMCtermite-2.0.20-cp37-cp37m-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "08790d68a11f8425fb4fd7ac8ff84df921ce0ad7185cc3bd57f56d05ac8847c7",
"md5": "36fea399304deba84eba107126cd7dad",
"sha256": "8e452398b015916bf7244758a55a4e787b76820682f6131b6bd8d759acfa28f2"
},
"downloads": -1,
"filename": "IMCtermite-2.0.20-cp37-cp37m-win_amd64.whl",
"has_sig": false,
"md5_digest": "36fea399304deba84eba107126cd7dad",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": null,
"size": 95169,
"upload_time": "2024-06-12T09:35:11",
"upload_time_iso_8601": "2024-06-12T09:35:11.500664Z",
"url": "https://files.pythonhosted.org/packages/08/79/0d68a11f8425fb4fd7ac8ff84df921ce0ad7185cc3bd57f56d05ac8847c7/IMCtermite-2.0.20-cp37-cp37m-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "21271008e96cc188bf3dfdb43fa5e7c7f26f40a9099c6978cd78d60522b411d0",
"md5": "60609f4fdf00f5c60f8d0d22dcbb2296",
"sha256": "b9836f228d1b5814bb6744d8599a2c12ff9ee6e784e6f50cffe43a80ce268697"
},
"downloads": -1,
"filename": "IMCtermite-2.0.20-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl",
"has_sig": false,
"md5_digest": "60609f4fdf00f5c60f8d0d22dcbb2296",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": null,
"size": 1074078,
"upload_time": "2024-06-12T09:35:13",
"upload_time_iso_8601": "2024-06-12T09:35:13.174145Z",
"url": "https://files.pythonhosted.org/packages/21/27/1008e96cc188bf3dfdb43fa5e7c7f26f40a9099c6978cd78d60522b411d0/IMCtermite-2.0.20-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "2dfc511cb5505c3e0984e86fb1faa79adbdfe9988ec7c5f4ccc6873671a18c79",
"md5": "655a97b6f5a874c960afe769f7518be3",
"sha256": "28f6c24fecbd39c9fd03b9f814121b62e0b97e8ecedd3953081ba6387f7fae2c"
},
"downloads": -1,
"filename": "IMCtermite-2.0.20-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl",
"has_sig": false,
"md5_digest": "655a97b6f5a874c960afe769f7518be3",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": null,
"size": 1109603,
"upload_time": "2024-06-12T09:35:14",
"upload_time_iso_8601": "2024-06-12T09:35:14.452322Z",
"url": "https://files.pythonhosted.org/packages/2d/fc/511cb5505c3e0984e86fb1faa79adbdfe9988ec7c5f4ccc6873671a18c79/IMCtermite-2.0.20-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "535e9a8868850ce21c29459381ee0187549b51150b42c7958016e4d291ca3f84",
"md5": "3f44d5195f1e6eb535324c1d3c17da94",
"sha256": "315df50f07f444604feba45deab65499f6d814129c8a6023e79d4b0c9876e91d"
},
"downloads": -1,
"filename": "IMCtermite-2.0.20-cp38-cp38-win32.whl",
"has_sig": false,
"md5_digest": "3f44d5195f1e6eb535324c1d3c17da94",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": null,
"size": 87351,
"upload_time": "2024-06-12T09:35:15",
"upload_time_iso_8601": "2024-06-12T09:35:15.593542Z",
"url": "https://files.pythonhosted.org/packages/53/5e/9a8868850ce21c29459381ee0187549b51150b42c7958016e4d291ca3f84/IMCtermite-2.0.20-cp38-cp38-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9d1a4e76acc107198f2ffc9e8b0e8d92d89bb7f432d1191f7a8a6141f51322fa",
"md5": "26eda68443cbf794325086ba79c43f76",
"sha256": "5121196fcefe0822a2aa22cb0eea693aa52d5b1b3d9780ec35493862062e5ee9"
},
"downloads": -1,
"filename": "IMCtermite-2.0.20-cp38-cp38-win_amd64.whl",
"has_sig": false,
"md5_digest": "26eda68443cbf794325086ba79c43f76",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": null,
"size": 94974,
"upload_time": "2024-06-12T09:35:16",
"upload_time_iso_8601": "2024-06-12T09:35:16.619235Z",
"url": "https://files.pythonhosted.org/packages/9d/1a/4e76acc107198f2ffc9e8b0e8d92d89bb7f432d1191f7a8a6141f51322fa/IMCtermite-2.0.20-cp38-cp38-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "0a4757e38d57310fff053f446ea9d406970fea53966e4402c1473da49b2e3786",
"md5": "0572008b2fccff25f8ea7e713d2dbfd3",
"sha256": "efb8ccc093f437030c81146027ac4c8e445164b414127ce96b61be97ed669410"
},
"downloads": -1,
"filename": "IMCtermite-2.0.20-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl",
"has_sig": false,
"md5_digest": "0572008b2fccff25f8ea7e713d2dbfd3",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": null,
"size": 1064855,
"upload_time": "2024-06-12T09:35:17",
"upload_time_iso_8601": "2024-06-12T09:35:17.681718Z",
"url": "https://files.pythonhosted.org/packages/0a/47/57e38d57310fff053f446ea9d406970fea53966e4402c1473da49b2e3786/IMCtermite-2.0.20-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e61946cad690088be25ea04b11076dfc54474ebf07e3a7a38756eec4b8f4cbf6",
"md5": "88ad0f121115443a6279db2c0daaf524",
"sha256": "8c93a521f0b5354e59ab8de8e53082e1db767b028f2fefcfc41bb00c1b9ad78d"
},
"downloads": -1,
"filename": "IMCtermite-2.0.20-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl",
"has_sig": false,
"md5_digest": "88ad0f121115443a6279db2c0daaf524",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": null,
"size": 1096523,
"upload_time": "2024-06-12T09:35:19",
"upload_time_iso_8601": "2024-06-12T09:35:19.211482Z",
"url": "https://files.pythonhosted.org/packages/e6/19/46cad690088be25ea04b11076dfc54474ebf07e3a7a38756eec4b8f4cbf6/IMCtermite-2.0.20-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e4aef2724864fc1281a6838f1ff3f6fa5316270a1e06dd66be5d27793bf6b28d",
"md5": "1b4626cdcd07f2f9eadbaf9db08b5f74",
"sha256": "e26a3a4dc1f6d6f19b1c56019766f95aa46e281c12f70abc38575ff184e97695"
},
"downloads": -1,
"filename": "IMCtermite-2.0.20-cp39-cp39-win32.whl",
"has_sig": false,
"md5_digest": "1b4626cdcd07f2f9eadbaf9db08b5f74",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": null,
"size": 87285,
"upload_time": "2024-06-12T09:35:20",
"upload_time_iso_8601": "2024-06-12T09:35:20.483770Z",
"url": "https://files.pythonhosted.org/packages/e4/ae/f2724864fc1281a6838f1ff3f6fa5316270a1e06dd66be5d27793bf6b28d/IMCtermite-2.0.20-cp39-cp39-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e82be9507a3c81283e3e6759d4eb887c17657c15409652aa92447fa7974d94c7",
"md5": "2d1a084ce87d8a2f0af55cb0f884f570",
"sha256": "0a73d242bc1507eb5f8c768622e8febba1aa981c442ace390e3b64815c4c2938"
},
"downloads": -1,
"filename": "IMCtermite-2.0.20-cp39-cp39-win_amd64.whl",
"has_sig": false,
"md5_digest": "2d1a084ce87d8a2f0af55cb0f884f570",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": null,
"size": 94837,
"upload_time": "2024-06-12T09:35:21",
"upload_time_iso_8601": "2024-06-12T09:35:21.403769Z",
"url": "https://files.pythonhosted.org/packages/e8/2b/e9507a3c81283e3e6759d4eb887c17657c15409652aa92447fa7974d94c7/IMCtermite-2.0.20-cp39-cp39-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "53c8c3512f839e171a0b4497eaf0e7bbc45fab9314fe42576513c324312ec421",
"md5": "361cbf4bc9df9497ba875667990e2eb5",
"sha256": "451ccebfa52ee302093f502911912e5f8e7b80ab95c5fe8587610db21b6b5100"
},
"downloads": -1,
"filename": "IMCtermite-2.0.20-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl",
"has_sig": false,
"md5_digest": "361cbf4bc9df9497ba875667990e2eb5",
"packagetype": "bdist_wheel",
"python_version": "pp37",
"requires_python": null,
"size": 131032,
"upload_time": "2024-06-12T09:35:23",
"upload_time_iso_8601": "2024-06-12T09:35:23.403769Z",
"url": "https://files.pythonhosted.org/packages/53/c8/c3512f839e171a0b4497eaf0e7bbc45fab9314fe42576513c324312ec421/IMCtermite-2.0.20-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "bf31777af6ae4cba2f3ab8cd903d376f35c1d2aedf07b31510557922536600f4",
"md5": "b38f7d91a13f6c443e22e612bc2d90fa",
"sha256": "2c0a231b76c877d86c19ef277e023bba87254946dc9be5201bfaf80fb489945b"
},
"downloads": -1,
"filename": "IMCtermite-2.0.20-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl",
"has_sig": false,
"md5_digest": "b38f7d91a13f6c443e22e612bc2d90fa",
"packagetype": "bdist_wheel",
"python_version": "pp37",
"requires_python": null,
"size": 124247,
"upload_time": "2024-06-12T09:35:24",
"upload_time_iso_8601": "2024-06-12T09:35:24.437226Z",
"url": "https://files.pythonhosted.org/packages/bf/31/777af6ae4cba2f3ab8cd903d376f35c1d2aedf07b31510557922536600f4/IMCtermite-2.0.20-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "47863cf77e058f15709a8493415ca5aad75706e6001a3f39eece0acb219fc504",
"md5": "122414da281707ae7f4dff59de1f1ce1",
"sha256": "ffaffe5c66a56cda523477d2b4328d4c7f68383d353cff0210a6bc4a27dd6a31"
},
"downloads": -1,
"filename": "IMCtermite-2.0.20-pp37-pypy37_pp73-win_amd64.whl",
"has_sig": false,
"md5_digest": "122414da281707ae7f4dff59de1f1ce1",
"packagetype": "bdist_wheel",
"python_version": "pp37",
"requires_python": null,
"size": 88779,
"upload_time": "2024-06-12T09:35:25",
"upload_time_iso_8601": "2024-06-12T09:35:25.487154Z",
"url": "https://files.pythonhosted.org/packages/47/86/3cf77e058f15709a8493415ca5aad75706e6001a3f39eece0acb219fc504/IMCtermite-2.0.20-pp37-pypy37_pp73-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "30585cf4bbd2a9f07a1dba2344b15fad169159af04a960a069bae866651afcbc",
"md5": "0b8be31f5ce6d6a28bfc610282e8d713",
"sha256": "c24a4e2ca44406b4ee6b53802169cf8efd84c53514702933b4f6ad58bc42890f"
},
"downloads": -1,
"filename": "IMCtermite-2.0.20.tar.gz",
"has_sig": false,
"md5_digest": "0b8be31f5ce6d6a28bfc610282e8d713",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 72379,
"upload_time": "2024-06-12T09:35:26",
"upload_time_iso_8601": "2024-06-12T09:35:26.413558Z",
"url": "https://files.pythonhosted.org/packages/30/58/5cf4bbd2a9f07a1dba2344b15fad169159af04a960a069bae866651afcbc/IMCtermite-2.0.20.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-06-12 09:35:26",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "RecordEvolution",
"github_project": "IMCtermite",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "imctermite"
}