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

Uploaded Source

Built Distributions

DLite_Python-0.3.11-cp310-cp310-win_amd64.whl (314.8 kB view details)

Uploaded CPython 3.10 Windows x86-64

DLite_Python-0.3.11-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.11-cp39-cp39-win_amd64.whl (314.8 kB view details)

Uploaded CPython 3.9 Windows x86-64

DLite_Python-0.3.11-cp39-cp39-musllinux_1_1_i686.whl (332.6 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

DLite_Python-0.3.11-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.11-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.11-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.11-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.11-cp38-cp38-win_amd64.whl (314.8 kB view details)

Uploaded CPython 3.8 Windows x86-64

DLite_Python-0.3.11-cp38-cp38-musllinux_1_1_i686.whl (332.5 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ i686

DLite_Python-0.3.11-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.11-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.11-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.11-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.11-cp37-cp37m-win_amd64.whl (313.7 kB view details)

Uploaded CPython 3.7m Windows x86-64

DLite_Python-0.3.11-cp37-cp37m-musllinux_1_1_i686.whl (332.9 kB view details)

Uploaded CPython 3.7m musllinux: musl 1.1+ i686

DLite_Python-0.3.11-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.11-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.11-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.11-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.11.tar.gz.

File metadata

  • Download URL: DLite-Python-0.3.11.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.11.tar.gz
Algorithm Hash digest
SHA256 992337c8b4dc67c615729ac902dd27d76e362fd9ef1fea1d723b4e06d6b3fd2f
MD5 269ef4704f392c1a925f716bb17cf02a
BLAKE2b-256 3f2bd299663c671ebb60bbd958326399e884079774378ce607cd594f4a317a39

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.11-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 9bf19a6d23449524607d2ad6bdc1728ca3abe551c159b8e2a8788dbf0f4fbfb8
MD5 a3d5489fdc19d14f33270402a9847d42
BLAKE2b-256 728c311668020c1a52efd60f558d755ca2c807bd420412e60967868fb4a0c707

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a06ca7db81f15a3d5263b1f3a3a188d9e15d6f94b7904048f9cf84fc719414b0
MD5 6c6842d3b99c1416f75b9d05f61bebc3
BLAKE2b-256 c2df095795890ccd9f64c39353c1bb318b96e9e60a990d151b4be5da2281feed

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.11-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 e56cb26a12918b5173a198ffc675dc712eb47295fe9b0cc8f1e6f8410cae7d0a
MD5 5679f0e8f4e11b27c8a6107e4f7b702c
BLAKE2b-256 965806d4d15680c9d55ab65e959e0290bc2d72ae3f36cc6bd4358d6d28e6808d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.11-cp39-cp39-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 b5bc12d5d5473dbfef462e6985d0229f8079fb6d966bac31e45d7af7cf4aac8c
MD5 2b95ad46bb0e1ee8de1e47b18f8ca0c5
BLAKE2b-256 19690c789b4d5b4359aeee7597485a239904766ee61260cdc0e223c46d1e4f1e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 62576e206912d7eaa2e0c8e64041e6a44251bf1f96198a9cf0d0e37626418d0c
MD5 4e7ec1ac61621bf44b04221c847bc35f
BLAKE2b-256 3779ffcd08193f504c04c638c2fcb8bcf3428d18965268951d867dae7fb02001

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.11-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 7b627dd9aada541068197c2d06cf3baa2faecce6d31910ba0851c1369f299936
MD5 25cf66068b756ddab4b9ade53f820bb1
BLAKE2b-256 f5731c17b9e7dd55822d880431efe9bb0900cd0210a9ef6bfd7114a7c89705a9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.11-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 1cacead7f5aef42786c156b9a03ab7f6079279e10fa4c2a64b4996f7c906fcff
MD5 0f6e1b97115cf8af69f1415a71a751dd
BLAKE2b-256 dc0f09c6cfed5d71e79539fdc33ea755666751c9dbbc8d8e65b23dd8429b6b19

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.11-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 de83e07fd08e171581f7537c3f13372f828121e136afcec65c8511e0e5467238
MD5 c70344ade09e16061560e251d526fcc9
BLAKE2b-256 cde04b98e0908e2dd2e9132e561957ab0c3655bb52654122bd53b2a493f885ee

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.11-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 d732dcc6f7e4058b855878643fa154bcd65499a99d2ef1b79e65922006334d79
MD5 403676525db647c7503d06dbd176161e
BLAKE2b-256 ec821ba9ddcd80e46ad353abab39f17a456a9c17947c5cec8d2aebeca2b48e96

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.11-cp38-cp38-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 315e90312e05b65c4da24b6105c998f7889bb130427dc313cc8bbf9ac85e0f76
MD5 2d1de4d1c54ae169ca130a6f2949f4f5
BLAKE2b-256 3f0569ffef35989ac41d10cec0d464334a2690e6796e594cb909467b49bf208e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.11-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e7b6deda0fbfcfe6ffa0badb222b0f7c91ac17fe536dcd386ce303ad3afcdc36
MD5 f718ea30f6aab7603d2f25de1a7f4301
BLAKE2b-256 16b9c2ad31f9c12d6511d7aa168900bd8687512112c9cf1a30e0b68926e57ad7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.11-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 263dfd8d7f17049931ff61aef309ac249c6c83c6a7a550c4ad09e9331e8a6819
MD5 c4d8d39f37cd65c9622e6f3b7041fe32
BLAKE2b-256 6e96a2dbb95bdf935169dfb7fd833965f29292b877703eb633bf5e3b9462cecb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.11-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 ddf6fe77d1ac4189c8acdc143bd3152c2f2d2856c3b0d37097fc796c494279f4
MD5 a54ca598760581d761c13b08accdca99
BLAKE2b-256 c414a4f7d72b0f55e212d16f48eb171af40756ace4250c5b1ce12c7bc24d9bf2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.11-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 6386a3d9b6709bef047196eb771d5a875314b4b16580f2ef800e8203e3f92e45
MD5 0c10cb79fa38fd4042a4c6db943e6da5
BLAKE2b-256 cff76bc8dfee89eb88da6ca136c46db190a747a79fc7c56a6fc2de03a567f834

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.11-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 5acc9da30bf51f418d52824f38c7746cbc60ed79cef738d5fa6b251192013875
MD5 e5ba9a60935773fbe2a7a9115bb53f52
BLAKE2b-256 b5bdd5846a747f81b80abf344a9657cca6d8b630a7176901893030c45125c1e3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.11-cp37-cp37m-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 8dcbd95f16a9dfce9b7d8835498ff498345b3fdbf464165e50fb83e222cf48d5
MD5 6ef53bb4e28def7215710d98171d6bba
BLAKE2b-256 12dcaff905bfe1d998ea4f776f08148d480513494c113ef347e80a5d60667205

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.11-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7287f3295abf2b76fbfdf95b80d2555731dfe9f516a337f02bb3337352758107
MD5 6bc705aa2d2ff55b33699527494d1c56
BLAKE2b-256 08f592c73576ac366285d9bca6f8354afd9e840b2445b6532cd8852a30b127ae

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.11-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 005d964a39a47df3dc2d67acf7cbf7f2d52fbb7cdf0be15c31e2419c01bae787
MD5 1a61d479a7f49b8d0c9908b3b1d53143
BLAKE2b-256 108f9ac6d24b846702b364e893e0afa6420fb8ede0e6f2e3eff061b158fa7b69

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.11-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 e53c780d83cde8762464981d79374220a6cb02b389ffbd675345f96eeddceba5
MD5 facbb18bfe8b0acbc355f8e67f74848a
BLAKE2b-256 d91ece69309d6b76b34e73a68f8628e1816d3a32ca2046610d1133f080b9e041

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.11-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 5620eec0d4e87028e179445090fde113399802eff4eb5b4f7e7499deb76bcfd9
MD5 d58145e21cbaedc6459a39fb1f3e3caf
BLAKE2b-256 d67dc44d28327b6bf231a333096bc4927f96c15d774d302320ce26e741fcc3d4

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