Skip to main content

A Low Frequency Oscillator

Project description

LFO - A Low Frequency Oscillator

One of my many interests is playing the modular synth. That instrument is not imaginable without the help of LFOs. They are used to control every controlable knob or slider, they control the speed of oscillators, the fading in and out of filters, they can control each other, the possibilities are literally endless.

Synopsis

lfo = LFO(period, *, ...)
from lfo import LFO
from time import sleep

orbit = LFO(10, sine_attenuverter=0.0, sine_offset=0.0)
while orbit.cycle < 3:
    print(f'{orbit.sine=} {orbit.cosine=}  {orbit.triangle=}  {orbit.sawtooth=}  {orbit.square=}')
    print(f'{orbit.inv_sine=} {orbit.inv_cosine=}  {orbit.inv_triangle=}  {orbit.inv_sawtooth=}  {orbit.inv_square=}')
    sleep(0.1)

What is an LFO?

So what is an LFO? LFO stands for "Low Frequency Oscillator". It's a curve that doesn't stop and that you can pull out values from. The simplest form is probably a sine wave. Regardless of how often you travel along the circle, you always get consistent and reproducible values out of it.

But LFOs come in many different shapes, 4 of which are implemented here:

  • A sine wave (and a cosine wave that I don't count extra)
  • A triangular wave
  • A sawtooth wave
  • A square wave
  • The inverse of all these

The lfo registers the start time of its instantiation. It's constructor receives a period, the duration of one single wave until the wave repeats.

When ever you now query a value from the lfo, it gives you the proper functionn result of that wave for this specific point in time. Also, you can query all of the wave forms from the same lfo.

Ther'e's one important difference to the lfo you might know from your DAW or synth. Since most programmers will use these to ramp other values by multiplication, this lfo is not centered around the 0 point of the y axis, but all waves are positioned so, that they return a value between 0 and 1. There are per-wave parameters to change this.

Terminology / Parameter Names

The LFO class

An instance lfo of type LFO offers the following attributes with their default values:

Primary Instancing Attributes, Read/Write

  • lfo.period: float = 1.0
  • lfo.frequency: float = 1.0 (rw) - Internally an alias for 1 / lfo.period

Wave Outputs, Read-Only

  • lfo.sine: float, lfo.inv_sine: float
  • lfo.cosine: float, lfo.inv_cosine: float
  • lfo.triangle: float, lfo.inv_triangle: float
  • lfo.sawtooth: float, lfo.inv_sawtooth: float
  • lfo.square: float, lfo.inv_square: float

Waveform Control Parameters

  • lfo.sine_attenuverter: float = 0.5
  • lfo.sine_offset: float = 0.5
  • lfo.cosine_attenuverter: float = 0.5
  • lfo.cosine_offset: float = 0.5
  • lfo.triangle_attenuverter: float = 1.0
  • lfo.triangle_offset: float = 0.0
  • lfo.sawtooth_attenuverter: float = 1.0
  • lfo.sawtooth_offset: float = 0.0
  • lfo.square_attenuverter: float = 1.0
  • lfo.square_offset: float = 0.0
  • lfo.pw: float = 0.5
  • lfo.pw_offset: float = 0.0

Read-Only Status Attributes

  • lfo.frozen: bool - Frozen state of the lfo
  • lfo.t: float - Time within the current cycle of the lfo
  • lfo.normalized: float - Like lfo.t, but normalized to 0 - 1
  • lfo.cycle: int - The number of the current cycle of the lfo

Primary Instancing Attributes, Read/Write

lfo.period, lfo.frequency

lfo.period is the primary setting for the lfo. It's the duration between wave repeats.

lfo.frequency is the inverse of the period. While the period defines the duration of one wave cycle, the frequency defines the number of cycles per second.

Wave Outputs, Read-Only

If you have ever tried making sounds on a computer, you will be very familiar with the available wave types.

All wave forms come with an inverted version named inv_<waveform>.

Sine, Cosine (And important configuration parameters!)

Your off-the-mill sine and cosine waves.

Note that as of now these are by default configured so they cycle between 0 and 1, not -1 to 1.

WARNING This might change. We're at v0.0.2 as of writing this, and practical use must show which configuration for these two is most common.

See <waveform>_attenuverter and <waveform>_offset below on how to change this.

Triangle

A triangle wave ramps up from 0 to 1 over half of the period. Then it ramps down back to zero for the second half, creating a triangular shape.

Sawtooth

A sawtooth wave starts at 1 and ramps down to 0 over the full length of the period.

Square

The square wave holds 1 over a given time that defaults to half the period, then it switches to 0.

See lfo.pw and lfo.pw_offset below for configuration options.

Waveform Control Parameters

<waveform>_attenuverter, <waveform>.offset

All waveforms offer these two modifiers. They can passed to the LFO() init when instantiating, and also during runtime

The weird term attenuverter also comes from the world of modular synths and is a combination of attenuator - a scale factor - and inverter - because a negative scale will invert the wave.

For sine_attenuverter and cosine_attenuverter are 0.5 by default, so the sine and cosine waves return values between 0 and 1 like all the others. See WARNING above.

To reset the sine and cosine waves back to their origin, simply set their modifiers like this:

lfo = LFO(period, sine_attenuverter=1, sine_offset=0, ...)

This first scales the sine wave back to the range of -1 to 1, and then removes the position shift from the defaults.

Read-Only Status Attributes

lfo.t, lfo.normalized

lfo.t will give you the current time within the current cycle of the curve. This will be a value between 0 and lfo.period.

lfo.normalized will give you the same, but scaled into the range of 0 to 1.

Both attributes will reset after each period.

lfo.cycles

The number of the loop that the lfo is currently in. Increments after each period.

Methods

An LFO is mostly a fire and forget object. But it still offers a small handful of methods

lfo.reset() -> None

Resets the start time of the lfo to the current time. With short periods, this will most likely not be relevant, but an lfo can also run for a very long time, e.g. to ramp up enemy spawns over a level, and you don't want to have your deep in its cycle when the next level begins.

lfo.freeze() -> None, lfo.unfreeze() -> None, lfo.is_frozen() -> bool

Pauses the lfo. The current value is held until the pause is terminated. Note that the lfo's start time shifts so, that the wave it outputs is continuous. It will not jump once it's reactivated.

If you prefer a function interface over the status attribute lfo.frozen above, use lfo.is_frozen(), which returns a bool.

Python Magic Methods

LFO instances properly convert to bool, int and float and can thus be directly compared to all of them.

Note that as of now, the sine curve is used. This might be configurable later... FIXME

So e.g. bool(lfo) is the same as bool(lfo.sine).

LFO instances also provide __call__, so if you prefer the function interface, use lfo() to fetch the sine value from the lfo.

In addition, lfo is both an iterator and iterable.

from lfo import LFO
from time import sleep

l = LFO(10)
next(l)
>>> 0.2457116119475273

for i, v in zip(range(10), l):
    print(i, v)
    sleep(0.25)

>>> 0 -0.9886300710248443
>>> 1 -0.9999805639536082
>>> 2 -0.9866305171025227
>>> 3 -0.9488620508175084
>>> 4 -0.8876400367987355
>>> 5 -0.804481428399949
>>> 6 -0.7013677240075332
>>> 7 -0.5811011443144513
>>> 8 -0.44612926127688374
>>> 9 -0.3002298909230939

Example

_NOTE 1: to preserve the zero-dependencies of lfo, examples/demos will be published in a dedicated package lfo_demos, which is currently in the making but not published yet.

_NOTE 2: This example requires pygame-ce, but the code should be straight forward enough to be directly translated to other frameworks like pyglet.

NOTE 3: Please don't use the badly maintained pygame project anymore.

#!/bin/env python3

import pygame
import pygame._sdl2 as sdl2

from lfo import LFO

TITLE = 'pygame minimal template'
SCREEN = pygame.Rect(0, 0, 1024, 768)
FPS = 60
DT_MAX = 3 / FPS

clock = pygame.time.Clock()
window = pygame.Window(title=TITLE, fullscreen_desktop=True)
renderer = sdl2.Renderer(window)
renderer.logical_size = SCREEN.size

RADIUS = 256
SATTELITE_RADIUS = 32

orbit = LFO(10, sine_offset=0.0, cosine_offset=0.0)
sattelite = LFO(5, sine_offset=0.0, cosine_offset=0.0)
speedo = LFO(20, sine_attenuverter=0.3, sine_offset=1.0, cosine_attenuverter=0.3, cosine_offset=1.0)
color = LFO(3)

rect = pygame.Rect(0, 0, 10, 10)

running = True
while running:
    dt = min(clock.tick(FPS) / 1000.0, DT_MAX)

    for e in pygame.event.get():
        if e.type == pygame.QUIT:
            running = False
        elif e.type == pygame.KEYDOWN:
            if e.key == pygame.K_ESCAPE:
                running = False

    renderer.draw_color = 'darkslategrey'
    renderer.clear()

    renderer.draw_color = ('red', 'green')[int(color.square)]

    renderer.draw_rect(rect.move_to(center=SCREEN.center))

    x = orbit.cosine * RADIUS + SCREEN.centerx
    y = orbit.sine * RADIUS + SCREEN.centery
    renderer.draw_color = ('yellow', 'magenta')[int(color.square)]
    renderer.draw_rect(rect.move_to(center=(round(x), round(y))))

    x += sattelite.cosine * SATTELITE_RADIUS
    y += sattelite.sine * SATTELITE_RADIUS
    renderer.draw_color = ('cyan', 'orange')[int(color.square)]
    renderer.draw_rect(rect.move_to(center=(round(x), round(y))))

    sattelite.period = speedo.sine

    x = orbit.sine * 2 * RADIUS + SCREEN.centerx + sattelite.sine * SATTELITE_RADIUS
    y = orbit.cosine * 2 * RADIUS + SCREEN.centery + sattelite.cosine * SATTELITE_RADIUS
    renderer.draw_color = ('green', 'red')[int(color.square)]
    renderer.draw_rect(rect.scale_by(2).move_to(center=(round(x), round(y))))


    renderer.present()

    window.title = f'{TITLE} - time={pygame.time.get_ticks()/1000:.2f}  fps={clock.get_fps():.2f}'

Installation

Note that this module is in very early draft, and while it is already useful and functional, things might change...

Installation via pip

lfo is available on pypi and can be installed by

pip install lfo

(You are using venvs, right? RIGHT?!?)

lfo comes with no additional requirements, but it is very good to create input for easing functions from rpeasings. lfo was primarily created as a tool for my pygame projects, but it's a generalized control tool that can be used in many different scenarios and environments.

Pre-built wheels for Windows, Mac and Linux...

...are available on the github releases page at

https://github.com/dickerdackel/lfo/releases

Install from source

Again, use a venv!

lfo is packaged following the python packaging authority at https://www.pypa.io/

You can simply clone the github repo from https://github.com/dickerdackel/lfo

Then change into this directory and install the package - INTO YOUR VENV! - with pip install .

# clone repo
dickerdackel@minime:~$ git clone https://github.com/dickerdackel/lfo
...

# create venv
dickerdackel@minime:~/lfo$ python3 -m venv --prompt lfo .venv

# activate venv
dickerdackel@minime:~/lfo$ . .venv/bin/activate

# install lfo
(lfo) dickerdackel@minime:~/lfo$ pip install .

(lfo) dickerdackel@minime:~/lfo$

Support / Contributing

Issues can be opened on Github

Credits / Acknowledgements

  • Thanks to all the modular synth vendors that showed me the versatility of LFOs

License

This software is provided under the MIT license.

See LICENSE file for details.

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

lfo-0.0.2.tar.gz (17.8 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

lfo-0.0.2-cp313-cp313-win_amd64.whl (16.6 kB view details)

Uploaded CPython 3.13Windows x86-64

lfo-0.0.2-cp313-cp313-win32.whl (16.1 kB view details)

Uploaded CPython 3.13Windows x86

lfo-0.0.2-cp313-cp313-musllinux_1_2_x86_64.whl (38.2 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

lfo-0.0.2-cp313-cp313-musllinux_1_2_i686.whl (35.9 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ i686

lfo-0.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (37.7 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

lfo-0.0.2-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl (33.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ i686

lfo-0.0.2-cp313-cp313-macosx_11_0_arm64.whl (14.6 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

lfo-0.0.2-cp313-cp313-macosx_10_13_x86_64.whl (14.3 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

lfo-0.0.2-cp312-cp312-win_amd64.whl (16.5 kB view details)

Uploaded CPython 3.12Windows x86-64

lfo-0.0.2-cp312-cp312-win32.whl (16.1 kB view details)

Uploaded CPython 3.12Windows x86

lfo-0.0.2-cp312-cp312-musllinux_1_2_x86_64.whl (38.2 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

lfo-0.0.2-cp312-cp312-musllinux_1_2_i686.whl (35.9 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ i686

lfo-0.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (37.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

lfo-0.0.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl (33.9 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ i686

lfo-0.0.2-cp312-cp312-macosx_11_0_arm64.whl (14.6 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

lfo-0.0.2-cp312-cp312-macosx_10_13_x86_64.whl (14.3 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

lfo-0.0.2-cp311-cp311-win_amd64.whl (16.5 kB view details)

Uploaded CPython 3.11Windows x86-64

lfo-0.0.2-cp311-cp311-win32.whl (16.1 kB view details)

Uploaded CPython 3.11Windows x86

lfo-0.0.2-cp311-cp311-musllinux_1_2_x86_64.whl (37.3 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

lfo-0.0.2-cp311-cp311-musllinux_1_2_i686.whl (35.4 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ i686

lfo-0.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (36.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

lfo-0.0.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (33.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ i686

lfo-0.0.2-cp311-cp311-macosx_11_0_arm64.whl (14.6 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

lfo-0.0.2-cp311-cp311-macosx_10_9_x86_64.whl (14.3 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

lfo-0.0.2-cp310-cp310-win_amd64.whl (16.5 kB view details)

Uploaded CPython 3.10Windows x86-64

lfo-0.0.2-cp310-cp310-win32.whl (16.1 kB view details)

Uploaded CPython 3.10Windows x86

lfo-0.0.2-cp310-cp310-musllinux_1_2_x86_64.whl (37.2 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

lfo-0.0.2-cp310-cp310-musllinux_1_2_i686.whl (35.3 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ i686

lfo-0.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (36.8 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

lfo-0.0.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (33.3 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ i686

lfo-0.0.2-cp310-cp310-macosx_11_0_arm64.whl (14.6 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

lfo-0.0.2-cp310-cp310-macosx_10_9_x86_64.whl (14.3 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

Details for the file lfo-0.0.2.tar.gz.

File metadata

  • Download URL: lfo-0.0.2.tar.gz
  • Upload date:
  • Size: 17.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for lfo-0.0.2.tar.gz
Algorithm Hash digest
SHA256 07c06102ad4e64e81711eb166771983913cd8e01d6f7c3f5371f558613745082
MD5 1149f28888840e4510aa4fd45308bc44
BLAKE2b-256 0a15c22490612f6d0e6673a7a7dfea50855c969fd0573a64f9a64e8b0fb1b6cf

See more details on using hashes here.

File details

Details for the file lfo-0.0.2-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: lfo-0.0.2-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 16.6 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for lfo-0.0.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 1aebb505e768208f9c7e866e93a7514e6c1ead21425e8592590b9656a276203a
MD5 c59613eab48b0d5678a25fc7a4705da3
BLAKE2b-256 6852370f7bbc52f2c1e2fa028e24a2a32153d212621286ab56a8936bc0630032

See more details on using hashes here.

File details

Details for the file lfo-0.0.2-cp313-cp313-win32.whl.

File metadata

  • Download URL: lfo-0.0.2-cp313-cp313-win32.whl
  • Upload date:
  • Size: 16.1 kB
  • Tags: CPython 3.13, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for lfo-0.0.2-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 29f758bbb363c6d528c8e43fb6ca40fcab9135ed76f65455fd903c6d3d00bda7
MD5 569cb564ffcd8f866b2900fcfb169530
BLAKE2b-256 b31eacbae06ac303e8480ebee6bf97b4a8a03a84864c0e9ea94ea4877a2fe5cc

See more details on using hashes here.

File details

Details for the file lfo-0.0.2-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for lfo-0.0.2-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 43a62a87c3dc958cd0fad08e1d1fb98839e718bdef5c76f20eda0e901bd71874
MD5 dc05d1c4bcfb1e1fa7d734af45b1efe3
BLAKE2b-256 cf681ef2309d83f79a4902bca6451f4dc42cd97a04eb34e76601ecb5761b7831

See more details on using hashes here.

File details

Details for the file lfo-0.0.2-cp313-cp313-musllinux_1_2_i686.whl.

File metadata

  • Download URL: lfo-0.0.2-cp313-cp313-musllinux_1_2_i686.whl
  • Upload date:
  • Size: 35.9 kB
  • Tags: CPython 3.13, musllinux: musl 1.2+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for lfo-0.0.2-cp313-cp313-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 f5ff5358b40643057586cfc43dad1b799247643de719fffb43de3871af69bdea
MD5 aafcee23c6942dde60da9a2fb51124bc
BLAKE2b-256 2c333f6795a5e7d908cbf505dfb95971579cccb060a46fd4a02782a466039c0d

See more details on using hashes here.

File details

Details for the file lfo-0.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for lfo-0.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 def36a959b326a9e3773faa161449e540e64aa461f8ada53310b690442e8cfc4
MD5 35059cc9c79995cac84d040b998d432d
BLAKE2b-256 0e060ab2ca45538ca10dd4421a9841bdf0241b77d5f2ed634a6b66581d1f0e2a

See more details on using hashes here.

File details

Details for the file lfo-0.0.2-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for lfo-0.0.2-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 7c486e3199a0b86ee2cebfe001e7aeee0904925122eadd5cbb0502ad5897bc26
MD5 cfa9f48e88d5fabdd2a23bf2df463586
BLAKE2b-256 ffb38a21bb6d19702427ffa7146797452b857b582425c2d8b575434436af20d3

See more details on using hashes here.

File details

Details for the file lfo-0.0.2-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

  • Download URL: lfo-0.0.2-cp313-cp313-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 14.6 kB
  • Tags: CPython 3.13, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for lfo-0.0.2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3fe529b6c46265d653a47c1e6a094ecc93d91af602636809ef0c0cdfa096d14c
MD5 9be288d33e8c1d1e6fb8359d7ed2a78a
BLAKE2b-256 38d1e01d45c4a237455b1d790f672148cd1959fc8e898ef7e3e3dbec62edd8a8

See more details on using hashes here.

File details

Details for the file lfo-0.0.2-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for lfo-0.0.2-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 a91f599e13219f14a421dcda3e442338f9e73a344856fbb540d02b5083edcdca
MD5 31291b0809b8919bb5b567b4221cee77
BLAKE2b-256 8cffd3d3a858a67ab5978bba16e20daf70e8ac84a96a1bf11b5fed603a129dcd

See more details on using hashes here.

File details

Details for the file lfo-0.0.2-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: lfo-0.0.2-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 16.5 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for lfo-0.0.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 e9eb6fe26ddeb900358c8a3e6ce8f1432962e13395673f6ce752f9c0cd8b934a
MD5 19ef688a20cd202c4297ed6d7f63a35b
BLAKE2b-256 8c50a1ad77fce55c2afa2215f575183929280b4a4c466bc4b21e20cf807c1ea9

See more details on using hashes here.

File details

Details for the file lfo-0.0.2-cp312-cp312-win32.whl.

File metadata

  • Download URL: lfo-0.0.2-cp312-cp312-win32.whl
  • Upload date:
  • Size: 16.1 kB
  • Tags: CPython 3.12, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for lfo-0.0.2-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 4868d8d77d532294b800978a93c8438e40abf9f84f4bd7359a9e51fe1b424e3e
MD5 75500c006ea06f4d227d44b0ea6ca414
BLAKE2b-256 f1a9c19fa595de459570d60fd548d948f3ea67aa0d3c6b40f0208b383fbe1658

See more details on using hashes here.

File details

Details for the file lfo-0.0.2-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for lfo-0.0.2-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b73273a74024f4ed7b700400724664c6a97ec85dcecf9a9377e51ef4bf703060
MD5 c21edd5b8a5952ea53d0b3e2ab100687
BLAKE2b-256 7529133bba9ab43810b2c8476f32cba152295a0dea73a991a367ee1c42e9d650

See more details on using hashes here.

File details

Details for the file lfo-0.0.2-cp312-cp312-musllinux_1_2_i686.whl.

File metadata

  • Download URL: lfo-0.0.2-cp312-cp312-musllinux_1_2_i686.whl
  • Upload date:
  • Size: 35.9 kB
  • Tags: CPython 3.12, musllinux: musl 1.2+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for lfo-0.0.2-cp312-cp312-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 478b1de43a475df916a252e7b6891c16f47de5c6af4a0473ecf9b5673ee5596c
MD5 5bdc54c2f8fc59e9cc9eca55502632e7
BLAKE2b-256 5f5ae1cacbf1dfb3a081e9e76b33f48e2840e0f921f5af4dac2c33960ba85a1d

See more details on using hashes here.

File details

Details for the file lfo-0.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for lfo-0.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e66ec22d99a6a24013284e0b8f31b81472f76ebf62ba40003b384060897a04ea
MD5 c5c63d99a0fac895d03a910bd84eb155
BLAKE2b-256 81f56d9437ee99cefea80e2b613dc32c832e8d98d76ddfb5b193be5c04732ebc

See more details on using hashes here.

File details

Details for the file lfo-0.0.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for lfo-0.0.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 c680a7ca75d4922433bad2fcec2dd88bab1f036b061994ad206698a0086551f5
MD5 adf608c5a512db69caf6dd87443c53f3
BLAKE2b-256 1a0f55b9df597b1e7c575bb2d8e183cf01aa5a3cfcfce3cc1094fbd5ed7b812f

See more details on using hashes here.

File details

Details for the file lfo-0.0.2-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

  • Download URL: lfo-0.0.2-cp312-cp312-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 14.6 kB
  • Tags: CPython 3.12, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for lfo-0.0.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d146d10254c8c5582f07119821331af732e2192db8300bc26abd51b91d063e8e
MD5 a9691dbc22220c2c9da101b85d4bd112
BLAKE2b-256 f34bf54687a042de9ee455bba2025d25449728b045c914c91d87ffe64a205958

See more details on using hashes here.

File details

Details for the file lfo-0.0.2-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for lfo-0.0.2-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 66c7df59ea628627e3310fed2e3a672d9c3730aab194915f990c49a334e19781
MD5 d79e686ff749624a5b1e9e7262128117
BLAKE2b-256 9e4d890d744d3157068fe4d3a73cc69e18c8eaeeb3ed1edd69fb714328915a02

See more details on using hashes here.

File details

Details for the file lfo-0.0.2-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: lfo-0.0.2-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 16.5 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for lfo-0.0.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 fc54e2fe2eab0a4b4756ea4b4f9e1bd0a6a386bef3286ac4db929de5cc6d34de
MD5 cb35a08a1b3013ce5b473f2f0c51f49f
BLAKE2b-256 09dea8d9d326519d672594cf1972dd4a5915ecbc889777ca078d199630ea9d89

See more details on using hashes here.

File details

Details for the file lfo-0.0.2-cp311-cp311-win32.whl.

File metadata

  • Download URL: lfo-0.0.2-cp311-cp311-win32.whl
  • Upload date:
  • Size: 16.1 kB
  • Tags: CPython 3.11, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for lfo-0.0.2-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 3538acf51dc531b845f8551d5717dd07d2b4048d49285578b84d12a0256d5027
MD5 565690fbec15fb1235e8091af7c1684a
BLAKE2b-256 866130253a680f25d4a4338a9197368ae64d1adcead5c1b0de850a0cfb0cfd09

See more details on using hashes here.

File details

Details for the file lfo-0.0.2-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for lfo-0.0.2-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c8a85732bda0b686efcdfcf3f0d5fc63bc8316e1cbcc8965f0a7a36a112e9253
MD5 9a7beceb1fbdfa870686bc4d2f213cb9
BLAKE2b-256 0a23d046b91e1e875854adbbbe9de17d813b05805b79ea3582afa6c0cdbc039f

See more details on using hashes here.

File details

Details for the file lfo-0.0.2-cp311-cp311-musllinux_1_2_i686.whl.

File metadata

  • Download URL: lfo-0.0.2-cp311-cp311-musllinux_1_2_i686.whl
  • Upload date:
  • Size: 35.4 kB
  • Tags: CPython 3.11, musllinux: musl 1.2+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for lfo-0.0.2-cp311-cp311-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 a911044249cf36475518a422b5bf62712664c760670b9d8b58d3d292313857e9
MD5 9b68e7028515427502fb6d57a91d41a4
BLAKE2b-256 a742e596a0f8c59df6da8ca3118734ae2766e276644e23dc7d62d6dd3657e36d

See more details on using hashes here.

File details

Details for the file lfo-0.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for lfo-0.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 686b666ab9a707568eb563576c58ba3287cdeef1b1b393aa1cf4ae0f91777cb3
MD5 f6506d97832f9df88a41ee71f3a7eada
BLAKE2b-256 a33d3aa5088d40001b982e7cc62e962b25339cfcc569b9b5b811e263cb98fdde

See more details on using hashes here.

File details

Details for the file lfo-0.0.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for lfo-0.0.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 5879eb401ba5bad9025cff476f044b417ca2314175d51ce320b56a4d39d02a4e
MD5 483ee2dfad0afd73be142d44cb1f31f9
BLAKE2b-256 1572c0688d9e7a3bb58ad37d67c0c9d646615e764a77aa6262cbd9bd829cfd87

See more details on using hashes here.

File details

Details for the file lfo-0.0.2-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

  • Download URL: lfo-0.0.2-cp311-cp311-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 14.6 kB
  • Tags: CPython 3.11, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for lfo-0.0.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e3515258c12b4531d61b76fcfc8cdbdc03f297f9f6e840bdc158fbe2cd545786
MD5 aedfe10c584053f7731609c109151de0
BLAKE2b-256 eb6a2361e885f62ef6e078e9d64808d52079d3229ccaf2a684dfb6dc7440c9cc

See more details on using hashes here.

File details

Details for the file lfo-0.0.2-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for lfo-0.0.2-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 154e5a6c09dae4532097437ce2aea3ed662e3378ae1a3fc61cea9253fafe48d8
MD5 e273188e11a7e279c3d0d3d667ae5dd2
BLAKE2b-256 f37716bfc22ec7b5122dae1f2117ac268ec1b41fd262c1d0488176c519770fb7

See more details on using hashes here.

File details

Details for the file lfo-0.0.2-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: lfo-0.0.2-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 16.5 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for lfo-0.0.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 aaee5788bb0142379c2431307da528079c6ea52186d0300168525b1c77da37b9
MD5 b434d6d90d3d6b43195e5662a4e25a2b
BLAKE2b-256 ea248c676e1aa2d57fe802e3b314e1497848a0e881f38521211b33ab99a5a926

See more details on using hashes here.

File details

Details for the file lfo-0.0.2-cp310-cp310-win32.whl.

File metadata

  • Download URL: lfo-0.0.2-cp310-cp310-win32.whl
  • Upload date:
  • Size: 16.1 kB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for lfo-0.0.2-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 e44e792759ca7c59ea3c36c644c407e553942663842189328008d6be7048caf7
MD5 6a0f07e703d4074f7d0a198398e2efb7
BLAKE2b-256 b6d312d443385204173a678d0ca9318e68d31bbbe86cdbf4ea09e8f9d80c94d9

See more details on using hashes here.

File details

Details for the file lfo-0.0.2-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for lfo-0.0.2-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 2478b2e5921d960b40267ae05c11a9d92057b09fd06767def243c6b4a5920cba
MD5 f7e45e3c6c372db642431ae3e69f4ffb
BLAKE2b-256 7d9ffe737287eb0c1fba29696baf181cb36e5ba03c1ce4ca799d8cae577a6ef7

See more details on using hashes here.

File details

Details for the file lfo-0.0.2-cp310-cp310-musllinux_1_2_i686.whl.

File metadata

  • Download URL: lfo-0.0.2-cp310-cp310-musllinux_1_2_i686.whl
  • Upload date:
  • Size: 35.3 kB
  • Tags: CPython 3.10, musllinux: musl 1.2+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for lfo-0.0.2-cp310-cp310-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 3d901307288001314add2354b4a87bf83b0308ed65d563fd0769e59245817e30
MD5 8ef286a277bb8cf53adf5b2c5123f9c2
BLAKE2b-256 2d8196d13c57605e3001f0e3f67c6707943da7481181fef74c66f3321c292d5c

See more details on using hashes here.

File details

Details for the file lfo-0.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for lfo-0.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8231b3b72fca5abf4e05f06eeb8b331731e804a1ef9ed191a58939870a51c8e0
MD5 5e48b35af8b10deb12b3f99483f79104
BLAKE2b-256 db478bdb5fd3a4075916b45f7a524fb56ec5024327e0cada006314b35a8af24c

See more details on using hashes here.

File details

Details for the file lfo-0.0.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for lfo-0.0.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 72baf4d01a1dd147df8e40b00bbc4c356a4b22b76535cf3f7f787c975d08babc
MD5 27d50b751a14332cad9622ac4df57e4e
BLAKE2b-256 bd5cdf4bb3ede38a977aab34ff0b24b2b23c193f10f989980043ef351bd9fa09

See more details on using hashes here.

File details

Details for the file lfo-0.0.2-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

  • Download URL: lfo-0.0.2-cp310-cp310-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 14.6 kB
  • Tags: CPython 3.10, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for lfo-0.0.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 962b38a3d4c811c1e77146d698450cbfc48b31140219efa14ce2d8166bd76320
MD5 3ffaefb063026dd16aa660527246d0c1
BLAKE2b-256 2f5cfb1be3b88f6ef2941ae2b07c5cba4bedd7d825f03dada21580839046339b

See more details on using hashes here.

File details

Details for the file lfo-0.0.2-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for lfo-0.0.2-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 9690a8f5fb4e96af13b4cf873e79cd04516af3878d9c4edf9665ac19945d548b
MD5 12cb444297e0ed8b6cfb2f8fe66b6883
BLAKE2b-256 f8bef4c993e2d2e300cd2951a4f6426f5fcb7e31d4eae1ca56b1a6650d3c7138

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page