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.

Developer documentation

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.13.tar.gz (22.6 kB view details)

Uploaded Source

Built Distributions

DLite_Python-0.3.13-cp310-cp310-win_amd64.whl (319.5 kB view details)

Uploaded CPython 3.10 Windows x86-64

DLite_Python-0.3.13-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.13-cp39-cp39-win_amd64.whl (319.5 kB view details)

Uploaded CPython 3.9 Windows x86-64

DLite_Python-0.3.13-cp39-cp39-musllinux_1_1_i686.whl (337.2 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

DLite_Python-0.3.13-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.13-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.13-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.13-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.13-cp38-cp38-win_amd64.whl (319.5 kB view details)

Uploaded CPython 3.8 Windows x86-64

DLite_Python-0.3.13-cp38-cp38-musllinux_1_1_i686.whl (337.1 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ i686

DLite_Python-0.3.13-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.13-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.13-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.13-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.13-cp37-cp37m-win_amd64.whl (318.4 kB view details)

Uploaded CPython 3.7m Windows x86-64

DLite_Python-0.3.13-cp37-cp37m-musllinux_1_1_i686.whl (337.5 kB view details)

Uploaded CPython 3.7m musllinux: musl 1.1+ i686

DLite_Python-0.3.13-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.13-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.13-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.13-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.13.tar.gz.

File metadata

  • Download URL: DLite-Python-0.3.13.tar.gz
  • Upload date:
  • Size: 22.6 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.13.tar.gz
Algorithm Hash digest
SHA256 6d1ba8bc7342b7c9883372efa61c3f15a508d1ae47ef83cb42ccd13e70229939
MD5 0cf00eb10602d6af6af27ef94a4cc9e6
BLAKE2b-256 fb70a92c6ede18751d6a48077cc94f0d0385332a5660d1f696b114af41b1c6c2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.13-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 cbf7fe349bce73d70c5254da78976877b9b4742ff2de37229bd9112b6ad36bbe
MD5 d388802914e93bc215bc4eb3e2988a5a
BLAKE2b-256 27a9b5b6a2b6017d2afd76124f43d5511fd86ddadddc9450ea1504942b651743

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1e55714e19769fca72f332ed2c6acc2983d70221497d34a445cc8461b2d88cd9
MD5 c67531bd5bd97ef4eff05e0a7705a2b0
BLAKE2b-256 3854a619e81a5cf53732f30058b3d438ab578445db4ad1757a1b1a4d1c43af94

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.13-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 5577964373a9b756317d313009ff632089bfa85ecd4b8d0dc923133e0990eac6
MD5 c6807c373bb846ed77b1caa8e41ef309
BLAKE2b-256 8c5fe7dabad1c53792ab00736476f39f98ae2a2c46ac583539fe3e5e57e41b57

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.13-cp39-cp39-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 d6df7b0c01225283b9672c5e71ab741fba19505adaec7509256414f63d3a532a
MD5 2f54864522cd5c659cf8586c804360e7
BLAKE2b-256 29e8465dcc2bbe03d109d47cf7e0c61055be3e23a50a9fa6dd64bea4b4723428

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 68ca6547708aabc35902642a285b6dbeba9cf694b793c27ee8f565cce801f280
MD5 05ca9e286c78c8e00938fd27709f4eeb
BLAKE2b-256 794cb52938c64dc4c5bdc804f3e1b64dfc740dc05936dd9c6536909d5cf04928

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.13-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 c7cb9ff0cc0ecdb18695d73da4f480ae4820a65d46db023073ada6e9499cad5c
MD5 4f3b9a4ddf6c02550e7c6f24c1fb7646
BLAKE2b-256 48ce8e364a1d53d96d7686778f92b90ac4d987ee1ec6875281f422021e156ec2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.13-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 555366e6417ff90589ded902bfbb2a049681d9ceee97eb552fc6b699b9bf6486
MD5 21aa1d1d01433da74d030d27a6242504
BLAKE2b-256 df256ad57e4bb35bd613a0b205785d906c5d212059247d6bcd31c8ba20b5757e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.13-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 f5e63cb653cd4f565ac82783e5ee6f41246cfdcee874dc47835eca7ec6a9d7eb
MD5 d8e317005c45730896f2258c7634566b
BLAKE2b-256 4b34858cb98c592cacff58d631508e33b3ac3af33a154f667671f06f5cecb118

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.13-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 2626896090b85d8c3bc52664117b36c486349a6895f7dd0151e12c8e466cd50b
MD5 d6299d5dda92eba24ba84b99575107b8
BLAKE2b-256 bd98b5b387040cb9a1412df69fffb342e55e7b74c220b42429ad655c0f73d20c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.13-cp38-cp38-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 77dbf08311642e24a79a184a6b33e0bd959b790d4d83620325b66c5187316860
MD5 eeb62b1d20920a3c51de3dd381ccb39b
BLAKE2b-256 6a499454c3bce7f5570e70342ca7af1890b9cf51fe55c01c426f207dcf9386f0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.13-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ae8961ba0390f4f94448167a0c259b08c08bfc7cb72c59c127f1150c3390a613
MD5 bd1c0034d1f0a97d83614e0bf512138e
BLAKE2b-256 da7f22911f6a51c21df70dfcbcd6dd69c07ee25a90a5f872a232c6723dcd9e16

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.13-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 1ffc79092bc23555ea5267f85e64b064135dd9ac8bb98f95422fd40a3dc7f6fd
MD5 6925ad6d097aefcb5e68d80b14541a1c
BLAKE2b-256 42fd70e608487597d5183442f5962341727f81a947d7674984a7cf7ee7af1fc8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.13-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 f4918ca7380c62d259054ee4c6be0ab153b131697f17fa53cd734fa184ccf7e6
MD5 acd4aba1c71e28fd9bbb725072a68fdf
BLAKE2b-256 0e484b761ff465afc4e5751e54bad9c913a3e5bac5209a9ccb2dd197c15607ac

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.13-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 9b6c7a7c4519d44a7e443441046eabc342c6e22a743a5ce05e968dcad96b714f
MD5 03e097efa033ced978defeed9c4fd7ca
BLAKE2b-256 43b019380be7dedb5e2ca8bdcfe581fb48b97e7c82262e0ea998a837038786a8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.13-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 8fc8cca937a125412bcba5aa19e3861c71ee45be341cc0a0fe40f0a697b4b9be
MD5 51befd025baa0f4ed0aaa9a503fcceab
BLAKE2b-256 d7ed93ce242ddc30e1b3afdfcce03481e36de9162c262680d4f9a24d932fdcc3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.13-cp37-cp37m-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 a5db45397c25af2109d78d44808bd67f7014dccd84db3a21bb46b53fdfca99ba
MD5 c5edfc4b92b7660054917851b1fa3aaf
BLAKE2b-256 1adfacae30b6c31adb614cd285e3b1dab2c5affc6a2b3fa93754d01f63dbeaff

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.13-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 325b0ee4089986fbf3f38c51685f8976a41021717c565d974ac8657877347420
MD5 b3e7f72f5944f0bd18f35ac7c9b31aad
BLAKE2b-256 64105aec084147048f82a81fb4b41f74c0f2015f65614241bdcf4e9e547fcf04

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.13-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 d45ad518daa0345306cf6488114c749d0667f1464471553231f5f64eae5735d0
MD5 01efe05b83a8d729b1402186e833ded3
BLAKE2b-256 2b2fbe47e2b1f9886c7d8e87ca6c49eaf892b3a42c0f9056884d78bc3ae699ef

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.13-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 02167c5a842098d2c44f79c1026aa4c2b6bb682a139d16c09d4a2dac99511270
MD5 c4843c24fb6fdf027413b4ad6a171efd
BLAKE2b-256 069ac9a87b58f5974d83a7a4ebf85630aa2d3f6a837aa2638f56d24f50db822f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.13-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 43d6b35fdd52434a59399c72fcb0d73812ab97e64ff56303afef264a063a11f5
MD5 c1f9b4fadf8d9f66e853a2da03d54f88
BLAKE2b-256 040da19fb134d06245c549f9b71edb6e7a6c4be3544c9ff77d3f0df4aa1a0f4c

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