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"

@staticmethod, @classmethod, and @property.setter

In the case of @staticmethod, @classmethod, or @property.setter, the rules are different:

  1. The @dispatch decorator must be applied before @staticmethod, @classmethod, and @property.setter. This means that @dispatch is then not the outermost decorator.
  2. The class must have at least one other method where @dispatch is the outermost decorator. If this is not the case, you will need to add a dummy method, as the following example illustrates.
from plum import dispatch

class MyClass:
    def __init__(self):
        self._name = None
       
    @property
    def property(self):
        return self._name

    @property.setter
    @dispatch
    def property(self, value: str):
        self._name = value
      
    @staticmethod
    @dispatch
    def f(x: int):
        return x

    @classmethod
    @dispatch
    def g(cls: type, x: float):
        return x

    @dispatch
    def _(self):
        # Dummy method that needs to be added whenever no method has
        # `@dispatch` as the outermost decorator.
        pass

If you don't add the dummy method whenever it is required, you will run into a ResolutionError:

from plum import dispatch

class MyClass:
    @staticmethod
    @dispatch
    def f(x: int):
        return x
>>> MyClass.f(1)
ResolutionError: Promise `Promise()` was not kept.

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.8.tar.gz (48.9 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.8-pp37-pypy37_pp73-win_amd64.whl (108.2 kB view details)

Uploaded PyPyWindows x86-64

plum_dispatch-1.5.8-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (127.2 kB view details)

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

plum_dispatch-1.5.8-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl (128.5 kB view details)

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

plum_dispatch-1.5.8-pp37-pypy37_pp73-macosx_10_9_x86_64.whl (113.9 kB view details)

Uploaded PyPymacOS 10.9+ x86-64

plum_dispatch-1.5.8-cp310-cp310-win_amd64.whl (126.8 kB view details)

Uploaded CPython 3.10Windows x86-64

plum_dispatch-1.5.8-cp310-cp310-win32.whl (114.2 kB view details)

Uploaded CPython 3.10Windows x86

plum_dispatch-1.5.8-cp310-cp310-musllinux_1_1_x86_64.whl (587.6 kB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ x86-64

plum_dispatch-1.5.8-cp310-cp310-musllinux_1_1_i686.whl (566.0 kB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ i686

plum_dispatch-1.5.8-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (528.6 kB view details)

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

plum_dispatch-1.5.8-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl (510.4 kB view details)

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

plum_dispatch-1.5.8-cp310-cp310-macosx_11_0_arm64.whl (133.5 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

plum_dispatch-1.5.8-cp310-cp310-macosx_10_9_x86_64.whl (147.2 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

plum_dispatch-1.5.8-cp39-cp39-win_amd64.whl (126.0 kB view details)

Uploaded CPython 3.9Windows x86-64

plum_dispatch-1.5.8-cp39-cp39-win32.whl (114.2 kB view details)

Uploaded CPython 3.9Windows x86

plum_dispatch-1.5.8-cp39-cp39-musllinux_1_1_x86_64.whl (586.1 kB view details)

Uploaded CPython 3.9musllinux: musl 1.1+ x86-64

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

Uploaded CPython 3.9musllinux: musl 1.1+ i686

plum_dispatch-1.5.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (528.7 kB view details)

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

plum_dispatch-1.5.8-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl (508.9 kB view details)

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

plum_dispatch-1.5.8-cp39-cp39-macosx_11_0_arm64.whl (133.3 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

plum_dispatch-1.5.8-cp39-cp39-macosx_10_9_x86_64.whl (147.2 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

plum_dispatch-1.5.8-cp38-cp38-win_amd64.whl (126.0 kB view details)

Uploaded CPython 3.8Windows x86-64

plum_dispatch-1.5.8-cp38-cp38-win32.whl (113.8 kB view details)

Uploaded CPython 3.8Windows x86

plum_dispatch-1.5.8-cp38-cp38-musllinux_1_1_x86_64.whl (641.0 kB view details)

Uploaded CPython 3.8musllinux: musl 1.1+ x86-64

plum_dispatch-1.5.8-cp38-cp38-musllinux_1_1_i686.whl (614.3 kB view details)

Uploaded CPython 3.8musllinux: musl 1.1+ i686

plum_dispatch-1.5.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (574.2 kB view details)

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

plum_dispatch-1.5.8-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl (550.9 kB view details)

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

plum_dispatch-1.5.8-cp38-cp38-macosx_11_0_arm64.whl (133.2 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

plum_dispatch-1.5.8-cp38-cp38-macosx_10_9_x86_64.whl (145.6 kB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

plum_dispatch-1.5.8-cp37-cp37m-win_amd64.whl (123.1 kB view details)

Uploaded CPython 3.7mWindows x86-64

plum_dispatch-1.5.8-cp37-cp37m-win32.whl (111.2 kB view details)

Uploaded CPython 3.7mWindows x86

plum_dispatch-1.5.8-cp37-cp37m-musllinux_1_1_x86_64.whl (528.5 kB view details)

Uploaded CPython 3.7mmusllinux: musl 1.1+ x86-64

plum_dispatch-1.5.8-cp37-cp37m-musllinux_1_1_i686.whl (504.3 kB view details)

Uploaded CPython 3.7mmusllinux: musl 1.1+ i686

plum_dispatch-1.5.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (471.2 kB view details)

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

plum_dispatch-1.5.8-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl (449.8 kB view details)

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

plum_dispatch-1.5.8-cp37-cp37m-macosx_10_9_x86_64.whl (143.7 kB view details)

Uploaded CPython 3.7mmacOS 10.9+ x86-64

plum_dispatch-1.5.8-cp36-cp36m-win_amd64.whl (123.1 kB view details)

Uploaded CPython 3.6mWindows x86-64

plum_dispatch-1.5.8-cp36-cp36m-win32.whl (111.4 kB view details)

Uploaded CPython 3.6mWindows x86

plum_dispatch-1.5.8-cp36-cp36m-musllinux_1_1_x86_64.whl (531.0 kB view details)

Uploaded CPython 3.6mmusllinux: musl 1.1+ x86-64

plum_dispatch-1.5.8-cp36-cp36m-musllinux_1_1_i686.whl (504.0 kB view details)

Uploaded CPython 3.6mmusllinux: musl 1.1+ i686

plum_dispatch-1.5.8-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (472.1 kB view details)

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

plum_dispatch-1.5.8-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl (451.8 kB view details)

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

plum_dispatch-1.5.8-cp36-cp36m-macosx_10_9_x86_64.whl (143.1 kB view details)

Uploaded CPython 3.6mmacOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: plum-dispatch-1.5.8.tar.gz
  • Upload date:
  • Size: 48.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 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.8.tar.gz
Algorithm Hash digest
SHA256 685c8bee1344a3bbdd5cb9328e78818458bce77216a19d2b560c1334fcd43aaf
MD5 26790fc3ec38682bcc61dc7fdf0aa2a7
BLAKE2b-256 e2d8a672181ab9f819fc90c321694eb7d5baba0303edcd669444267a09ceefd0

See more details on using hashes here.

File details

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

File metadata

  • Download URL: plum_dispatch-1.5.8-pp37-pypy37_pp73-win_amd64.whl
  • Upload date:
  • Size: 108.2 kB
  • Tags: PyPy, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 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.8-pp37-pypy37_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 730561d4037fe769141af63d61e1c446bba98c4c0c5fd2592d3ecc051e0f49f0
MD5 00b746a0ae502cde3dcd709f9917a605
BLAKE2b-256 56c725a86cf0ccc166c4c04cf911213369c7dd0e44ee23fba1d512dcfc4623f4

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.8-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.8-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 c8af8a386ab782e9a2c33689b43afdc98319cb203084fac0c78f8da534eb556b
MD5 5c54ebbf89ffa4e3a352c217af389299
BLAKE2b-256 191362aa17ce2acc121946a5a271930816511a19aab7e969d9b38e3bc54b0ad1

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.8-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.8-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 4850e9366c32ac1738c6dccd035e27122cfd4097426face72298aed7405c60ad
MD5 342f414737fc6a41b1ad32de2f2fe324
BLAKE2b-256 6dcc2cf0480ff31c0146c2d716012078c7bf19173a89cfbb50d1c7b655fe9788

See more details on using hashes here.

File details

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

File metadata

  • Download URL: plum_dispatch-1.5.8-pp37-pypy37_pp73-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 113.9 kB
  • Tags: PyPy, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 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.8-pp37-pypy37_pp73-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 cda7f32ed69d46bc8350e9a530403ea136069673c32855264cebdee42a6d4d20
MD5 c6ef06795d420fdc2f9398eda0e55774
BLAKE2b-256 7677a411181da5156a7762baad3db664e17ef84bb63ae6f1d343393de994a178

See more details on using hashes here.

File details

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

File metadata

  • Download URL: plum_dispatch-1.5.8-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 126.8 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 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.8-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 330f4349b1646af417a79c180df9b50bce071db5e95e80651cd420ad8a1f8d9b
MD5 7dea2d66985c358b3bfc576ffb8050bf
BLAKE2b-256 6948792a68f997b91463b46af617506ec54bff7751acfad4c60be0e08684db4d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: plum_dispatch-1.5.8-cp310-cp310-win32.whl
  • Upload date:
  • Size: 114.2 kB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 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.8-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 50306a72537588f3bbbf4dddbcddd946e5c34208ad02b97f59ca6990f2de8d62
MD5 c70c53fdf0d2274dba651c34ba242fa1
BLAKE2b-256 b10da6b5c25462957ec8869de181c68bf3e2879723b499b73fef371b622838db

See more details on using hashes here.

File details

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

File metadata

  • Download URL: plum_dispatch-1.5.8-cp310-cp310-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 587.6 kB
  • Tags: CPython 3.10, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 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.8-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 7212c075fdbc14439b3e8da8a734b963037a1f272a612f86d8ce3c245f2ff77e
MD5 33bc9b41e5eac866879920e54cf6f267
BLAKE2b-256 d9c74c51bc43e1c8268312cb946ddcbbbe3337c0c6d9090b6f30b26b270a43e6

See more details on using hashes here.

File details

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

File metadata

  • Download URL: plum_dispatch-1.5.8-cp310-cp310-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 566.0 kB
  • Tags: CPython 3.10, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 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.8-cp310-cp310-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 df289025758b0faad2d7c079686d426d6b671d898bee511867cce4699db7c3e8
MD5 d8973d13195191081badb2cd8b0f012f
BLAKE2b-256 4da27d1c67a659d6aca6a77212da4a326616c77c09b64006b328465f5bccc719

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.8-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.8-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 7f1b99d663752fc85ef32a6b844295e0a344932f4cfb400099c88e3264e8eacb
MD5 433971b597151f754ac260b0c529ed12
BLAKE2b-256 94f0b824cf949dd7b5184d47c1654869bd216e4e5a88c5f447801688bb250ca6

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.8-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.8-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 ebc20ffbc7664d676a433df3f25d6665e13180fd9e4205568581bc8a7fefc0c3
MD5 06b30475db1b462ea8b3fa699d00b31b
BLAKE2b-256 ef5fe883d708a5d64921cf17297db4681d5741489529a0329a9fdc3a96a3689b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: plum_dispatch-1.5.8-cp310-cp310-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 133.5 kB
  • Tags: CPython 3.10, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 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.8-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 41bc1ff5f71eee714ab8eb896535ce0d72687f2d7938f511fd39b99c17ce4b53
MD5 4775bfded85f0ad694685353e73a0481
BLAKE2b-256 4a8ec1ab40953b0db2bc01110b66624630e64a6a9b9d712d564e1fc351b9351e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: plum_dispatch-1.5.8-cp310-cp310-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 147.2 kB
  • Tags: CPython 3.10, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 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.8-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 9ab71905b91e964168a04ac86c1b7885078b0065f8c950e1d18344b982ee1997
MD5 6b862024442d13d4c9de1a89a853b518
BLAKE2b-256 c7609f8d2201496720e17176e938994ac0c155fc5881ca292590808c2a74d2f7

See more details on using hashes here.

File details

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

File metadata

  • Download URL: plum_dispatch-1.5.8-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 126.0 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 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.8-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 d606e5dba56a140f8062a916e71f0438a67702fd95e19040f443e51b0505a190
MD5 ccfcec319273fca47a542dca1ee45985
BLAKE2b-256 df90c72a210605a227411fd61fb4f76e6f3ee5786ca44a561d6f4a6d2a653efb

See more details on using hashes here.

File details

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

File metadata

  • Download URL: plum_dispatch-1.5.8-cp39-cp39-win32.whl
  • Upload date:
  • Size: 114.2 kB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 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.8-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 3d914e52ddef028c911267d3200c5d2bafad4adb11387978ab674d84a4c7a552
MD5 2551ade005737c2ac592021544486a9b
BLAKE2b-256 7e47d72f09f83890446d883d75d2e6ab32defe5d9236cb7d8fb62828c35731c5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: plum_dispatch-1.5.8-cp39-cp39-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 586.1 kB
  • Tags: CPython 3.9, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 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.8-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 b59e6722f1a217692b6be123aa8d35c205d496385d1fda05dd451949632d65d5
MD5 2f59561b27c7f95391ec09208e9d1bab
BLAKE2b-256 a6414b82436a3e5c8a8fabc1d49b8a0525e01e7ac7b50c0362e21032d0439722

See more details on using hashes here.

File details

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

File metadata

  • Download URL: plum_dispatch-1.5.8-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.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 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.8-cp39-cp39-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 97092bbed172e0f66984f2066d94050a792959b6c120a978699fc537acbc0359
MD5 463d2110a57be1c6e99672b564c49a14
BLAKE2b-256 a034cb34264b60f9d5b6db55ef7512008ee4cd63c3a342c840cdddcc5430c50f

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.8-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.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 89f17c265db5b391b125691cb92ed4376b4507291664a84465385dcef39735cd
MD5 ae80c82eb88ad4cab3893a5bcb4c13c3
BLAKE2b-256 291341f06ede3640dd30008dddc3bb781b109eb338e06f216f29cb5a5def0a91

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.8-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.8-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 6866fa1201ad2c201ab96f7eee929c96975e8c038e0d191c6105809e6226d537
MD5 1c77fd1d45e87f54f9af2b3bb6fc9123
BLAKE2b-256 315586030f54311c6487c185d129857392fcd803a563a6ca9b947dd365a86121

See more details on using hashes here.

File details

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

File metadata

  • Download URL: plum_dispatch-1.5.8-cp39-cp39-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 133.3 kB
  • Tags: CPython 3.9, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 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.8-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 02de4de0351135e5262d1cb524e63fd36c4bbde602843d27ac03b67e38eed17a
MD5 ba77705709dd6f60c8df7cb685933609
BLAKE2b-256 e4e4cb8ab5692b288f1e6640a17354aaea391de446e41ece2dc36b51caf97e72

See more details on using hashes here.

File details

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

File metadata

  • Download URL: plum_dispatch-1.5.8-cp39-cp39-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 147.2 kB
  • Tags: CPython 3.9, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 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.8-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 857891afa02351a7bba59993d3c07c2874fcf8669e63d4b0618ae3936af49f57
MD5 28ba039cd00cd5c618882bc46b0f4b64
BLAKE2b-256 bdb21c3d0de4f22672d62e471821e83505df6a8f5e10801025bdc251472cfdcd

See more details on using hashes here.

File details

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

File metadata

  • Download URL: plum_dispatch-1.5.8-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 126.0 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 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.8-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 ff8f3c2470f995a5cf8275f37ad230cb3d6b08a63f6431fae92a24818e99a00d
MD5 6366f17bd7a2fddb8fe6e82176ec06d3
BLAKE2b-256 9c48b1c5a49a930ea5bea5901f9f05c48d4be9a18af50fdab9d5232c1ffc7ee8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: plum_dispatch-1.5.8-cp38-cp38-win32.whl
  • Upload date:
  • Size: 113.8 kB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 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.8-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 11bc752e2cdd65f9a023af02af156f5b75d571527ba70dc1b01749c8d04b0b37
MD5 d077f003b8ac5953ea60a27544281d54
BLAKE2b-256 eea21590cbea6106b476f5025ebf9ca5fdf9df19749e42e4790ea67234ea6fd9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: plum_dispatch-1.5.8-cp38-cp38-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 641.0 kB
  • Tags: CPython 3.8, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 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.8-cp38-cp38-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 8e80701b2a084999ef20b7f9b5a6bd2aff91b0b295872b7ad83766d90ac39453
MD5 a599e830a7f655026ae03a471b409860
BLAKE2b-256 8aaae10e3f844460dada37d7a150a743d535da2947b3759e5665f07383b0df4d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: plum_dispatch-1.5.8-cp38-cp38-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 614.3 kB
  • Tags: CPython 3.8, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 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.8-cp38-cp38-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 49ac568535a7517b20998afcae670a44d28fca4970a64fbfac4627f11ad03d00
MD5 aa85e02ba3174ffadb8218cc4a9c3bfd
BLAKE2b-256 fe32f9c056ecc1181dd1a0ef084710e1c528a1eafcd99321e3ea1375f1dbebba

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.8-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.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 1fd09c86788f94ecd47c9b02595322226dd9f9e9a9d375f39c651d546792c62d
MD5 04039a8516ae0ae34730b426f22c27c5
BLAKE2b-256 90f1181033397131d78b3ac5d9a5bdcfc4ebd7db347be3f5833091d5300d8641

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.8-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.8-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 db118350610a9cb864d16e9359a6d7b3bb7c23742298c1c6181cc3c5242c8f65
MD5 e8560f799b8771a0a0327944eb70e32e
BLAKE2b-256 8f1f0cafa7177da682d7b4bafdef9eeab760377f2c46dc56c813b7756664d76a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: plum_dispatch-1.5.8-cp38-cp38-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 133.2 kB
  • Tags: CPython 3.8, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 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.8-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d9aaa7734783194947d89da69925bdb7907deeaffee4a256de0905134b2e6d56
MD5 2d99f33685f0f1ec009770d1965fc2de
BLAKE2b-256 6c125717ddb91da38a5733eed5c1e161818bcdf05714c30ea602c4d12e5cd0e8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: plum_dispatch-1.5.8-cp38-cp38-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 145.6 kB
  • Tags: CPython 3.8, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 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.8-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 20af0f16d1f0ec3fd2c5cae1af95cf17c5575c71090f9028285a6d8939ac8820
MD5 18bfbfd233fa49eaf82b38ddb55117be
BLAKE2b-256 f9f330f170589fe19391ed6f1e6519b217b0ae9d614385ec45af209b8996692a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: plum_dispatch-1.5.8-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 123.1 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 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.8-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 d6fe662f88fdf6f2651a274c9be22a86990da12eba8a8192a0ca6631beed4cb0
MD5 3dd1dd06815660a21dec5a9e7d8f2011
BLAKE2b-256 aff409d90cf1c83158898e503061ed60c42a4929d5b272ab18cd6fa3f2578fbf

See more details on using hashes here.

File details

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

File metadata

  • Download URL: plum_dispatch-1.5.8-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 111.2 kB
  • Tags: CPython 3.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 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.8-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 5159935481742c22a2a9296b1165bc8433a6a28ffcaa00298f3e5a114b8137c6
MD5 bad857fa8c9657df9782170eea2512fe
BLAKE2b-256 d837a808bebab3d38169a7dce335af27f8981dc3dc68f2ab7100ed9b4476e18b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: plum_dispatch-1.5.8-cp37-cp37m-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 528.5 kB
  • Tags: CPython 3.7m, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 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.8-cp37-cp37m-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 4dfc31f4ff8d905a2381f6d0c3c0c5b535df911e4acd658f000d659a1861763d
MD5 03ca892ab702c08cfa83077f667a95d7
BLAKE2b-256 1f65d31a22ac46820bc60269f600a96cd430795c08a4eef47584fe2bad4cdf2e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: plum_dispatch-1.5.8-cp37-cp37m-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 504.3 kB
  • Tags: CPython 3.7m, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 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.8-cp37-cp37m-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 43192af53f46bfdda66cc52a37e6a767d3ddedac323c3ef98aae51f14c8da6e2
MD5 a368c2fdaf67c67bcc5f13bc8ae7f72f
BLAKE2b-256 514b139ccb34d7eb8389ef2c9ddc73e0cfe17dc3c3e961755a76a895bb700035

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.8-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.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 dba25376a8c769d7c34998c23363b10f6c26763d41e25094bcb6c14c732cc4b6
MD5 4d17dfc6907f23d4fc1ff7dd7d372ec9
BLAKE2b-256 13cde435467e73684ace6172c0c0fd1703323b2013dc49784657c5db39843399

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.8-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.8-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 eeda2899b865b6703efaf5dc9db598c3edb414e82f6b47aa4f9e0301ebf00c90
MD5 c82262cf0cb443d84dc71812ffcde89c
BLAKE2b-256 965c764ab897451b7041c03321fa72b00b6d1002f11ef724a559fda43b59f707

See more details on using hashes here.

File details

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

File metadata

  • Download URL: plum_dispatch-1.5.8-cp37-cp37m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 143.7 kB
  • Tags: CPython 3.7m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 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.8-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 ff7bf788ddea9f6c1b22f5ad8fcf43b322d732dd882c587c850935616e1fe8b4
MD5 3dab979d6348542d545ab55b4e4219bb
BLAKE2b-256 958e5cc3ac555046ed22e6e9c373dc27811d34bea46447591f6f8c490f02ba93

See more details on using hashes here.

File details

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

File metadata

  • Download URL: plum_dispatch-1.5.8-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 123.1 kB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 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.8-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 6834f702d3533f130f7d6e2ad91bbf944f555a19e45f795cefd692a55c4b689f
MD5 3047d27332f2ddb71da87f9c4fd07bf9
BLAKE2b-256 a27e7c7aa9c2c7f9f603334a6a1e270c3ef025ad61b164533645984fc79fef8e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: plum_dispatch-1.5.8-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 111.4 kB
  • Tags: CPython 3.6m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 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.8-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 fe880e0e4acb5d70ef0ba843acad77f4071f2e9af3eb2d9e1d64c9e93d404c65
MD5 44ef4e9f806efb29de833de263c9e0f1
BLAKE2b-256 92e2c9c3c2e1df22d8df5db8fe38acd529e2cd796d8ac4a8f2568d74db7e15e6

See more details on using hashes here.

File details

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

File metadata

  • Download URL: plum_dispatch-1.5.8-cp36-cp36m-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 531.0 kB
  • Tags: CPython 3.6m, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 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.8-cp36-cp36m-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 2bec152902a0cfb57d141817977c2eb62f70e220b5ff231fe902d0ab3c5b72fa
MD5 02bda748e0bebcc9c29ffb5a654e6ccf
BLAKE2b-256 79a833f36bd1abc0b5035ad43dfdc4224dff43fff77caed06191e30f353610c4

See more details on using hashes here.

File details

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

File metadata

  • Download URL: plum_dispatch-1.5.8-cp36-cp36m-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 504.0 kB
  • Tags: CPython 3.6m, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 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.8-cp36-cp36m-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 bd97e08d4520f3337f0ffea5772d5a761422818b2d4f3fd3ce458f406b11093e
MD5 38896a323bba87c4f9a7e601a1ede472
BLAKE2b-256 3c9d160127111bc5c210d422d72108635066e5fdea21e37099b08eaa48d0364e

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.8-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.8-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 5a945e059655ad07fb169d450a6ba69c56c672e734c9b21c95edb39c654a8eb2
MD5 7e858a366244edfe7e8972a525b19432
BLAKE2b-256 33f7b99c605273044abf5ab8a9984d992a5c153a1d46ffa9a584e760138684cc

See more details on using hashes here.

File details

Details for the file plum_dispatch-1.5.8-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.8-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 072da43cfbceb734df2b6cfa793bfd8f0ca9026f55f2580e41cc3e8f5807778b
MD5 ac7a090d656331958d171a7588e47ef9
BLAKE2b-256 695e4fb9e49500d0aaffcfd7de30a1845ec0d9df6ee060ede9d1240c15a7528c

See more details on using hashes here.

File details

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

File metadata

  • Download URL: plum_dispatch-1.5.8-cp36-cp36m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 143.1 kB
  • Tags: CPython 3.6m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 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.8-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 c29ebced6528597ee6b63a8d4e3dc2019aecb96b3512277dead56c81e8dafca3
MD5 798e4d35781de71091f0ae5edfc19766
BLAKE2b-256 607ba9e8f826b94ac6e2ae4a116e2c612369fd94ba394eeff846fd4e6190aa19

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