Skip to main content

General purpose library

Project description

PyPI - Downloads

PyPI - Version PyPI - Python Version PyPI - Implementation PyPI - Format Static Badge

Static Badge Static Badge

GitHub tag (with filter) PyPI - Status GitHub License

cengal_light

This package contains compiled extensions, providing enhanced performance, while omitting mandatory dependency installations.

In order to install Cengal with all requirements execute either:

  • pip install cengal_light[full] - will install Cengal as well as most of requirements
  • pip install cengal - Recommended - will install cengal_light[full] as well as some missed requirements

Cengal

Cengal is a versatile Python library designed for a wide range of applications. To enhance performance, certain modules within Cengal have been implemented using Cython and/or C.

API Design Approach

The Cengal library adheres to an API design approach used in frameworks such as Qt. For those familiar with the C++ language, I will draw comparisons between the approaches of Qt and the C++ Standard Template Library (STL). The API provided by the STL was designed to significantly reduce the burden on programmers who develop the STL. This decision was logical from the standpoint of marketing the STL among compiler creators. However, this led to the usability of the STL for the user not being great. This is evident in the fact that the STL provides the most minimal possible API, and any conveniences must be programmed anew by each programmer every time - constantly reinventing the wheel. In contrast, Qt uses the opposite approach to API construction: classes have many methods whose purposes are similar, but are aimed at different usage models. This simplifies the use of Qt for users, speeds up the writing of the final code, and avoids many errors that we usually make when we write our own 'bicycles' for the same actions each time (not because the we are not smart, but because we are humans and therefore prone to make mistakes from time to time).

Cengal compatibility and requirements

  • Target platforms: Win32, Linux, OS X, Android, iOS, Emscripten
  • Target architectures: x64, x86, ARM
  • Target interpreters: CPython, PyPy
  • Recommended Python versions: 3.8+

Installation

To get started with Cengal, you can easily install it along with all the mandatory dependencies by running pip install cengal. This command not only installs Cengal and its required dependencies but also takes care of fetching and installing prebuilt wheels tailored for the Cengal library. These wheels are compatible with both Windows and Linux systems and work seamlessly with both CPython and PyPy interpreters.

If you prefer to install Cengal without its dependencies, you can opt for the 'cengal-light' package, which serves as the backend for the 'cengal' package. Simply run pip install cengal-light to get the lightweight version of Cengal.

Documentation

Cengal Documentation

For example Cengal Coroutines Concepts & Usage

or partially:

Cengal Wiki

For example Wiki: Cengal Coroutines Concepts & Usage

Stand-Alone Packages for Specific Cengal Modules

To cater to varying needs and streamline the installation process, I've introduced stand-alone packages for select Cengal modules. These packages are designed to offer users the ability to install specific Cengal functionality without the burden of the library's full set of dependencies.

The core of this approach lies in our 'cengal-light' package, which houses both Python and compiled Cengal modules. The 'cengal' package itself serves as a lightweight shell, devoid of its own modules, but dependent on 'cengal-light[full]' for a complete Cengal library installation with all required dependencies.

For users seeking individual Cengal features or looking to minimize dependencies, our stand-alone packages provide a convenient solution. Each stand-alone package is dedicated to a specific Cengal module and relies on 'cengal-light' as its sole dependency.

Below, you'll find a list of these stand-alone packages, each corresponding to a distinct Cengal module:

  • cengal_memory_barriers (package for cengal.hardware.memory.barriers module): Fast crossplatform memory barriers for Python.
  • cengal_cpu_info (package for cengal.hardware.info.cpu module): Extended, cached CPU info with consistent output format.
  • cengal_app_dir_path_finder (package for cengal.file_system.app_fs_structure.app_dir_path module): Offering a unified API for easy retrieval of OS-specific application directories, enhancing data management across Windows, Linux, and macOS.

Stay tuned for future additions to our collection of stand-alone packages!

Exclusive Features: No Alternatives Online

Build system (work in progress)

Automatic hackable build system for your package which supports Python modules made with different languages: Cython (including Python to Cython automatic compilation), C/C++, ObjectiveC, Go, Nim. Other languages support is in progress.

Compiles your code, gather binary artifacts and puts them into your wheel.

Examples

Concurrent Execution of blocking CPU-Bound and GUI Tasks on a Single Thread

Cengal offers a unique and powerful feature that allows you to execute a diverse set of tasks concurrently on a single thread, effectively managing CPU-bound and GUI-related operations without introducing the complexity of multithreading or multiprocessing. Notably, Cengal can convert blocking CPU-bound functions into proper asynchronous coroutines, preventing them from blocking the thread for extended periods.

Examples

In this example, an application concurrently (at the same time) executes all of the following components within a single thread:

  • own blocking CPU-bound function
  • third-party blocking CPU-bound function
  • Tkinter application
  • CustomTkinter application
  • asyncio-based file reading task.

YouTube Showcase

Watch the video

Source code

Tutorial

True Interprocess Shared Memory (Proof of Concept)

Cengal introduces a novel approach to interprocess shared memory, currently at the proof of concept stage. With this feature, you can seamlessly share data between your Python processes (currently limited to 2 processes) and work with them just as you would in a single process. The underlying mechanism optimizes cross-process communication by employing efficient memory barriers instead of resource-intensive system calls.

Supported data types (current stage):

  • shared Numpy arrays
  • list: Unlike multiprocessing.shared_memory.ShareableList, Cengal's shared lists are both mutable and resizable between different processes. They support various container types (lists, tuples, dicts) as items and implement all standard list methods. Plus, they offer superior performance compared to multiprocessing.shared_memory.ShareableList.
  • dict: Currently immutable.
  • tuple
  • str
  • bytes
  • bytearray
  • bool
  • float: Cengal's shared float values support Addition Assignment (shared_list[20] += 999.3) and all other native methods and operators, unlike values in multiprocessing.shared_memory.ShareableList.
  • int: Currently limited to int64. Similar to shared float values, Cengal's shared integers support Addition Assignment (shared_list[15] += 999) and all other native methods and operators.
  • None

Examples

General example:

Messages transmit:

Shared Numpy Array:

and smaller:

from multiprocessing import Process
from cengal.hardware.memory.shared_memory import *


shared_memory_name = 'test_shared_mem'
shared_memory_size = 200 * 1024 * 1024
switches = 1000
changes_per_switch = 2000


def work(manager, shared_data)
    index = 0
    while index < switches:
        with wait_my_turn(manager):
            # emulatin our working process
            for i in range(changes_per_switch):
                shared_data[1] += 1

def second_process():
    consumer: SharedMemory = SharedMemory('test_shmem', False)
    consumer.wait_for_messages()
    with wait_my_turn(consumer):
        shared_data = consumer.take_message()
    
    work(consumer, shared_data)


creator: SharedMemory = SharedMemory(shared_memory_name, True, shared_memory_size)
p = Process(target=second_process)
p.start()
creator.wait_consumer_ready()
with wait_my_turn(creator):
    data = [
        'hello',
        0,
        (8, 2.0, False),
        {
            b'world': -6,
            5: 4
        }
    ]
    shared_data = creator.put_message(data)

work(creator, shared_data)
p.join()

Performance Benchmark results

In the realm of performance, Cengal's shared list container, although not yet fully optimized, is already outpacing the performance of multiprocessing.shared_memory.ShareableList. What sets it apart is its comprehensive support for native methods and operators, including Addition Assignment (shared_list[15] += 999), a feature unavailable in multiprocessing.shared_memory.ShareableList.

Cengal's shared list container demonstrates remarkable speed, boasting the ability to handle over 30,000,000 reads/writes per second for an int64 value (shared_list[2] = 1234 / val = shared_list[7]), or more than 1,450,000 addition assignments per second (shared_list[15] += 999). These performance figures underscore the efficiency and versatility of Cengal's interprocess shared memory solution, even in its current state.

Benchmark Results

Roadmap

  • Continuosly moving more logic to Cython
  • Implement mutable dict and set using an appropricate C hashmap library or C++ code (depending what will be faster in our case)
  • Increase number of interacting processes from 2 to variable value
  • Implement garbage collector for shared data in addition to manual free() call
  • Implement an appropriate Service for cengal.parallel_execution.coroutines - for comfortable shared memory usage inside an async code (including asyncio)
  • Improve memory allocation algorithm in an attempt of making it faster

Async LMDB database API

An example of usage (unit test of the module):

Async logging into LMDB database

Developer can observe their logs in runtime using cengal.parallel_execution.coroutines.coro_tools.loop_administration.admin_tk module (made with Async Tkinter GUI):

An example of usage of the admin_tk:

Alternatively, developer can load logs in off-line mode using Log Viewer application (made with async Tkinter GUI):

Async Tkinter and Customtkinter

Async wxPython

Async QT (PySide, PySide2, PySide6, PyQt4, PyQt5, PyQt6)

Async PyTermGUI

Transparent background for your desktop applications (TBA)

  • Target OS: Windows 11, Windows 10, Windows 8, Windows 7, Windows Vista.
  • Target frameworks: PySide, PyQt, Kivy, PyWebView

title , title

Tkinter True Borderless apps for Windows platform (TBA)

  • Target OS: Windows 11, Windows 10, Windows 8, Windows 7, Windows Vista.
  • Target frameworks: CustomTkinter, Tkinter, ttkbootstrap, ...

title

Cengal Coroutines and Asyncio Administration and Monitoring Page

Observe loop performance, services state and coroutines list with details. Use an async interactive console in order to interact with your application from inside.

YouTube Showcase

Watch the video

Examples

admin_test.py

Modules with unique functionality

  • "parallel_execution"
    • "coroutines" - asynchronous loop with almost preemptive multitasking within the single thread. Brings an async approach to an unmodified Tkinter, Qt, Kivy, etc. Unlike asyncio/trio/curio, it uses microkernel (services-based) approach which makes it highly- and easily-expandable. Can be executed both independently (asyncio/uvloop loop will be injected within the Cengal-coroutine when needed) and within already executed asyncio/uvloop loop. Can be used from the PyScript for the Web app creation.
      • "coro_standard_services" - set of standard services. You can replace standard service by yours for your app or for third-party module without code changes: by registering your own alias.
        • "loop_yield" - automatically kinda yield from your loops from time to time (priority based). Can be used to make a proper coroutine (which will not hangs on its endless loops) even from the long-running CPU-hungry third-party function (by function's bytecode modification made in runtime).
        • "tkinter" - make your Tkninter app async easily. Run any number of asynchronous Tkinter apps in single thread.
        • "db" - async wrapper around LMDB which provides an appropriate async API
        • "asyncio_loop" - use asyncio-based code directly from your async Cengal-coroutine neither Trio nor Curio able to to do this
        • "wait_coro" - 'put_atomic' request is an analogue of Trio's Nurseries for list of one or more coroutines; 'put_fastest' - returns when at least N of coroutines from the list were done successfully; etc.
        • "read_write_locker" - sync primitive usefull for DB creation (was made for a TagDB)
        • "remote_nodes" - in progress - connect to any opened listener/port of the node (TCP/UDP/Unix_Socket - doesn't matter), and identify your receiver by name (defined once - during the connection creation process). Uses improved version of the asyncio.streams as a backend in order to have a back pressure and an improved performance (see "efficient_streams" module description below).
      • "coro_tools" - tools
        • "await_coro" - await Cengal-coroutine or await for a call to the Cengal-service from your asyncio code
        • "low_latency" - use standard json module from your coroutines without hangs on huge Json-data (which usually hung even fast json implementation like orjson)
      • "integrations" -
        • "Qt" - wrapper around an unmodified Qt (supports: PySide, PySide2, PySide6, PyQt4, PyQt5, PyQt6). Adds asynchronous behavior to Slots. Doesn't require total reimplementation of your Qt app unlike other suggestions and competitors.
        • "customtkinter" - wrapper around an unmodified customtkinter. Implements an additional call, Customtkinter async apps needs to be executed for a proper work
        • "nicegui" - wrapper around an unmodified NiceGUI. Execute nicegui instance from within your code (administrative page for example). Build your pages in an asynchronous way in order to improve your server latency (NiceGUI makes it in a sync way).
        • "uvicorn" - wrapper around an unmodified uvicorn. Run uvicorn as a usual asyncio coroutine.
        • "uvloop" - an easy-install for a uvloop (if awailable).
        • "PyTermGUI" - wrapper around an unmodified PyTermGUI. Adds asynchronous behavior. No competitors currently.
    • "asyncio" - tools for an asyncio
      • "efficient_streams" - more efficient remake of an asyncion.streams. Better awailable traffic limits utilisation. Less kerner-calls number. Back pressure. Unlike asyncio, UDP version is planned but is not ready yet.
  • "code_flow_control" -
    • "python_bytecode_manipulator" - modify your or third-party Python function's code in runtime easily
    • "chained_flow" - easy to use monad. Execute your your code if all/none/some of steps were completed withot an exceptions. Use all/none/some resutls of your steps at the final part of monad execution.
    • "multiinterface_essence" - Make your model and add different interfaces to it easily. Can be used for example in games: create "chair", "ball", "person" models and add to them your library of general interfaces like "touch", "push", "sit", "shot", "burn", "wet", etc.
  • "hardware" - hardware related
    • "memory" - RAM related
      • "barriers" - fast full memory barriers for both x86/x64 and ARM (Windows, Linux, OS X, iOS, Android).
  • "time_management" -
    • "high_precision_sync_sleep" - provides an ability to put your thread into legetimate sleep for at least 10x smaller time period than time.sleep() from the Python's Standard Library able to do on same Operating System: uses nanosleep() on Linux and periodic SwitchToThread() on Windows.
    • "cpu_clock_cycles" - Returnes value of RDTSCP on x86/x86_64 or CNTVCT_EL0 on ARM. Fast implementation: 6-12 times faster than all other competitors on Github. Note: CPU Time Stamp Counter (TSC) is not depends on actual current CPU frequency in modern CPUs (starting from around year 2007) so can be safely used as a high precision clock (see time_management.cpu_clock module). Windows, Linux and other Operating Systems are using it internaly.
    • "cpu_clock" - like perf_counter() but 25% faster. Supports both x86/x86_64 and ARM. cpu_clock is slightly faster than cpu_clock_cycles because double (float in Python terms) transfered from C-code to Python code more efficiently than 64-bit int (which needs an addition internal logic inside the Python itself for conversion). Highest-precision possible since it is CPU Time Stamp Counter based which is not depends on actual current CPU frequency in modern CPUs (starting from around year 2007) so can be safely used as a high precision clock (and Windows, Linux and other Operating Systems are using it internaly in this way). Benchmark: cpu_clock_test.py

Some Other modules

  • "parallel_execution"
    • "coroutines" -
      • "coro_tools" - tools
        • "wait_coro" - decorate your coroutine in order to be able to execute it from the plain sunc code as a sync function
        • "run_in_loop" - serves the same purpose as an asyncio.run() call
        • "prepare_loop" - creates and returns loop. You may use it later
    • "asyncio" - tools for an asyncio
      • "run_loop" - similar to asyncio.run() but ends only when all background tasks will be finished (main coro can be finished long before this moment).
      • "timed_yield" - simple (dum-dum but faster) version of the "loop_yield" (see above) but made directly for an asyncio.
  • "bulk_pip_actions" - install lists of required modules. Lists can be different for a different operating systems
  • "code_inspection" -
    • "auto_line_tracer" - smart and easy to use line logger (current func name, file, lines numbers, surrounding code)
    • "line_tracer" - - easy to use line logger (current func name, file, line number)
    • "line_profiling" - confinient work with a line_profiler if awailable
  • "data_containers" - usefull data containers like stack, fast fifo, etc. Some of them are highly optimized for speed
  • "data_manipulation" -
    • "conversion" -
      • "bit_cast_like" - similar to std::bit_cast from C++
      • "reinterpret_cast" - similar to reinterpret_cast from C++. You have a third-party object and you want to change its type (and behavior) in runtime.
    • "serialization" - automatically choose a fastest appropriate serializer for your type and structure of data (json, simplejson, ujson, ojson, msgpack, cbor, cbor2, marshal, pickle, cloudpickle, ...)
    • "tree_traversal" - both recrsive and nonrecursive tree traversal algorithms
  • "ctypes_tools" - ctypes code and structures used by Cengal.
    • "tools" - ctypes tools usefull for your code
  • "file_system" - normalized relative path, etc.
    • "app_fs_structure" - unified list of the default app directories (data, cache, temp, etc.) recommended by OS (Linux, Windows, Mac OS X) in a runtime for a given application name or a service name. Results are cached. Cache size can be modified in runtime.
  • "hardware" - hardware related
    • "info" - hardware info
      • "cpu" - normalized results from cpuinfo extended with an info from psutil.
  • "introspection" -
    • "inspect" - find out function parameters, entity owners list (method -> subclass -> class -> module), entitie's own properties (excluding parent's properties), etc.
    • "third_party" -
      • "ctypes" - provice an instance of ctypes Structure and take a dict with all internals of this structure. Good for inspecting/logging/printing values of a given structure with all values of all its substructures.
  • "io" -
    • "used_ports" - database of known TCP/UDP ports. Updates from an appropriate Wikipedia page once per Cengal release but you can update if for your self anytime if you want to.
    • "serve_free_ports" - provide ports range with an interested port types set and receive number of the first open appropriate port on your machine within given port range.
    • "named_connections_manager" - base for the "remote_nodes" (see above) and similar entities
    • "net_io" - an experimental networking library with an expandable architecture. Has implemented modules for epoll and select.
  • "math" -
    • "algebra" -
      • "fast_algorithms" - Fast inverse square root (the one from Quake III) implemented efficiently
    • "geometry" -
      • "ellipse" - ellipse related. Also several algorithms for precisely or efficiently compute an ellipse perimeter
      • "point" - numpy (if awailable) or python implementation of points (1D, 2D, 3D, nD)
      • "vector" - numpy (if awailable) or python algotithms on vectors (1D, 2D, 3D, nD). Implements CoordinateVectorNd, VectorNd, DirectedGraphNd
  • "modules_management" - reload module, import drop-in-replacement module if an original is not awailable
  • "statistics" -
    • "normal_distribution" - compute the normal distribution of your data. Booth count or use a formula. 99, 95, 68; standard_deviation: diff_mean, sqrt(variance), max_deviation, min_deviation.
  • "text_processing" - text parsing, patching, detect BOM and encoding
  • "time_management" -
    • "timer" - timer for any synchronous code
    • "sleep_tools" - sleep for a production code. Using usual sleep you may get not wat you want if you are not really into your target OS internals (Windows/Linux)
    • "repeat_for_a_time" - measures code/function executions per second. But it smart and eficiently repeats target code/function not N times but up to a T seconds. Results to a high precision measurements for even smallest and fastest pieces of code.
    • "relative_time" - time related module for a business purposes (calendars, payments, etc.)
  • "unittest" -
    • "patcher" - set of context manager for monkey patching builtins or other entities
  • "user_interface" -
    • "gui" -
      • "nt" -
        • "blur_behind" - Turn on Aero Glass backgrownd in Winndows 7, 10, 11 using documented or undocumented API (which one is awailable)
        • "dpi_awareness" - Turn on DPI awareness
  • "web_tools" -
    • "detect_browsers_host_device_type" -
      • "by_http_user_agent" - detects is it mobile or tablet device by analizing its http user_agent string

Size of the Cengal library

At the moment of 19 Mar 2024:

Around 200 modules

-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Python                         751          23696          30083          77396
Cython                          10            727            472           1892
C                                2             39             26            163
C/C++ Header                     2             14             26             37
Go                               3             19             37             88
Nim                              2             14              6             36
-------------------------------------------------------------------------------
SUM:                           770          24509          30650          79612
-------------------------------------------------------------------------------

Counted with cloc util.

Examples

  • Can be found in examples dir
  • Each module has a development folder. Examples are usually placed there
  • Some of old examples can be fined inside the tests dir.

Cengal.coroutines examples

Text processing example

Ensures and updates copyright (with dates) in each Cengal's source file

Manual Build

pip install git+https://github.com/FI-Mihej/Cengal.git

Installation process requires compilation. So ensure that:

  • GCC/Clang is installed in your Linux/WSL (sudo apt-get --yes install build-essential for Ubuntu. And ./before_install_on_wsl.sh for Ubuntu under WSL for UI like Tkinter or Qt if you are using some kind of XServer on your host Windows)
  • At least Visual Studio Community - Build Tools are installed on your Windows and you are installing Cengal from within its Developer Command Prompt for an appropriate target CPU architecture (x64 Native Tools Command Prompt for VS 2022 for example). Make sure that you have compatible version of Visual Studio for your target CPython interpreter (see python -VV command output. For example Python 3.9.11 (tags/v3.9.11:2de452f, Mar 16 2022, 14:33:45) [MSC v.1929 64 bit (AMD64)]: this python interpreter requires Visual Studio 2019 version 16.11.2+ according to 1929 word search in Wikipedia page)

Projects using Cengal

  • flet_async - wrapper which makes Flet async and brings booth Cengal.coroutines and asyncio to Flet (Flutter based UI)
  • justpy_containers - wrapper around JustPy in order to bring more security and more production-needed features to JustPy (VueJS based UI)
  • Bensbach - decompiler from Unreal Engine 3 bytecode to a Lisp-like script and compiler back to Unreal Engine 3 bytecode. Made for a game modding purposes
  • Realistic-Damage-Model-mod-for-Long-War - Mod for both the original XCOM:EW and the mod Long War. Was made with a Bensbach, which was made with Cengal
  • SmartCATaloguer.com - TagDB based catalog of images (tags), music albums (genre tags) and apps (categories)

License

Copyright © 2012-2024 ButenkoMS. All rights reserved.

Licensed under the Apache License, Version 2.0.

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

cengal_light-4.3.1.tar.gz (831.6 kB view details)

Uploaded Source

Built Distributions

cengal_light-4.3.1-pp310-pypy310_pp73-win_amd64.whl (2.8 MB view details)

Uploaded PyPy Windows x86-64

cengal_light-4.3.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

cengal_light-4.3.1-pp310-pypy310_pp73-macosx_14_0_arm64.whl (3.0 MB view details)

Uploaded PyPy macOS 14.0+ ARM64

cengal_light-4.3.1-pp310-pypy310_pp73-macosx_13_0_x86_64.whl (3.0 MB view details)

Uploaded PyPy macOS 13.0+ x86-64

cengal_light-4.3.1-pp39-pypy39_pp73-win_amd64.whl (2.8 MB view details)

Uploaded PyPy Windows x86-64

cengal_light-4.3.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

cengal_light-4.3.1-pp39-pypy39_pp73-macosx_14_0_arm64.whl (3.0 MB view details)

Uploaded PyPy macOS 14.0+ ARM64

cengal_light-4.3.1-pp39-pypy39_pp73-macosx_13_0_x86_64.whl (3.0 MB view details)

Uploaded PyPy macOS 13.0+ x86-64

cengal_light-4.3.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

cengal_light-4.3.1-pp38-pypy38_pp73-macosx_14_0_arm64.whl (3.0 MB view details)

Uploaded PyPy macOS 14.0+ ARM64

cengal_light-4.3.1-pp38-pypy38_pp73-macosx_13_0_x86_64.whl (3.0 MB view details)

Uploaded PyPy macOS 13.0+ x86-64

cengal_light-4.3.1-cp313-cp313-win_amd64.whl (2.8 MB view details)

Uploaded CPython 3.13 Windows x86-64

cengal_light-4.3.1-cp312-cp312-win_amd64.whl (2.9 MB view details)

Uploaded CPython 3.12 Windows x86-64

cengal_light-4.3.1-cp312-cp312-musllinux_1_2_x86_64.whl (7.2 MB view details)

Uploaded CPython 3.12 musllinux: musl 1.2+ x86-64

cengal_light-4.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.3 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

cengal_light-4.3.1-cp312-cp312-macosx_14_0_arm64.whl (8.6 MB view details)

Uploaded CPython 3.12 macOS 14.0+ ARM64

cengal_light-4.3.1-cp312-cp312-macosx_13_0_x86_64.whl (8.7 MB view details)

Uploaded CPython 3.12 macOS 13.0+ x86-64

cengal_light-4.3.1-cp311-cp311-win_amd64.whl (2.8 MB view details)

Uploaded CPython 3.11 Windows x86-64

cengal_light-4.3.1-cp311-cp311-musllinux_1_2_x86_64.whl (7.1 MB view details)

Uploaded CPython 3.11 musllinux: musl 1.2+ x86-64

cengal_light-4.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.2 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

cengal_light-4.3.1-cp311-cp311-macosx_14_0_arm64.whl (8.4 MB view details)

Uploaded CPython 3.11 macOS 14.0+ ARM64

cengal_light-4.3.1-cp311-cp311-macosx_13_0_x86_64.whl (8.5 MB view details)

Uploaded CPython 3.11 macOS 13.0+ x86-64

cengal_light-4.3.1-cp310-cp310-win_amd64.whl (2.8 MB view details)

Uploaded CPython 3.10 Windows x86-64

cengal_light-4.3.1-cp310-cp310-musllinux_1_1_x86_64.whl (6.8 MB view details)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

cengal_light-4.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.8 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

cengal_light-4.3.1-cp310-cp310-macosx_14_0_arm64.whl (7.4 MB view details)

Uploaded CPython 3.10 macOS 14.0+ ARM64

cengal_light-4.3.1-cp310-cp310-macosx_13_0_x86_64.whl (5.8 MB view details)

Uploaded CPython 3.10 macOS 13.0+ x86-64

cengal_light-4.3.1-cp39-cp39-win_amd64.whl (2.8 MB view details)

Uploaded CPython 3.9 Windows x86-64

cengal_light-4.3.1-cp39-cp39-musllinux_1_1_x86_64.whl (6.9 MB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

cengal_light-4.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.9 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

cengal_light-4.3.1-cp39-cp39-macosx_13_0_x86_64.whl (5.7 MB view details)

Uploaded CPython 3.9 macOS 13.0+ x86-64

cengal_light-4.3.1-cp38-cp38-win_amd64.whl (2.9 MB view details)

Uploaded CPython 3.8 Windows x86-64

cengal_light-4.3.1-cp38-cp38-musllinux_1_1_x86_64.whl (7.3 MB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ x86-64

cengal_light-4.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.0 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

cengal_light-4.3.1-cp38-cp38-macosx_13_0_x86_64.whl (5.7 MB view details)

Uploaded CPython 3.8 macOS 13.0+ x86-64

File details

Details for the file cengal_light-4.3.1.tar.gz.

File metadata

  • Download URL: cengal_light-4.3.1.tar.gz
  • Upload date:
  • Size: 831.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.8.10

File hashes

Hashes for cengal_light-4.3.1.tar.gz
Algorithm Hash digest
SHA256 7bad231f892d4196cd293f329c5ce1297fe1da92099e37156fcd67d09035a956
MD5 a3fd0e4b32d85dc0941ba41bbd77d829
BLAKE2b-256 06345f077a718affddb4dd7f5ee50463b57bd5e9bbf640c82b877565f5e2c7cc

See more details on using hashes here.

File details

Details for the file cengal_light-4.3.1-pp310-pypy310_pp73-win_amd64.whl.

File metadata

File hashes

Hashes for cengal_light-4.3.1-pp310-pypy310_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 cd494f731c9b24be87ca0839e778b41cddb3b5143c4d4d970a2b0467a1da86ab
MD5 7c4e7f360e9da0b894dc25911b3f9cdc
BLAKE2b-256 88b3b829042b18623930f6130f7e718be7d6897f387a09353d8f25d67315a34e

See more details on using hashes here.

File details

Details for the file cengal_light-4.3.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cengal_light-4.3.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 fa1e751c217566fbdc3134d31b7617a48621ddd200e0d1b512b80dbb430efe01
MD5 7f7ff521eed6936968f9f122b5a95262
BLAKE2b-256 f2884c188c4b014a4a31018c866d65a96e09a1e08e3d6c68fbce53a4e59eceda

See more details on using hashes here.

File details

Details for the file cengal_light-4.3.1-pp310-pypy310_pp73-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for cengal_light-4.3.1-pp310-pypy310_pp73-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 fecda2c79563bf37b25d21b6dfdf05ba411c86bc613278b2648e9c0e37ade764
MD5 77292b4a4009c339fe0c2b7b034327a3
BLAKE2b-256 20e945ea48a70b2e6a25b5eb3b40f107d6d5605a792f2bdbe88d3bca450371b4

See more details on using hashes here.

File details

Details for the file cengal_light-4.3.1-pp310-pypy310_pp73-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for cengal_light-4.3.1-pp310-pypy310_pp73-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 6cbde2feee76e2fa7083f0ec26e15ed7d585ca8cf14a7f115be93b647860ccb4
MD5 ed63adca9f9eb08e739e891590b156c4
BLAKE2b-256 8ab186aa34e96d1ddac4ce999a2f88805ff813c446f65cd5d6bc7eea6144534a

See more details on using hashes here.

File details

Details for the file cengal_light-4.3.1-pp39-pypy39_pp73-win_amd64.whl.

File metadata

File hashes

Hashes for cengal_light-4.3.1-pp39-pypy39_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 ab2796088600cdd2656a0b43287802b443e52828fa363ed93b8f1828d198d9fb
MD5 95c4c60ec2d676f5b18416dfa988ddf0
BLAKE2b-256 e958a6a60ef3ba97288b11d0a29b36457d22038377633f4bff0209ce8829468e

See more details on using hashes here.

File details

Details for the file cengal_light-4.3.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cengal_light-4.3.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7a9db6fa7fd542f028729d477fe6a40e94b039b4be1da5a51c6104482e19baf8
MD5 dac79359f58854a31297573b705af29e
BLAKE2b-256 92003a8a288be450281057cab9b1f53ebc1b670898b40aca93b54a1057ef24d6

See more details on using hashes here.

File details

Details for the file cengal_light-4.3.1-pp39-pypy39_pp73-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for cengal_light-4.3.1-pp39-pypy39_pp73-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 6bcc820e87df676d33f0a7e68db4e4cdf54d14c9eae6604ea7c6f2e1849aa207
MD5 92c5d54696667356a7419af71c18fcc8
BLAKE2b-256 c5e6c12a659e7eef5a5fe37f34f53d3b1b1957c466c5df9e0d5539d8fbd2a3d8

See more details on using hashes here.

File details

Details for the file cengal_light-4.3.1-pp39-pypy39_pp73-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for cengal_light-4.3.1-pp39-pypy39_pp73-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 3be51a42eefc37c67c02828f4b42c83aa3ec7fe1af4eb71580dfb9f7b64bead3
MD5 e8e433c2d42dbc405641eedcf96ba2b2
BLAKE2b-256 0abb442afa782f4b64de446cc0289848857119aeca454037e57c43108ecc857a

See more details on using hashes here.

File details

Details for the file cengal_light-4.3.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cengal_light-4.3.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d8e06a72aa9dee35250e160155044c0465dddff0a68fb5e24bbd14438abd9a50
MD5 5e551826b9b206d02b0c1fd7c3e2e178
BLAKE2b-256 929cb8758cab3d327219ac587ecbf973fc0cc985d753d8c8b2dc042011dd3ff0

See more details on using hashes here.

File details

Details for the file cengal_light-4.3.1-pp38-pypy38_pp73-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for cengal_light-4.3.1-pp38-pypy38_pp73-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 90d4087a743da36d8c408440d1654af37ff0190453d47eef528b5b23564f9a34
MD5 7659f4e6c58a3091cb2790cc11e4074d
BLAKE2b-256 1756b7df80efacbe47d15a46630970de596b1e1a2cc71af44504194aca970c21

See more details on using hashes here.

File details

Details for the file cengal_light-4.3.1-pp38-pypy38_pp73-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for cengal_light-4.3.1-pp38-pypy38_pp73-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 87828b32d55e8d20b61d4067bedcb1a0478e436a52b299a7fd670b52a2e3d8a6
MD5 f5edb5f8b1a18fe5ee31d75b076fb7ec
BLAKE2b-256 9c6ca95c9fd74e402bf18daaece5fe477ebabb9f81381c283e27ab1065d60234

See more details on using hashes here.

File details

Details for the file cengal_light-4.3.1-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for cengal_light-4.3.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 bfb969b39aff6b6649c912b6f17ebf6be514ab8cc5c3a04f658be2d2eb99146b
MD5 bfcadb168d18098d2cbf89ab478355c9
BLAKE2b-256 8a7b242198bf613c9f2fab87f3203f6509f29be336c31aaa19f924247184f20c

See more details on using hashes here.

File details

Details for the file cengal_light-4.3.1-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for cengal_light-4.3.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 a45fa7984365b5f81f1f917e54430ebcd7871eae8fa29c3af7e35273018350a4
MD5 90743c424407a5125d8a151976ef3a9a
BLAKE2b-256 f4b29a4c7cc02b08206ee83598959d5fffa30243bd7da689769091b722684fb8

See more details on using hashes here.

File details

Details for the file cengal_light-4.3.1-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cengal_light-4.3.1-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b38fffe18f303a376fdbfc19ad7ed2640aa8a868f3b594a01dbfd73886c36c9d
MD5 1e70c0721d7e0b310b3445ed296ef7c1
BLAKE2b-256 432db8c5d7d5864a7386f0552b74ff948fb3724cbd509a2877bcbc88997fadb1

See more details on using hashes here.

File details

Details for the file cengal_light-4.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cengal_light-4.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c7d953653748ca0f3a0188bbef3e2a89dee7906ef6d08c7b53a3989ab50f1762
MD5 a029d02bb1c0aa94b8cae2d1f096c167
BLAKE2b-256 994d7fd4ac21f9cae6cd3736afb710158611d3551b6c3cd93fef04c609035497

See more details on using hashes here.

File details

Details for the file cengal_light-4.3.1-cp312-cp312-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for cengal_light-4.3.1-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 fcaf8453d4b653e355b808392e02b2c841a87e7de65c925e9185cf17aa2cbca1
MD5 dd33d3dd3611dd29465f7046a77d1b4c
BLAKE2b-256 75d045e770f370ce8a502c31c7643783088e8b0c1b6970016a0fcecddfd5907a

See more details on using hashes here.

File details

Details for the file cengal_light-4.3.1-cp312-cp312-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for cengal_light-4.3.1-cp312-cp312-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 fe2540658d7796a5ef14b3d5c9cdf0ed21ce0623c479cdbf0d22e8d1da64b6cf
MD5 b9947b9aa391b01d90c846b4ffdb4fd9
BLAKE2b-256 80e72386ec9ea1cf347c34783d1ea3e3f0cc4af4adad12af2e415c669b442085

See more details on using hashes here.

File details

Details for the file cengal_light-4.3.1-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for cengal_light-4.3.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 185180bedcd724574a1fc4dfa52dbaa951ee25e180144411eb79348c2f7625cb
MD5 e74e89e9f4aec642a0f42a2f7f3f0a0b
BLAKE2b-256 119ba9c38d0569ab9303a6fb0c4ca5979cecb8e2b832a036f51ff37e320b9975

See more details on using hashes here.

File details

Details for the file cengal_light-4.3.1-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cengal_light-4.3.1-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 66b02ed2704dbdd4666c6ca1f93cba6a9b6cbc3476f4f45d053103b3e6aa7838
MD5 e90a4ed8b29a0f2db7024a01951decf8
BLAKE2b-256 b0ea0067b859d313227d85bad9ded783250d29b3d91d1d86cbee4858934d32a9

See more details on using hashes here.

File details

Details for the file cengal_light-4.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cengal_light-4.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9f385bf8bd13179280d1e93d9902c23a4090d4b5d5987e868408e2945769c679
MD5 d5a23893a57e344d0d1f8ff4259542c9
BLAKE2b-256 f869c7ea21e82266b9b4abdde96ee0267335c2a344e95ed7a311ce57604e60cc

See more details on using hashes here.

File details

Details for the file cengal_light-4.3.1-cp311-cp311-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for cengal_light-4.3.1-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 2c3aca94191418bd4bef3fd29791173b6c941df7130424bb10abd08f476f9a04
MD5 cea4fdcd870c79e10bae25d0914969c0
BLAKE2b-256 f2f5d0bce2a9f112abc1384ce5bddfc0424dd72336991a3d8520208b2aa61b0d

See more details on using hashes here.

File details

Details for the file cengal_light-4.3.1-cp311-cp311-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for cengal_light-4.3.1-cp311-cp311-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 654b3331434bc170d0a244bb7bab992e89fd6b9da98a89b3130ab19121fc9a3f
MD5 64a33d97302456fdff9ca443946ec2fa
BLAKE2b-256 2e94657c41da870d021250cad29bc62f7477575c1d0fdf24eac4c89b37fd79c8

See more details on using hashes here.

File details

Details for the file cengal_light-4.3.1-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for cengal_light-4.3.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 571991fc0dffb6a591738bc655ef0c31bfc7159156f8ba2df50c23b9b4e4af94
MD5 2d00a741370293ea20476a6f5d0165f0
BLAKE2b-256 ac6e9d94a44875e93d6e68cbb033ea33b6a8ca3046fed8120bf4613e8a4a65f8

See more details on using hashes here.

File details

Details for the file cengal_light-4.3.1-cp310-cp310-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for cengal_light-4.3.1-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 4ff1ca7b7e0b474fede8d8e446abbe8a95aff14c38771bbe819f5c7f08a17c4f
MD5 1db126ecfa3eb6e3218f6fe8973f6405
BLAKE2b-256 ef94346bda87048e822aea9992f373d66b0a70cd653a94a64ef83f84261c4781

See more details on using hashes here.

File details

Details for the file cengal_light-4.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cengal_light-4.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 25c71d92ff95260c62d2ba6102291978cf8c9a62f0dceb068de3e97958cbdab1
MD5 547cabc547ec2b4271160e4b9e265891
BLAKE2b-256 d7a6c0bd6ae861dd6d85a0680fded6d0bb3e27bd96e33d89e2d362a8a8e2487a

See more details on using hashes here.

File details

Details for the file cengal_light-4.3.1-cp310-cp310-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for cengal_light-4.3.1-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 e0dc7c06d09529afc0f2d5df60e3c2f203451a41f5474eba0b046402b5df309d
MD5 5da1ec1a29a2328a01876f96d21c0705
BLAKE2b-256 b31a90b1d14a33da3ef734ed9860a505ed6f8dec53ec5cccab264064cad0f38e

See more details on using hashes here.

File details

Details for the file cengal_light-4.3.1-cp310-cp310-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for cengal_light-4.3.1-cp310-cp310-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 fcbd1fe912c1d17ab35be7ef325557b4557850f69d41b7833bfc6a542a987daa
MD5 6910f0f479aa8d94e4f442aa84e29f2e
BLAKE2b-256 56f87823a9a688b09a92d78a7bf1e0503548fcf7067a95992e6549a3bfb29f1c

See more details on using hashes here.

File details

Details for the file cengal_light-4.3.1-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for cengal_light-4.3.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 99fec8da9e49b0b5cb11dd22bfe7abc36e48cb2d0114b6084dc76c8e4c2c4043
MD5 4f377d6693a51f41fa32ec8b71257351
BLAKE2b-256 f76bcb48a096fe6f3e70ceff86388482982efdf2fa4e602bfca40fff3858b9d2

See more details on using hashes here.

File details

Details for the file cengal_light-4.3.1-cp39-cp39-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for cengal_light-4.3.1-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 7041c5625f87c48f6217a8bb7bb278b04cbf42a60183609fd05c063aeed933f5
MD5 97ee97d4bae87b126eaffb5ae75cdcc6
BLAKE2b-256 7e900d396cfd8212c3b2cee473fde3ddf39f6ff79393d7e9d3f981d2ca605a55

See more details on using hashes here.

File details

Details for the file cengal_light-4.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cengal_light-4.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 dbc09d0925a50f1b291672f5657aa53dd351bbdadc2c0a1ca28299541d98f277
MD5 49dfce994523f36d44ed3ae48c483295
BLAKE2b-256 0abf34bfd6691e034489ed00e7fb04e0407dcf77ef91665a2dd637a0f8ffd7ad

See more details on using hashes here.

File details

Details for the file cengal_light-4.3.1-cp39-cp39-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for cengal_light-4.3.1-cp39-cp39-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 c46dfbbf83098c6143fe8bf324d3493ee1a035403fd60c0abf945488c05cae7c
MD5 2b627a5f2765cf54a75a30765b38446d
BLAKE2b-256 511158f4427f079df705b5edb7af3a7fb90fbd71f8247187fb71eea41ecdb342

See more details on using hashes here.

File details

Details for the file cengal_light-4.3.1-cp38-cp38-win_amd64.whl.

File metadata

File hashes

Hashes for cengal_light-4.3.1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 1dcd69f9c8bfbd663d94d5828d1fd47844794f226dfd7dbb966ede776fda69ce
MD5 1438dbb6621464f9c1b11ad9d496680b
BLAKE2b-256 66d261ebf683891428cfad18d42227e3ee5de4d211474e7955409f1f2f33524b

See more details on using hashes here.

File details

Details for the file cengal_light-4.3.1-cp38-cp38-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for cengal_light-4.3.1-cp38-cp38-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 403ae78360f085ffe508e8e6dd206827dc00ef4d7e68d5c4058ef97cdb53dc30
MD5 a9e3b0efeb4e896271e5c0f1e8d98c30
BLAKE2b-256 468cbbee4731c15c44457e32c96c382f5858fa282872ac57ab689ae6fe5d4c8c

See more details on using hashes here.

File details

Details for the file cengal_light-4.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cengal_light-4.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 37952b2f989d70e04367ce5dd7804a065a3c2acaa1784cfb60fdfb84d6da7d27
MD5 ddbddb5e12d338c5bd87780d8ad2f1ce
BLAKE2b-256 d4a391bcf715444c58458da07943d4fea3875e001a2c6a743010bb2ab1b3a1af

See more details on using hashes here.

File details

Details for the file cengal_light-4.3.1-cp38-cp38-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for cengal_light-4.3.1-cp38-cp38-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 eea29ebf68ab3a00b5c46a43f648c42d078af292a93cdeceac1ef79aa804dca8
MD5 5d2ed1855881bba6f9b4e81c64a9f4c5
BLAKE2b-256 9c40d2494317eca0a0046d2f8822d181e9a794e685f5201869ae4acb00c12008

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