Skip to main content

General purpose library

Project description

cengal_light

Package with compiled extensions but without the requirements mandatory installation.

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 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

pip install cengal will install prebuilt wheels for both Windows and Linux

Documentation

Cengal Wiki

For example Cengal Coroutines Concepts & Usage

Exclusive Features: No Alternatives Online

Run concurently following components in a Single (!) Thread

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

Examples

YouTube Showcase

Watch the video

Source code

Tutorial

True Interprocess Shared Memory (Proof of Concept Stage)

Share your data between your Python processes (2 processes currently) and work with them as usual. Work across different processes is made turn by turn (fast operation: using full memory barrier instead of system calls)

Supported types (currently):

  • list - Unlike multiprocessing.shared_memory.ShareableList: mutable and resizable between different processes, supports other containers (lists, tuples, dicts) as an items and implements all list methods. Faster than multiprocessing.shared_memory.ShareableList.
  • dict - currently immutable
  • tuple
  • str
  • bytes
  • bytearray
  • bool
  • float - Unlike values in multiprocessing.shared_memory.ShareableList, supports Addition Assignment (shared_list[20] += 999.3) and all other native methods and operators
  • int - int64, currently. Unlike values in multiprocessing.shared_memory.ShareableList, supports Addition Assignment (shared_list[15] += 999) and all other native methods and operators
  • None

Examples

shared_memory_example.py

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

Shared list container (which is not yet fully optimizes currently) is already faster than multiprocessing.shared_memory.ShareableList. And unlike multiprocessing.shared_memory.ShareableList supports Addition Assignment (shared_list[15] += 999) and all other native methods and operators of items. It provides an ability to make more than 30000000 reads/writes per second of an int64 value (shared_list[2] = 1234 / val = shared_list[7]) or more than 1450000 addition assignments per second (shared_list[15] += 999).

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 11 Oct 2023:

More than 190 modules

-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Python                         636          18572          21458          59787
Cython                           9            686            415           1817
C                                2             39             26            163
C/C++ Header                     2             14             26             37
-------------------------------------------------------------------------------
SUM:                           649          19311          21925          61804
-------------------------------------------------------------------------------

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

Build

pip install cengal on Mac OS X

or

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

Installation process requires compilation (prebuild Wheels are not prepared yet). 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.0.1.tar.gz (665.5 kB view details)

Uploaded Source

Built Distributions

cengal_light-4.0.1-pp310-pypy310_pp73-win_amd64.whl (2.1 MB view details)

Uploaded PyPy Windows x86-64

cengal_light-4.0.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.4 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

cengal_light-4.0.1-pp39-pypy39_pp73-win_amd64.whl (2.1 MB view details)

Uploaded PyPy Windows x86-64

cengal_light-4.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.4 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

cengal_light-4.0.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.3 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

cengal_light-4.0.1-cp312-cp312-win_amd64.whl (2.2 MB view details)

Uploaded CPython 3.12 Windows x86-64

cengal_light-4.0.1-cp312-cp312-musllinux_1_2_x86_64.whl (4.4 MB view details)

Uploaded CPython 3.12 musllinux: musl 1.2+ x86-64

cengal_light-4.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.5 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

cengal_light-4.0.1-cp311-cp311-win_amd64.whl (2.2 MB view details)

Uploaded CPython 3.11 Windows x86-64

cengal_light-4.0.1-cp311-cp311-musllinux_1_2_x86_64.whl (4.4 MB view details)

Uploaded CPython 3.11 musllinux: musl 1.2+ x86-64

cengal_light-4.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.4 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

cengal_light-4.0.1-cp310-cp310-win_amd64.whl (2.2 MB view details)

Uploaded CPython 3.10 Windows x86-64

cengal_light-4.0.1-cp310-cp310-musllinux_1_1_x86_64.whl (4.3 MB view details)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

cengal_light-4.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.2 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

cengal_light-4.0.1-cp39-cp39-win_amd64.whl (2.2 MB view details)

Uploaded CPython 3.9 Windows x86-64

cengal_light-4.0.1-cp39-cp39-musllinux_1_1_x86_64.whl (4.3 MB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

cengal_light-4.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.2 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

cengal_light-4.0.1-cp38-cp38-win_amd64.whl (2.2 MB view details)

Uploaded CPython 3.8 Windows x86-64

cengal_light-4.0.1-cp38-cp38-musllinux_1_1_x86_64.whl (4.4 MB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ x86-64

cengal_light-4.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.3 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

File details

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

File metadata

  • Download URL: cengal_light-4.0.1.tar.gz
  • Upload date:
  • Size: 665.5 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.0.1.tar.gz
Algorithm Hash digest
SHA256 32bd5af0b5567e0ba64cd7dc0739fc50b378f4ca84c3d18a06fc312ed9958818
MD5 29ae63386735904e6ebab4975156cc93
BLAKE2b-256 d71ea90e7692773d4900b57dcd1c958be650932f5017cfeffe1b85d26101ea81

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cengal_light-4.0.1-pp310-pypy310_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 a009c5f055f439e1e653dc97dd864490844b7c5b7c776c435f4898dd62d14800
MD5 b2c215fa2a671747d00b72dc72d4adf2
BLAKE2b-256 5828bbc1cac7a235a7db21d977dfc0ec0ef07a6ef1afba80ff76712a9fd0982a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cengal_light-4.0.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4746b7793556787fbe71f8828aecbfd1c780d8956dbab9ae77871184ec2d91b2
MD5 90a236bd4b028eef6b681bb73c558572
BLAKE2b-256 81bf15feb2980d64d92515b9d9cbbb8f6aacac1407e1324182c96a9a9fe9a75e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cengal_light-4.0.1-pp39-pypy39_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 041b1c9e9bdb87e370bb62d495242c5ed63da9860b05843a02cf67ebdb28eb47
MD5 345adc86c2ade4b17401d7cc16c3642a
BLAKE2b-256 d73504874f80882308c4e0100f40fc15bdc8011795d0ca74ffd2f031d0621b6c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cengal_light-4.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 632e23921ea20e283338df18982748f9d9b4c3b8f15228974214b80b700f3a4d
MD5 6142a2eabd28bc24a11d484fe2ea3d8b
BLAKE2b-256 d3a027a3b9c1551deb427a0c323456204a1c10d4bcd7b55a647162ddb5eb2fcf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cengal_light-4.0.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1721ecbc2af4015e818df836852607f6e835ddf12072644b2ddd83fa34bf9573
MD5 43816796089a94732df8fd40c160a5dc
BLAKE2b-256 d4cfe556b2e3ffe57affb9748c2c4683809f96b7d994e48ff4626cd7be1db6a1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cengal_light-4.0.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 7bcab26a9a97119cfdc88dcbd90e3b28fcd36c5260edd6bab9aab6ec8f3e7b3f
MD5 c09527e14f02cf3b85c3efc822115297
BLAKE2b-256 72d6e2164ea5a5b6c0ba3c86c9d5e6cc2941f571cb8b5aa62406e4ece24d00b1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cengal_light-4.0.1-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 075d9a3be84d63ceaf7ef0dddb447f0c4cea43a0a4e8cd307197b9b03da38665
MD5 4e99743ce2ac168cac857f772ee7bc49
BLAKE2b-256 1933187b0e77d1847fe856c843f8fa8cf5a4b1a20683739fde69e56de54524c1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cengal_light-4.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 51ce741b3b16de0fa61ba3866de13b6ff1ec1f2380da7409e5c1b2a9f779efad
MD5 6e161ead18054f090be5e49ae650a1d5
BLAKE2b-256 94562b74eae57bfcff8054ea53646cd9219dda002a8dbcc87235e180057511e9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cengal_light-4.0.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 6504d4969c2e807bae0e54fe382ac9a9e7f8e826754c5eeac886e99ab015abb3
MD5 e8d0d59c3a72487e2e3feec074e9c837
BLAKE2b-256 52ec9b15e73d5cc9987227b3324d1304123cfd4bf1eaeefa3181f42c49e99276

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cengal_light-4.0.1-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 5cac2945107201558edf8cc4e7fe379b6bd776122ba061632b0aaea37c67ed6f
MD5 3a46d77cd95c6dce27e073d6e1a94b8a
BLAKE2b-256 a702b5ae07b2de956633c91c09fade00d4b2f9350a87c1f64c405c615f7e20c7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cengal_light-4.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ed19865d8f71a0f319a16bf7030ad54b0cef1ddc228276936a282ad087e3ca5b
MD5 267c20e9aa59f7059d01ab1208e4f54b
BLAKE2b-256 81fdf1d1f14d9677211c25b16676a4cdb1bbf4d856d3cc6e36d0d97fe449923f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cengal_light-4.0.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 a9fa448d05734e244a753341adb4fbb22dcf43b31c43b679e1494615a4e346ee
MD5 71edfff9d451b7b91bdad05a43c112f5
BLAKE2b-256 2300df33a06b4233060b5e438a8a6be710700a3e0b4b9f2b019053ddcdfa8d02

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cengal_light-4.0.1-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 0e02905215163147c573dad7561ec01c08019a0430099ff012f4ce65b9c45c42
MD5 4cd8a6a72c3bea9257ff62031ec206fc
BLAKE2b-256 5447d0961cead086ff1aa97a5706e68b85402981da5fcff77c485a9ea027c435

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cengal_light-4.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6494abefcee467c810f5d1b30f49966cdf9f452eb93c2030aea836d89a8029a6
MD5 f87334f4cb7994fe8ffc34d45fc3186e
BLAKE2b-256 75457a665da84563cd2d985e3d7b25a99c519a4280986be9f40ad3586d9e76da

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cengal_light-4.0.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 638551ec4610e37f0090a54ea85f84d3fc61b0a9d3bbc18c74514a8524ed68f6
MD5 0b69747f01cfe5267b89a3118ee9bad1
BLAKE2b-256 9ed3566dd4eeedf1408daefd034d192c4cb4071bb3c3792ad87091512d1f2ce0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cengal_light-4.0.1-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 41855ccbe02b5e05c9fb94b21f67e61b96ef719d0bc8db4c1ffc1a31a3b15f80
MD5 0ed0d224a94cd0173264aa545dbed5cd
BLAKE2b-256 d2314e39b148927403304ee97ab40ea615b2f1656d6587131f2e9e56e371783b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cengal_light-4.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 423100925d7efa8d9f60756867cb8cfcca983aa5dcc246a590d097e1a89ecd84
MD5 e8fc7b26f6f49ee6b939d1f6f8db3ed4
BLAKE2b-256 db31aca5e6e9a70eb0941c33072f708e5b66ad1c9448992c156e9164e1f645ca

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cengal_light-4.0.1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 72dd2254eee56ee7a9e77ae6d4303a6c8139f0ce65913961f916b4c38abf588d
MD5 fcf094822c3c105c9b72d641f49ed62b
BLAKE2b-256 b02b0fa84aed0be89949829f2535f20b8d0cd41ef89459945a25649f7ac8cd7a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cengal_light-4.0.1-cp38-cp38-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 2ed93b1ef82d724a2276492b012cf468b8d940e5fea3560af42d749bbe932dcb
MD5 098fba5564772be5cc9995c6cf56ab0a
BLAKE2b-256 edc4a23a0ec8dabd5ac1b14672f27107e6ef53e872c912fae1db90a3e6cde38d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cengal_light-4.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 20bd292972153a41e68454d63dfd1df3d6edddcf6598be044f9ff61419eb4634
MD5 73667a9113f0ec2f1e2af9cbe5de0b49
BLAKE2b-256 f9d4f61de49e6271ff61317b4ef2a7bdeedf2fda7d541749bc913b804ad693ff

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