Skip to main content

Multiple dispatch in Python

Project description

Plum: Multiple Dispatch in Python

CI Coverage Status Latest Docs Code style: black

Everybody likes multiple dispatch, just like everybody likes plums.

Installation

Plum requires Python 3.6 or higher.

pip install plum-dispatch

Basic Usage

Multiple dispatch allows you to implement multiple methods for the same function, where the methods specify the types of their arguments:

from plum import dispatch

@dispatch
def f(x: str):
    return "This is a string!"
    

@dispatch
def f(x: int):
    return "This is an integer!"
>>> f("1")
'This is a string!'

>>> f(1)
'This is an integer!'

We haven't implemented a method for floats, so in that case an exception will be raised:

>>> f(1.0)
NotFoundLookupError: For function "f", signature Signature(builtins.float) could not be resolved.

Instead of implementing a method for floats, let's implement a method for all numbers:

from numbers import Number

@dispatch
def f(x: Number):
    return "This is a number!"

Since a float is a Number, f(1.0) will return "This is a number!". But an int is also a Number, so f(1) can either return "This is an integer!" or "This is a number!". The rule of multiple dispatch is that the most specific method is chosen:

>>> f(1)
'This is an integer!'

since an int is a Number, but a Number is not necessarily an int.

For a function f, all available methods can be obtained with f.methods:

>>> f.methods
{Signature(builtins.str): (<function __main__.f(x:str)>, builtins.object),
 Signature(builtins.int): (<function __main__.f(x:int)>, builtins.object),
 Signature(numbers.Number): (<function __main__.f(x:numbers.Number)>,
  builtins.object)}

In the values, the first element in the tuple is the implementation and the second element the return type.

For an excellent and way more detailed overview of multiple dispatch, see the manual of the Julia Language.

Scope of Functions

Consider the following package design.

package/__init__.py

import a
import b

package/a.py

from plum import dispatch

@dispatch
def f(x: int):
   return "int"

package/b.py

from plum import dispatch

@dispatch
def f(x: float):
   return "float"

In a design like this, the methods for f recorded by dispatch are global:

>>> from package.a import f

>>> f(1.0)
'float'

This could be what you want, but it can also be undesirable, because it means that someone could accidentally overwrite your methods. To keep your functions private, you can create new dispatchers:

package/__init__.py

import a
import b

package/a.py

from plum import Dispatcher

dispatch = Dispatcher()


@dispatch
def f(x: int):
   return "int"

package/b.py

from plum import Dispatcher

dispatch = Dispatcher()


@dispatch
def f(x: float):
   return "float"
>>> from package.a import f

>>> f(1)
'int'

>>> f(1.0)
NotFoundLookupError: For function "f", signature Signature(builtins.float) could not be resolved.

>>> from package.b import f

>>> f(1)
NotFoundLookupError: For function "f", signature Signature(builtins.int) could not be resolved.

>>> f(1.0)
'float'

Classes

You can use dispatch within classes:

from plum import dispatch

class Real:
   @dispatch
   def __add__(self, other: int):
      return "int added"
   
   @dispatch
   def __add__(self, other: float):
      return "float added"
>>> real = Real()

>>> real + 1
'int added'

>>> real + 1.0
'float added'

If you use other decorators, then dispatch must be the outermost decorator:

class Real:
   @dispatch
   @decorator
   def __add__(self, other: int):
      return "int added"

Forward References

Imagine the following design:

from plum import dispatch

class Real:
    @dispatch
    def __add__(self, other: Real):
        pass # Do something here. 

If we try to run this, we get the following error:

NameError                                 Traceback (most recent call last)
<ipython-input-1-2c6fe56c8a98> in <module>
      1 from plum import dispatch
      2
----> 3 class Real:
      4     @dispatch
      5     def __add__(self, other: Real):

<ipython-input-1-2c6fe56c8a98> in Real()
      3 class Real:
      4     @dispatch
----> 5     def __add__(self, other: Real):
      6         pass # Do something here.

NameError: name 'Real' is not defined

The problem is that name Real is not yet defined, when __add__ is defined and the type hint for other is set. To circumvent this issue, you can use a forward reference:

from plum import dispatch

class Real:
    @dispatch
    def __add__(self, other: "Real"):
        pass # Do something here. 

Note: A forward reference "A" will resolve to the next defined class A in which dispatch is used. This works fine for self references. In is recommended to only use forward references for self references. For more advanced use cases of forward references, you can use plum.type.PromisedType.

Keyword Arguments and Default Values

Default arguments can be used. The type annotation must match the default value otherwise an error is thrown. As the example below illustrates, different default values can be used for different methods:

from plum import dispatch

@dispatch
def f(x: int, y: int = 3):
    return y


@dispatch
def f(x: float, y: float = 3.0):
    return y
>>> f(1)
3

>>> f(1.0)
3.0

>>> f(1.0, 4.0)
4.0

>>> f(1.0, y=4.0)
4.0

Keyword-only arguments, separated by an asterisk from the other arguments, can also be used, but are not dispatched on.

Example:

from plum import dispatch

@dispatch
def f(x, *, option="a"):
    return option
>>> f(1)
'a'

>>> f(1, option="b")
'b'

>>> f(1, "b")  # This will not work, because `option` must be given as a keyword.
NotFoundLookupError: For function "f", signature Signature(builtins.int, builtins.str) could not be resolved.

Comparison with multipledispatch

As an alternative to Plum, there is multipledispatch, which also is a great solution. Plum was developed to provide a slightly more featureful implementation of multiple dispatch.

Like multipledispatch, Plum's caching mechanism is optimised to minimise overhead.

from multipledispatch import dispatch as dispatch_md
from plum import dispatch as dispatch_plum

@dispatch_md(int)
def f_md(x):
   return x


@dispatch_plum
def f_plum(x: int):
   return x


def f_native(x):
    return x
>>> f_md(1); f_plum(1);  # Run once to populate cache.

>>> %timeit f_native(1)
82.4 ns ± 0.162 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

>>> %timeit f_md(1)
845 ns ± 77.1 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

>>> %timeit f_plum(1)
404 ns ± 2.83 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

Plum synergises with OOP.

Consider the following snippet:

from multipledispatch import dispatch

class A:
    def f(self, x):
        return "fallback"
        

class B:
    @dispatch(int)
    def f(self, x):
        return x
>>> b = B()

>>> b.f(1)
1

>>> b.f("1")
NotImplementedError: Could not find signature for f: <str>

This behaviour might be undesirable: since B.f isn't matched, we could want A.f to be tried next. Plum supports this:

from plum import dispatch

class A:
    def f(self, x):
        return "fallback"


class B(A):
    @dispatch
    def f(self, x: int):
        return x
>>> b = B()

>>> b.f(1)
1

>>> b.f("1")
'fallback'

Plum supports forward references.

Plum supports parametric types from typing.

Plum attempts to stay close to Julia's type system.

For example, multipledispatch's union type is not a true union type:

from multipledispatch import dispatch

@dispatch((object, int), int)
def f(x, y):
    return "first"
    

@dispatch(int, object)
def f(x, y):
    return "second"
>>> f(1, 1)
'first'

Because the union of object and int is object, f(1, 1) should raise an ambiguity error! For example, compare with Julia:

julia> f(x::Union{Any, Int}, y::Int) = "first"
f (generic function with 1 method)

julia> f(x::Int, y::Any) = "second"
f (generic function with 2 methods)

julia> f(3, 3)
ERROR: MethodError: f(::Int64, ::Int64) is ambiguous. Candidates:
  f(x, y::Int64) in Main at REPL[1]:1
  f(x::Int64, y) in Main at REPL[2]:1

Plum does provide a true union type:

from typing import Union

from plum import dispatch

@dispatch
def f(x: Union[object, int], y: int):
    return "first"


@dispatch
def f(x: int, y: object):
    return "second"
>>> f(1, 1)
AmbiguousLookupError: For function "f", signature Signature(builtins.int, builtins.int) is ambiguous among the following:
  Signature(builtins.object, builtins.int) (precedence: 0)
  Signature(builtins.int, builtins.object) (precedence: 0)

Just to sanity check that things are indeed working correctly:

>>> f(1.0, 1)
'first'

>>> f(1, 1.0)
'second'

Plum implements method precedence.

Method precedence can be a very powerful tool to simplify more complicated designs.

Plum provides generic convert and promote functions.

Type System

Union Types

typing.Union can be used to instantiate union types:

from typing import Union

from plum import dispatch

@dispatch
def f(x):
    return "fallback"


@dispatch
def f(x: Union[int, str]):
    return "int or str"
>>> f(1)
'int or str'

>>> f("1")
'int or str'

>>> f(1.0)
'fallback'

Parametric Types

The parametric types typing.Tuple, typing.List, typing.Dict, typing.Iterable, and typing.Sequence can be used to dispatch on respectively tuples, lists, dictionaries, iterables, and sequence with particular types of elements. Importantly, the type system is covariant, as opposed to Julia's type system, which is invariant.

Example involving some parametric types:

from typing import Union, Tuple, List, Dict

from plum import dispatch

@dispatch
def f(x: Union[tuple, list]):
    return "tuple or list"
    
    
@dispatch
def f(x: Tuple[int, int]):
    return "tuple of two ints"
    
    
@dispatch
def f(x: List[int]):
    return "list of int"


@dispatch
def f(x: Dict[int, str]):
   return "dict of int to str"
>>> f([1, 2])
'list of int'

>>> f([1, "2"])
'tuple or list'

>>> f((1, 2))
'tuple of two ints'

>>> f((1, 2, 3))
'tuple or list'

>>> f((1, "2"))
'tuple or list'

>>> f({1: "2"})
'dict of int to str'

Note: Although parametric types are supported, parametric types do incur a significant performance hit, because the type of every element in a list or tuple must be checked. It is recommended to use parametric types only where absolutely necessary.

Variable Arguments

A variable number of arguments can be used without any problem.

from plum import dispatch

@dispatch
def f(x: int):
    return "single argument"
    

@dispatch
def f(x: int, *xs: int):
    return "multiple arguments"
>>> f(1)
'single argument'

>>> f(1, 2)
'multiple arguments'

>>> f(1, 2, 3)
'multiple arguments'

Return Types

Return types can be used without any problem.

from typing import Union

from plum import dispatch, add_conversion_method

@dispatch
def f(x: Union[int, str]) -> int:
    return x
>>> f(1)
1

>>> f("1")
TypeError: Cannot convert a "builtins.str" to a "builtins.int".

>>> add_conversion_method(type_from=str, type_to=int, f=int)

>>> f("1")
1

Conversion and Promotion

Conversion

The function convert can be used to convert objects of one type to another:

from numbers import Number

from plum import convert


class Rational:
    def __init__(self, num, denom):
        self.num = num
        self.denom = denom
>>> convert(0.5, Number)
0.5

>>> convert(Rational(1, 2), Number)
TypeError: Cannot convert a "__main__.Rational" to a "numbers.Number".

The TypeError indicates that convert does not know how to convert a Rational to a Number. Let us implement that conversion:

from operator import truediv

from plum import conversion_method
        

@conversion_method(type_from=Rational, type_to=Number)
def rational_to_number(q):
    return truediv(q.num, q.denom)
>>> convert(Rational(1, 2), Number)
0.5

Instead of the decorator conversion_method, one can also use add_conversion_method:

from plum import add_conversion_method

add_conversion_method(type_from, type_to, conversion_function)

Promotion

The function promote can be used to promote objects to a common type:

from plum import dispatch, promote, add_promotion_rule, add_conversion_method

@dispatch
def add(x, y):
    return add(*promote(x, y))
    
    
@dispatch
def add(x: int, y: int):
    return x + y
    
    
@dispatch
def add(x: float, y: float):
    return x + y
>>> add(1, 2)
3

>>> add(1.0, 2.0)
3.0

>>> add(1, 2.0)
TypeError: No promotion rule for "builtins.int" and "builtins.float".

>>> add_promotion_rule(int, float, float)

>>> add(1, 2.0)
TypeError: Cannot convert a "builtins.int" to a "builtins.float".

>>> add_conversion_method(type_from=int, type_to=float, f=float)

>>> add(1, 2.0)
3.0

Advanced Features

Abstract Function Definitions

A function can be abstractly defined using dispatch.abstract. When a function is abstractly defined, the function is created, but no methods are defined.

from plum import dispatch

@dispatch.abstract
def f(x):
    pass
>>> f
<function <function f at 0x7f9f6820aea0> with 0 method(s)>

>>> @dispatch
... def f(x: int):
...     pass

>>> f
<function <function f at 0x7f9f6820aea0> with 1 method(s)>

Method Precedence

The keyword argument precedence can be set to an integer value to specify precedence levels of methods, which are used to break ambiguity:

from plum import dispatch

class Element:
    pass


class ZeroElement(Element):
    pass


class SpecialisedElement(Element):
    pass


@dispatch
def mul_no_precedence(a: ZeroElement, b: Element):
    return "zero"


@dispatch
def mul_no_precedence(a: Element, b: SpecialisedElement):
    return "specialised operation"
    

@dispatch(precedence=1)
def mul(a: ZeroElement, b: Element):
    return "zero"


@dispatch
def mul(a: Element, b: SpecialisedElement):
    return "specialised operation"
>>> zero = ZeroElement()

>>> specialised_element = SpecialisedElement()

>>> element = Element()

>>> mul(zero, element)
'zero'

>>> mul(element, specialised_element)
'specialised operation'

>>> mul_no_precedence(zero, specialised_element)
AmbiguousLookupError: For function "mul_no_precedence", signature Signature(__main__.ZeroElement, __main__.SpecialisedElement) is ambiguous among the following:
  Signature(__main__.ZeroElement, __main__.Element) (precedence: 0)
  Signature(__main__.Element, __main__.SpecialisedElement) (precedence: 0)

>>> mul(zero, specialised_element)
'zero'

The method precedences of all implementations of a function can be obtained with the attribute precedences:

>>> mul_no_precedence.precedences
{Signature(__main__.ZeroElement, __main__.Element): 0,
 Signature(__main__.Element, __main__.SpecialisedElement): 0}

>>> mul.precedences
{Signature(__main__.ZeroElement, __main__.Element): 1,
 Signature(__main__.Element, __main__.SpecialisedElement): 0}

Parametric Classes

The decorator @parametric can be used to create parametric classes:

from plum import dispatch, parametric

@parametric
class A:
    def __init__(self, x, *, y = 3):
        self.x = x
        self.y = y
    
    
@dispatch
def f(x: A):
    return "fallback: x={}".format(x.x)
    
    
@dispatch
def f(x: A[int]):
    return "int x={}".format(x.x)
    
    
@dispatch
def f(x: A[float]):
    return "float x={}".format(x.x)
>>> A
__main__.A

>>> A[int]
__main__.A[builtins.int]

>>> issubclass(A[int], A)
True

>>> type(A(1)) == A[int]
True

>>> A[int](1)
<__main__.A[builtins.int] at 0x10c2bab70>

>>> f(A[int](1))
'int x=1'

>>> f(A(1))
'int x=1'

>>> f(A(1.0))
'float x=1.0'

>>> f(A(1 + 1j))
'fallback: x=1+1j'

Note: Calling A[pars] on parametrized type A instantiates the concrete type with parameters pars. If A(args) is called directly, the concrete type is first instantiated by taking the type of all positional arguments, and then an instance of the type is created.

This behaviour can be customized by overriding the @classmethod __infer_type_parameter__ of the parametric class. This method must return the type parameter or a tuple of type parameters.

from plum import parametric

@parametric
class NTuple:
    @classmethod
    def __infer_type_parameter__(self, *args):
        # Mimicks the type parameters of an `NTuple`.
        T = type(args[0])
        N = len(args)
        return (N, T)

    def __init__(self, *args):
        # Check that the arguments satisfy the type specification.
        T = type(self)._type_parameter[1]
        assert all(isinstance(val, T) for val in args)
        self.args = args
>>> type(NTuple(1, 2, 3))
__main__.NTuple[3, <class 'int'>]

Hooking Into Type Inference

With parametric classes, you can hook into Plum's type inference system to do cool things! Here's an example which introduces types for NumPy arrays of particular ranks:

import numpy as np
from plum import dispatch, parametric, type_of


@parametric(runtime_type_of=True)
class NPArray(np.ndarray):
    """A type for NumPy arrays where the type parameter specifies the number of
    dimensions."""


@type_of.dispatch
def type_of(x: np.ndarray):
    # Hook into Plum's type inference system to produce an appropriate instance of
    # `NPArray` for NumPy arrays.
    return NPArray[x.ndim]


@dispatch
def f(x: NPArray[1]):
    return "vector"


@dispatch
def f(x: NPArray[2]):
    return "matrix"
>>> f(np.random.randn(10))
'vector'

>>> f(np.random.randn(10, 10))
'matrix'

>>> f(np.random.randn(10, 10, 10))
NotFoundLookupError: For function "f", signature Signature(__main__.NPArray[3]) could not be resolved.

Add Multiple Methods

Dispatcher.multi can be used to implement multiple methods at once:

from typing import Union

from plum import dispatch

@dispatch.multi((int, int), (float, float))
def add(x: Union[int, float], y: Union[int, float]):
    return x + y
>>> add(1, 1)
2

>>> add(1.0, 1.0)
2.0

>>> add(1, 1.0)
NotFoundLookupError: For function "add", signature Signature(builtins.int, builtins.float) could not be resolved.

Extend a Function From Another Package

Function.dispatch can be used to extend a particular function from an external package:

from package import f

@f.dispatch
def f(x: int):
    return "new behaviour"
>>> f(1.0)
'old behaviour'

>>> f(1)
'new behaviour'

Directly Invoke a Method

Function.invoke can be used to invoke a method given types of the arguments:

from plum import dispatch

@dispatch
def f(x: int):
    return "int"
    
    
@dispatch
def f(x: str):
    return "str"
>>> f(1)
'int'

>>> f("1")
'str'

>>> f.invoke(int)("1")
'int'

>>> f.invoke(str)(1)
'str'

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

plum-dispatch-1.5.7.tar.gz (48.1 kB view details)

Uploaded Source

Built Distributions

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

plum_dispatch-1.5.7-pp37-pypy37_pp73-win_amd64.whl (107.9 kB view details)

Uploaded PyPyWindows x86-64

plum_dispatch-1.5.7-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (126.8 kB view details)

Uploaded PyPymanylinux: glibc 2.12+ x86-64manylinux: glibc 2.5+ x86-64

plum_dispatch-1.5.7-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl (128.0 kB view details)

Uploaded PyPymanylinux: glibc 2.12+ i686manylinux: glibc 2.5+ i686

plum_dispatch-1.5.7-pp37-pypy37_pp73-macosx_10_9_x86_64.whl (113.5 kB view details)

Uploaded PyPymacOS 10.9+ x86-64

plum_dispatch-1.5.7-cp310-cp310-win_amd64.whl (126.5 kB view details)

Uploaded CPython 3.10Windows x86-64

plum_dispatch-1.5.7-cp310-cp310-win32.whl (113.8 kB view details)

Uploaded CPython 3.10Windows x86

plum_dispatch-1.5.7-cp310-cp310-musllinux_1_1_x86_64.whl (587.3 kB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ x86-64

plum_dispatch-1.5.7-cp310-cp310-musllinux_1_1_i686.whl (564.5 kB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ i686

plum_dispatch-1.5.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (529.0 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.12+ x86-64manylinux: glibc 2.5+ x86-64

plum_dispatch-1.5.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl (510.1 kB view details)

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

plum_dispatch-1.5.7-cp310-cp310-macosx_11_0_arm64.whl (133.1 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

plum_dispatch-1.5.7-cp310-cp310-macosx_10_9_x86_64.whl (146.8 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

plum_dispatch-1.5.7-cp39-cp39-win_amd64.whl (125.8 kB view details)

Uploaded CPython 3.9Windows x86-64

plum_dispatch-1.5.7-cp39-cp39-win32.whl (113.8 kB view details)

Uploaded CPython 3.9Windows x86

plum_dispatch-1.5.7-cp39-cp39-musllinux_1_1_x86_64.whl (584.7 kB view details)

Uploaded CPython 3.9musllinux: musl 1.1+ x86-64

plum_dispatch-1.5.7-cp39-cp39-musllinux_1_1_i686.whl (564.0 kB view details)

Uploaded CPython 3.9musllinux: musl 1.1+ i686

plum_dispatch-1.5.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (527.6 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.12+ x86-64manylinux: glibc 2.5+ x86-64

plum_dispatch-1.5.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl (509.0 kB view details)

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

plum_dispatch-1.5.7-cp39-cp39-macosx_11_0_arm64.whl (132.9 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

plum_dispatch-1.5.7-cp39-cp39-macosx_10_9_x86_64.whl (146.9 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

plum_dispatch-1.5.7-cp38-cp38-win_amd64.whl (125.8 kB view details)

Uploaded CPython 3.8Windows x86-64

plum_dispatch-1.5.7-cp38-cp38-win32.whl (113.5 kB view details)

Uploaded CPython 3.8Windows x86

plum_dispatch-1.5.7-cp38-cp38-musllinux_1_1_x86_64.whl (640.2 kB view details)

Uploaded CPython 3.8musllinux: musl 1.1+ x86-64

plum_dispatch-1.5.7-cp38-cp38-musllinux_1_1_i686.whl (613.4 kB view details)

Uploaded CPython 3.8musllinux: musl 1.1+ i686

plum_dispatch-1.5.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (574.1 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.12+ x86-64manylinux: glibc 2.5+ x86-64

plum_dispatch-1.5.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl (550.5 kB view details)

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

plum_dispatch-1.5.7-cp38-cp38-macosx_11_0_arm64.whl (132.8 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

plum_dispatch-1.5.7-cp38-cp38-macosx_10_9_x86_64.whl (145.2 kB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

plum_dispatch-1.5.7-cp37-cp37m-win_amd64.whl (122.8 kB view details)

Uploaded CPython 3.7mWindows x86-64

plum_dispatch-1.5.7-cp37-cp37m-win32.whl (110.8 kB view details)

Uploaded CPython 3.7mWindows x86

plum_dispatch-1.5.7-cp37-cp37m-musllinux_1_1_x86_64.whl (528.8 kB view details)

Uploaded CPython 3.7mmusllinux: musl 1.1+ x86-64

plum_dispatch-1.5.7-cp37-cp37m-musllinux_1_1_i686.whl (503.3 kB view details)

Uploaded CPython 3.7mmusllinux: musl 1.1+ i686

plum_dispatch-1.5.7-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (470.6 kB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.12+ x86-64manylinux: glibc 2.5+ x86-64

plum_dispatch-1.5.7-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl (449.4 kB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.12+ i686manylinux: glibc 2.5+ i686

plum_dispatch-1.5.7-cp37-cp37m-macosx_10_9_x86_64.whl (143.3 kB view details)

Uploaded CPython 3.7mmacOS 10.9+ x86-64

plum_dispatch-1.5.7-cp36-cp36m-win_amd64.whl (122.9 kB view details)

Uploaded CPython 3.6mWindows x86-64

plum_dispatch-1.5.7-cp36-cp36m-win32.whl (111.0 kB view details)

Uploaded CPython 3.6mWindows x86

plum_dispatch-1.5.7-cp36-cp36m-musllinux_1_1_x86_64.whl (530.7 kB view details)

Uploaded CPython 3.6mmusllinux: musl 1.1+ x86-64

plum_dispatch-1.5.7-cp36-cp36m-musllinux_1_1_i686.whl (503.5 kB view details)

Uploaded CPython 3.6mmusllinux: musl 1.1+ i686

plum_dispatch-1.5.7-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (472.0 kB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.12+ x86-64manylinux: glibc 2.5+ x86-64

plum_dispatch-1.5.7-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl (451.3 kB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.12+ i686manylinux: glibc 2.5+ i686

plum_dispatch-1.5.7-cp36-cp36m-macosx_10_9_x86_64.whl (142.7 kB view details)

Uploaded CPython 3.6mmacOS 10.9+ x86-64

File details

Details for the file plum-dispatch-1.5.7.tar.gz.

File metadata

  • Download URL: plum-dispatch-1.5.7.tar.gz
  • Upload date:
  • Size: 48.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for plum-dispatch-1.5.7.tar.gz
Algorithm Hash digest
SHA256 eab732b10c013bcbd4e220bccd664fa41d58efd21af0beb13a9e33051f1f925b
MD5 66759083aba9022dd562506e6ff3bd90
BLAKE2b-256 41b9b8c1c996aad22eb0beb01b93fae068114df25c0555240a1a5dbf0bd7c288

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-pp37-pypy37_pp73-win_amd64.whl.

File metadata

  • Download URL: plum_dispatch-1.5.7-pp37-pypy37_pp73-win_amd64.whl
  • Upload date:
  • Size: 107.9 kB
  • Tags: PyPy, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.7-pp37-pypy37_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 b24aecaba1356b49f423eddba8f9b788e61c584fdd4fc982617fd4f68dc1e3a8
MD5 d7b65c096cf54ed3cf0fd469a99bb738
BLAKE2b-256 bf93b04ba700831b6e11f035bfcedb0ae7f1f8bd3ce9d41f6522d5ee644b64d1

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for plum_dispatch-1.5.7-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 af4b7a726e82b85a5ddfaaf2e0dac06eeec4b51659d25fb01ae12e02a11f1acd
MD5 96338829ac3aa36610875f699c5e6202
BLAKE2b-256 5cba9e90ed5ba3c10fa3ea637d1cc251a711f512aff87f01c757faf3928fae6b

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for plum_dispatch-1.5.7-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 21e270d0b5e8b15157df9c1c559ba56f23bb22b188bba94020f48fe7257ee989
MD5 8aefe0bbf43156eddd615d81db80369b
BLAKE2b-256 009a3e2bc2258101bb5e978d30d748639fefadf926c2ab0f2dfc7a3d8ce7dbf5

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-pp37-pypy37_pp73-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: plum_dispatch-1.5.7-pp37-pypy37_pp73-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 113.5 kB
  • Tags: PyPy, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.7-pp37-pypy37_pp73-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 c640b19267fc8c58713f5ceb3081e951827c1e689de103c0d026848f7748f791
MD5 1cd4dec7e4c208a21d43473fd34527a8
BLAKE2b-256 90b2eea140abfcd2d010f5031d272ed8e01fdfe6069d68ee8bf180570652e5aa

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: plum_dispatch-1.5.7-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 126.5 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.7-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 5002df692d0a35b8a10075cf8794c43d553a48129d5b7ad368262e8e142dac67
MD5 b1743a5a51368d201cc6f82150c75162
BLAKE2b-256 cd175d7bdf55ceb3d31967d7a8b3e3f50212e6fda1a2052bc815581cd570747c

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-cp310-cp310-win32.whl.

File metadata

  • Download URL: plum_dispatch-1.5.7-cp310-cp310-win32.whl
  • Upload date:
  • Size: 113.8 kB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.7-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 e19e6abf9732daeb0e894c5adb0caf3712471712a1a86f62df57535c0be5f5ad
MD5 5ca2b5f52a23842683bd826da79d92a3
BLAKE2b-256 268146f915371f8c9f84d824ef7193b8ac74c189a01287ceb6a1d442df31f118

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-cp310-cp310-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: plum_dispatch-1.5.7-cp310-cp310-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 587.3 kB
  • Tags: CPython 3.10, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.7-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 e490f2b6d8b0ab7b3d4f24f2968bb46698a5e0267cce015e5bc8c3b590b30774
MD5 5c96dfba40de4a8f109f4eae96ce82b9
BLAKE2b-256 f5d2f200e603647e3fa372b02c2d3fc70827720ac5bf0f34e5c6bdedcf82671f

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-cp310-cp310-musllinux_1_1_i686.whl.

File metadata

  • Download URL: plum_dispatch-1.5.7-cp310-cp310-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 564.5 kB
  • Tags: CPython 3.10, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.7-cp310-cp310-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 52a465f7f1c035150fc965234f67483e771045521a46e68fa310c27ee765797a
MD5 4325658d45181b97ae72867b5b87fd57
BLAKE2b-256 3c75bedd9869f6b4f51854d8698175f9b367a2d607d492161dd1e7d4896e1ee3

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for plum_dispatch-1.5.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 cc21238f7add03bcb2409b9ab47f65e53f9e4539901a9ed891a56bd3482568c4
MD5 42982b23a58a66a4ba2af0b776e85758
BLAKE2b-256 cd21f556a80cfbfeabfb5b004a97a57880796bd8ea893e39ccbeac1ea08c1302

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for plum_dispatch-1.5.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 78064a8be3cee7929acd682240532aeafded2338136a3b770a1e6a8f19468c23
MD5 06ad33024b46cf85b644ac1b5477c9e0
BLAKE2b-256 5e7b14bcf1cdf4112553401b86f2d9834ede60c2e535b0776439c47e399214e4

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

  • Download URL: plum_dispatch-1.5.7-cp310-cp310-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 133.1 kB
  • Tags: CPython 3.10, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.7-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1244e101c0de81fb4b19de229f459f16886bb2e08b1c0532a513dcf27cd725eb
MD5 32fe410f489aa1dfbcf97dac18a7ed0b
BLAKE2b-256 2badc87cd2712c92c112699c5c8c233737cd1eb80b1bd77275879877090ef7e5

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: plum_dispatch-1.5.7-cp310-cp310-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 146.8 kB
  • Tags: CPython 3.10, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.7-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 0ee4265abf25ee9fce31dd3566b6b1471ffc653bc6108d6f3bb10b07ab80f737
MD5 21b3f64bdc4fb7c1e634b5f6fb9ba738
BLAKE2b-256 a1da468682d7124b3eaed4bcd3a9f0fc120cadbd3bd845d7f1a7043760eac381

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: plum_dispatch-1.5.7-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 125.8 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.7-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 ceefb1e30273f5e4f9cc3b978ff0874c660020dafa0f6e1b5d29cf5292c6afc5
MD5 97175b98c3b107f9fc0654058ce1fb2e
BLAKE2b-256 4024da23602af7c9b0742cef6ed6f7be695a4649df031b2551d297a4d2119e04

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-cp39-cp39-win32.whl.

File metadata

  • Download URL: plum_dispatch-1.5.7-cp39-cp39-win32.whl
  • Upload date:
  • Size: 113.8 kB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.7-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 b6417b778eac17d9cba137c7af1716c9d10098335c64d5274d4b8d2ea5c2d3c5
MD5 7ca8b4a2ed3b82fbc2d8b71a196fe18a
BLAKE2b-256 f8b987dcc8f36902104e8e1b6724ae22cf08aa504a83367c31d9f50a3325300f

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-cp39-cp39-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: plum_dispatch-1.5.7-cp39-cp39-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 584.7 kB
  • Tags: CPython 3.9, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.7-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 4822faed2a8398a4908396d1c47b740418be9123d55b3f56d64c3c434198639d
MD5 c4c9ab8e137155fa15df82ea79c29be7
BLAKE2b-256 8c23d043036c33d8a8435b4339ea803c680af129add40a74f58c8273d7b43a24

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-cp39-cp39-musllinux_1_1_i686.whl.

File metadata

  • Download URL: plum_dispatch-1.5.7-cp39-cp39-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 564.0 kB
  • Tags: CPython 3.9, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.7-cp39-cp39-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 7238ae48ee6e154a2fdb1fb009c71b97765d42deb6bb00de5c63c1fe84bbcdb4
MD5 22c7b924c50b4152242242c17504555d
BLAKE2b-256 2cb1597b294fff0cf9423a88137e95715e17d1ea63390759d6e8f1fa56d72008

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for plum_dispatch-1.5.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 5b598b9f5dfe4161fd808031506cecf13aaee7c653ae8aed80f270f1d81c2a5f
MD5 d0537233581aa7b0bea07566d82cbc30
BLAKE2b-256 87a9b0e5244e5dcf31b41006ea95b6088c0ec3377c12334525684482b8e74bc9

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for plum_dispatch-1.5.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 2878def4f7749ebe9a21aeba95c7abb98ba6dae51176427dfb14e75a7c9d0a0e
MD5 cd4e45e0d206f837aff5928848bfb91a
BLAKE2b-256 8cdebae935e207a915c1e56c51a695e2d008db8b810d5891651ae0b864508a47

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

  • Download URL: plum_dispatch-1.5.7-cp39-cp39-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 132.9 kB
  • Tags: CPython 3.9, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.7-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 92bbffb5d5a4a0ea48c7fbb3618197e53f2b3777162deba39ad30ff06725bbb9
MD5 951dfe837cc5add8eed206598ff2feaa
BLAKE2b-256 e65754674bb1f9913f3736954b8dbbd6503b230a978da50ef8e3a38a0c55c898

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: plum_dispatch-1.5.7-cp39-cp39-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 146.9 kB
  • Tags: CPython 3.9, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.7-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 6d36ad2f85376ed818d87770b7e548d455bd3640731eacf1b3918b927c8325bf
MD5 8788c7d740c20c6aa3a19c5dcfa97f36
BLAKE2b-256 555a3a602a89224f93a4ab1895b6e00abf314464334c935e781c7db4ef6899cb

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: plum_dispatch-1.5.7-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 125.8 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.7-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 eb4673ede351d096a01c413200297ce5d6853c2d05a92d692df86ce3630fff1a
MD5 b9d99d3db1c7601512b0c3ba1f1c2ad7
BLAKE2b-256 2778754c32970cf0f3b12b5ebca7417e22c435bb7c77d9a2f8a58afd3fd3cea8

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-cp38-cp38-win32.whl.

File metadata

  • Download URL: plum_dispatch-1.5.7-cp38-cp38-win32.whl
  • Upload date:
  • Size: 113.5 kB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.7-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 43be2c0c441a47bebda9d3f0ab2d7007fc146bf22d5fc51aa352dc7dc1e0f562
MD5 725087b1aef0a48ff6e23b591033556a
BLAKE2b-256 1fd09ef3f4cf03f3ccb965beacae9bbf73b459515c81f4d3aa4a4560e4930e9e

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-cp38-cp38-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: plum_dispatch-1.5.7-cp38-cp38-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 640.2 kB
  • Tags: CPython 3.8, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.7-cp38-cp38-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 f65e23742d11d68205ad163846861d3ff6753b6be136eed6c87c11572d0cad43
MD5 8fff2e4857fe1e97b873dbe730194d9e
BLAKE2b-256 7d096745ea8ab73c9834635e5ddf84f1f46768efe253f45dcb14b280bccb2935

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-cp38-cp38-musllinux_1_1_i686.whl.

File metadata

  • Download URL: plum_dispatch-1.5.7-cp38-cp38-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 613.4 kB
  • Tags: CPython 3.8, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.7-cp38-cp38-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 f031bc5fb38eb92675dfefbb3ef111a57a12b7a0dc7ab8910e94b259c4253566
MD5 54bf639b228d360ee716d462eaf73aff
BLAKE2b-256 ba4bd167dc33f1e84fe38136208fd227ddbacf72e1a57931d3e6c7cb4e9d36bf

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for plum_dispatch-1.5.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 14ad91f648d9f863cbd1b51ab60d2b72f96cde6b8d349490cb4289c61faca047
MD5 fbe83e65aceaf06f20f41bb9f8aa0060
BLAKE2b-256 9d91d954d5fdb6c78f1cdff33019d24af1162f994b26dda8ac5e72e81e305168

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for plum_dispatch-1.5.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 5d2ee77536375bac7f31aab11c167a527ef9b2d140f5dc96657da42762707bfd
MD5 3921991837ebc63af7e5460e533fc96e
BLAKE2b-256 75d8afaa66caeaca1b0c7fe5d2398cfcce718742b2e99d1b586b26d89ab4fba8

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

  • Download URL: plum_dispatch-1.5.7-cp38-cp38-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 132.8 kB
  • Tags: CPython 3.8, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.7-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ba323bddfcacc81037c42f3f102de6a970068cae5aefbe522ecd8a9a7f3bffa3
MD5 6617a349da67af4304791cfb07adacdd
BLAKE2b-256 76b797d8048c8fc76d38a24ed2ee374d7b4d242d2186cfc74cfb6cf23c6437f8

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: plum_dispatch-1.5.7-cp38-cp38-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 145.2 kB
  • Tags: CPython 3.8, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.7-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 2086f8c31e9f002f9bac7270a99e981d9ba60e95736c998277b00bd4e1eb6d83
MD5 42c85ec7b5987c142551d011427987df
BLAKE2b-256 d0cd262681bc9374db4a5c5de0e48b6c781809b7a8475a561d977727b005aba6

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: plum_dispatch-1.5.7-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 122.8 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.7-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 a2aa43a7247aabd35bd40480198e41db59be8612f2340536d77674d01c0b9b45
MD5 b2aad64291f38464dfe629ff92348758
BLAKE2b-256 265e7fe7a36d96192c0bd0706843634ac808feb9be494a1b0a73d66b191d731f

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-cp37-cp37m-win32.whl.

File metadata

  • Download URL: plum_dispatch-1.5.7-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 110.8 kB
  • Tags: CPython 3.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.7-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 603c96f524b99e0d907974de87950cd92bdf37b2afe8980d10435b54fb40c44c
MD5 0d55ae9cc5cfddd4718782d9ff71e976
BLAKE2b-256 d6411b7bba4539fa876a4bebe820365647ae20ffb1dcd28432117b4c496cdf96

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-cp37-cp37m-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: plum_dispatch-1.5.7-cp37-cp37m-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 528.8 kB
  • Tags: CPython 3.7m, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.7-cp37-cp37m-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 aecdad562d6e76e467c9923249540f7da3f0ac2b10928005d574ab8830ebd2c2
MD5 084d442f1812c11ba5501fd25b360fe8
BLAKE2b-256 c2efb6ecd6a6d65f210814527cef7caba60406abbcb64718a23f5573ad0ac60d

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-cp37-cp37m-musllinux_1_1_i686.whl.

File metadata

  • Download URL: plum_dispatch-1.5.7-cp37-cp37m-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 503.3 kB
  • Tags: CPython 3.7m, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.7-cp37-cp37m-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 b8f9b8618af9dc663e8811cf8e4fcb4220193eb2e0320371cbb5a4d1d2621e25
MD5 0f803b39117e05b5b8e89b63c911f983
BLAKE2b-256 0d43a20ce79f9f8f0d23b755beee27fa3eee800d0a7154b78722fc741f309a68

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for plum_dispatch-1.5.7-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 5b9a4af73e11e5324e9282f6105c4a65fe68bcc889b56b204b4293e9db805217
MD5 1dc4effb467f8a56cb900c9236f6afdc
BLAKE2b-256 950b4e0eb6b0de76596833857d2253ca559b5791d56960bd0e597769e1dcf562

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for plum_dispatch-1.5.7-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 9eeff9107050f0663d820ec707bebe20d4e5d66b756cf52d238fbd1dfdd009c4
MD5 d466b232af897aa85a3c43b4b69dbba5
BLAKE2b-256 639b2a43b35f8648dc636aafd665f1d249af94cd5a241cc4e32adc49be1f2ea1

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: plum_dispatch-1.5.7-cp37-cp37m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 143.3 kB
  • Tags: CPython 3.7m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.7-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 9ceac32257cbb2646128608572f84f12ef40f3953ed72f145888746ea9254599
MD5 8d662031145c5b22f5178fec3054aca7
BLAKE2b-256 9d93e7303962154ef35a7aed3f8890f6ec24f4d25b151a546beca5ea55a79fc3

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: plum_dispatch-1.5.7-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 122.9 kB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.7-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 34ff1d80d2e7c2a65e16743dcc99dd9c215b175007629c2cd3a2838c9ef8dc7b
MD5 2375bb0be2151de14c1ad0b89599c721
BLAKE2b-256 96844cf70a1a14f7aec83161076a8c82011fdf9024156243c56f49f23715bdfa

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-cp36-cp36m-win32.whl.

File metadata

  • Download URL: plum_dispatch-1.5.7-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 111.0 kB
  • Tags: CPython 3.6m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.7-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 61cd030619f50f67935e18422e4d7072778cfb2573c5a90a95e14303a9cbe369
MD5 16b98eb90616f37b502c1b3c71da3e8e
BLAKE2b-256 81058cbbd7e75a75e2e3fc6a708225883894cff7c8a8d17c6b9532a84081f1b1

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-cp36-cp36m-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: plum_dispatch-1.5.7-cp36-cp36m-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 530.7 kB
  • Tags: CPython 3.6m, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.7-cp36-cp36m-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 08b65c07cc94398cfbcb5c9ca55a5894eecd70284106dceb096586ed45396be8
MD5 c28b83004bc4a0b5ba9a35faa4811b31
BLAKE2b-256 b3112ca204b7b55c38c724250d49ad9d51822038261e56409c0f8ca9575b6e8d

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-cp36-cp36m-musllinux_1_1_i686.whl.

File metadata

  • Download URL: plum_dispatch-1.5.7-cp36-cp36m-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 503.5 kB
  • Tags: CPython 3.6m, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.7-cp36-cp36m-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 b1d08bf6da1bc3766254e447c431aed74333b5536d504a308d8f8f1fea1a9d2c
MD5 e4d5e5394433e1829fd99c5417247d69
BLAKE2b-256 cc3540b5c3cf4cd3437994f4dd315fa13af6b26a70684acf2f111e27dfcc9b12

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for plum_dispatch-1.5.7-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 992e44b3091ea13eef0ccda4667f198a707219e16607d683c889968bbb7c85bb
MD5 b154cfcfea4c5ffa05cfed4048642ddb
BLAKE2b-256 a7883e1e3554d996496335a2502d7958c17bf95002995d6a4de2fa80c754307b

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for plum_dispatch-1.5.7-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 69cdb0a176110898e7ee3683f0a01db0e754d88ec99cd1cfd7c88c9497395584
MD5 9ddf4971ac013c76da26bb111b000dc1
BLAKE2b-256 27d969d57aef998df2301f724557f646314e2b6ff3dcc85faba3d6e06f0108d6

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.7-cp36-cp36m-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: plum_dispatch-1.5.7-cp36-cp36m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 142.7 kB
  • Tags: CPython 3.6m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for plum_dispatch-1.5.7-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 fa719761f5e6d55c771a3774e85f3753e19738b578b247c6c586c9b468e2650e
MD5 2fc43957c61bccecae47facedbabed57
BLAKE2b-256 a743da26eaae2dbed11f1af8de796db747e723c77b5b9c455632437f625799e1

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