Skip to main content

A Python API for SuperCollider

Project description

Supriya

Supriya is a Python API for SuperCollider.

Supriya lets you:

Installation

Get SuperCollider from http://supercollider.github.io/.

Get Supriya from PyPI:

pip install supriya

... or from source:

git clone https://github.com/josiah-wolf-oberholtzer/supriya.git
cd supriya/
pip install -e .

Example: Hello World!

Let's make some noise. One synthesis context, one synth, one parameter change.

>>> import supriya

Realtime

Grab a reference to a realtime server and boot it:

>>> server = supriya.Server().boot()

Add a synth, using the default SynthDef:

>>> synth = server.add_synth()

Set the synth's frequency parameter like a dictionary:

>>> synth["frequency"] = 123.45

Release the synth:

>>> synth.release()

Quit the server:

>>> server.quit()

Non-realtime

Non-realtime work looks similar to realtime, with a couple key differences.

Create a Session instead of a Server:

>>> session = supriya.Session()

Use Session.at(...) to select the desired point in time to make a mutation, and add a synth using the default SynthDef, and an explicit duration for the synth which the Session will use to terminate the synth automatically at the appropriate timestep:

>>> with session.at(0):
...     synth = session.add_synth(duration=2)
...

Select another point in time and modify the synth's frequency, just like in realtime work:

>>> with session.at(1):
...     synth["frequency"] = 123.45
...

Finally, render the session to disk:

>>> session.render(duration=3)
(0, PosixPath('/Users/josiah/Library/Caches/supriya/session-981245bde945c7550fa5548c04fb47f7.aiff'))

Example: Defining SynthDefs

Let's build a simple SynthDef for playing a sine tone with an ADSR envelope.

First, some imports:

>>> from supriya.ugens import EnvGen, Out, SinOsc
>>> from supriya.synthdefs import Envelope, synthdef

We'll define a function and decorate it with the synthdef decorator:

>>> @synthdef()
... def simple_sine(frequency=440, amplitude=0.1, gate=1):
...     sine = SinOsc.ar(frequency=frequency) * amplitude
...     envelope = EnvGen.kr(envelope=Envelope.adsr(), gate=gate, done_action=2)
...     Out.ar(bus=0, source=[sine * envelope] * 2)
...

This results not in a function definition, but in the creation of a SynthDef object:

>>> simple_sine
<SynthDef: simple_sine>

... which we can print to dump out its structure:

>>> print(simple_sine)
synthdef:
    name: simple_sine
    ugens:
    -   Control.kr: null
    -   SinOsc.ar:
            frequency: Control.kr[1:frequency]
            phase: 0.0
    -   BinaryOpUGen(MULTIPLICATION).ar/0:
            left: SinOsc.ar[0]
            right: Control.kr[0:amplitude]
    -   EnvGen.kr:
            gate: Control.kr[2:gate]
            level_scale: 1.0
            level_bias: 0.0
            time_scale: 1.0
            done_action: 2.0
            envelope[0]: 0.0
            envelope[1]: 3.0
            envelope[2]: 2.0
            envelope[3]: -99.0
            envelope[4]: 1.0
            envelope[5]: 0.01
            envelope[6]: 5.0
            envelope[7]: -4.0
            envelope[8]: 0.5
            envelope[9]: 0.3
            envelope[10]: 5.0
            envelope[11]: -4.0
            envelope[12]: 0.0
            envelope[13]: 1.0
            envelope[14]: 5.0
            envelope[15]: -4.0
    -   BinaryOpUGen(MULTIPLICATION).ar/1:
            left: BinaryOpUGen(MULTIPLICATION).ar/0[0]
            right: EnvGen.kr[0]
    -   Out.ar:
            bus: 0.0
            source[0]: BinaryOpUGen(MULTIPLICATION).ar/1[0]
            source[1]: BinaryOpUGen(MULTIPLICATION).ar/1[0]

Now let's boot the server:

>>> server = supriya.Server().boot()

... add our SynthDef to it explicitly:

>>> server.add_synthdef(simple_sine)

... make a synth using our new SynthDef:

>>> synth = server.add_synth(simple_sine)

...release it:

>>> synth.release()

...and quit:

>>> server.quit()

Example: SynthDef Builders

Let's build a simple SynthDef for playing an audio buffer as a one-shot, with panning and speed controls.

This time we'll use Supriya's SynthDefBuilder context manager. It's more verbose than decorating a function, but it also gives more flexibility. For example, the context manager can be passed around from function to function to add progressively more complexity. The synthdef decorator uses SynthDefBuilder under the hood.

First, some imports, just to save horizontal space:

>>> from supriya.ugens import Out, Pan2, PlayBuf

Second, define a builder with the control parameters we want for our SynthDef:

>>> builder = supriya.SynthDefBuilder(
...     amplitude=1, buffer_id=0, out=0, panning=0.0, rate=1.0
... )

Third, use the builder as a context manager. Unit generators defined inside the context will be added automatically to the builder:

>>> with builder:
...     player = PlayBuf.ar(
...         buffer_id=builder["buffer_id"],
...         done_action=supriya.DoneAction.FREE_SYNTH,
...         rate=builder["rate"],
...     )
...     panner = Pan2.ar(
...         source=player,
...         position=builder["panning"],
...         level=builder["amplitude"],
...     )
...     _ = Out.ar(bus=builder["out"], source=panner)
...

Finally, build the SynthDef:

>>> buffer_player = builder.build()

Let's print its structure. Note that Supriya has given the SynthDef a name automatically by hashing its structure:

>>> print(buffer_player)
synthdef:
    name: a056603c05d80c575333c2544abf0a05
    ugens:
    -   Control.kr: null
    -   PlayBuf.ar:
            buffer_id: Control.kr[1:buffer_id]
            done_action: 2.0
            loop: 0.0
            rate: Control.kr[4:rate]
            start_position: 0.0
            trigger: 1.0
    -   Pan2.ar:
            level: Control.kr[0:amplitude]
            position: Control.kr[3:panning]
            source: PlayBuf.ar[0]
    -   Out.ar:
            bus: Control.kr[2:out]
            source[0]: Pan2.ar[0]
            source[1]: Pan2.ar[1]

"Anonymous" SynthDefs are great! Supriya keeps track of what SynthDefs have been allocated by name, so naming them after the hash of their structure guarantees no accidental overwrites and no accidental re-allocations.

Example: Playing Samples

Boot the server and allocate a sample:

>>> server = supriya.Server().boot()
>>> buffer_ = server.add_buffer(file_path="supriya/assets/audio/birds/birds-01.wav")

Allocate a synth using the SynthDef we defined before:

>>> server.add_synth(synthdef=buffer_player, buffer_id=buffer_)
<+ Synth: 1000 a056603c05d80c575333c2544abf0a05>

The synth will play to completion and terminate itself.

Example: Performing Patterns

Supriya implements a pattern library inspired by SuperCollider's, using nested generators.

Let's import some pattern classes:

>>> from supriya.patterns import EventPattern, ParallelPattern, SequencePattern

... then define a pattern comprised of two event patterns played in parallel:

>>> pattern = ParallelPattern([
...     EventPattern(
...         frequency=SequencePattern([440, 550]),
...     ),
...     EventPattern(
...         frequency=SequencePattern([1500, 1600, 1700]),
...         delta=0.75,
...     ),
... ])

Patterns can be manually iterated over:

>>> for event in pattern:
...     event
...
CompositeEvent([
    NoteEvent(UUID('ec648473-4e7b-4a9a-9708-6893c054ac0b'), delta=0.0, frequency=440),
    NoteEvent(UUID('32b84a7d-ba7b-4508-81f3-b9f560bc34a7'), delta=0.0, frequency=1500),
], delta=0.75)
NoteEvent(UUID('412f3bf3-df75-4eb5-bc9d-3e074bfd2f46'), delta=0.25, frequency=1600)
NoteEvent(UUID('69a01ba8-4c00-4b55-905a-99f3933a6963'), delta=0.5, frequency=550)
NoteEvent(UUID('2c6a6d95-f418-4613-b213-811a442ea4c8'), delta=0.5, frequency=1700)

Patterns can be played (and stopped) in real-time contexts:

>>> server = supriya.Server().boot()
>>> player = pattern.play(provider=server)
>>> player.stop()

... or in non-realtime contexts:

>>> session = supriya.Session()
>>> _ = pattern.play(provider=session, at=0.5)
>>> print(session.to_strings(include_controls=True))
0.0:
    NODE TREE 0 group
0.5:
    NODE TREE 0 group
        1001 default
            amplitude: 0.1, frequency: 1500.0, gate: 1.0, out: 0.0, pan: 0.5
        1000 default
            amplitude: 0.1, frequency: 440.0, gate: 1.0, out: 0.0, pan: 0.5
2.0:
    NODE TREE 0 group
        1002 default
            amplitude: 0.1, frequency: 1600.0, gate: 1.0, out: 0.0, pan: 0.5
        1001 default
            amplitude: 0.1, frequency: 1500.0, gate: 1.0, out: 0.0, pan: 0.5
        1000 default
            amplitude: 0.1, frequency: 440.0, gate: 1.0, out: 0.0, pan: 0.5
2.5:
    NODE TREE 0 group
        1003 default
            amplitude: 0.1, frequency: 550.0, gate: 1.0, out: 0.0, pan: 0.5
        1002 default
            amplitude: 0.1, frequency: 1600.0, gate: 1.0, out: 0.0, pan: 0.5
3.5:
    NODE TREE 0 group
        1006 default
            amplitude: 0.1, frequency: 1700.0, gate: 1.0, out: 0.0, pan: 0.5
        1003 default
            amplitude: 0.1, frequency: 550.0, gate: 1.0, out: 0.0, pan: 0.5
        1002 default
            amplitude: 0.1, frequency: 1600.0, gate: 1.0, out: 0.0, pan: 0.5
4.0:
    NODE TREE 0 group
        1006 default
            amplitude: 0.1, frequency: 1700.0, gate: 1.0, out: 0.0, pan: 0.5
        1003 default
            amplitude: 0.1, frequency: 550.0, gate: 1.0, out: 0.0, pan: 0.5
4.5:
    NODE TREE 0 group
        1006 default
            amplitude: 0.1, frequency: 1700.0, gate: 1.0, out: 0.0, pan: 0.5
5.5:
    NODE TREE 0 group

Example: Asyncio

Supriya also supports asyncio, with async servers, providers and clocks.

Async servers expose a minimal interface (effectively just .boot(), .send() and .quit()), and don't support the rich stateful entities their non-async siblings do (e.g. Group, Synth, Bus, Buffer). To split the difference, we'll wrap the async server with a Provider that exposes an API of common actions and returns lightweight stateless proxies we can use as references. The proxies know their IDs and provide convenience functions, but otherwise don't keep track of changes reported by the server.

Let's grab a couple imports:

import asyncio, random

... and get a little silly.

First we'll define an async clock callback. It takes a Provider and a list of buffer proxies created elsewhere by that provider, picks a random buffer and uses the buffer_player SynthDef we defined earlier to play it (with a lot of randomized parameters). Finally, it returns a random delta between 0 beats and 2/4:

async def callback(clock_context, provider, buffer_proxies):
    print("playing a bird...")
    buffer_proxy = random.choice(buffer_proxies)
    async with provider.at():
        provider.add_synth(
            synthdef=buffer_player,
            buffer_id=buffer_proxy,
            amplitude=random.random(),
            rate=random.random() * 2,
            panning=(random.random() * 2) - 1,
        )
    return random.random() * 0.5

Next we'll define our top-level async function. This one boots the server, creates the Provider we'll use to interact with it, loads in all of Supriya's built-in bird samples, schedules our clock callback with an async clock, waits 10 seconds and shuts down:

async def serve():
    print("preparing the birds...")
    # Boot an async server
    server = await supriya.AsyncServer().boot(
        port=supriya.osc.utils.find_free_port(),
    )
    # Create a provider for higher-level interaction
    provider = supriya.Provider.from_context(server)
    # Use the provider as a context manager and load some buffers
    async with provider.at():
        buffer_proxies = [
            provider.add_buffer(file_path=bird_sample)
            for bird_sample in supriya.Assets["audio/birds/*"]
        ]
    # Create an async clock
    clock = supriya.AsyncClock()
    # Schedule our bird-playing clock callback to run immediately
    clock.schedule(callback, args=[provider, buffer_proxies])
    # Start the clock
    await clock.start()
    # Wait 10 seconds
    await asyncio.sleep(10)
    # Stop the clock
    await clock.stop()
    # And quit the server
    await server.quit()
    print("... done!")

Let's make some noise:

>>> asyncio.run(serve())
preparing the birds...
playing a bird...
playing a bird...
playing a bird...
playing a bird...
playing a bird...
playing a bird...
playing a bird...
playing a bird...
playing a bird...
playing a bird...
playing a bird...
playing a bird...
playing a bird...
playing a bird...
playing a bird...
playing a bird...
playing a bird...
playing a bird...
playing a bird...
playing a bird...
playing a bird...
playing a bird...
playing a bird...
... done!

Working async means we can hook into other interesting projects like python-prompt-toolkit, aiohttp and pymonome.

License

This library is made available under the terms of the MIT license.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

supriya-22.9b1.tar.gz (4.5 MB view details)

Uploaded Source

Built Distributions

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

supriya-22.9b1-cp310-cp310-win_amd64.whl (1.2 MB view details)

Uploaded CPython 3.10Windows x86-64

supriya-22.9b1-cp310-cp310-win32.whl (1.2 MB view details)

Uploaded CPython 3.10Windows x86

supriya-22.9b1-cp310-cp310-musllinux_1_1_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ x86-64

supriya-22.9b1-cp310-cp310-musllinux_1_1_i686.whl (2.7 MB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ i686

supriya-22.9b1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

supriya-22.9b1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (2.1 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

supriya-22.9b1-cp310-cp310-macosx_10_9_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

supriya-22.9b1-cp39-cp39-win_amd64.whl (1.2 MB view details)

Uploaded CPython 3.9Windows x86-64

supriya-22.9b1-cp39-cp39-win32.whl (1.2 MB view details)

Uploaded CPython 3.9Windows x86

supriya-22.9b1-cp39-cp39-musllinux_1_1_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.9musllinux: musl 1.1+ x86-64

supriya-22.9b1-cp39-cp39-musllinux_1_1_i686.whl (2.8 MB view details)

Uploaded CPython 3.9musllinux: musl 1.1+ i686

supriya-22.9b1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

supriya-22.9b1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (2.1 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

supriya-22.9b1-cp39-cp39-macosx_10_9_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

supriya-22.9b1-cp38-cp38-win_amd64.whl (1.2 MB view details)

Uploaded CPython 3.8Windows x86-64

supriya-22.9b1-cp38-cp38-win32.whl (1.2 MB view details)

Uploaded CPython 3.8Windows x86

supriya-22.9b1-cp38-cp38-musllinux_1_1_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.8musllinux: musl 1.1+ x86-64

supriya-22.9b1-cp38-cp38-musllinux_1_1_i686.whl (2.8 MB view details)

Uploaded CPython 3.8musllinux: musl 1.1+ i686

supriya-22.9b1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

supriya-22.9b1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (2.2 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

supriya-22.9b1-cp38-cp38-macosx_10_9_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

File details

Details for the file supriya-22.9b1.tar.gz.

File metadata

  • Download URL: supriya-22.9b1.tar.gz
  • Upload date:
  • Size: 4.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.14

File hashes

Hashes for supriya-22.9b1.tar.gz
Algorithm Hash digest
SHA256 71eea8b4bcf236fc9137eceaa82aa3254e4a49589cca2fb2349278a46003dc54
MD5 ed94388ed7aa730bf0bcc47714ea84b2
BLAKE2b-256 f29f36be1372c1465cb905e10c5b12678929df7ffec22e5ab0dac1443dbbce65

See more details on using hashes here.

File details

Details for the file supriya-22.9b1-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: supriya-22.9b1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.14

File hashes

Hashes for supriya-22.9b1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 d3128841d8e597427d5c5718db7cbbc1b368bb8ccced9c79475533f17c291273
MD5 f6385bdba788d598946fa088578bf68d
BLAKE2b-256 c673c240e287ada24b1fbb95de30a583c7cac2fc7147b8aa32be0e9bd515bf81

See more details on using hashes here.

File details

Details for the file supriya-22.9b1-cp310-cp310-win32.whl.

File metadata

  • Download URL: supriya-22.9b1-cp310-cp310-win32.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.14

File hashes

Hashes for supriya-22.9b1-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 8cce38467d68c1fc3acbebcd5228b03db053930a8c23140d4e6b8b72931e4e38
MD5 ed6616a3d07acc5ebab7863436392f80
BLAKE2b-256 0ad4c89e25257c337b02e4833490f7e864c4824bfb27ce2041baca49aa83b802

See more details on using hashes here.

File details

Details for the file supriya-22.9b1-cp310-cp310-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for supriya-22.9b1-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 beab8623d1729f716f4b9bbea6cef1e522407642c51b369868ce84ebdab02be4
MD5 e7ff0f2b3b7d6603cfd046524eb83dc9
BLAKE2b-256 d03bcac4e69c6ca6259b3458554c9b79f3562ab9638c5e6fd9465312a4e9dbe5

See more details on using hashes here.

File details

Details for the file supriya-22.9b1-cp310-cp310-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for supriya-22.9b1-cp310-cp310-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 b267aaba8f3d1da4b068ea4872c37f0d8dd2c81bdf52f1fdb3f5bd9b31d1d5cf
MD5 4361821255113bfc8254c1c18ef9d618
BLAKE2b-256 accae686dd45aa4cc7e462a12e508eaf8228b968aa254f4f3d37cdfd003c32d7

See more details on using hashes here.

File details

Details for the file supriya-22.9b1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for supriya-22.9b1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f00638218c9b18cfee9c16a09d43c3c47bf768a543edfb6c6d63ba0daff075a8
MD5 b987187db1b0e797487a86dd81523073
BLAKE2b-256 d47f5e58f53768f1c7f14f8a42228496299da4c7e4dea70c85d3d80658fd7498

See more details on using hashes here.

File details

Details for the file supriya-22.9b1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for supriya-22.9b1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 9c1a3d969296fce081f597742e7cd063eacbaeb2f040a76e3ad808cd2b3222dd
MD5 338df3e80f5b21a0365be12156de5c6f
BLAKE2b-256 3caf7766662c64b700a00be837ce6395a39a203f30b860a4c23eb3d073eefdcf

See more details on using hashes here.

File details

Details for the file supriya-22.9b1-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for supriya-22.9b1-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 f30edd13d591951fd3b084535fb28463f831ff1309b0a3a15508a1badac173e3
MD5 1fd3f03cdd3f20ffd816912b2ff6b5de
BLAKE2b-256 9d77118e05ef9d0f2cce34044aa24a55abbd34f03014ed5d7ac0abde64786b07

See more details on using hashes here.

File details

Details for the file supriya-22.9b1-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: supriya-22.9b1-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.14

File hashes

Hashes for supriya-22.9b1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 857b285f8d1747aee23dd0f0b7d9aca1f9db00137b106517ab290e895a766bda
MD5 fdc585c44928a132079000708e35c9ce
BLAKE2b-256 f3c954580faef285cb93d646d8071283b80b86137900d8b5ca2ae62aef81c89e

See more details on using hashes here.

File details

Details for the file supriya-22.9b1-cp39-cp39-win32.whl.

File metadata

  • Download URL: supriya-22.9b1-cp39-cp39-win32.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.14

File hashes

Hashes for supriya-22.9b1-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 f65b583babe7021d2ec41e4bbc4ca405e8e73e77f7966ef4c1d597ccc06af4d3
MD5 142876c869cee12e6ebe85db4517a04d
BLAKE2b-256 e05a3d0aedb2632c4e5f9e04a42eb882bfa2c2d9972afea85c8b702fc95d6e21

See more details on using hashes here.

File details

Details for the file supriya-22.9b1-cp39-cp39-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for supriya-22.9b1-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 c04ff4473a6bacadc1918ff22d5f1fa9824a826060befc9674d69d3752f25696
MD5 b799ebeae767763e701cfb1e3248454a
BLAKE2b-256 7f9e0951899bae0afbd3d526bf57bb50c3089d357a3dcdd3b20722eb84e380e6

See more details on using hashes here.

File details

Details for the file supriya-22.9b1-cp39-cp39-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for supriya-22.9b1-cp39-cp39-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 dec643eea29290a60904a66d230df9f670488d6836dae6c6ce62d0acddba4734
MD5 aebf928febb9ea7f50374b475054c1bd
BLAKE2b-256 5221625a8a42ea67778848f8925e99dd8fde5b03a541216f1d036e33dd84d379

See more details on using hashes here.

File details

Details for the file supriya-22.9b1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for supriya-22.9b1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5d3703f4e62eeaece8b0f622ae9ddd092dd4e756ed47ff29957d0a0e64c3d952
MD5 87bb43ebd58af76ebaa039bd507b5f1f
BLAKE2b-256 d947599709e3314d6473d2a6d4fa323907f04720e374f80417e434e7cc9a0eeb

See more details on using hashes here.

File details

Details for the file supriya-22.9b1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for supriya-22.9b1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 085e12e4a638d8646bf7fc85262157fd4874858f192f3606413f8f2881384739
MD5 78a60dcca264fc6f685b35807451d5e3
BLAKE2b-256 3ee946592c6b9016b01b197fcc3f678030923821f20e1231ceb49b87aea243bf

See more details on using hashes here.

File details

Details for the file supriya-22.9b1-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for supriya-22.9b1-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 6ba2ff6600ce8c61c0ffd4d49d5b369059136847ead9aaa3f121ad390aa82485
MD5 ac702ee595ca93521aa937bd3fef5678
BLAKE2b-256 79d426defc9ac69ea6b2365f4c12d37ba4cf8569518bdaf05f5185a2c186688d

See more details on using hashes here.

File details

Details for the file supriya-22.9b1-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: supriya-22.9b1-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.14

File hashes

Hashes for supriya-22.9b1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 27c58560404f8f42860bb3768ea2acd2b74dacf9c0ad9efb299d3fddd242c677
MD5 116a1c1e33323e65486849e2489a68d2
BLAKE2b-256 85f5e4816294dfcd90744bf747561f287cba50cc55cb8db7877629e8f431ba10

See more details on using hashes here.

File details

Details for the file supriya-22.9b1-cp38-cp38-win32.whl.

File metadata

  • Download URL: supriya-22.9b1-cp38-cp38-win32.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.14

File hashes

Hashes for supriya-22.9b1-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 a18a5bfb8d2c6d22729af10379bc23ceeed868ae9bb3f0b9b543e1cb4fcb1b0a
MD5 3177b1525636e74fbad899d383efd0c9
BLAKE2b-256 08c448f143a69e460e08ff92c347a32a0c9ceecdd0e0c1f64109f7a8cd9aea79

See more details on using hashes here.

File details

Details for the file supriya-22.9b1-cp38-cp38-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for supriya-22.9b1-cp38-cp38-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 4a05eba221c5cc3347afbeb23d4407ec3cea0336c08ca3d017db4b053121440d
MD5 0082e4bd7493320b76ebf14aa5fe0214
BLAKE2b-256 d8ae6f23605c891adc6a2726c1a5f958a5d7e46ebd9cbcb8098d6d354302d208

See more details on using hashes here.

File details

Details for the file supriya-22.9b1-cp38-cp38-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for supriya-22.9b1-cp38-cp38-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 a67c6d24ed7761df7d51f180bf96aff94f0b8dae09c77a6b93cad9bf218da8fb
MD5 b6be6db94df37328141977352699743f
BLAKE2b-256 43775323be6b350ec0b8a5f412f970d65360fee26ae0c15e9bb53008d6fba728

See more details on using hashes here.

File details

Details for the file supriya-22.9b1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for supriya-22.9b1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8bdcb2cb290aa8bdd2e0efdcef9a0f5b8a1f6d46731142a62af640a0ca10fbec
MD5 b01f0047d4b9714a5b437095fb0bbb9d
BLAKE2b-256 e065879e36d5c27ecce25b0515d0e7c2a7c89afe6c984ceb042a29d2a5a59133

See more details on using hashes here.

File details

Details for the file supriya-22.9b1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for supriya-22.9b1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 2e343f788ca67f9a9db7bcb4d0349e22ef7de576f50ef8367e5cfcaf4111d25a
MD5 cdbd413c0ffa075b53ab70d9bf32a437
BLAKE2b-256 fe41a307860701b00361fd7605d341bf79e1a8256eb5231185dbf064d47368d0

See more details on using hashes here.

File details

Details for the file supriya-22.9b1-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for supriya-22.9b1-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 47ae9b7704aa2700a610f8e6485e6f06a839be96ae8fd3fe041a6ffb663f9936
MD5 6598212d7ec0551b7c41afd6e1198827
BLAKE2b-256 46ddff7e2f482fa78410a532c6fea0fcfd6b7be332264bb908f515f47c424b93

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