Skip to main content

Lightweight data-centric framework for working with scientific data

Project description

DLite

A lightweight data-centric framework for semantic interoperability

CI tests GitHub release PyPi Documentation

Content

DLite is a lightweight interoperability framework, for working with and sharing scientific.

About DLite

DLite is a C implementation of the SINTEF Open Framework and Tools (SOFT), which is a set of concepts and tools for how to efficiently describe and work with scientific data.

All data in DLite is represented by an Instance, which is build on a simple data model. An Instance is identified by a unique UUID and have a set of named dimensions and properties. It is described by its Metadata. In the Metadata, each dimension is given a name and description (optional) and each property is given a name, type, shape (optional), unit (optional) and description (optional). The shape of a property refers to the named dimensions.

When an Instance is instantiated, you must suply a value to the named dimensions. The shape of the properties will be set according to that. This ensures that the shape of the properties are internally consistent.

A Metadata is also an Instance, and hence described by its meta-metadata. By default, DLite defines four levels of metadata; instance, metadata, metadata schema and basic metadata schema. The basic metadata schema describes itself, so no further meta levels are needed. The idea is if two different systems describes their data model in terms of the basic metadata schema, they can easily be made semantically interoperable.

The datamodel of DLite.

An alternative and more flexible way to enable interoperability is to use a common ontology. DLite provides a specialised Instance called Collection. A collection is essentially a container holding a set of Instances and relations between them. But it can also relate an Instance or even a dimension or property of an instance to a concept in an ontology. DLite allows to transparently map an Instance whos Metadata corresponding to a concept in one ontology to an Instance whos Metadata corresponding to a concept in another ontology. Such mappings can easily be registered (in C or Python) and reused, providing a very powerful system for achieving interoperability.

DLite provides also a common and extendable API for loading/storing Instances from/to different storages. New storage plugins can be written in C or Python.

See doc/concepts.md for more details.

DLite is licensed under the MIT license.

Example

Lets say that you have the following Python class

class Person:
    def __init__(self, name, age, skills):
        self.name = name
        self.age = age
        self.skills = skills

that you want to describe semantically. We do that by defining the following metadata (using json) identifying the Python attributes with dlite properties. Here we define name to be a string, age to be a float and skills to be an array of N strings, where N is a name of a dimension. The metadata uniquely identifies itself with the "name", "version" and "namespace" fields and "meta" refers the the metadata schema (meta-metadata) that this metadata is described by. Finally are human description of the metadata itself, its dimensions and its properties provide in the "description" fields.

{
  "name": "Person",
  "version": "0.1",
  "namespace": "http://onto-ns.com/meta",
  "meta": "http://onto-ns.com/meta/0.3/EntitySchema",
  "description": "A person.",
  "dimensions": [
    {
      "name": "N",
      "description": "Number of skills."
    }
  ],
  "properties": [
    {
      "name": "name",
      "type": "string",
      "description": "Full name."
    },
    {
      "name": "age",
      "type": "float",
      "unit": "year",
      "description": "Age of person."
    },
    {
      "name": "skills",
      "type": "string",
      "dims": ["N"],
      "description": "List of skills."
    }
  ]
}

We save the metadata in file "Person.json". Back in Python we can now make a dlite-aware subclass of Person, instantiate it and serialise it to a storage:

import dlite

# Create a dlite-aware subclass of Person
DLitePerson = dlite.classfactory(Person, url='json://Person.json')

# Instantiate
person = DLitePerson('Sherlock Holmes', 34., ['observing', 'chemistry',
    'violin', 'boxing'])

# Write to storage (here a json file)
person.dlite_inst.save('json://homes.json?mode=w')

To access this new instance from C, you can first generate a header file from the meta data

$ dlite-codegen -f c-header -o person.h Person.json

and then include it in your C program:

// homes.c -- sample program that loads instance from homes.json and prints it
#include <stdio.h>
#include <dlite.h>
#include "person.h"  // header generated with dlite-codegen

int main()
{
  /* URL of instance to load using the json driver.  The storage is
     here the file 'homes.json' and the instance we want to load in
     this file is identified with the UUID following the hash (#)
     sign. */
  char *url = "json://homes.json#315088f2-6ebd-4c53-b825-7a6ae5c9659b";

  Person *person = (Person *)dlite_instance_load_url(url);

  int i;
  printf("name:  %s\n", person->name);
  printf("age:   %g\n", person->age);
  printf("skills:\n");
  for (i=0; i<person->N; i++)
    printf("  - %s\n", person->skills[i]);

  return 0;
}

Now run the python file and it would create a homes.json file, which contains an entity information. Use the UUID of the entity from the homes.json file, and update the url variable in the homes.c file.

Since we are using dlite_instance_load_url() to load the instance, you must link to dlite when compiling this program. Assuming you are using Linux and dlite in installed in $HOME/.local, compiling with gcc would look like:

$ gcc homes.c -o homes -I$HOME/.local/include/dlite -L$HOME/.local/lib -ldlite -ldlite-utils

Or if you are using the development environment , you can compile using:

$ gcc -I/tmp/dlite-install/include/dlite -L/tmp/dlite-install/lib -o homes homes.c -ldlite -ldlite-utils

Finally you can run the program with

$ DLITE_STORAGES=*.json ./homes
name:  Sherlock Holmes
age:   34
skills:
  - observing
  - chemistry
  - violin
  - boxing

Note that we in this case have to define the environment variable DLITE_STORAGES in order to let dlite find the metadata we stored in 'Person.json'. There are ways to avoid this, e.g. by hardcoding the metadata in C using dlite-codegen -f c-source or in the C program explicitely load 'Person.json' before 'homes.json'.

This was just a brief example. There is much more to dlite. Since the documentation is still not complete, the best source is the code itself, including the tests and examples.

Main features

See doc/features.md for a more detailed list.

  • Enables semantic interoperability via simple formalised metadata and data
  • Metadata can be linked to or generated from ontologies
  • Code generation for simple integration in existing code bases
  • Plugin API for data storages (json, hdf5, rdf, yaml, postgresql, blob, csv...)
  • Plugin API for mapping between metadata
  • Bindings to C, Python and Fortran

Installing DLite

Installing with pip

If you are using Python, the easiest way to install DLite is with pip:

pip install DLite-Python

Note, currently only Linux versions for Python 3.7, 3.8, 3.9 and 3.10 are available. But Windows versions will soon be available.

Docker image

A docker image is available on https://github.com/SINTEF/dlite/packages.

Compile from sources

The sources can be cloned from GitHub

git clone ssh://git@git.code.sintef.no/sidase/dlite.git

Dependencies

Runtime dependencies

  • HDF5, optional (needed by HDF5 storage plugin)
  • librdf, optional (needed by RDF (Redland) storage plugin)
  • Python 3, optional (needed by Python bindings and some plugins)
    • NumPy, required if Python is enabled
    • PyYAML, optional (used for generic YAML storage plugin)
    • psycopg2, optional (used for generic PostgreSQL storage plugin)
    • pandas, optional (used for csv storage plugin)

Build dependencies

  • cmake, required for building
  • hdf5 development libraries, optional (needed by HDF5 storage plugin)
  • librdf development libraries, optional (needed by librdf storage plugin)
  • Python 3 development libraries, optional (needed by Python bindings)
  • NumPy development libraries, optional (needed by Python bindings)
  • SWIG v3, optional (needed by building Python bindings)
  • Doxygen, optional, used for documentation generation
  • valgrind, optional, used for memory checking (Linux only)
  • cppcheck, optional, used for static code analysis

Compiling

Build and install with Python

Given you have a C compiler and Python correctly installed, you should be able to build and install dlite via the python/setup.py script:

cd python
python setup.py install

Build on Linux

Install dependencies (e.g. with apt-get install on Ubuntu or dnf install on Fedora)

Configure the build with:

mkdir build
cd build
cmake ..

Configuration options can be added to the cmake command. For example, you can change the installation directory by adding -DCMAKE_INSTALL_PREFIX=/path/to/new/install/dir. The default is ~/.local.

Alternatively, you can configure configuration options with ccmake ...

If you use virtual environments for Python, you should activate your environment before running cmake and set CMAKE_INSTALL_PREFIX to the directory of the virtual environment. For example:

VIRTUAL_ENV=/path/to/virtual/env
$VIRTUAL_ENV/bin/activate
cmake -DCMAKE_INSTALL_PREFIX=$VIRTUAL_ENV

Build with:

make

To run the tests, do

ctest            # same as running `ctest`
make memcheck    # runs all tests with memory checking (requires
                 # valgrind)

To generate code documentation, do

make doc         # direct your browser to build/doc/html/index.html

To install dlite locally, do

make install

Build with VS Code on Windows

See here for detailed instructions for building with Visual Studio.

Quick start with VS Code and Remote Container

Using Visual Studio Code it is possible to do development on the system defined in Dockerfile.

  1. Download and install Visual Studio Code.
  2. Install the extension Remote Development.
  3. Clone dlite and initialize git modules: git submodule update --init.
  4. Open the dlite folder with VS Code.
  5. Start VS Code, run the Remote-Containers: Open Folder in Container... command from the Command Palette (F1) or quick actions Status bar item. This will build the container and restart VS Code in it. This may take some time the first time as the Docker image must be built. See Quick start: Open an existing folder in a container for more information and instructions.
  6. In the container terminal, perform the first build and tests with mkdir /workspace/build; cd /workspace/build; cmake ../dlite; make && make test.

Build documentation

If you have doxygen installed, the html documentation should be generated as a part of the build process. It can be browsed by opening the following file in your browser:

<build>/doc/html/index.html

where <build> is your build folder. To only build the documentation, you can do:

cd build
cmake --build . --target doc

If you have LaTeX and make installed, you can also the latex documentation with

cd build
cmake --build . --target latex

which will produce the file

<build>/doc/latex/refman.pdf

Setting up the environment

If dlite is installed in a non-default location, you may need to set the PATH, LD_LIBRARY_PATH, PYTHONPATH and DLITE_ROOT environment variables. See the documentation of environment variables for more details.

An example of how to use dlite is shown above. See also the examples in the examples directory for how to link to dlite from C and use of the Fortran bindings.

Short vocabulary

The following terms have a special meaning in dlite:

  • Basic metadata schema: Toplevel meta-metadata which describes itself.
  • Collection: A specialised instance that contains references to set of instances and relations between them. Within a collection instances are labeled. See also the SOFT5 nomenclauture.
  • Data instance: A "leaf" instance that is not metadata.
  • Entity: May be any kind of instance, including data instances, metadata instances or meta-metadata instances. However, for historical reasons it is often used for "standard" metadata that are instances of meta-metadata "http://onto-ns.com/meta/0.3/EntitySchema".
  • Instance: The basic data object in DLite. All instances are described by their metadata which itself are instances. Instances are identified by an UUID.
  • Mapping: A function that maps one or more input instances to an output instance. They are an important mechanism for interoperability. Mappings are called translators in SOFT5.
  • Metadata: a special type of instances that describe other instances. All metadata are immutable and has an unique URI in addition to their UUID.
  • Meta-metadata: metadata that describes metadata.
  • Relation: A subject-predicate-object triplet. Relations are immutable.
  • Storage: A generic handle encapsulating actual storage backends.
  • Transaction: A not yet implemented feature, that enables to represent the evolution of the state of a software as a series of immutable instances. See also the SOFT5 nomenclauture.
  • uri: A uniform resource identifier (URI) is a generalisation of URL, but follows the same syntax rules. In dlite, the term "uri" is used as an human readable identifier for instances (optional for data instances) and has the form namespace/version/name.
  • url: A uniform resource locator (URL) is an reference to a web resource, like a file (on a given computer), database entry, web page, etc. In dlite url's refer to a storage or even an specific instance in a storage using the general syntax driver://location?options#fragment, where options and fragment are optional. If fragment is provided, it should be the uuid or uri of an instance.
  • uuid: A universal unique identifier (UUID) is commonly used to uniquely identify digital information. DLite uses the 36 character string representation of uuid's to uniquely identify instances. The uuid is generated from the uri for instances that has an uri, otherwise it is randomly generated.

License

DLite is licensed under the MIT license. However, it include a few third party source files with other permissive licenses. All of these should allow dynamic and static linking against open and propritary codes. A full list of included licenses can be found in LICENSES.txt.

Acknowledgment

In addition from internal funding from SINTEF and NTNU this work has been supported by several projects, including:

  • AMPERE (2015-2020) funded by Forskningsrådet and Norwegian industry partners.
  • FICAL (2015-2020) funded by Forskningsrådet and Norwegian industry partners.
  • SFI Manufacturing (2015-2023) funded by Forskningsrådet and Norwegian industry partners.
  • SFI PhysMet(2020-2028) funded by Forskningsrådet and Norwegian industry partners.
  • OntoTrans (2020-2024) that receives funding from the European Union’s Horizon 2020 Research and Innovation Programme, under Grant Agreement n. 862136.
  • OpenModel (2021-2025) that receives funding from the European Union’s Horizon 2020 Research and Innovation Programme, under Grant Agreement n. 953167.
  • DOME 4.0 (2021-2025) that receives funding from the European Union’s Horizon 2020 Research and Innovation Programme, under Grant Agreement n. 953163.
  • VIPCOAT (2021-2025) that receives funding from the European Union’s Horizon 2020 Research and Innovation Programme, under Grant Agreement n. 952903.

DLite is developed with the hope that it will be a delight to work with.

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

DLite-Python-0.3.12.tar.gz (22.5 kB view details)

Uploaded Source

Built Distributions

DLite_Python-0.3.12-cp310-cp310-win_amd64.whl (318.6 kB view details)

Uploaded CPython 3.10 Windows x86-64

DLite_Python-0.3.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (15.9 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

DLite_Python-0.3.12-cp39-cp39-win_amd64.whl (318.6 kB view details)

Uploaded CPython 3.9 Windows x86-64

DLite_Python-0.3.12-cp39-cp39-musllinux_1_1_i686.whl (336.3 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

DLite_Python-0.3.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (15.9 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

DLite_Python-0.3.12-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (15.6 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686

DLite_Python-0.3.12-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (6.9 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.12+ x86-64

DLite_Python-0.3.12-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl (7.0 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.12+ i686

DLite_Python-0.3.12-cp38-cp38-win_amd64.whl (318.6 kB view details)

Uploaded CPython 3.8 Windows x86-64

DLite_Python-0.3.12-cp38-cp38-musllinux_1_1_i686.whl (336.2 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ i686

DLite_Python-0.3.12-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (15.9 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

DLite_Python-0.3.12-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl (15.6 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ i686

DLite_Python-0.3.12-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (6.9 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.12+ x86-64

DLite_Python-0.3.12-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl (7.0 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.12+ i686

DLite_Python-0.3.12-cp37-cp37m-win_amd64.whl (317.5 kB view details)

Uploaded CPython 3.7m Windows x86-64

DLite_Python-0.3.12-cp37-cp37m-musllinux_1_1_i686.whl (336.6 kB view details)

Uploaded CPython 3.7m musllinux: musl 1.1+ i686

DLite_Python-0.3.12-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (15.9 MB view details)

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

DLite_Python-0.3.12-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl (15.6 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ i686

DLite_Python-0.3.12-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (6.9 MB view details)

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

DLite_Python-0.3.12-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl (7.0 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.12+ i686

File details

Details for the file DLite-Python-0.3.12.tar.gz.

File metadata

  • Download URL: DLite-Python-0.3.12.tar.gz
  • Upload date:
  • Size: 22.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.13

File hashes

Hashes for DLite-Python-0.3.12.tar.gz
Algorithm Hash digest
SHA256 008bf1e47cb02f4ddd458125fb6122937c51a77ea7110dac8c1a79ca524fe145
MD5 0c1a738dce17f3328ce4278b060fa337
BLAKE2b-256 9c976c8c1d49704c4061cae61c1dd8e2f5ad631b9febed1be8f2e9255616f707

See more details on using hashes here.

File details

Details for the file DLite_Python-0.3.12-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for DLite_Python-0.3.12-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 396f91ea712d7974cbe6869481710876e66fc9f67d378a61aa32152aa24e2d20
MD5 3458f45e3a7fcd943fb5bef7935bc74d
BLAKE2b-256 36e23f16cec46d2b0aed7133c8897eff596a5945058312d97e2d2ef416565a94

See more details on using hashes here.

File details

Details for the file DLite_Python-0.3.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for DLite_Python-0.3.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 95f187deba0c48170e287e90d02fb5f927fc9a8ffa1cb07a6718cb9c21a298e5
MD5 68d42b6de1cb80936627bf8d9ec75ab5
BLAKE2b-256 e756502e4bdc458d4dcf8b69f2253f057330432758d266896f9158c1fd06d8bc

See more details on using hashes here.

File details

Details for the file DLite_Python-0.3.12-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for DLite_Python-0.3.12-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 d6b1c21a10d7fe689b872c61374004dff4ea0aef71b9fedd6c8da609cfd13ee0
MD5 7ba7fe5dc513769590ef58564bcf1e25
BLAKE2b-256 7a9cc578a7d5c627d7279422121a2eb85196a128e559f0ee17130a19be8823c2

See more details on using hashes here.

File details

Details for the file DLite_Python-0.3.12-cp39-cp39-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for DLite_Python-0.3.12-cp39-cp39-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 fe75a820879102e34c6539ee1a83d1a78cbc44e69b2e76643929299662fac520
MD5 c43058c431fe49928d26257f58c1bd18
BLAKE2b-256 d2d2c11a29fff8aa885431abf952a146c715af66c6003e77139c7ca662bcc67b

See more details on using hashes here.

File details

Details for the file DLite_Python-0.3.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for DLite_Python-0.3.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 24eca653753f4d8953055d9ecc9eaf2626b2ea79e339c16ccef832385a80f60d
MD5 5c1d30a39546f8ddcba3926f62d5c16b
BLAKE2b-256 d4f59f6cee67a29d2524b0e3351fe2d6c23e57c7a7ce944873138ecd5b024124

See more details on using hashes here.

File details

Details for the file DLite_Python-0.3.12-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for DLite_Python-0.3.12-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 b1a5352bc1b8f1348cd64ed156d112891786e918a2c75c6e7d906e6267feac25
MD5 18ffc91b2d56be3a3e4d84478b36b09d
BLAKE2b-256 2f523a731055e12229d94d3bc5df2151aee16c6b402df89fb54871b992e6c3f1

See more details on using hashes here.

File details

Details for the file DLite_Python-0.3.12-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for DLite_Python-0.3.12-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 2eb5231c31e62fda2dfd029aad1b3f1881f1142a3c989b2e849589978067547a
MD5 4dc1739723c78917f39f6a14ced981c4
BLAKE2b-256 673093fab7205769a72ba6074b67cecc86642ba97ed6feaa606334bf5fc6969b

See more details on using hashes here.

File details

Details for the file DLite_Python-0.3.12-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for DLite_Python-0.3.12-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 ad6b5726dba3e69d48217a2e62ce121fc9c2db9b3913b36abf3e115c517aa68d
MD5 295f22493f9a37fca945c4e78bca477e
BLAKE2b-256 ea0ec5a3895b4d0e30f3b6d85aa581e824de71abe461970209507526ae31dc3b

See more details on using hashes here.

File details

Details for the file DLite_Python-0.3.12-cp38-cp38-win_amd64.whl.

File metadata

File hashes

Hashes for DLite_Python-0.3.12-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 431be111fcb2c27eb6c8e24a22fbec44130b1c8b40630890c00ed699e5f556ef
MD5 e97d78f0f208ef4291cdb00d1f06c97f
BLAKE2b-256 19e0cc9577eb6f1bcb6cd535c607c2cb90d9712b4acf1427b03f5c377e1017a4

See more details on using hashes here.

File details

Details for the file DLite_Python-0.3.12-cp38-cp38-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for DLite_Python-0.3.12-cp38-cp38-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 fd968bc57e34ee49341b4a8cc7c4ec67de108858e6b1c6a92a9b04494f565b93
MD5 b245c01ce962cd0a4c47fcab5409216b
BLAKE2b-256 e1075d4d166a2d85ba1fa070c1d739f79e54766c28124ec311760888e3386a87

See more details on using hashes here.

File details

Details for the file DLite_Python-0.3.12-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for DLite_Python-0.3.12-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b03acdec7d82e12e66e370cb75910646fc225537a05fa9028daf6bbc20e8586f
MD5 51307ea4b3e674298dc7097eda462fb1
BLAKE2b-256 e2380241a81e4cb9b8dac6e97e6d54f7de611007b881424f338a26502d9274e7

See more details on using hashes here.

File details

Details for the file DLite_Python-0.3.12-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for DLite_Python-0.3.12-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 759a7ecf4b1ac5bf5e88db5446c864332b4049a2c3ae52ab06b2cc2db4d61860
MD5 2a864646d6fd788488eed0f186089528
BLAKE2b-256 41e66c4d8b0c16d34aab561378711cf17ec37b219af8ebb40cece16298b80ee0

See more details on using hashes here.

File details

Details for the file DLite_Python-0.3.12-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for DLite_Python-0.3.12-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 4d6808b675c71546ef0dc3145c6d85adea88239252badf41c5aceb2afe7006c9
MD5 05597554a6f56dd03b4885b00230537a
BLAKE2b-256 7f51331a492e332849ff5efd47d9bde6a0fe41911845364c4b57e1712b5c5fa0

See more details on using hashes here.

File details

Details for the file DLite_Python-0.3.12-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for DLite_Python-0.3.12-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 38c4aa810c39bebd24c1f627eca8c41a193bf5ef130047c512cf0d34ec57716a
MD5 7edcd0d007c3ac262ed585623b843b0a
BLAKE2b-256 d55ed8072f359cc037da89c2fda6b64559de22f097873426c1a60ef80ad088b2

See more details on using hashes here.

File details

Details for the file DLite_Python-0.3.12-cp37-cp37m-win_amd64.whl.

File metadata

File hashes

Hashes for DLite_Python-0.3.12-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 79238ecca0da076ffd83196d19a054e9ad91762b3c82f3c6a0acb72141e8549f
MD5 364b46e0ed496fadabf03fb91bb65896
BLAKE2b-256 f7b2a1f784c6aa398e629a935e60b7323242a4f729bef1bba16f5500fd34a0d2

See more details on using hashes here.

File details

Details for the file DLite_Python-0.3.12-cp37-cp37m-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for DLite_Python-0.3.12-cp37-cp37m-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 c1252e2748d02ba7b9361d6f6dbf5bd524ca98b96ab6835731c742ed82e288e4
MD5 b7fa5eda0451c10f5ff3101cca3dced5
BLAKE2b-256 f6660401841f249e2381ce2cad10d9f87b35f918facbf542726e927f017b77b7

See more details on using hashes here.

File details

Details for the file DLite_Python-0.3.12-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for DLite_Python-0.3.12-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1620b3dfe8a0bec76e3f23606f694a59b52784c504249f2d805228855216c2bb
MD5 b878d71a042f078531a6e28bd7736158
BLAKE2b-256 58cdc7ea4d331e671f021dc305a5099a4d57f9b9bc6355c2b00be7a97178e0af

See more details on using hashes here.

File details

Details for the file DLite_Python-0.3.12-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for DLite_Python-0.3.12-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 f62caa0ee61449d545d3de31a0c803fde4585b6fb65abee235ab4ab36442d49c
MD5 5fde310012861dfb2232ee43b1de807f
BLAKE2b-256 0cf02f315366b45a0be923e5e38d419f2bbe162fca76c52912cab5574f6807fc

See more details on using hashes here.

File details

Details for the file DLite_Python-0.3.12-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for DLite_Python-0.3.12-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 758b2f9cf185cbc76362f55b704f46f000197f8b6b0c062a0f0543cebde1ab18
MD5 5aafc20f23bb800fe605ab78f37aa0d9
BLAKE2b-256 fc4ce27523491719c2ffac3f077beb40e7ac7754bc96f6e15564281168778206

See more details on using hashes here.

File details

Details for the file DLite_Python-0.3.12-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for DLite_Python-0.3.12-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 686a1baccdf3418993ec72e231bb304b9d30d175b92cc7b6a83dcd1326b7976f
MD5 514d3b91e8878cdb5a60a9d6143922c7
BLAKE2b-256 a80c71ebc7277a67d5c990e4569cc6b3129b3af1dae9706cce7f638669e164bb

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