Skip to main content

A Python port of Martini for fast terrain mesh generation

Project description

pymartini

A Cython port of Martini for fast RTIN terrain mesh generation, 2-3x faster than Martini in Node. The only dependency is Numpy.

A wireframe rendering of the Grand Canyon. The mesh is created using pymartini, encoded using quantized-mesh-encoder, served on-demand using dem-tiler, and rendered with deck.gl.

Install

With pip:

pip install pymartini

or with Conda:

conda install -c conda-forge pymartini

Using

Example

The API is modeled after Martini.

from pymartini import Martini

# set up mesh generator for a certain 2^k+1 grid size
# Usually either 257 or 513
martini = Martini(257)

# generate RTIN hierarchy from terrain data (an array of size^2 length)
tile = martini.create_tile(terrain)

# get a mesh (vertices and triangles indices) for a 10m error
vertices, triangles = tile.get_mesh(10)

API

The Martini class and create_tile and get_mesh methods are a direct port from the JS Martini library.

Additionally I include two helper functions: decode_ele to decode a Mapbox Terrain RGB or Terrarium PNG array to elevations; and rescale_positions, which adds elevations to each vertex and optionally linearly rescales each vertex's XY coordinates to a new bounding box.

Martini

A class to instantiate constants needed for the create_tile and get_mesh steps. As noted in the benchmarks below, instantiating the Martini class is the slowest of the three functions. If you're planning to create many meshes of the same size, create one Martini class and create many tiles from it.

Arguments
  • grid_size (int, default 257): the grid size to use when generating the mesh. Must be 2^k+1. If your source heightmap is 256x256 pixels, use grid_size=257 and backfill the border pixels.
Returns

Returns a Martini instance on which you can call create_tile.

Martini.create_tile

Generate RTIN hierarchy from terrain data. This is faster than creating the Martini instance, but slower than creating a mesh for a given max error. If you need to create many meshes with different errors for the same tile, you should reuse a Tile instance.

Arguments
  • terrain (numpy ndarray): an array of dtype float32 representing the input heightmap. The array can either be flattened, of shape (2^k+1 * 2^k+1) or a two-dimensional array of shape (2^k+1, 2^k+1). Note that for a 2D array pymartini expects indices in (columns, rows) order, so you might need to transpose your array first. Currently an error will be produced if the dtype of your input array is not np.float32.
Returns

Returns a Tile instance on which you can call get_mesh.

Tile.get_mesh

Get a mesh for a given max error.

Arguments
  • max_error (float, default 0): the maximum vertical error for each triangle in the output mesh. For example if the units of the input heightmap is meters, using max_error=5 would mean that the mesh is continually refined until every triangle approximates the surface of the heightmap within 5 meters.
Returns

Returns a tuple of (vertices, triangles).

Each is a flat numpy array. Vertices represents the interleaved 2D coordinates of each vertex, e.g. [x0, y0, x1, y1, ...]. If you need 3D coordinates, you can use the rescale_positions helper function described below.

triangles represents indices within the vertices array. So [0, 1, 3, ...] would use the first, second, and fourth vertices within the vertices array as a single triangle.

decode_ele

A helper function to decode a PNG terrain tile into elevations.

Arguments
  • png (np.ndarray): Ndarray of elevations encoded in three channels, representing red, green, and blue. Must be of shape (tile_size, tile_size, >=3) or (>=3, tile_size, tile_size), where tile_size is usually 256 or 512
  • encoding (str): Either 'mapbox' or 'terrarium', the two main RGB encodings for elevation values
  • backfill (bool, default True): Whether to create an array of size (tile_size + 1, tile_size + 1), backfilling the bottom and right edges. This is used because Martini needs a grid of size 2^n + 1
Returns
  • (np.ndarray) Array with decoded elevation values. If backfill is True, returned shape is (tile_size + 1, tile_size + 1), otherwise returned shape is (tile_size, tile_size), where tile_size is the shape of the input array.
Example
from imageio import imread
from pymartini import decode_ele

path = './test/data/fuji.png'
fuji = imread(path)
terrain = decode_ele(fuji, 'mapbox')

rescale_positions

A helper function to rescale the vertices output and add elevations. The output is a numpy ndarray of the form [[x1, y1, z1], [x2, y2, z2], ...].

Arguments
  • vertices: (np.array) vertices output from Martini
  • terrain: (np.ndarray) 2d heightmap array of elevations as output by decode_ele. Expected to have shape (grid_size, grid_size). terrain is expected to be the exact same array passed to Martini.create_tile. If you use a different or transposed array, the mesh will look weird. See #15. If you need to transpose your array, do it before passing to Martini.create_tile.
  • bounds: (List[float], default None) linearly rescale position values to this extent, expected to be [minx, miny, maxx, maxy]. If not provided, no rescaling is done
  • flip_y: (bool, default False) Flip y coordinates. Can be useful when original data source is a PNG, since the origin of a PNG is the top left.
Example
from imageio import imread
from pymartini import decode_ele, Martini, rescale_positions

path = './test/data/terrarium.png'
png = imread(path)
terrain = decode_ele(png, 'mapbox')
martini = Martini(png.shape[0] + 1)
tile = martini.create_tile(terrain)
vertices, triangles = tile.get_mesh(10)

# Use mercantile to find the bounds in WGS84 of this tile
import mercantile
bounds = mercantile.bounds(mercantile.Tile(385, 803, 11))

# Rescale positions to WGS84
rescaled = rescale_positions(
    vertices,
    terrain,
    bounds=bounds,
    flip_y=True
    column_row=True
)

Martini or Delatin?

Two popular algorithms for terrain mesh generation are the "Martini" algorithm, found in the JavaScript martini library and this Python pymartini library, and the "Delatin" algorithm, found in the C++ hmm library, the Python pydelatin library, and the JavaScript delatin library.

Which to use?

For most purposes, use pydelatin over pymartini. A good breakdown from a Martini issue:

Martini:

  • Only works on square 2^n+1 x 2^n+1 grids.
  • Generates a hierarchy of meshes (pick arbitrary detail after a single run)
  • Optimized for meshing speed rather than quality.

Delatin:

  • Works on arbitrary raster grids.
  • Generates a single mesh for a particular detail.
  • Optimized for quality (as few triangles as possible for a given error).

Correctness

pymartini passes the (only) test case included in the original Martini JS library. I also wrote a few extra conformance tests to compare output by pymartini and Martini. I've found some small differences in float values at the end of the second step.

This second step, martini.create_tile(terrain), computes the maximum error of every possible triangle and accumulates them. Thus, small float errors appear to be magnified by the summation of errors into larger triangles. These errors appear to be within 1e-5 of the JS output. I'm guessing that this variance is greater than normal float rounding errors, due to this summation behavior.

These differences are larger when using 512px tiles compared to 256px tiles, which reinforces my hypothesis that the differences have something to do with small low-level float or bitwise operations differences between Python and JavaScript.

If you'd like to explore this in more detail, look at the Tile.update() in martini.pyx and the corresponding Martini code.

Type Checking

As of pymartini 0.4.0, types are provided, which can be used with a checker like mypy. If you wish to get the full benefit, make sure to enable Numpy's mypy plugin.

Benchmark

Preparation steps are about 3x faster in Python than in Node; generating the mesh is about 2x faster in Python than in Node.

Python

git clone https://github.com/kylebarron/pymartini
cd pymartini
pip install '.[test]'
python bench.py
init tileset: 14.860ms
create tile: 5.862ms
mesh (max_error=30): 1.010ms
vertices: 9700.0, triangles: 19078.0
mesh 0: 18.350ms
mesh 1: 17.581ms
mesh 2: 15.245ms
mesh 3: 13.853ms
mesh 4: 11.284ms
mesh 5: 12.360ms
mesh 6: 8.293ms
mesh 7: 8.342ms
mesh 8: 7.166ms
mesh 9: 5.678ms
mesh 10: 5.886ms
mesh 11: 5.092ms
mesh 12: 3.732ms
mesh 13: 3.420ms
mesh 14: 3.524ms
mesh 15: 3.101ms
mesh 16: 2.892ms
mesh 17: 2.358ms
mesh 18: 2.250ms
mesh 19: 2.293ms
mesh 20: 2.281ms
20 meshes total: 155.559ms

JS (Node)

git clone https://github.com/mapbox/martini
cd martini
npm install
node -r esm bench.js
init tileset: 54.293ms
create tile: 17.307ms
mesh: 6.230ms
vertices: 9704, triangles: 19086
mesh 0: 43.181ms
mesh 1: 33.102ms
mesh 2: 30.735ms
mesh 3: 25.935ms
mesh 4: 20.643ms
mesh 5: 17.511ms
mesh 6: 15.066ms
mesh 7: 13.334ms
mesh 8: 11.180ms
mesh 9: 9.651ms
mesh 10: 9.240ms
mesh 11: 10.996ms
mesh 12: 7.520ms
mesh 13: 6.617ms
mesh 14: 5.860ms
mesh 15: 5.693ms
mesh 16: 4.907ms
mesh 17: 4.469ms
mesh 18: 4.267ms
mesh 19: 4.267ms
mesh 20: 3.619ms
20 meshes total: 290.256ms

License

This library is ported from Mapbox's Martini, which is licensed under the ISC License. My additions are licensed under the MIT license.

ISC License

Copyright (c) 2019, Mapbox

Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

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

pymartini-0.4.3.tar.gz (152.5 kB view details)

Uploaded Source

Built Distributions

pymartini-0.4.3-cp310-cp310-win_amd64.whl (237.6 kB view details)

Uploaded CPython 3.10 Windows x86-64

pymartini-0.4.3-cp310-cp310-musllinux_1_1_x86_64.whl (687.0 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

pymartini-0.4.3-cp310-cp310-musllinux_1_1_i686.whl (651.8 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.1+ i686

pymartini-0.4.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (674.6 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

pymartini-0.4.3-cp310-cp310-macosx_11_0_arm64.whl (230.5 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

pymartini-0.4.3-cp310-cp310-macosx_10_9_x86_64.whl (240.2 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

pymartini-0.4.3-cp310-cp310-macosx_10_9_universal2.whl (322.0 kB view details)

Uploaded CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64)

pymartini-0.4.3-cp39-cp39-win_amd64.whl (236.5 kB view details)

Uploaded CPython 3.9 Windows x86-64

pymartini-0.4.3-cp39-cp39-musllinux_1_1_x86_64.whl (684.7 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

pymartini-0.4.3-cp39-cp39-musllinux_1_1_i686.whl (652.0 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

pymartini-0.4.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (671.3 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

pymartini-0.4.3-cp39-cp39-macosx_11_0_arm64.whl (229.4 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

pymartini-0.4.3-cp39-cp39-macosx_10_9_x86_64.whl (238.6 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

pymartini-0.4.3-cp39-cp39-macosx_10_9_universal2.whl (320.2 kB view details)

Uploaded CPython 3.9 macOS 10.9+ universal2 (ARM64, x86-64)

pymartini-0.4.3-cp38-cp38-win_amd64.whl (246.1 kB view details)

Uploaded CPython 3.8 Windows x86-64

pymartini-0.4.3-cp38-cp38-musllinux_1_1_x86_64.whl (712.8 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ x86-64

pymartini-0.4.3-cp38-cp38-musllinux_1_1_i686.whl (682.1 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ i686

pymartini-0.4.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (684.2 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

pymartini-0.4.3-cp38-cp38-macosx_11_0_arm64.whl (237.1 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

pymartini-0.4.3-cp38-cp38-macosx_10_9_x86_64.whl (246.2 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

pymartini-0.4.3-cp38-cp38-macosx_10_9_universal2.whl (325.9 kB view details)

Uploaded CPython 3.8 macOS 10.9+ universal2 (ARM64, x86-64)

pymartini-0.4.3-cp37-cp37m-win_amd64.whl (244.6 kB view details)

Uploaded CPython 3.7m Windows x86-64

pymartini-0.4.3-cp37-cp37m-musllinux_1_1_x86_64.whl (654.9 kB view details)

Uploaded CPython 3.7m musllinux: musl 1.1+ x86-64

pymartini-0.4.3-cp37-cp37m-musllinux_1_1_i686.whl (621.8 kB view details)

Uploaded CPython 3.7m musllinux: musl 1.1+ i686

pymartini-0.4.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (645.0 kB view details)

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

pymartini-0.4.3-cp37-cp37m-macosx_10_9_x86_64.whl (246.2 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

pymartini-0.4.3-cp36-cp36m-win_amd64.whl (244.7 kB view details)

Uploaded CPython 3.6m Windows x86-64

pymartini-0.4.3-cp36-cp36m-musllinux_1_1_x86_64.whl (655.3 kB view details)

Uploaded CPython 3.6m musllinux: musl 1.1+ x86-64

pymartini-0.4.3-cp36-cp36m-musllinux_1_1_i686.whl (623.6 kB view details)

Uploaded CPython 3.6m musllinux: musl 1.1+ i686

pymartini-0.4.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (646.0 kB view details)

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

pymartini-0.4.3-cp36-cp36m-macosx_10_9_x86_64.whl (246.1 kB view details)

Uploaded CPython 3.6m macOS 10.9+ x86-64

File details

Details for the file pymartini-0.4.3.tar.gz.

File metadata

  • Download URL: pymartini-0.4.3.tar.gz
  • Upload date:
  • Size: 152.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for pymartini-0.4.3.tar.gz
Algorithm Hash digest
SHA256 67c9293644400ad3388a10ba5f4dc8bbc227c12b4a7f5fefc2ebc4e81e9a678f
MD5 951b3ee51b82a9869dcc5361fb6ee869
BLAKE2b-256 be133ead01a61ed22e458446e0e32aedb3f7b337b402354b219ad7c3d32c7428

See more details on using hashes here.

File details

Details for the file pymartini-0.4.3-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: pymartini-0.4.3-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 237.6 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for pymartini-0.4.3-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 84d0b1591f71ee195a08d41059d72018e6d8ef220e2866e0836d7f70fa1a511f
MD5 70dae94c339a7e9f137ac1313bdc313f
BLAKE2b-256 135d5ff8fd365c6f5a57c72e490169117bfc648776e9942e3311a6cd4eb03d29

See more details on using hashes here.

File details

Details for the file pymartini-0.4.3-cp310-cp310-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: pymartini-0.4.3-cp310-cp310-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 687.0 kB
  • Tags: CPython 3.10, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for pymartini-0.4.3-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 04aadd0ddb96f0f41f715ac05a830ecffecd9c889cdc35f2cd72fabbef025fb3
MD5 fb07a6cf3b661879ddbfadb09066f630
BLAKE2b-256 fbb57c625246b79c49ba85ffbe952ad3307aac75f6f973d18f529f33d6475bc5

See more details on using hashes here.

File details

Details for the file pymartini-0.4.3-cp310-cp310-musllinux_1_1_i686.whl.

File metadata

  • Download URL: pymartini-0.4.3-cp310-cp310-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 651.8 kB
  • Tags: CPython 3.10, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for pymartini-0.4.3-cp310-cp310-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 bc60e7b98607b2575d598e467b8feecb832c253d491f42d374a226f054c7a0cc
MD5 0fba4c0cc3c3d07b584be48d74032bde
BLAKE2b-256 ea8d52fea3e428605ed875f4486e451167b8edda5820b8364a8af401b5e13519

See more details on using hashes here.

File details

Details for the file pymartini-0.4.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pymartini-0.4.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 255344fd42332ee18db5739177c4fb46e632f61976c5454b5c6b1496fed3a0c1
MD5 a956db373f6fae6fb2925831739c8413
BLAKE2b-256 09a9787c15e66d5a61350772d245f9409f4c088c1daa18f98d6cd7709548f200

See more details on using hashes here.

File details

Details for the file pymartini-0.4.3-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

  • Download URL: pymartini-0.4.3-cp310-cp310-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 230.5 kB
  • Tags: CPython 3.10, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for pymartini-0.4.3-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3f310fb0dda84d9f3a3106a81494dd8432be0cc8d84eff5041c18e7b33fbc512
MD5 7c338eee2c95bd5afb1a5705a5a6c077
BLAKE2b-256 b931ecf83880ca2577c729a4496177a9358322186eb5fc09a8f973e2446d7318

See more details on using hashes here.

File details

Details for the file pymartini-0.4.3-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: pymartini-0.4.3-cp310-cp310-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 240.2 kB
  • Tags: CPython 3.10, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for pymartini-0.4.3-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 8289bab96bc21f5bbff80732a35a9014a23b74656394ff0e5239ef7e0a6c96a4
MD5 bc2336cfd0f39ab53729e6934ebd098f
BLAKE2b-256 bc6db0791ef5491b0de6c2bab1eb7d0afd6c5f2e439156604541dd6adf95ff72

See more details on using hashes here.

File details

Details for the file pymartini-0.4.3-cp310-cp310-macosx_10_9_universal2.whl.

File metadata

  • Download URL: pymartini-0.4.3-cp310-cp310-macosx_10_9_universal2.whl
  • Upload date:
  • Size: 322.0 kB
  • Tags: CPython 3.10, macOS 10.9+ universal2 (ARM64, x86-64)
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for pymartini-0.4.3-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 b1d3dc0fee9a07446c5fa1e9817440a70a17fb1ba2ab3053bd1666087e3ed91d
MD5 5f36d73e93c72045d43c6efe7440191c
BLAKE2b-256 902d470b8bd96a7b4ff8d4187b12b609995980d8c503e8aa7c9cf5608f89c8bb

See more details on using hashes here.

File details

Details for the file pymartini-0.4.3-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: pymartini-0.4.3-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 236.5 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for pymartini-0.4.3-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 e449703149db9bc1735d6c7142cb11fea719910c25ef8e97a989c9a836793128
MD5 2d9afbaf4c5936d82dadc319abbd486d
BLAKE2b-256 0a0bf3b7e37cd9d04bba42cafe19222fa35bae161d671c63437719244ab6575e

See more details on using hashes here.

File details

Details for the file pymartini-0.4.3-cp39-cp39-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: pymartini-0.4.3-cp39-cp39-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 684.7 kB
  • Tags: CPython 3.9, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for pymartini-0.4.3-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 8c402dcdffd7af043fadf76a0b02fafde65706d57848983eab63f81cec6a879b
MD5 8b54e76f393161c8c0a46c2b1e7d94c5
BLAKE2b-256 74537d874451f5cc683b38d1c147bf6cea4948edc3c74f33018c5a01ce5791d8

See more details on using hashes here.

File details

Details for the file pymartini-0.4.3-cp39-cp39-musllinux_1_1_i686.whl.

File metadata

  • Download URL: pymartini-0.4.3-cp39-cp39-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 652.0 kB
  • Tags: CPython 3.9, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for pymartini-0.4.3-cp39-cp39-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 0509d032ffe75d9e992ae270a9ad3ac0d74aabbd799a20fae667d089fa346ca2
MD5 fc243720f714a0666ddb0a63481bbb5e
BLAKE2b-256 93c06cdc83e75a5175e97ca9a523ac2505d858433493a204d84f78fb237bfabd

See more details on using hashes here.

File details

Details for the file pymartini-0.4.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pymartini-0.4.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b7e61d40c1cab47303dca41c426b3f3251323e02c3accad6ea59bd997533bebc
MD5 cb59eb0e445c6bd10b1d1f6b6b1576ed
BLAKE2b-256 38e0d9682f9e7fc1645032081a31cd35e6dddbbb967dab0cc716a0545ff669e7

See more details on using hashes here.

File details

Details for the file pymartini-0.4.3-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

  • Download URL: pymartini-0.4.3-cp39-cp39-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 229.4 kB
  • Tags: CPython 3.9, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for pymartini-0.4.3-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 52310b46aa2ab15d25d9a49559b87bda9418800e6402d86a0cbc468eae221798
MD5 d348c73645040f8ad187db9574ebe03d
BLAKE2b-256 bafedecc0cb9f4b80e1679f3c878de4897cc8e46db236acb3e110ebbba391a0e

See more details on using hashes here.

File details

Details for the file pymartini-0.4.3-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: pymartini-0.4.3-cp39-cp39-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 238.6 kB
  • Tags: CPython 3.9, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for pymartini-0.4.3-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 779b93d4efb57b499508b6e6dce191a6b23c3453e2e7c09ff005e98991eec154
MD5 1e3245ac951981570c78206acf5d5d2a
BLAKE2b-256 86c54d62ea1ec3d9b8c32acf76e129fa9e80565ec93bb9c2033a6646ecd598d0

See more details on using hashes here.

File details

Details for the file pymartini-0.4.3-cp39-cp39-macosx_10_9_universal2.whl.

File metadata

  • Download URL: pymartini-0.4.3-cp39-cp39-macosx_10_9_universal2.whl
  • Upload date:
  • Size: 320.2 kB
  • Tags: CPython 3.9, macOS 10.9+ universal2 (ARM64, x86-64)
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for pymartini-0.4.3-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 734dbf1f249f180f20dd52e8af496dc3b40303096bb88ad9c6dfbe877eb5fc0b
MD5 b5a9d9e5b4b3090faf65ed666921443e
BLAKE2b-256 39f5e571f83d9cbe5847db9eeb66d5a8f9cff65c3f6c50c6134b66b9d25c56dd

See more details on using hashes here.

File details

Details for the file pymartini-0.4.3-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: pymartini-0.4.3-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 246.1 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for pymartini-0.4.3-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 fdf27a17356b80133681413279673e166b23892e4e3f58ce93f2aac3b60317d7
MD5 39129329fa3a12e45aa57b6eb3e4a4ff
BLAKE2b-256 24234e3419b77cea4b58919c8052449b67e6167786a23b95fcd94ea714f12d2d

See more details on using hashes here.

File details

Details for the file pymartini-0.4.3-cp38-cp38-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: pymartini-0.4.3-cp38-cp38-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 712.8 kB
  • Tags: CPython 3.8, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for pymartini-0.4.3-cp38-cp38-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 d19c4316c1760988819b943cd3679a6960112225b518693497f2bdab61f08d80
MD5 fe665f2d19e00912c5cd7844cc36bdff
BLAKE2b-256 879299cdc7dc81cda9631c32024a60d5323b3fdee5bd4b1c95635c1083b46d42

See more details on using hashes here.

File details

Details for the file pymartini-0.4.3-cp38-cp38-musllinux_1_1_i686.whl.

File metadata

  • Download URL: pymartini-0.4.3-cp38-cp38-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 682.1 kB
  • Tags: CPython 3.8, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for pymartini-0.4.3-cp38-cp38-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 71b60046eddc06ccf3f90810d0d3b90c2d6484b86fb64ee9e1cf20db5748807f
MD5 bb51c5790f4deeb475c3a24c402eac8f
BLAKE2b-256 854fcc1c5082a1d39794212cd4639e64d1b9bc387d115a230d1819df5196be3c

See more details on using hashes here.

File details

Details for the file pymartini-0.4.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pymartini-0.4.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 37c9ca54ebecfdc359540bb2fee61e8c23e085dd1a095dbe7e4096a522f5efa0
MD5 faef939153c963b100323ed1a766e81c
BLAKE2b-256 12809c74507e4d7fe2a91ed55415772d7276c2541ab7740c5aebbb4600306f5a

See more details on using hashes here.

File details

Details for the file pymartini-0.4.3-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

  • Download URL: pymartini-0.4.3-cp38-cp38-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 237.1 kB
  • Tags: CPython 3.8, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for pymartini-0.4.3-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 535576193758e66b24b340b4e29816705052510afd9e45eff32e49e376581e4e
MD5 d835b7761f17c0e10bee3f4a4915f647
BLAKE2b-256 7aee93ceda7bd12bebb056b6471a1e2b24f26a643836a3e721aad40136a24fe4

See more details on using hashes here.

File details

Details for the file pymartini-0.4.3-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: pymartini-0.4.3-cp38-cp38-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 246.2 kB
  • Tags: CPython 3.8, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for pymartini-0.4.3-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 2f6a8ebc5330f4b5d1a1eedea3b4feed0a0d6781954b55422844281969a483c2
MD5 bae3fcb6cdb2e9c01f5e36b29eda743b
BLAKE2b-256 ac3c7ad6267ff575ee539f25089b7d5b347e56738507c2e8ad800ded36f74c81

See more details on using hashes here.

File details

Details for the file pymartini-0.4.3-cp38-cp38-macosx_10_9_universal2.whl.

File metadata

  • Download URL: pymartini-0.4.3-cp38-cp38-macosx_10_9_universal2.whl
  • Upload date:
  • Size: 325.9 kB
  • Tags: CPython 3.8, macOS 10.9+ universal2 (ARM64, x86-64)
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for pymartini-0.4.3-cp38-cp38-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 b28309317932d88ba4436ad7f4a36ffaeb9e37ae3307da6b89510005ed094fe5
MD5 a0bebf01ee54abcea2b52df83bc324e8
BLAKE2b-256 0f209c4df69f964d4eaffd826db9b2c79d3b0f5d60a0573b98057e2b0760f516

See more details on using hashes here.

File details

Details for the file pymartini-0.4.3-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: pymartini-0.4.3-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 244.6 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for pymartini-0.4.3-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 7fa31827abf68517a08f553e325cfdaec125fca8698733df7db74ca1294bba66
MD5 dcd85a4dd6770866400f18d4977d6ffc
BLAKE2b-256 399412abba780ee612dc483f02fd7caba91dda11edaf4c71d6b876f5cc3a32c3

See more details on using hashes here.

File details

Details for the file pymartini-0.4.3-cp37-cp37m-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: pymartini-0.4.3-cp37-cp37m-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 654.9 kB
  • Tags: CPython 3.7m, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for pymartini-0.4.3-cp37-cp37m-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 f5aa62f6d3de5ecd59f8d2f4e55d229f4de12c58f086d7548e2983c964e99974
MD5 f9e40615102f6cc28511792c0787ac96
BLAKE2b-256 d3991f9a90d375047138d3c79cec9f5d8402d810aa9dee0f32c86ccc4e218845

See more details on using hashes here.

File details

Details for the file pymartini-0.4.3-cp37-cp37m-musllinux_1_1_i686.whl.

File metadata

  • Download URL: pymartini-0.4.3-cp37-cp37m-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 621.8 kB
  • Tags: CPython 3.7m, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for pymartini-0.4.3-cp37-cp37m-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 5b2cab02992e90b2f936bda5df1cb885a7da948d2f475b184a504dac83caa863
MD5 42d2e8dc618f9aabb36947ce23ba085b
BLAKE2b-256 c4353856101ea93601181795de88b04401368e23a00f2cbb282b9934c3351bb1

See more details on using hashes here.

File details

Details for the file pymartini-0.4.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pymartini-0.4.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 754a3721c4ef6d0306f6b859e0fa1cf5505769e5ca7fdd629f21d9fecda6af7e
MD5 2949677ea343b2d6c158d626dcd9cba9
BLAKE2b-256 bf84231a73798d18a3cdd7e9d1537c24f121080849b64b7eb83f12c21f3c5047

See more details on using hashes here.

File details

Details for the file pymartini-0.4.3-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: pymartini-0.4.3-cp37-cp37m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 246.2 kB
  • Tags: CPython 3.7m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for pymartini-0.4.3-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 0f374a6fc0fd2831ab9ab6ce07e6434176a0df35cef42e87a616eddf761f9971
MD5 dd63d06db06edf2bd65ede17b7173113
BLAKE2b-256 366d320e107ffc32dd4eb98b43aa18f58394e459107d496a54efc26cc1811e76

See more details on using hashes here.

File details

Details for the file pymartini-0.4.3-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: pymartini-0.4.3-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 244.7 kB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for pymartini-0.4.3-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 47de4a965a79eaf575996ce7169b3908fb035a8927175ca16485874e9c4c4c39
MD5 6cad08e825f1ce33bed56f99cef340a1
BLAKE2b-256 36c2438a56c5d29fff0c314eeb4a5361ea2ff06d602e7803b3c494c91f2dbf07

See more details on using hashes here.

File details

Details for the file pymartini-0.4.3-cp36-cp36m-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: pymartini-0.4.3-cp36-cp36m-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 655.3 kB
  • Tags: CPython 3.6m, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for pymartini-0.4.3-cp36-cp36m-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 e0dd606728eced0d93acb7602e4a58feff7cf821125a60225b0130f711273cfa
MD5 73936394a8114ded59cf2b7b039c16f2
BLAKE2b-256 45b8f6ac257e5384df12c704719325de198bce888f721dc3b669632a1d534699

See more details on using hashes here.

File details

Details for the file pymartini-0.4.3-cp36-cp36m-musllinux_1_1_i686.whl.

File metadata

  • Download URL: pymartini-0.4.3-cp36-cp36m-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 623.6 kB
  • Tags: CPython 3.6m, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for pymartini-0.4.3-cp36-cp36m-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 0e3cdafb1cb91b42c1e16c09bada16de2638f4832ac56427f0b41a72fe9a3c51
MD5 16abc15339b80a32407e88da01f3f80a
BLAKE2b-256 2d63945c0bbb644c21ef8e57d149e89654c3295f3d61b97c58483a9c9928993f

See more details on using hashes here.

File details

Details for the file pymartini-0.4.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pymartini-0.4.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3a9767c06c0354b134af0f0ca06e1fc85afe619ca89c682142e9f62f5b5cf823
MD5 345127244758c26cea68065c2cdb65ff
BLAKE2b-256 b99c8c8c9e7505d52618a7a4aa7927f389bff0c339d960a298d75883909616db

See more details on using hashes here.

File details

Details for the file pymartini-0.4.3-cp36-cp36m-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: pymartini-0.4.3-cp36-cp36m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 246.1 kB
  • Tags: CPython 3.6m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for pymartini-0.4.3-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 c8d93a50f8df919519bfce88463ace206b0b259a11692de9a2fd1d0b817b556f
MD5 65db96c45de36209d45775c4f7849e71
BLAKE2b-256 923f3cb5cf19edf09d52c4fbd4f36218fc0cc4f668ae7964632a7ef993355959

See more details on using hashes here.

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