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

pip install 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
)

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.

Benchmark

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

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

Python

git clone https://github.com/kylebarron/pymartini
cd pymartini
pip install .
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

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.3.2.tar.gz (153.8 kB view details)

Uploaded Source

Built Distributions

pymartini-0.3.2-cp38-cp38-win_amd64.whl (234.8 kB view details)

Uploaded CPython 3.8 Windows x86-64

pymartini-0.3.2-cp38-cp38-win32.whl (218.2 kB view details)

Uploaded CPython 3.8 Windows x86

pymartini-0.3.2-cp38-cp38-manylinux2010_x86_64.whl (648.8 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.12+ x86-64

pymartini-0.3.2-cp38-cp38-manylinux2010_i686.whl (617.5 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.12+ i686

pymartini-0.3.2-cp38-cp38-manylinux1_x86_64.whl (648.7 kB view details)

Uploaded CPython 3.8

pymartini-0.3.2-cp38-cp38-manylinux1_i686.whl (617.5 kB view details)

Uploaded CPython 3.8

pymartini-0.3.2-cp38-cp38-macosx_10_9_x86_64.whl (236.9 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

pymartini-0.3.2-cp37-cp37m-win_amd64.whl (233.3 kB view details)

Uploaded CPython 3.7m Windows x86-64

pymartini-0.3.2-cp37-cp37m-win32.whl (216.6 kB view details)

Uploaded CPython 3.7m Windows x86

pymartini-0.3.2-cp37-cp37m-manylinux2010_x86_64.whl (587.5 kB view details)

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

pymartini-0.3.2-cp37-cp37m-manylinux2010_i686.whl (556.8 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.12+ i686

pymartini-0.3.2-cp37-cp37m-manylinux1_x86_64.whl (587.5 kB view details)

Uploaded CPython 3.7m

pymartini-0.3.2-cp37-cp37m-manylinux1_i686.whl (556.8 kB view details)

Uploaded CPython 3.7m

pymartini-0.3.2-cp37-cp37m-macosx_10_9_x86_64.whl (236.9 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

pymartini-0.3.2-cp36-cp36m-win_amd64.whl (233.3 kB view details)

Uploaded CPython 3.6m Windows x86-64

pymartini-0.3.2-cp36-cp36m-win32.whl (216.6 kB view details)

Uploaded CPython 3.6m Windows x86

pymartini-0.3.2-cp36-cp36m-manylinux2010_x86_64.whl (587.8 kB view details)

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

pymartini-0.3.2-cp36-cp36m-manylinux2010_i686.whl (557.1 kB view details)

Uploaded CPython 3.6m manylinux: glibc 2.12+ i686

pymartini-0.3.2-cp36-cp36m-manylinux1_x86_64.whl (587.8 kB view details)

Uploaded CPython 3.6m

pymartini-0.3.2-cp36-cp36m-manylinux1_i686.whl (557.1 kB view details)

Uploaded CPython 3.6m

pymartini-0.3.2-cp36-cp36m-macosx_10_9_x86_64.whl (238.9 kB view details)

Uploaded CPython 3.6m macOS 10.9+ x86-64

pymartini-0.3.2-cp35-cp35m-win_amd64.whl (241.0 kB view details)

Uploaded CPython 3.5m Windows x86-64

pymartini-0.3.2-cp35-cp35m-win32.whl (224.8 kB view details)

Uploaded CPython 3.5m Windows x86

pymartini-0.3.2-cp35-cp35m-manylinux2010_x86_64.whl (590.5 kB view details)

Uploaded CPython 3.5m manylinux: glibc 2.12+ x86-64

pymartini-0.3.2-cp35-cp35m-manylinux2010_i686.whl (557.4 kB view details)

Uploaded CPython 3.5m manylinux: glibc 2.12+ i686

pymartini-0.3.2-cp35-cp35m-manylinux1_x86_64.whl (590.5 kB view details)

Uploaded CPython 3.5m

pymartini-0.3.2-cp35-cp35m-manylinux1_i686.whl (557.4 kB view details)

Uploaded CPython 3.5m

pymartini-0.3.2-cp35-cp35m-macosx_10_9_x86_64.whl (245.0 kB view details)

Uploaded CPython 3.5m macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: pymartini-0.3.2.tar.gz
  • Upload date:
  • Size: 153.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.6.0.post20200814 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.7.7

File hashes

Hashes for pymartini-0.3.2.tar.gz
Algorithm Hash digest
SHA256 e586fb492459d6ab80f442929b622d1567d2dc77bcffcdf49ac5146567b22944
MD5 ce67bbda5c9dd7b891844254dad552e9
BLAKE2b-256 75dda4cda04e610b60505ce9a30cae34628576484ec4ab0dcca12423b96079cd

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pymartini-0.3.2-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 234.8 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.7.9

File hashes

Hashes for pymartini-0.3.2-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 5079b2f9b7351f537cb994a845c58bd5862907b0d84c82b20ff91d54fc30a4c1
MD5 d206573cf2e91e422b0eb8eb24b4bb86
BLAKE2b-256 c168bed483ca72ed04c64dceb98ead8807de594e6bed2a8cbcb5855ca39d3e7a

See more details on using hashes here.

File details

Details for the file pymartini-0.3.2-cp38-cp38-win32.whl.

File metadata

  • Download URL: pymartini-0.3.2-cp38-cp38-win32.whl
  • Upload date:
  • Size: 218.2 kB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.7.9

File hashes

Hashes for pymartini-0.3.2-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 b88e56700924a15d62851f62b017217bb1c0d71a7686aa9dd0733b94d7044a38
MD5 19cb270d530149fd4d11da4f16b18631
BLAKE2b-256 b1efa4a66ec21e5068e399ea2ed7dcca13c175360802d79655b77f09d67341b3

See more details on using hashes here.

File details

Details for the file pymartini-0.3.2-cp38-cp38-manylinux2010_x86_64.whl.

File metadata

  • Download URL: pymartini-0.3.2-cp38-cp38-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 648.8 kB
  • Tags: CPython 3.8, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.7.9

File hashes

Hashes for pymartini-0.3.2-cp38-cp38-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 39d59a6e0724fdebf2806059cabbc639008ba45d6884f34418257b7c8c46e5cf
MD5 0beebcba6a3f15a75d38ba85c23d264f
BLAKE2b-256 e52389e602b54a40a334195d0ce8993f37092760171d9c0d389bb04719ffb160

See more details on using hashes here.

File details

Details for the file pymartini-0.3.2-cp38-cp38-manylinux2010_i686.whl.

File metadata

  • Download URL: pymartini-0.3.2-cp38-cp38-manylinux2010_i686.whl
  • Upload date:
  • Size: 617.5 kB
  • Tags: CPython 3.8, manylinux: glibc 2.12+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.7.9

File hashes

Hashes for pymartini-0.3.2-cp38-cp38-manylinux2010_i686.whl
Algorithm Hash digest
SHA256 117988c7d72ab6965107754edac3626fef30baaaeb2bb4bdc33011922c64da10
MD5 9bd1a7d1cb39dc1019e718965f9a7ae3
BLAKE2b-256 6814fbde13fdf337e02f87a6473de0bb62f6a0f3968e15b31e848a7682c68517

See more details on using hashes here.

File details

Details for the file pymartini-0.3.2-cp38-cp38-manylinux1_x86_64.whl.

File metadata

  • Download URL: pymartini-0.3.2-cp38-cp38-manylinux1_x86_64.whl
  • Upload date:
  • Size: 648.7 kB
  • Tags: CPython 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.7.9

File hashes

Hashes for pymartini-0.3.2-cp38-cp38-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 3ce0180c2b09c5a5b56edc425f9595571ffe33be22ca1e8b5e7d53c62734cd86
MD5 af25851b17470098d3e3d39b74fe0543
BLAKE2b-256 1d4d94a02dac85ac64d35ce22f1914ba57243e2df3b88feda9c12640a0b25c6e

See more details on using hashes here.

File details

Details for the file pymartini-0.3.2-cp38-cp38-manylinux1_i686.whl.

File metadata

  • Download URL: pymartini-0.3.2-cp38-cp38-manylinux1_i686.whl
  • Upload date:
  • Size: 617.5 kB
  • Tags: CPython 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.7.9

File hashes

Hashes for pymartini-0.3.2-cp38-cp38-manylinux1_i686.whl
Algorithm Hash digest
SHA256 b3cfe2eaee3784e2420bee6d01836b8f8ecdce2fe454755ca1a59809a87dbfcf
MD5 ae47478aa5c52b078f1682792fc51ed4
BLAKE2b-256 348bb8334f84f1cb1c1b448f3bb7701496e7be01be9ba249dbb97b46886f39f7

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pymartini-0.3.2-cp38-cp38-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 236.9 kB
  • Tags: CPython 3.8, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.7.9

File hashes

Hashes for pymartini-0.3.2-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 04190a2820638e7529334027fb7714ca11666620eebbbf443e9092566a5a7458
MD5 9833e0ee1d9e1e89341d8482bed18e86
BLAKE2b-256 c0957d1fa7290a1cf4c2b192074bf5f0d2e6c79a2c58f0d5eb71794b0178b777

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pymartini-0.3.2-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 233.3 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.7.9

File hashes

Hashes for pymartini-0.3.2-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 76d73af3d0ea151bcd9442396caf80ef5c855244bf46499401809d6dbef82950
MD5 f3fd81cc1364e3fbeab41b03c1b8e524
BLAKE2b-256 5231b14496ef07808207b7d1dcca73b8dd84180f7fc5f80c224cac01ea03deef

See more details on using hashes here.

File details

Details for the file pymartini-0.3.2-cp37-cp37m-win32.whl.

File metadata

  • Download URL: pymartini-0.3.2-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 216.6 kB
  • Tags: CPython 3.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.7.9

File hashes

Hashes for pymartini-0.3.2-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 c4656cbb99a854acebb8c393625ee67c1b925e86760ad074d0c457b93af1998c
MD5 89859c7b792ab0559a27852fa4c002e2
BLAKE2b-256 9520f594fa1cc91c52a961afa015956771f9cfd120b71971eb11ddf5320c7c7a

See more details on using hashes here.

File details

Details for the file pymartini-0.3.2-cp37-cp37m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: pymartini-0.3.2-cp37-cp37m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 587.5 kB
  • Tags: CPython 3.7m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.7.9

File hashes

Hashes for pymartini-0.3.2-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 7b2ac72cded13fd2ee8f41d4344b2521ea7c1f75fdf44ae41a2cc97440548a1b
MD5 9a0bba2eccb4fb6788f83ed438ca6e94
BLAKE2b-256 429b06857ad41e965b6e492cbbbd86b53ee71f69150e4d4300acb837ecf53d82

See more details on using hashes here.

File details

Details for the file pymartini-0.3.2-cp37-cp37m-manylinux2010_i686.whl.

File metadata

  • Download URL: pymartini-0.3.2-cp37-cp37m-manylinux2010_i686.whl
  • Upload date:
  • Size: 556.8 kB
  • Tags: CPython 3.7m, manylinux: glibc 2.12+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.7.9

File hashes

Hashes for pymartini-0.3.2-cp37-cp37m-manylinux2010_i686.whl
Algorithm Hash digest
SHA256 545a268ce4327307cb57fbf8aa0297abf435477e794cd954bef854d2d6f78f6b
MD5 29f500a1b38bdf12f5326b8fee5ee0d9
BLAKE2b-256 29f3e50342592f4d13a7b7bb3c6e3abe58a87c82de8ed4735abd86e732a90985

See more details on using hashes here.

File details

Details for the file pymartini-0.3.2-cp37-cp37m-manylinux1_x86_64.whl.

File metadata

  • Download URL: pymartini-0.3.2-cp37-cp37m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 587.5 kB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.7.9

File hashes

Hashes for pymartini-0.3.2-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 e001a7b4335a8d49e01fd37145b5eb6eebe52f0466503177eeee445465fb474e
MD5 dde4423d0e148954f40d986da42a28c9
BLAKE2b-256 98df3ed21ddf16772988e5730615723cbed91174d811fc9828836e4f0455bbd2

See more details on using hashes here.

File details

Details for the file pymartini-0.3.2-cp37-cp37m-manylinux1_i686.whl.

File metadata

  • Download URL: pymartini-0.3.2-cp37-cp37m-manylinux1_i686.whl
  • Upload date:
  • Size: 556.8 kB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.7.9

File hashes

Hashes for pymartini-0.3.2-cp37-cp37m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 ccbe19055335f1fa7d09be22b16efe38849df4a123b028c3a7de2f53e85fd2d2
MD5 8850dc8a2cfa967d740d7a7e6c5b1df2
BLAKE2b-256 565f45796b9c1715988487891c45ed93e80feb7e565347a4e6eb1aa850017793

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pymartini-0.3.2-cp37-cp37m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 236.9 kB
  • Tags: CPython 3.7m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.7.9

File hashes

Hashes for pymartini-0.3.2-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 b4fcf985caeb75b44f6652083fa56f95f0e4a485e8dbd53074f5e6b5d20de08b
MD5 832bb7fd065458bce3f69a2d9426c8ac
BLAKE2b-256 9b4fbfb1febe77744c0120fd023045f06b29df8a9eda32b9b6b760fedd1f55ce

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pymartini-0.3.2-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 233.3 kB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.7.9

File hashes

Hashes for pymartini-0.3.2-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 f368ff08656e7a72bb82fdc7d3cd2ed2622e5cd95e99a122af5808ed5e2c919d
MD5 aad17521fbec46bdb526ed4abf11b90b
BLAKE2b-256 df89892c58d4e9e83fa8a4d3845d19c7d3ec310eda7e903873d8f2a89a99f34e

See more details on using hashes here.

File details

Details for the file pymartini-0.3.2-cp36-cp36m-win32.whl.

File metadata

  • Download URL: pymartini-0.3.2-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 216.6 kB
  • Tags: CPython 3.6m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.7.9

File hashes

Hashes for pymartini-0.3.2-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 4f5c7116a64a0b7ea5a8d92eef2525db8369c6d735edd8492305f909fdca29dc
MD5 b1deeb708f88ab0710d302cfdd323eb7
BLAKE2b-256 3061542e356dcc202b014141442e825c73f3b4522310d02a6366dd973e2105fa

See more details on using hashes here.

File details

Details for the file pymartini-0.3.2-cp36-cp36m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: pymartini-0.3.2-cp36-cp36m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 587.8 kB
  • Tags: CPython 3.6m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.7.9

File hashes

Hashes for pymartini-0.3.2-cp36-cp36m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 ea5ce9fcdc1f3d3953246ba32c4aaaefd12bbf4fe5993fb71c28611cfad32efd
MD5 2d9383eb558d2f2df14af255fd3197b8
BLAKE2b-256 e147e5ae2a2f2e153127757658932e4cc2b944e38e2d35915efb638b89cbbe89

See more details on using hashes here.

File details

Details for the file pymartini-0.3.2-cp36-cp36m-manylinux2010_i686.whl.

File metadata

  • Download URL: pymartini-0.3.2-cp36-cp36m-manylinux2010_i686.whl
  • Upload date:
  • Size: 557.1 kB
  • Tags: CPython 3.6m, manylinux: glibc 2.12+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.7.9

File hashes

Hashes for pymartini-0.3.2-cp36-cp36m-manylinux2010_i686.whl
Algorithm Hash digest
SHA256 3d6aa9b8decba4357bf424e868066c5c94bb84ecf7be975414124bbf120ef5e1
MD5 11edf2895e7d25cd7845f892205334d1
BLAKE2b-256 f45312be333877f88c3c666ba5ab8c83428c5c3cce78aa90a553501631426459

See more details on using hashes here.

File details

Details for the file pymartini-0.3.2-cp36-cp36m-manylinux1_x86_64.whl.

File metadata

  • Download URL: pymartini-0.3.2-cp36-cp36m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 587.8 kB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.7.9

File hashes

Hashes for pymartini-0.3.2-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 a1a538dc58d30f5886cc5026dff4385a5f01177277b7087b5be93b87cced4846
MD5 4d823c5f9078a08aaaf61724d27915a9
BLAKE2b-256 07d2ea5e541838758589fc4d085e2c95d3b12e14877cd6bde0fdb9e49cb28fbe

See more details on using hashes here.

File details

Details for the file pymartini-0.3.2-cp36-cp36m-manylinux1_i686.whl.

File metadata

  • Download URL: pymartini-0.3.2-cp36-cp36m-manylinux1_i686.whl
  • Upload date:
  • Size: 557.1 kB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.7.9

File hashes

Hashes for pymartini-0.3.2-cp36-cp36m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 ea1c01a5b951d4aa7ccc39ee3df2e1250efd90e229d17c25e9c65c759bc461b8
MD5 fd6c9463185ffc85e3c23d919885b037
BLAKE2b-256 37dfb369fd675f8297c8de9d3179bb66ed99903f6ed145486224fff7a4ce0589

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pymartini-0.3.2-cp36-cp36m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 238.9 kB
  • Tags: CPython 3.6m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.7.9

File hashes

Hashes for pymartini-0.3.2-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 55e2392ee1630c8a53c090e0feac1232a305da5538ae2988e5567b36a6eaf348
MD5 ea11266e8a8b9316fd99483684db9f87
BLAKE2b-256 a6f1083f087a8945782513cb22c7fafe06c3b382449881dd6dc870208d42c691

See more details on using hashes here.

File details

Details for the file pymartini-0.3.2-cp35-cp35m-win_amd64.whl.

File metadata

  • Download URL: pymartini-0.3.2-cp35-cp35m-win_amd64.whl
  • Upload date:
  • Size: 241.0 kB
  • Tags: CPython 3.5m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.7.9

File hashes

Hashes for pymartini-0.3.2-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 1a8bcd1077714edbf9deb6b2158df8fe6059038c1fde292958b3fe87871ad034
MD5 a4b65beb916be7956318917dff3d0be5
BLAKE2b-256 ed0ca117edb1e479354fd5bfd60edaeb0ccd26c578f8bd8c3d8b73e43598a4cb

See more details on using hashes here.

File details

Details for the file pymartini-0.3.2-cp35-cp35m-win32.whl.

File metadata

  • Download URL: pymartini-0.3.2-cp35-cp35m-win32.whl
  • Upload date:
  • Size: 224.8 kB
  • Tags: CPython 3.5m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.7.9

File hashes

Hashes for pymartini-0.3.2-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 fe9fe97462d0bcb45afde950a1f9783c8c9741be7ff0ce0a50c1bafc521b9da6
MD5 0b4e28c78cf642d8fbff772c30cb5010
BLAKE2b-256 887e94b32791f15fd034f385ff3d27ff9a4211f7243970a69996a05bd7161bf8

See more details on using hashes here.

File details

Details for the file pymartini-0.3.2-cp35-cp35m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: pymartini-0.3.2-cp35-cp35m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 590.5 kB
  • Tags: CPython 3.5m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.7.9

File hashes

Hashes for pymartini-0.3.2-cp35-cp35m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 db336e96b2e0ce9dd72ad12497e560cc9216de4ce4cb8ad0216d6e78ce94a807
MD5 166d07e0735b0e02540df1fa0356086e
BLAKE2b-256 a77e07749d7d43bd2f37693accc9b908d2157201050cc20fca46cbcfb9213a2b

See more details on using hashes here.

File details

Details for the file pymartini-0.3.2-cp35-cp35m-manylinux2010_i686.whl.

File metadata

  • Download URL: pymartini-0.3.2-cp35-cp35m-manylinux2010_i686.whl
  • Upload date:
  • Size: 557.4 kB
  • Tags: CPython 3.5m, manylinux: glibc 2.12+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.7.9

File hashes

Hashes for pymartini-0.3.2-cp35-cp35m-manylinux2010_i686.whl
Algorithm Hash digest
SHA256 436a500061d77579ce0c0d755a85a42c5f2ae4c9c191af2d35e15727b40d83ef
MD5 2ff4cb5e5aa7a67c22d01ddc52b61377
BLAKE2b-256 cfc14dec82efb7d543d6d2f0e4e5b42e301e546b4fc0837fd9d8d05918b0110b

See more details on using hashes here.

File details

Details for the file pymartini-0.3.2-cp35-cp35m-manylinux1_x86_64.whl.

File metadata

  • Download URL: pymartini-0.3.2-cp35-cp35m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 590.5 kB
  • Tags: CPython 3.5m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.7.9

File hashes

Hashes for pymartini-0.3.2-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 4b2724a8193deb95892a10742e088c6317730ec7ff3a23040db724fdf0ff3056
MD5 e3b8ddeee80ba5f81a16068c94b7cfac
BLAKE2b-256 fb74f6b7386998a07d89c00c34281d720c9409c574faff049e92ddbd27c203a5

See more details on using hashes here.

File details

Details for the file pymartini-0.3.2-cp35-cp35m-manylinux1_i686.whl.

File metadata

  • Download URL: pymartini-0.3.2-cp35-cp35m-manylinux1_i686.whl
  • Upload date:
  • Size: 557.4 kB
  • Tags: CPython 3.5m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.7.9

File hashes

Hashes for pymartini-0.3.2-cp35-cp35m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 79badc3e2b332b1e81fca79e66cf62f0ca6cb42a9c443799aa2de920a032e571
MD5 e16c656deed68f0203f84e6c0bb48e64
BLAKE2b-256 4e784d947b8e4091447ceb11a3ba7c9a460cc01e8d3a1e5b19e97970af6c591c

See more details on using hashes here.

File details

Details for the file pymartini-0.3.2-cp35-cp35m-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: pymartini-0.3.2-cp35-cp35m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 245.0 kB
  • Tags: CPython 3.5m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.7.9

File hashes

Hashes for pymartini-0.3.2-cp35-cp35m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 fc58865969f6b077f5091e440b92dbdbb852cef9b88f8cdde021d0b6d163d5a3
MD5 e67f801f6b9f33592dded32e3d3cd446
BLAKE2b-256 327bc6f77140da4f6d67faac54d9dd227ae0b90106c0a5782339f245e538bd1e

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