Skip to main content

A DSL for defining source code pretty printers

Project description

typeset-py

An embedded DSL for defining source code pretty printers.

Concept

The layout language is designed such that it fits well over a structurally recursive pass of some inductive data-structure; an abstract representation of the thing you wish to pretty print.

A layout is a tree of text literals composed together with either padded, unpadded compositions or with a line-break. The layout solver will select compositions in a layout and convert them into line-breaks, in order to make the layout fit within a given layout buffer width. It will do this in a greedy way, fitting as many literals on a line as possible. While doing so it will respect the annotated properties that the compositions are constructed under.

The solver being an abstract concept, is concretely implemented via two accompanying functions, a compiler implemented as compile, and a renderer implemented as render.

Null constructor

Sometimes in a data-structure there might be optional data (e.g. of type 'string option'), which when omitted should not have a layout. To make this case easy to handle, the null element of layout composition was added. The alternative would have been that you would need to keep track of an accumulator variable of the so-far-built layout in your layout function.

def layout_option(maybe_string: Optional[str]) -> Layout:
  match maybe_string:
    case None: return null()
    case data: return text(data)

Versus, e.g with an accumulator:

def layout_option(maybe_string: Optional[str], result: Layout) -> Layout:
  match maybe_string:
    case None: return result
    case data: return comp(result, text(data), True, False)

The null will be eliminated from the layout by the compiler, and will not be rendered, e.g:

foobar = comp(text('foo'), comp(null(), text('bar'), False, False), False, False)

When rendering foobar, when the layout fits in the layout buffer, the result will be:

       7
       |
foobar |
       |

Word literal constructor

These are the visible terminals that we are typesetting.

foo = text('foo')

When rendering foo, when the layout fits in the layout buffer, the result will be:

    4
    |
foo |
    |

It will simply overflow the buffer when it does not:

  2
  |
fo|o
  |

Fix constructor

Sometimes you need to render a part of some layout as inline, i.e. that its compositions should not be broken; this is what the fix constructor is for. In other words a fixed layout is treated as a literal.

foobar = fix(comp(text('foo'), text('bar'), False, False))

When rendering the fixed layout foobar, when the layout fits in the layout buffer, the result will be:

       7
       |
foobar |
       |

It will overflow the buffer when it does not:

  2
  |
fo|obar
  |

Grp constructor

The grp constructor prevents the solver from breaking its compositions, as long as there are compositions to the left of the group which could still be broken. This is useful when you need part of the layout to be treated as an item.

foobarbaz = comp(text('foo'), grp(comp(text('bar'), text('baz'), False, False)), False, False)

When rendering foobarbaz, when the layout fits in the layout buffer, the result will be:

          10
          |
foobarbaz |
          |

If one of the literals does not fit within the layout buffer, the result will be:

       7
       |
foo    |
barbaz |
       |

In contrast, had the group not been annotated, the result would have been:

       7
       |
foobar |
baz    |
       |

Since the composition between bar and baz was not guarded, and the layout solver is greedy and wants to fit as many literals on the same line as possible without overflowing the buffer. If the group still does not fit within the layout buffer, the group will be broken and the result will be:

    4
    |
foo |
bar |
baz |
    |

Seq constructor

The seq constructor forces the solver to break all of its compositions as soon as one of them is broken. This is useful when you have data that is a sequence or is list-like in nature; when one item in the sequence is put on a new line, then so should the rest of the items in the sequence.

foobarbaz = seq(comp(text('foo'), comp(text('bar'), text('baz'), False, False), False, False))

When rendering foobarbaz, when the layout fits in the layout buffer, the result will be:

          10
          |
foobarbaz |
          |

If one of the literals does not fit within the layout buffer, the result will be:

       7
       |
foo    |
bar    |
baz    |
       |

Since the compositions were part of a sequence; i.e when one of them broke, they all broke.

Nest constructor

The nest constructor is simply there to provide an extra level of indentation for all literals that it ranges over. The width of each level of indentation is given as a parameter to the render function.

foobarbaz = comp(text('foo'), nest(comp(text('bar'), text('baz'), False, False)), False, False)

When rendering foobarbaz with a indentation width of 2, when the layout fits in the layout buffer, the result will be:

          10
          |
foobarbaz |
          |

If one of the literals does not fit within the layout buffer, the result will be;

       7
       |
foobar |
  baz  |
       |

And when the layout buffer will only hold one of the literals, the result will be:

    4
    |
foo |
  ba|r
  ba|z
    |

In this case bar and baz will overflow the layout buffer because of the given indentation.

Pack constructor

The pack constructor defines an indentation level, but implicitly sets the indentation width to the index of the first literal in the layout it annotates. This is e.g. useful if you are pretty printing terms in a lisp-like language, where all other arguments to an application is often 'indented' to the same buffer index as the first argument.

foobarbaz = comp(text('foo'), pack(comp(text('bar'), text('baz'), False, False)), False, False)

When rendering foobarbaz, when the layout fits in the layout buffer, the result will be:

          10
          |
foobarbaz |
          |

When one of the literals do not fit, the result will be:

       7
       |
foobar |
   baz |
       |

When the layout buffer will only hold one literal, the result will be:

    4
    |
foo |
bar |
baz |
    |

The calculation of which buffer index to indent to is:

max((indent_level * indent_width), mark)

I.e the mark index will only be chosen if it is greater than the current indentation.

Forced linebreak composition

The forced linebreak composition does just that, it is a pre-broken composition.

foobar = line(text('foo'), text('bar'))

When rendering foobar, whether or not the layout fits in the layout buffer, the result will be:

        8
        |
foo     |
bar     |
        |

Unpadded composition

The unpadded composition will compose two layouts without any whitespace.

foobar = comp(text('foo'), text('bar'), False, False)

When rendering foobar, when the layout fits in the layout buffer, the result will be:

        8
        |
foobar  |
        |

Padded composition

The padded composition will compose two layouts with whitespace.

foobar = comp(text('foo'), text('bar'), True, False)

When rendering foobar, when the layout fits in the layout buffer, the result will be:

        8
        |
foo bar |
        |

Infix fixed compositions

The infix fixed compositions are syntactic sugar for compositions where the leftmost literal of the left operand, and the rightmost literal of the right operand are fixed together. I.e. the two following layouts are equivalent:

foobarbaz1 = comp(text('foo'), comp(text('bar'), text('baz'), False, True), False, False)
foobarbaz2 = comp(text('foo'), fix(comp(text('bar'), text('baz'), False, False)), False, False)

The example above might make it seem trivial, and that infix fixed compositions do not give you much value; but remember that you are composing layouts, not just literals. As such normalising the infix fixed composition is actually quite challenging since there are many different cases to consider when the fix is 'sunk in place' in the layout tree; this is part of what the compiler is responsible for.

Infix fixed compositions are useful when you need to fix a literal to the beginning or end of some other layout, e.g. separators between items in a sequence or list-like data structure. Without this feature you would again need to use an accumulator variable if you want to fix to the next literal, and probably need continuations if you want to fix to the last literal.

Compiling the layout

Your custom layout function (pretty printer) will build a layout, which you then need to compile and render:

...
document = compile(layout)
result = render(document, 2, 80)
print(result)
...

I.e. the layout should be given to the compiler, which gives you back a document ready for rendering, which you in turn give to the renderer along with arguments for indentation width and layout buffer width; in the above case indentation width is 2 and the layout buffer width is 80.

The reason for splitting the solver into compile and render, is in case the result is to be displayed in a buffer where the width is variable; i.e. you will not need to re-compile the layout between renderings using varying buffer width.

DSL and parsing

Additionally a small DSL has been defined, and a parser implemented, which allow you to write your layouts more succinctly (versus spelling out the full layout tree with the given constructors, which we've so far been doing throughout in this introduction!):

...
layout = parse('{0} @ null @ {1}', fragment1, fragment2)
...

The full grammar is as such:

{i}       (Indexed variable for layout fragment substitution with index i)
null      (Constructor for the empty layout)
"x"       (Constructor for a word/text layout literal over a string x)
fix u     (Constructor for a fixed layout over a layout u)
grp u     (Constructor for a group layout over a layout u)
seq u     (Constructor for a sequence layout over a layout u)
nest u    (Constructor for a indented/nested layout over a layout u)
pack u    (Constructor for a indexed margin layout over a layout u)
u @ v     (Forced linebreak composition of layouts u and v)
u @@ v    (Forced double linebreak composition of layouts u and v)
u & v     (Unpadded composition of layouts u and v)
u !& v    (Infix fixed unpadded composition of layouts u and v)
u + v     (Padded composition of layouts u and v)
u !+ v    (Infix fixed padded composition of layouts u and v)

Examples

For some examples of how to put all these layout constructors together into something more complex and useful, please reference in the examples directory.

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

typeset_soren_n-2.0.3.tar.gz (16.4 kB view details)

Uploaded Source

Built Distributions

typeset_soren_n-2.0.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl (1.4 MB view details)

Uploaded PyPy manylinux: glibc 2.5+ i686

typeset_soren_n-2.0.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

typeset_soren_n-2.0.3-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.5 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ s390x

typeset_soren_n-2.0.3-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.3 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

typeset_soren_n-2.0.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl (1.4 MB view details)

Uploaded PyPy manylinux: glibc 2.5+ i686

typeset_soren_n-2.0.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

typeset_soren_n-2.0.3-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.5 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ s390x

typeset_soren_n-2.0.3-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.3 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

typeset_soren_n-2.0.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl (1.4 MB view details)

Uploaded PyPy manylinux: glibc 2.5+ i686

typeset_soren_n-2.0.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

typeset_soren_n-2.0.3-pp37-pypy37_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.5 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ s390x

typeset_soren_n-2.0.3-pp37-pypy37_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.3 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

typeset_soren_n-2.0.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl (1.4 MB view details)

Uploaded PyPy manylinux: glibc 2.5+ i686

typeset_soren_n-2.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

typeset_soren_n-2.0.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.5 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ s390x

typeset_soren_n-2.0.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.4 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ppc64le

typeset_soren_n-2.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARM64

typeset_soren_n-2.0.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl (1.4 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.5+ i686

typeset_soren_n-2.0.3-cp311-none-win_amd64.whl (266.5 kB view details)

Uploaded CPython 3.11 Windows x86-64

typeset_soren_n-2.0.3-cp311-none-win32.whl (250.6 kB view details)

Uploaded CPython 3.11 Windows x86

typeset_soren_n-2.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

typeset_soren_n-2.0.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.5 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ s390x

typeset_soren_n-2.0.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.4 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ppc64le

typeset_soren_n-2.0.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.3 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARMv7l

typeset_soren_n-2.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

typeset_soren_n-2.0.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl (1.4 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.5+ i686

typeset_soren_n-2.0.3-cp311-cp311-macosx_11_0_arm64.whl (414.6 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

typeset_soren_n-2.0.3-cp311-cp311-macosx_10_7_x86_64.whl (429.3 kB view details)

Uploaded CPython 3.11 macOS 10.7+ x86-64

typeset_soren_n-2.0.3-cp310-none-win_amd64.whl (266.5 kB view details)

Uploaded CPython 3.10 Windows x86-64

typeset_soren_n-2.0.3-cp310-none-win32.whl (250.6 kB view details)

Uploaded CPython 3.10 Windows x86

typeset_soren_n-2.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

typeset_soren_n-2.0.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.5 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ s390x

typeset_soren_n-2.0.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.4 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ppc64le

typeset_soren_n-2.0.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.3 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARMv7l

typeset_soren_n-2.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

typeset_soren_n-2.0.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl (1.4 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.5+ i686

typeset_soren_n-2.0.3-cp310-cp310-macosx_11_0_arm64.whl (414.6 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

typeset_soren_n-2.0.3-cp310-cp310-macosx_10_7_x86_64.whl (429.3 kB view details)

Uploaded CPython 3.10 macOS 10.7+ x86-64

typeset_soren_n-2.0.3-cp39-none-win_amd64.whl (267.3 kB view details)

Uploaded CPython 3.9 Windows x86-64

typeset_soren_n-2.0.3-cp39-none-win32.whl (250.4 kB view details)

Uploaded CPython 3.9 Windows x86

typeset_soren_n-2.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

typeset_soren_n-2.0.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.5 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ s390x

typeset_soren_n-2.0.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.4 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ppc64le

typeset_soren_n-2.0.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.3 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARMv7l

typeset_soren_n-2.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

typeset_soren_n-2.0.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl (1.4 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.5+ i686

typeset_soren_n-2.0.3-cp38-none-win_amd64.whl (267.0 kB view details)

Uploaded CPython 3.8 Windows x86-64

typeset_soren_n-2.0.3-cp38-none-win32.whl (251.4 kB view details)

Uploaded CPython 3.8 Windows x86

typeset_soren_n-2.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

typeset_soren_n-2.0.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.5 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ s390x

typeset_soren_n-2.0.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.4 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ppc64le

typeset_soren_n-2.0.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.3 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARMv7l

typeset_soren_n-2.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARM64

typeset_soren_n-2.0.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl (1.4 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.5+ i686

typeset_soren_n-2.0.3-cp37-none-win_amd64.whl (267.1 kB view details)

Uploaded CPython 3.7 Windows x86-64

typeset_soren_n-2.0.3-cp37-none-win32.whl (251.4 kB view details)

Uploaded CPython 3.7 Windows x86

typeset_soren_n-2.0.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

typeset_soren_n-2.0.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.5 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ s390x

typeset_soren_n-2.0.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.4 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ ppc64le

typeset_soren_n-2.0.3-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.3 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ ARMv7l

typeset_soren_n-2.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ ARM64

typeset_soren_n-2.0.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl (1.4 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.5+ i686

File details

Details for the file typeset_soren_n-2.0.3.tar.gz.

File metadata

  • Download URL: typeset_soren_n-2.0.3.tar.gz
  • Upload date:
  • Size: 16.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.2.3

File hashes

Hashes for typeset_soren_n-2.0.3.tar.gz
Algorithm Hash digest
SHA256 7789e041aa7b699fab23f34875073df15882be7060f88007de047aa0ed1256ec
MD5 acda22fd0b807c09bb03382fd878d605
BLAKE2b-256 72ef31738d006aec906b1887dd9eb8e1b0360cb4a64948522d8c36777ad97799

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 596aa4e6881b811857e5691446bacba3564ff07c499b3e6d02d63928f3bf289e
MD5 75ab3f8637539f236c7b6209365a3f9d
BLAKE2b-256 fc8c2a56fb9bedb3dd1dccf289ea9df8bc792474d920c7ed8a5bddb1233974cf

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 7d55a37dd700a55d8938dda9f06a36f59ae5ebc2ce84883eab26ff9cbe5e294e
MD5 cc14579cb8fa7a602a9e257386a76a8c
BLAKE2b-256 9bf45385e6fe635413dc0d15dfe194a99ca8ec621ccea9648cac21d8f6d5b667

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ee30da2dd268bd8bc95f7153ce1fa0a34a597a14a38627b1949a0130b9738bc5
MD5 e3daf16af49a762209dac137094d3e41
BLAKE2b-256 0c51b9dd208a180724eb095c6d9c8b27ff98ac4d26c5f71bfe83ff4d28935381

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 1dce95d16fa9744d354b9816575e948fd8cf7686d524ab44451655ec986b5aea
MD5 ef161e37db1d412fbd4904815597fb23
BLAKE2b-256 d0d7e15616373f3d158bf478ff2cc2f532ca50d2b776085e25542b55c1518fb4

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 cfba30a8af35193066a7872f4f18391e7a4f85d7954ca6e02f9c2cd51f0a22af
MD5 d64169673fd23cab139f57ffc3ab5d4b
BLAKE2b-256 f89530efe2131ae3785d15dd146e158cafffb66dd807cdd55c356fd007c4a9bc

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 0996d030bf00dce517f386243567070404a8cb35eabbe4bc0aa54ab254e52df9
MD5 84ee3cf126d5f245e5def226db8c9dd7
BLAKE2b-256 dfff03e5f86936033819f97c83b73504bec7f56fbdb23b63be83bfe4d2a05e7f

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 77f74d911f76075d52f8bd1b13da9fb5c30a9634acf30dadfa7311dd05ad8b96
MD5 aacadb5e33baaafafabc28d0687f464f
BLAKE2b-256 5eac8ad7bee641071d12a3455366c011a4a64beb9f41ad4f4c091e5f4646ef07

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 4c7411f0aa9e2085882e69ebdabe5bb5ab5a6f519e58f581360f794901181d20
MD5 376e39009eff416a764cc07b9a3f9862
BLAKE2b-256 9de64c2feb05b161a61a19f70905993ab0ef94855f0d4df0c2b810915be10733

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e08f2f49149b5febcf16719733e233fa94852f38a992ce29ac61ab002ce2c390
MD5 a7018e35768f26782bfd3f0b74bc904c
BLAKE2b-256 e2fd41ce2b3a55f241191703e2e0a37418ebaa1d7224f82328f24d650ea2f96a

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 c6854804d9277caa4e02c98a06a167860abcdeac4f115cf9aa0ff9dd7332bd1b
MD5 33e7f9ab2f65eb4af1aece7ab5b1b08b
BLAKE2b-256 944b1bf6dab6d4ab8a1f36198e8706b7aa857f6b95059d51c414c66531b72e51

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 5ec734588451816709fa97e4da9fd5ead31fbdf562e8c1daf6272919671fbd3b
MD5 eaa39e1a180b48696baf51a0693edf10
BLAKE2b-256 155122635d88a6c3310f245d097916b6d42690550e345ba1b751298c332a3330

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 f6d58f189f9a3729ebb0fe668728524aafd9b21963979b2b883e62e47978256d
MD5 a7e748169bfb3b65992be72fd23a7a7d
BLAKE2b-256 0740559fcd6a044473e8ddae89c4ae72a5fdec3ec15f486d56c45652b49a98e6

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 495af3faab9d91cfbd4ece6a7bdb53cacc66f1b5b3f0837280c5a1060d29fd6d
MD5 5996bf587148883477301e7e0467697b
BLAKE2b-256 32467fc8ca52423bdf31c9887593dd265b4c604421584572ba3770c04bfc062c

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 a51c3fa4ef0e2ce9def2633bfd21342f64028068b9b854cb45976b2ed83fdef1
MD5 a33a4fbe88d1e6548de1805313be4e2d
BLAKE2b-256 ff2d7a7744e814ff7398a239ebb1be61b44c66ed8e3a32491adf1937b8298d96

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 cf587851b07fc3b28e204d3edee116f0e9bdde454d8fccf1d58cd9741fbff514
MD5 0525e98982f9d2401705ddc4ac92b0bd
BLAKE2b-256 989a10cd0dc4017cace40e490e1d3bf11a5442ba38c0dd273cb5a444f568fd03

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-pp37-pypy37_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-pp37-pypy37_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 44cf17366dcc5ab50e93590c8366e06a372aa14b49a47c43ed4995a43e5bb004
MD5 71deedee914aa90de1378eec087e3a95
BLAKE2b-256 f7770d6eb89fc5a18500e42b816eea51a73e83f6dc53b44587d9a067f9a2349e

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-pp37-pypy37_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-pp37-pypy37_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 1d548e69eedd525f2b3ae8590baa8a39490bee30e9118e0845d6a4ea042c802f
MD5 80b56ab53f29c844d0e28637fea46077
BLAKE2b-256 89f24e7cafdc79c9bb358e5c6daff2bf2d6195682adac44c6af1ada5d83b95a2

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-pp37-pypy37_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-pp37-pypy37_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 b90a884ac5563ddd2be542e23a55a85faab2bc7c2c5d405dc402a35d9b5c9ec7
MD5 616ccf13f362ec3c189ce9b8579e8e14
BLAKE2b-256 1cd054075ce96bba5c9f54d244f11a3c41ed0c70907f2b16c47287c1a43d14f5

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 c1d7c5abdc566480122e3bd4930e15bc296f01dd8ff0dcc72d301f287585ae3a
MD5 b6e47749840a2c02146dafa9725aae31
BLAKE2b-256 6e396763149ab8b15aad9b0acca09c812eba5a362d3d96326926603cc94fa48a

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 eee5c812d0d25a511f9e1fdae7177095c3602f3094d19fb7dfca8847bfa92a3f
MD5 6af4da2718f691cb1c796d8184a81ab7
BLAKE2b-256 7a9b716f9f1e66ed6dde21a6cf3356143e8088c9296c226048b30d0817823da3

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 64994298cdeed590eaba6bb821614e11ee62f8be448e2856b245a389e42f2681
MD5 a9d45cff1ac7fff5124ac3779e7c35bb
BLAKE2b-256 277e2ec20757efa5f80c16287414cd83ad1ce2f36dc399f2de2e7fd81a61cb0f

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 910cc40ecb7ad5d34a7673585fc1a49c8c2dc5dbdc1eb4310d8a8fb6fa88b1aa
MD5 bb01e62adc96cc0b3c2979dc9b96c716
BLAKE2b-256 67f973baa8179de9f9d8a51d909c401f67669c036388be44ed51dea3dd1c83ae

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 a4b2359b875444bdb23ad6e7d2602bd6b39faed20bbec0ebb38b6b1700417c4e
MD5 7c39b5ff726eb8130a3edf565f4df6fd
BLAKE2b-256 57c7fae052fdf3efe250f1ccd5d48ca86646abcf4235343bdc645f7eaec37340

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a4947dd0a2034eef47d156992022463139819f4cead8d2267d086ae38f5950a0
MD5 40afcc657479f09f7c80b576afa306ff
BLAKE2b-256 26d4b5d82e68c4b20e066fc75d889b395544fe81a397687b1406827ca7366cc5

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 6bb1fef9f4d4c2f14b790d91ce8bd126fce57b674b020a81ef01a125c47b1161
MD5 f0a725858d2603ebd7a7b7bf742ceedc
BLAKE2b-256 9841447b75e3bc363d9e2e798b0c25347e85318770db84250894c39c360e2a95

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp311-none-win_amd64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp311-none-win_amd64.whl
Algorithm Hash digest
SHA256 c7f1e53d8b1fdd957b185e5a4efbe271e1ceae92c9880133bbd3606822f02a67
MD5 b2b52ad54c7a7460a96390f25b3660f9
BLAKE2b-256 1355fb9a6a84759fb48c0985431f2ffdd62156ffb6ac1919427b43572c5a1080

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp311-none-win32.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp311-none-win32.whl
Algorithm Hash digest
SHA256 82b325a287fbfc4c6d174df2d50afaa13fc4f7eb667ea701be498fd6d143f272
MD5 d162b52056451173f6cb3eaadad722ab
BLAKE2b-256 68f6e52a99407422f63cc0e3db0fee02724ca0bdbd8e6a69bf109675e1aa1509

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ea3a7b68a9f2754f8f56e46ddba7e99032f19d319e4a02368176d2c448474feb
MD5 524370c1922cb9a184047044b029355d
BLAKE2b-256 86c98454199d4a7077486a106ec071605342a8f5cbc391cfd44218f96dc8dd5f

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 06b76a652fdb5e6df597c7c59817cf4754341438f426a4c7379266f408170b2f
MD5 388de454098df2b3f724b60072939f9a
BLAKE2b-256 1c431a761385c36b323eab0b8b12b082203753afc306199e363d8af33f68a96b

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 56ab38650c0ed5ffda2e7e746515ef5cc3d9b8b03973584e5d0baee4c5de6704
MD5 7bed1f3685e361b50e83824f97200f77
BLAKE2b-256 52ba2be8cc0dcd4ddb0ca6745ed9ca1763c2d964544c2b1679c16f78913bf82a

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 9d7d36eb30197c81f38da9fd7bdddda43675c9996fa2f04b064c356794319e5d
MD5 61df844b59bede615c1111d2dce43999
BLAKE2b-256 3c02a30e6f095893646fe89e020d0ab61255751b52db90adee9963884b8166e4

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 7a887a25f54b2fef8321e3f2e816ba91fbaafaf3f66e8748f47f511ccbd58959
MD5 7873ea90dff38c1f822eb121f1f90b16
BLAKE2b-256 4cf048c7bd10c8c48d0f8c37fd85dad05994fb03ed52be3a354d009d17b4dd45

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 cc6c5ea6e777955753a6ff1f6a8c112b621d681cfb4f9607242515420edc4bb5
MD5 5749d0cfd1091603ab33b6a572dbf745
BLAKE2b-256 a31674e9182653165c27b2561ded2c1aba943359c625eaf7c5c4326d88365304

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d6863de2c97d4cd66e7e0a69d0ade49e05c0c8c18ac8ca9a7350f9b7bba6b354
MD5 f56ee0a72b264e2c495957555c59395f
BLAKE2b-256 134f630f8dc63bad6c993d2cef5ce82073707ebd3edca3d51e5f84a4addb7e3a

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp311-cp311-macosx_10_7_x86_64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp311-cp311-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 7f19a7f8ffd91b86bc3fd0840f7a021f73e2ce8b6379ca102c72bb9c806701d3
MD5 861074a0d64974f80fc21f28f33ca723
BLAKE2b-256 396d3a86a2be368ac72b093532522dc82651d6062498252034d09485e73623b7

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp310-none-win_amd64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp310-none-win_amd64.whl
Algorithm Hash digest
SHA256 09acca0b03feeb9f5579800a48498e076d34c30c6282a0e247b9ea34d177966f
MD5 e62fa105d5b6db0200f5d9d76e248701
BLAKE2b-256 632fa181ca1dbf1f9547b6291464a4db2be43286aead67f2470b71f49ca7de97

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp310-none-win32.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp310-none-win32.whl
Algorithm Hash digest
SHA256 65b37c6aca30f641e02a48b8198a7796021975350114b2058b737817b74f8a2c
MD5 a33bddcde5cda4ad12e6c3094aedb3a7
BLAKE2b-256 466eb98aec5222f2ba00c76a41bc6e9d80d78aac48cc5c6949226e9b0f2b57c9

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f92a4b161fc805353ad749e01d5c34900af6fc51d243a7e75f71c274017e3991
MD5 151f362cb04fd1374daa6a6ce48c4fdd
BLAKE2b-256 cae5f423d17707ccf86b333a62f5a3a9890ed8ee0c225c5dba5f5c53053f6fa8

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 4eb1a802ac9d8d229ce3fddaf061be7d5904c100f5a25678eca29d731b79ac8c
MD5 d27946999a9852e2e8a70bf0a50d201f
BLAKE2b-256 76c5027cb1ea03dfced209a5d8d4bebe7416114ba9f8b7a6f18ae457a71a2948

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 9829cef04811f40fad2bde3c14c80a78e052cf1bea256cfb141499f56fbcb2be
MD5 bc2739022003e87b4f12f33a565e399f
BLAKE2b-256 3df5a4d99a63ffb3f8f43c1f5194db819fec2419bffc23e90f82c9fa9480c858

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 63e9c7425abfca0c91f14159a4b735e1707af4ea5e8768095e09768cc13bb7e0
MD5 fd3dbb9c255d5efa1404d11e531d6f91
BLAKE2b-256 bcd291363da5de613255125e0a92d824582ce66f4383b25ba565fc8a113e1ece

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 3d48e50bb876d3f2550f224f2615d06921ec6e597da965466097ea7c8dff92c8
MD5 9b763a6b4baf324a817809aac6a467e1
BLAKE2b-256 1c8adfe75655031bdcbcee5efff1949802b5409f1461f3d536b258593953535c

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 d711eb6f0f8ff78f1122ce06c2103727c695e98ef2da8d9480fcc1d353fafa5a
MD5 205f47385403070c0a02228356b98e90
BLAKE2b-256 dcca418aa0a3833f7a3a3e9e01055f67cf0cdbf08da203de0eb8279d21efeb19

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 dccf0c48e028e5e5881757c4c509475870b97e647691fd2b97de84c3814820ab
MD5 bb2235f727fcedb09a84bc8c81e7b2a5
BLAKE2b-256 b6ced6c1d0dca4437f272690fb0190ef98508e293683477c2f39fedfe93812b5

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp310-cp310-macosx_10_7_x86_64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp310-cp310-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 299447ca4ded7ac6174702ee9cd72006fb678d31396eb4943c0f08ba2d477701
MD5 fd23e237c50f1743af6b8d3c0d9a1820
BLAKE2b-256 d26dfa5862aa38da26d76d7a895c6e3da8e114e3764145a22125791409659fd4

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp39-none-win_amd64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp39-none-win_amd64.whl
Algorithm Hash digest
SHA256 320248f1c5dcbdea461b25273883dea8fc515bf1bc359b5aa6fbfddd45d45bd1
MD5 9f527b733fe8a54ec169e07441613333
BLAKE2b-256 900fe7c64efba8e394c98aec4c2ad7fb5698d5585c368b30f144fa305426ae0e

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp39-none-win32.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp39-none-win32.whl
Algorithm Hash digest
SHA256 75077b123af35c7c5b7facde01c0134a5f2a3456bc28aa08b45a37480b9a47d1
MD5 e82fd19c8c7f7f873e29ae3103ff6ded
BLAKE2b-256 f084c99bc9d8f5184df754badd681e6cdcc2f21368ef982e28ffab7259ac97de

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ed0a1e8b5ea2b978491f54c2c81ca12b01e1858bbf49b5500a53d51ade2ccc48
MD5 5ec50e57bee32ec25977a6da9a4c7ad8
BLAKE2b-256 1e35adf1fa260e3d93e37014c4fa70624e147733503b77126c585600bb284fe8

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 26df0648c0fd7d9dd2cc3e87b92d9e74df46284e8796210006d1542383e8b358
MD5 dc32073598ec6e11fd00f2711cbe103b
BLAKE2b-256 ac9bef6a7e1f5fae700a94198b79850ce66d6aba31a3868feb14026757ff982b

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 ddc6c5b986555f16a1fc023784c0b74be0af766fa2a296b69f1fd0d5ca58776f
MD5 36964212d7f753b40d20c846bc2ff640
BLAKE2b-256 92d1c99b5007d34e3ea29213760b8a51627b4adbd89730b89b8f33557c3e9911

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 d58542fe1aa296e957205edec688dbb68e699a1224db7aa3b280c04333a07584
MD5 e56fc7a7ebf1b8402414c2366eb1f1a6
BLAKE2b-256 af0b4826afddb443bf0ad64dc4ab7c7e422bc6eaa475e49bd2a12839e8a614f9

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 89aa89ea4eff259fdbe32fde54ae8d80c9d1db97a44b39e298d9f6a9d0e2effc
MD5 9b23c473a373780226e460ffc9e20248
BLAKE2b-256 4b558e4c0533a03e407a0c59fd3706a9a127d011628110ea3ac0f2e0566e5d6a

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 3a6b90231ba67986e31c2e10236975fc939e989a1ef32758d896140d642512d1
MD5 a20efff640a8672c1480db846c71a17b
BLAKE2b-256 6dbea4e9130b2e98206ba743e85a7017a177fc0f7ce521d1cfca0fbc1b7fdbcb

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp38-none-win_amd64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp38-none-win_amd64.whl
Algorithm Hash digest
SHA256 94eb453eae24752d8d9d335d6b72d2c7a2cd6a562940a4662f054aac96fd2ef0
MD5 8256743d7fc92cda0e5172bdcde42c76
BLAKE2b-256 98191efbce5ec5c75c97388b8f0da94d467ab80d04654b0d4813f4952b8d6ebb

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp38-none-win32.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp38-none-win32.whl
Algorithm Hash digest
SHA256 a9b170dd1e7588617f300cdd417e88400eeb3fd7e5ed5642db895537391d44fe
MD5 6a8187b2eccd29dfccafc4dea1f094b6
BLAKE2b-256 d4d76762ad42044a6555e373d4d0140291c0289c7579269f261ce3b3442f9e2a

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d0ce31c5cc06c0a36f2a91d990555fc8c2513bc1926df51c6ffb293626b20b70
MD5 949bed78ab254138ea852eefc79af8ce
BLAKE2b-256 69ef13155d0dd4f4097aad56f6ea696938f8bd1edaf75a06d23d3357401569aa

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 c4142213e49bc6a991a6cf2100db6da4df040e728804315fe1aee4e1600c8583
MD5 a7835668a0c72d830947f1242a81304d
BLAKE2b-256 b0cc6581f5f10974dfecef98a3c02a28c8720aeba0bb48defc61773747b1049f

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 28d8545ef19bd28661c566700ed18059236c5dfd935c33095e1a3123f0db5086
MD5 825edf8571e5fab4bfa71d4480b5e4c0
BLAKE2b-256 5cb3cd9bd5d915ce598f3b0b0159c3ad8086628b4b18cff4cdd28e2100a33255

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 73129fe9570607fa8cc88ac8e01cca80fd131734aa05a021aa1e57e245b56f6e
MD5 dc77a34885df69568210af358b6e1223
BLAKE2b-256 7f37e3590637863c598b5294fee871317476bed7d8acc1fbe006b93e35f41d8d

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2d5fcb7204a2c45e89a32a115db31fba7725d767e0eb8b77593e746eb96c8f89
MD5 538b9c906e28901f2b263dbacc6d21e0
BLAKE2b-256 bc795e2232be3e0252c91ac7a44065d0f6a5d3ad1b8bc66f63542e388a8afd83

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 1118949662f75312087594b0807b6c18e542ef0aa6ea63fc3e4d746610cb64de
MD5 3d6adebf7b5d239c2e3bb5bf769d6382
BLAKE2b-256 e90d6f03c85e36f3c494c29c63889cd71e2209592830303cf82fd6a3a421e64e

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp37-none-win_amd64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp37-none-win_amd64.whl
Algorithm Hash digest
SHA256 df17d40557ecd6d1dec5189532a5576fec91e5d4189cfec326a86d8faf9983f3
MD5 4127132064c6295393f27ad64dcbaf44
BLAKE2b-256 f12550d6208efce9fb863d999abb209a5e02b41bd2115bb6b78b4bbd3c69d93b

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp37-none-win32.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp37-none-win32.whl
Algorithm Hash digest
SHA256 2dadf3a0450aa6f9a55f9ee763ce577da12f031f5479aae6c961f28f877af884
MD5 2f8714df8ee9e8a72daf0a2b51244d83
BLAKE2b-256 4a01b4ac6d68c0665a3da5454e065ed17ad3e2a660218db6e8362918279890b3

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8bead59826e5783e78bb6ccd8ff7c11764593f534cee424d5c13905e476c5d22
MD5 6454cb42222a2047d8dbc657bf335849
BLAKE2b-256 4411c21b4b99461610bf3956fa6acf898ea63a21a5810b2feebb14a59623ca13

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 a5e4cca67f8e0b968e877e9601f41d0a4e8d4811c0da89edafe67631b0eadd1c
MD5 759e471840c75cc1764d6f1533eb103e
BLAKE2b-256 64a05122e993b896a46378db023ef1f2e2114699bf2628365ab81e049b56b15b

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 18a79c29a6147677e453798887fcf703bbebdd7c89e14755b008cd132ce538c8
MD5 d67e1b323e64edb61b11d48b931318a5
BLAKE2b-256 5863b3508e31d13c5b7d0f0810118f8b90874f3405f20acd9db750636e2b48eb

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 e1cb4858708a46b112696cb96c365cfe7eb0577a6f263501309c3ff2f3f64896
MD5 2aeaa8ec425be553cb2459d4a21e809d
BLAKE2b-256 d1e1d2a960e057533e58b1d79aa5287aaa0f9c707080da91f94a7a60817cfa49

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 0194bd6a2934fc971625da0b158bb363a1103df2b63bcd4f6fd1b6b19f458a8e
MD5 e2c5ec088090b97ab0f9222557890eed
BLAKE2b-256 f7030d5f0c159639dfeae296a43cdbe6eae52b11d4a5782631e2edaaf64fed5a

See more details on using hashes here.

Provenance

File details

Details for the file typeset_soren_n-2.0.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl.

File metadata

File hashes

Hashes for typeset_soren_n-2.0.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl
Algorithm Hash digest
SHA256 64d9c6f2c2a8e41db06aafb5d42ce64fb13410df92fdb7c6cef1493aedcfeec4
MD5 4b6ab3f35a8760d6356b3f9bfbba3193
BLAKE2b-256 a53c7e604146b17519b8aac162243cb0a9d835c74d1d1447383bbbb74da0a43a

See more details on using hashes here.

Provenance

Supported by

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