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

Uploaded Source

Built Distributions

pymartini-0.3.1-pp36-pypy36_pp73-win32.whl (208.2 kB view details)

Uploaded PyPy Windows x86

pymartini-0.3.1-pp36-pypy36_pp73-manylinux2010_x86_64.whl (247.2 kB view details)

Uploaded PyPy manylinux: glibc 2.12+ x86-64

pymartini-0.3.1-pp36-pypy36_pp73-macosx_10_9_x86_64.whl (222.6 kB view details)

Uploaded PyPy macOS 10.9+ x86-64

pymartini-0.3.1-cp38-cp38-win_amd64.whl (237.7 kB view details)

Uploaded CPython 3.8 Windows x86-64

pymartini-0.3.1-cp38-cp38-win32.whl (221.1 kB view details)

Uploaded CPython 3.8 Windows x86

pymartini-0.3.1-cp38-cp38-manylinux2010_x86_64.whl (657.1 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.12+ x86-64

pymartini-0.3.1-cp38-cp38-manylinux2010_i686.whl (621.0 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.12+ i686

pymartini-0.3.1-cp38-cp38-manylinux1_x86_64.whl (657.1 kB view details)

Uploaded CPython 3.8

pymartini-0.3.1-cp38-cp38-manylinux1_i686.whl (621.0 kB view details)

Uploaded CPython 3.8

pymartini-0.3.1-cp38-cp38-macosx_10_9_x86_64.whl (240.4 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

pymartini-0.3.1-cp37-cp37m-win_amd64.whl (236.3 kB view details)

Uploaded CPython 3.7m Windows x86-64

pymartini-0.3.1-cp37-cp37m-win32.whl (219.4 kB view details)

Uploaded CPython 3.7m Windows x86

pymartini-0.3.1-cp37-cp37m-manylinux2010_x86_64.whl (590.9 kB view details)

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

pymartini-0.3.1-cp37-cp37m-manylinux2010_i686.whl (560.4 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.12+ i686

pymartini-0.3.1-cp37-cp37m-manylinux1_x86_64.whl (590.9 kB view details)

Uploaded CPython 3.7m

pymartini-0.3.1-cp37-cp37m-manylinux1_i686.whl (560.3 kB view details)

Uploaded CPython 3.7m

pymartini-0.3.1-cp37-cp37m-macosx_10_9_x86_64.whl (240.4 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

pymartini-0.3.1-cp36-cp36m-win_amd64.whl (236.3 kB view details)

Uploaded CPython 3.6m Windows x86-64

pymartini-0.3.1-cp36-cp36m-win32.whl (219.4 kB view details)

Uploaded CPython 3.6m Windows x86

pymartini-0.3.1-cp36-cp36m-manylinux2010_x86_64.whl (591.4 kB view details)

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

pymartini-0.3.1-cp36-cp36m-manylinux2010_i686.whl (560.7 kB view details)

Uploaded CPython 3.6m manylinux: glibc 2.12+ i686

pymartini-0.3.1-cp36-cp36m-manylinux1_x86_64.whl (591.4 kB view details)

Uploaded CPython 3.6m

pymartini-0.3.1-cp36-cp36m-manylinux1_i686.whl (560.7 kB view details)

Uploaded CPython 3.6m

pymartini-0.3.1-cp36-cp36m-macosx_10_9_x86_64.whl (242.4 kB view details)

Uploaded CPython 3.6m macOS 10.9+ x86-64

pymartini-0.3.1-cp35-cp35m-win_amd64.whl (238.8 kB view details)

Uploaded CPython 3.5m Windows x86-64

pymartini-0.3.1-cp35-cp35m-win32.whl (222.4 kB view details)

Uploaded CPython 3.5m Windows x86

pymartini-0.3.1-cp35-cp35m-manylinux2010_x86_64.whl (588.5 kB view details)

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

pymartini-0.3.1-cp35-cp35m-manylinux2010_i686.whl (555.7 kB view details)

Uploaded CPython 3.5m manylinux: glibc 2.12+ i686

pymartini-0.3.1-cp35-cp35m-manylinux1_x86_64.whl (588.5 kB view details)

Uploaded CPython 3.5m

pymartini-0.3.1-cp35-cp35m-manylinux1_i686.whl (555.7 kB view details)

Uploaded CPython 3.5m

pymartini-0.3.1-cp35-cp35m-macosx_10_9_x86_64.whl (242.8 kB view details)

Uploaded CPython 3.5m macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: pymartini-0.3.1.tar.gz
  • Upload date:
  • Size: 155.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/47.1.1.post20200604 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.7.7

File hashes

Hashes for pymartini-0.3.1.tar.gz
Algorithm Hash digest
SHA256 986259a8bde0acc87dd4190f9b97481afe61a883da0aedee914f43e9425b77bf
MD5 f1ff232a30bc59f9ec3f5b197b327876
BLAKE2b-256 47446e3c29fbd6f46d1ad70029cdb5f307ce18580d567ff7e9a3b967bf182ce5

See more details on using hashes here.

File details

Details for the file pymartini-0.3.1-pp36-pypy36_pp73-win32.whl.

File metadata

  • Download URL: pymartini-0.3.1-pp36-pypy36_pp73-win32.whl
  • Upload date:
  • Size: 208.2 kB
  • Tags: PyPy, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for pymartini-0.3.1-pp36-pypy36_pp73-win32.whl
Algorithm Hash digest
SHA256 316afc05c5a567bfd9d56be5adde5ed083c2805ae44fc1a7e0ee8b5b9d306cca
MD5 3ebcb7f66a02841ec7b358f92b089a82
BLAKE2b-256 4096933c9ca474c8b167f6111f92f73a2f013032fea2c1a31a69c000e3e2a790

See more details on using hashes here.

File details

Details for the file pymartini-0.3.1-pp36-pypy36_pp73-manylinux2010_x86_64.whl.

File metadata

  • Download URL: pymartini-0.3.1-pp36-pypy36_pp73-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 247.2 kB
  • Tags: PyPy, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for pymartini-0.3.1-pp36-pypy36_pp73-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 3b3384e605335c3b791ac3d4f2e5894153c7430e7da312e68f84110f3f6d9d3b
MD5 8a00504128db491d32a497c97383c21d
BLAKE2b-256 f14ab810536a01209c91869d8879747b9a80c3741cd6b41282e8b72a543d0ae0

See more details on using hashes here.

File details

Details for the file pymartini-0.3.1-pp36-pypy36_pp73-manylinux1_x86_64.whl.

File metadata

  • Download URL: pymartini-0.3.1-pp36-pypy36_pp73-manylinux1_x86_64.whl
  • Upload date:
  • Size: 247.2 kB
  • Tags: PyPy
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for pymartini-0.3.1-pp36-pypy36_pp73-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 02c5d24c04d95e43349bbc3e7170d8b8c486d3054e18249c333704da999de675
MD5 7359c3b0bc802331c3b45d5185b094d7
BLAKE2b-256 a49aa62980dcfd8919ccd8a45ee01a3d6cc355b88a5d61e447335b4b6d1566e7

See more details on using hashes here.

File details

Details for the file pymartini-0.3.1-pp36-pypy36_pp73-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: pymartini-0.3.1-pp36-pypy36_pp73-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 222.6 kB
  • Tags: PyPy, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for pymartini-0.3.1-pp36-pypy36_pp73-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 357e4e13e38ab2e12d1eba7dfd6351fd00169227eab1c723205376a7ac964059
MD5 636afa54729d7321927711733488a4d8
BLAKE2b-256 8a6020711000bd499b35ba7003179d4d1de115878a2c67792222cc60914f4dac

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pymartini-0.3.1-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 237.7 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for pymartini-0.3.1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 91394ea10b77f2f6180e7e70a4e985e9898d13bdd026845ea056a61403ba2483
MD5 55146a2023f1d660eba1246233a4ada4
BLAKE2b-256 4ab64404e7395fee385c73141b3dbcc2de7ebbe753169b4d2a3f2ea03cf6379b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pymartini-0.3.1-cp38-cp38-win32.whl
  • Upload date:
  • Size: 221.1 kB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for pymartini-0.3.1-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 371508ab90c1529c99c45828678f7ef076fd61af46e4f464694dccefacd34c64
MD5 e59b638641f1679623caf151702c3c0a
BLAKE2b-256 d24251fbd97816f6aa544e25f9a26291254da6ea9a61985ef62442cd92e9db2d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pymartini-0.3.1-cp38-cp38-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 657.1 kB
  • Tags: CPython 3.8, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for pymartini-0.3.1-cp38-cp38-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 77a49aadea85acd6754f4acec5ca8bba45866c749678468ad650e95c0f1ef2c8
MD5 afbda1ee08b294acee856fb9ff7b8108
BLAKE2b-256 332c011ce58abd4ed506cc031bcafec4d30aab5cad0029e5b6ce457b4687686b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pymartini-0.3.1-cp38-cp38-manylinux2010_i686.whl
  • Upload date:
  • Size: 621.0 kB
  • Tags: CPython 3.8, manylinux: glibc 2.12+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for pymartini-0.3.1-cp38-cp38-manylinux2010_i686.whl
Algorithm Hash digest
SHA256 783420ceb9b3c6ddecd698f945b59f5899b325fbd6ea5c5a2033a9f4884ab841
MD5 55878a37af59fbff1acb648af886a7e8
BLAKE2b-256 53d2c5d2abb486b5a784f8a1df5ac8941dcfab1eac03aa6d9cb83f9a7580c79e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pymartini-0.3.1-cp38-cp38-manylinux1_x86_64.whl
  • Upload date:
  • Size: 657.1 kB
  • Tags: CPython 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for pymartini-0.3.1-cp38-cp38-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 a626256fc1eb2322189d399ce42df0df24e801b0004975c0cc033832197d21ad
MD5 9ac0ba68353ee81cf568a6f141b3fec2
BLAKE2b-256 3349ea417fb40946f84514cc7e1386c077fe08ef0a059dd40612218eb78194c8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pymartini-0.3.1-cp38-cp38-manylinux1_i686.whl
  • Upload date:
  • Size: 621.0 kB
  • Tags: CPython 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for pymartini-0.3.1-cp38-cp38-manylinux1_i686.whl
Algorithm Hash digest
SHA256 a0ea6ef906276436c29260c8fcda3f3a7f86f7cc35fb95b87e8d07343f982250
MD5 e8f9a94162e0ef8f83f4892df77e8177
BLAKE2b-256 28dea5c5b02f72ff88872e65620e608cfe13d8697ba216ec65016ad2c745e0c2

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pymartini-0.3.1-cp38-cp38-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 240.4 kB
  • Tags: CPython 3.8, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for pymartini-0.3.1-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 7ff6cbf5b3052c921edc22df7702cf93f3d6df5f8bd27b7b676b71381fd2e61f
MD5 26ec97ee989298b3d5853f24f665e1f8
BLAKE2b-256 c66331050f5e9d4f641102468c21cb629384eec8b3641fcd44cbb2bc72de6826

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pymartini-0.3.1-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 236.3 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for pymartini-0.3.1-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 3dd72766c32850f5e127dbc8924bb9dec482fdced84301d576735932d5cf918e
MD5 d519c3db616a278309bb593b86616d47
BLAKE2b-256 69f10bd5a8e80fd840cd1bdce8b55c5c2d861d4f5c44b4ba3d27ec55c2e6333f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pymartini-0.3.1-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 219.4 kB
  • Tags: CPython 3.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for pymartini-0.3.1-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 eae05d84108018163d8c134f787ea8bbe33314770126a81d10dd69b78821a347
MD5 f753712b545b6010a08809adcd1f3042
BLAKE2b-256 242cab0da4d1ad3e3ae83109d8724c7a5d3f4bca98b3b14d0160b699b9fbab3a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pymartini-0.3.1-cp37-cp37m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 590.9 kB
  • Tags: CPython 3.7m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for pymartini-0.3.1-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 881194c7c47a6ca26518bd60e2cf36f2887b69795a41288ff6ccbedb6864d4d0
MD5 bb2b0770c4066846ed5e4ba1476d2852
BLAKE2b-256 3af94bdc9cb1baf27e33afeb0b6857baca115911e76ad8df3f356e7c841c4546

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pymartini-0.3.1-cp37-cp37m-manylinux2010_i686.whl
  • Upload date:
  • Size: 560.4 kB
  • Tags: CPython 3.7m, manylinux: glibc 2.12+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for pymartini-0.3.1-cp37-cp37m-manylinux2010_i686.whl
Algorithm Hash digest
SHA256 267ae010da5493dcbc2a5338e82d76b98942d8b3143a15a8b831cac3ebdc0133
MD5 d5e3ce14e746251104e810f5f3be9054
BLAKE2b-256 ffb2e0e165ab31c5cdddcbcb0a2daa60ac9b0fdd7d597c2bc7457c2dd105d940

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pymartini-0.3.1-cp37-cp37m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 590.9 kB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for pymartini-0.3.1-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 e68987d2cbb6a34409ffc6d47c50a4dfea0ad50a2f75094fea22f1f0c55c7841
MD5 88f17976a3ea8a07dad082a9cbb84d5a
BLAKE2b-256 599f9b4f0375e7a65f6eeb3a4d4153c52932e248dbefe1f1460adf6acad446be

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pymartini-0.3.1-cp37-cp37m-manylinux1_i686.whl
  • Upload date:
  • Size: 560.3 kB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for pymartini-0.3.1-cp37-cp37m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 9cf3cfe8b2c4b2a5502457b8faf2af91d84a11ebea783a536bfd755765428ae8
MD5 d1a62cb2a65912e952e75d4473bd3802
BLAKE2b-256 bb6fcccf4f520427817b46c92a57e6249c33add4307c8af179ad2300889c5e14

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pymartini-0.3.1-cp37-cp37m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 240.4 kB
  • Tags: CPython 3.7m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for pymartini-0.3.1-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 5954c541cd3d79bec50e59c462fd2c124d437c97f9f33a135688ade33f4a92f0
MD5 2a68f244de667a03200f702f4cb38dbb
BLAKE2b-256 53fb94078f8fb8a9d699dad5d3f2ab7e76464bdc2ad6ed1bb621ef75e4bf40da

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pymartini-0.3.1-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 236.3 kB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for pymartini-0.3.1-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 d312530e9f1c9ed789a000642ef0e466f9346f4c99dbc2e3e3c5537c29f02f20
MD5 624236074a3b7cd6beed318c210dadfd
BLAKE2b-256 70281a5c87bf23f0a464086ef9068bea3e614e2c5d9acfa1bc6def88bb7ffeb2

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pymartini-0.3.1-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 219.4 kB
  • Tags: CPython 3.6m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for pymartini-0.3.1-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 5feb1fff74c77629ed13f311844965b1ba3b520859a50ade7ccab86c3a3e5b59
MD5 ee52315ee8c65082b15b07e239deeff7
BLAKE2b-256 5179658269f3441ada665f2b43382f9cfe866e0eb73118fa3eae448dc8034776

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pymartini-0.3.1-cp36-cp36m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 591.4 kB
  • Tags: CPython 3.6m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for pymartini-0.3.1-cp36-cp36m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 a246cb8d8b5d5ef8733e703b5e04d9799cd7aa071651fd46d536335b9e56f749
MD5 af1d232cd1a1dc475892fae7b6a0f860
BLAKE2b-256 fbdfe4b19cd8abdf6b8fe88598e1a3884c33025d36f9db776437e3a0c9119a3f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pymartini-0.3.1-cp36-cp36m-manylinux2010_i686.whl
  • Upload date:
  • Size: 560.7 kB
  • Tags: CPython 3.6m, manylinux: glibc 2.12+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for pymartini-0.3.1-cp36-cp36m-manylinux2010_i686.whl
Algorithm Hash digest
SHA256 a6a81b402d7215429079dfb82a0679c64893af1eb2c4c09c296d31a6ca038556
MD5 fb3ed737828b578817375abecc75956a
BLAKE2b-256 90ddff140ac08664913b6c7ed5869ad97c2cbb218aeb3c28d4c6ab41cb8e86eb

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pymartini-0.3.1-cp36-cp36m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 591.4 kB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for pymartini-0.3.1-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 3af1214f7ff9b7ab43624a3ba18af29c323e3168badf60574347ff61c3162843
MD5 ac0c25eab93ae8b14277e6ac1d9dbfd7
BLAKE2b-256 780428bdd9ac3453c4735975c2d606a8db02c92e23df161ee5ac4d6367cbabfe

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pymartini-0.3.1-cp36-cp36m-manylinux1_i686.whl
  • Upload date:
  • Size: 560.7 kB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for pymartini-0.3.1-cp36-cp36m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 9212c90a0a8a8d1c6a920e94c46c88360e1568775bdbaf67f7665a0538f99eec
MD5 904ca49069b3ce13ae84d13859d79d79
BLAKE2b-256 667f0ac64fd588599e4c093399fff7b98ce8da5e6e0597524d2b9566d77621ff

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pymartini-0.3.1-cp36-cp36m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 242.4 kB
  • Tags: CPython 3.6m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for pymartini-0.3.1-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 98bfed5ff8b912313e4d0cc4571ccd732ea4844b53beabf8de6b941bbd5652b0
MD5 1edfbe373af75e464566b7ce7061b55a
BLAKE2b-256 0797cdbf9822abaf783549c37855bea4edf11bb445e303fdf111b54536487ebb

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pymartini-0.3.1-cp35-cp35m-win_amd64.whl
  • Upload date:
  • Size: 238.8 kB
  • Tags: CPython 3.5m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for pymartini-0.3.1-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 1d96dfd8be7006605e6a580b96a066eee470ff92114146ac62ee658248528210
MD5 d12ac1199d3a2534c92e828587082f8c
BLAKE2b-256 2e1fefc206802b3f094965e628d37ebe481d52a409f4e021069deb527a075531

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pymartini-0.3.1-cp35-cp35m-win32.whl
  • Upload date:
  • Size: 222.4 kB
  • Tags: CPython 3.5m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for pymartini-0.3.1-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 88b1d0cba354d6e9607184d13e883402d3da124880d7e7f753ce423c47f2927e
MD5 813d91befb3b33b27bb9f2f50b5a741a
BLAKE2b-256 2a3186fb1d6521b823012b5e669b5c86f6b3d6cf79b8bd3aabb64619bd299a27

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pymartini-0.3.1-cp35-cp35m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 588.5 kB
  • Tags: CPython 3.5m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for pymartini-0.3.1-cp35-cp35m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 5d2c02c883906e8a48e111ef2b6a3f7a4540e32363d7ec71ec1913227c23ca50
MD5 e522ef360196a40f985037d837ab8b18
BLAKE2b-256 dc8954151d64e3146c31952b0ac331e01529d670950ec63cd9ac72ce9a17b9a5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pymartini-0.3.1-cp35-cp35m-manylinux2010_i686.whl
  • Upload date:
  • Size: 555.7 kB
  • Tags: CPython 3.5m, manylinux: glibc 2.12+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for pymartini-0.3.1-cp35-cp35m-manylinux2010_i686.whl
Algorithm Hash digest
SHA256 a870f02828cd275dfd26949a5938d76bcbc7cf7352439a03d4332a3369eace47
MD5 a0b77d631a02c579c8396cff690ace74
BLAKE2b-256 6ad8466864f429f28f21ef41037852f7c87c551c7e8ce671e38604e1d9cbe025

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pymartini-0.3.1-cp35-cp35m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 588.5 kB
  • Tags: CPython 3.5m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for pymartini-0.3.1-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 337f63307b59226df728930dbcc7d0939e09003f3bed8f96299a69e3fe1dcd9f
MD5 8d52dd550de0fbaf0949754b9db40d7b
BLAKE2b-256 7a7a1f0a6ef44bab8e3ceaa2877d9f1dbff69968a79ae26aabb9aa152edacaf6

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pymartini-0.3.1-cp35-cp35m-manylinux1_i686.whl
  • Upload date:
  • Size: 555.7 kB
  • Tags: CPython 3.5m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for pymartini-0.3.1-cp35-cp35m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 0bfc06a1ea9e37102671500922398162fd2f26651d333114124a1edaa78ab04a
MD5 dfa2a80e0cb164f93a1941039663ec9d
BLAKE2b-256 0716cd4333b3fdc1c747439ba96c86962eae3e8d497b35659b68f6ccf34b1165

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pymartini-0.3.1-cp35-cp35m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 242.8 kB
  • Tags: CPython 3.5m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for pymartini-0.3.1-cp35-cp35m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 5c93a63f23eade68f968d5284967f5a53162afedfb3de8e78e9f6860fed65ef8
MD5 2ae66034a1a5a92341a075b93f1c1a45
BLAKE2b-256 1fc79e8877500049356f6532a444e7cd469ad5c87f1643370a508fdda5fa5c9c

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