Skip to main content

Lightweight data-centric framework for working with scientific data

Project description

DLite

A lightweight data-centric framework for semantic interoperability

PyPi CI tests 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 git@github.com:SINTEF/dlite.git

Dependencies

Runtime dependencies

  • HDF5, optional, support v1.10+ (needed by HDF5 storage plugin)
  • librdf, optional (needed by RDF (Redland) storage plugin)
  • Python 3, optional (needed by Python bindings and some plugins)
    • tripper, required by the Python bindings
    • NumPy, required if Python is enabled
    • PyYAML, optional (used for generic YAML storage plugin)
    • psycopg2, optional (used for generic PostgreSQL storage plugin) Note that in some cases a GSSAPI error is raised when using psycopg2 by pip installing psycopg2-binary. This is solved by installing from source as described in their documentation.
    • pandas, optional (used for csv storage plugin)
    • pymongo, optional, (used for mongodb storage plugin)
    • mongomock, optional, used for testing mongodb storage plugin.

Build dependencies

  • cmake, required for building - note that cmake isntalled from pypi does not always work.
  • HDF5 development libraries, needed by HDF5 storage plugin.
  • Python 3 development libraries, needed by Python bindings.
  • NumPy development libraries, needed by Python bindings.
  • SWIG needed by building Python bindings.
  • Doxygen used for documentation generation.
  • Graphviz used for documentation generation.
  • valgrind, optional, used for memory checking (Linux only).
  • cppcheck, optional, used for static code analysis.
  • librdf development libraries, optional, needed by librdf storage plugin.

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
source $VIRTUAL_ENV/bin/activate
cmake -DCMAKE_INSTALL_PREFIX=$VIRTUAL_ENV -DWITH_DOC=YES ..

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

In order to reduce build dependencies for the causal user, DLite does not build documentation by default. Provide the -DWITH_DOC=YES option to cmake to build the documentation.

Build Python Documentation

DLite uses sphinx to generate documentation from Python source code. Ensure the correct virtual environment is set up and install the requirements pip install -r requirements_doc.txt

Build C Documentation

If you have [doxygen][11] 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

As a dlite user it should be enough to do 'pip install Dlite-Python', or 'pip install .' from within the dlite/python directory.

As a developer it is more useful to install dlite from source. 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 install dlite as developer within a python environment in linux is given below. Make sure that all required dependencies are installed within the environment.

First activate the environment, e.g.:

source </path/to/dedicated/pythonenvironment>/bin/activate

Set the Python variables. The following should automatically find the correct python paths

Python3_ROOT=$(python3 -c 'import sys; print(sys.exec_prefix)')
Python3_VERSION=$(python3 -c 'import sys;\
print(str(sys.version_info.major)+"."\
+str(sys.version_info.minor))')
Python3_EXECUTABLE=${Python3_ROOT}/bin/python${Python3_VERSION}

Python variables for developement libraries must be set manually.

Python3_LIBRARY=</path/to/system>/libpython${Python3_VERSION}.so
Python3_INCLUDE_DIR=</path/to/system>/include/python${Python3_VERSION}

You may run find . -name libpython*.so to help find these paths.

Go into your dlite directory:

cd </path/to>/dlite

Build dlite:

mkdir build
cd build
cmake .. -DPython3_EXECUTABLE=$Python3_EXECUTABLE \
-DPython3_LIBRARY=$Python3_LIBRARY \
-DPython3_INCLUDE_DIR=$Python3_INCLUDE_DIR \
-DWITH_STATIC_PYTHON=FALSE \
-DCMAKE_INSTALL_PREFIX=$Python3_ROOT

Then install dlite

make
make install

Finally run tests

ctest

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: An instance that has a reference to an immutable (frozen) parent instance is called a transaction. Transactions are very useful for ensuring data provenance and makes it easy to work with time series. Conceptually, they share many similarities with git. 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.
  • Rational alloy design (ALLDESIGN) (2018-2022) NTNU internally funded project.
  • 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.16.tar.gz (24.7 kB view details)

Uploaded Source

Built Distributions

DLite_Python-0.3.16-cp310-cp310-win_amd64.whl (355.6 kB view details)

Uploaded CPython 3.10 Windows x86-64

DLite_Python-0.3.16-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.16-cp39-cp39-win_amd64.whl (355.7 kB view details)

Uploaded CPython 3.9 Windows x86-64

DLite_Python-0.3.16-cp39-cp39-musllinux_1_1_i686.whl (372.2 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

DLite_Python-0.3.16-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.16-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.16-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.16-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.16-cp38-cp38-win_amd64.whl (355.8 kB view details)

Uploaded CPython 3.8 Windows x86-64

DLite_Python-0.3.16-cp38-cp38-musllinux_1_1_i686.whl (372.0 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ i686

DLite_Python-0.3.16-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.16-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.16-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.16-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.16-cp37-cp37m-win_amd64.whl (354.7 kB view details)

Uploaded CPython 3.7m Windows x86-64

DLite_Python-0.3.16-cp37-cp37m-musllinux_1_1_i686.whl (372.5 kB view details)

Uploaded CPython 3.7m musllinux: musl 1.1+ i686

DLite_Python-0.3.16-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.16-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.16-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.16-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.16.tar.gz.

File metadata

  • Download URL: DLite-Python-0.3.16.tar.gz
  • Upload date:
  • Size: 24.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for DLite-Python-0.3.16.tar.gz
Algorithm Hash digest
SHA256 077e10e9ddf07f7a28f74c72b9ba52a302abcf52875b9620653beb0431567cda
MD5 1f715e3f94974f44f2f696bd6ede5f2e
BLAKE2b-256 be4e1c8f0a57d2cc8fe73fec8ce4d0645562911d88f977c5eedd286e876d99e3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.16-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 19435bd93f4b5a051b08802404b5fbacc3cba14b1e0da11edac422eb64c3d5d7
MD5 1ac96d685624e47000c3ba005733bc60
BLAKE2b-256 8989679411e50b67b4e90c072255f2b92679662e174a4cd408a792a666618661

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.16-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 298b0882b48b221dac7beb147e5e61f89a68b00a9d5a1acbd2c9359953aad78a
MD5 8203919ec78188d531ad385ca3927a01
BLAKE2b-256 82c628d3856baec9e35ba750dcc3256e0e7d733a6a64b0eaa3b45ca7d7e881ca

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.16-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 d68ac9ccc6b414afd3a83ddbcc3355a2d754269570d7c62b4612fbf1819251a5
MD5 a6580ac0cf9a5373ee1f99030985cca1
BLAKE2b-256 ac0441d0d9dacc289896fa3962d422f77de1420227002643f8f4d3e4c37e01eb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.16-cp39-cp39-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 10aa0e4f2c6ed09b69932df96f5a4301003771a58273440c4d27b7386f2c9237
MD5 b88ec32770831a03a6eacacc51f26945
BLAKE2b-256 6bb1e578031a31032e288dbf8be4a56bba98e801ceb985525790dfdd77c4d9bb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.16-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7abca0d0433214a8396a238568430fd6dc4cb1bd82b0b2dc9b14c13cc377c91e
MD5 7e52b680e4ea9cf6663bb032fb9a8067
BLAKE2b-256 1e13fc063461ec3eeb99790e858c2328d2908d376213af763f2e2d737e80384b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.16-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 1d6f9410fd10aaf7cefa1d2dda7f3923604f9f1820069872da9b8bc700412e7a
MD5 242a2223015c70473b4187bdfbd06345
BLAKE2b-256 62df1efad9db3d1ffb25a720f48f84c31f54bc3c094d345e00456bad58edea91

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.16-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 ae26c2dd55428dd333c77a43eb01405c1b449914155ac2879c16486e791779d2
MD5 3abdd7767cd9b28a9d452965c772428f
BLAKE2b-256 1f8b4cb0471b8e5a022ee4eb81650e9b41ced7c4a8af031aaf7e38eb06ae8953

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.16-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 025ffb5f32a7b0c72247976fde459adff408779d8714fb2bdcbfb95cd4e3b172
MD5 2ec199d9a6bd762051fccc3694078bae
BLAKE2b-256 2f2afdff2efa6d958e8bc34a064370bfb81ea59c704b39e3385a154bc0447bd9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.16-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 fcf9d1ce336dd16594624da775e920e566e6ca7cbdc8fa8889597f0e53a9e4e6
MD5 8200b1181647439fe30d145fdcfaabf4
BLAKE2b-256 ee4626df3084765b5780eb59e0547da534f53cfce5f787eb66e0de72042793ab

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.16-cp38-cp38-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 f1531ef6cbdb8ba60bbfa605ec18578d8a2d2d8c3835ca5aed7602f1ae73b93c
MD5 d3090237a719fd61266944e7de86fae3
BLAKE2b-256 2f4c6c481d701e33b48fa6cf7384d46cf623ba1a8cca4708850d4772a52a04e1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.16-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0998808303ae447931ec37f99983115e745d336b73fc3acc508d5fdfcc6ed4d3
MD5 063f5f381d0538c3399aefbed0d383a1
BLAKE2b-256 12502bb650a4f40df42115299454a37ebb470a36020391380daad123e021a9db

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.16-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 eb42b1046d543eee5fb430590468292d12d6e8060d294358b3899365d0b99786
MD5 361d48782ab6ce56f9f7f5a931c06c6e
BLAKE2b-256 33aeba91027ec35ed0ab1998a27824e1af2b031847254ded8776c9a8baacbe90

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.16-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 0d32785e721e3ef03acdb0773dae63b45c08bfa57f19afff9399f06341d057d5
MD5 d5ffe811195e633f61ae77f8c9490ccc
BLAKE2b-256 37738db4cf6f32a28f7f1230964ee23b5ad396517c2321caedc81a10becb9b2a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.16-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 9a169d318e720f064111402c658be19127548da814c93acdfb5619f6384ac467
MD5 2221788ced3b0a052a38b4d3b85aaac8
BLAKE2b-256 f9195023bfaf6d599dda68c20ea8b7a278490b576c36057743cc8bbc7fffd888

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.16-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 79f6a3d1b956608304c92e51df9b13290aa3c1e103a567528a2580560c97f065
MD5 cdd1fbf285dc351634716bd190b8e7dd
BLAKE2b-256 3367551b769ec6e5a879214fd62fd74410820d1cf541cfa7520d838025dd18e4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.16-cp37-cp37m-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 dd44c89c93c9ce0a410b9f31d543a94d415b8d54b3f50d41dec8d72c26cdfb2e
MD5 49eb8757195659488b88093a0d213ebe
BLAKE2b-256 5aa6816deca1bbcc3ea5165d9551b923b615e4bc1fb80bb2918ed3ef93530fe1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.16-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9e3041fde239cbb08b54168a53c13eb4d6e0cceb269b707039b526deaa0ba6ce
MD5 bf7f3f657245876203c9ed6a69199399
BLAKE2b-256 0037c0104d5d1cffc40a4b5a44e1dbb1c2f494c48a5cd74ca2b99920e0a078a4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.16-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 37b79ac2f6c6f51d37c2d1e0d97a95a97daf8ae1220294e5c32e853d4e69a132
MD5 7107059b28844b0aad4cc656790af7dc
BLAKE2b-256 d3ef6f56a67a9ba59665215469125cd2d4b7fe8cf00cc97a6e97eac0a074e2e1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.16-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 056fedbf8093f701da96d4147a586e79ffd0184832aad28a2c1e7c8219a3c13a
MD5 46082b66124486956522f8b0022cb30a
BLAKE2b-256 48649c9bf331f41f262cbd86197becbf07ac546073265c94efc2ae15e534efbc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for DLite_Python-0.3.16-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 c1241cd9af1ab32dba6fa972cc98fa259eb4ac8e328e4a712743fc2cd5d716e0
MD5 45448a76a8f4be3b4c4045e79471af21
BLAKE2b-256 ff2431c6563a1c6953a66c153d7e8312c5963a69ee0788d74ac6b810ec4e542f

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