Skip to main content

Implementation of Dijkstra's Shortest Path algorithm on 3D images.

Project description

Build Status PyPI version

dijkstra3d

Dijkstra's Shortest Path variants for 6, 18, and 26-connected 3D Image Volumes or 4 and 8-connected 2D images.

import dijkstra3d
import numpy as np

field = np.ones((512, 512, 512), dtype=np.int32)
source = (0,0,0)
target = (511, 511, 511)

# path is an [N,3] numpy array i.e. a list of x,y,z coordinates
# terminates early, default is 26 connected
path = dijkstra3d.dijkstra(field, source, target, connectivity=26) 
path = dijkstra3d.dijkstra(field, source, target, bidirectional=True) # 2x memory usage, faster

# Use distance from target as a heuristic (A* search)
# Does nothing if bidirectional=True (it's just not implemented)
path = dijkstra3d.dijkstra(field, source, target, compass=True) 

# parental_field is a performance optimization on dijkstra for when you
# want to return many target paths from a single source instead of
# a single path to a single target. `parents` is a field of parent voxels
# which can then be rapidly traversed to yield a path from the source. 
# The initial run is slower as we cannot stop early when a target is found
# but computing many paths is much faster. The unsigned parental field is 
# increased by 1 so we can represent background as zero. So a value means
# voxel+1. Use path_from_parents to compute a path from the source to a target.
parents = dijkstra3d.parental_field(field, source=(0,0,0), connectivity=6) # default is 26 connected
path = dijkstra3d.path_from_parents(parents, target=(511, 511, 511))
print(path.shape)

# Given a boolean label "field" and a source vertex, compute 
# the anisotropic euclidean distance from the source to all labeled vertices.
dist_field = dijkstra3d.euclidean_distance_field(field, source=(0,0,0), anisotropy=(4,4,40))

# To make the EDF go faster add the free_space_radius parameter. It's only
# safe to use if you know that some distance around the source point
# is unobstructed space. For that region, we use an equation instead
# of dijkstra's algorithm. Hybrid algorithm! free_space_radius is a physical
# distance, meaning you must account for anisotropy in setting it.
dist_field = dijkstra3d.euclidean_distance_field(field, source=(0,0,0), anisotropy=(4,4,40), free_space_radius=300) 

# Given a numerical field, for each directed edge from adjacent voxels A and B, 
# use B as the edge weight. In this fashion, compute the distance from a source 
# point for all finite voxels.
dist_field = dijkstra3d.distance_field(field, source=(0,0,0))

Perform dijkstra's shortest path algorithm on a 3D image grid. Vertices are voxels and edges are the nearest neighbors. For 6 connected images, these are the faces of the voxel (L1: manhattan distance), 18 is faces and edges, 26 is faces, edges, and corners (L: chebyshev distance). For given input voxels A and B, the edge weight from A to B is B and from B to A is A. All weights must be finite and non-negative (incl. negative zero).

What Problem does this Package Solve?

This package was developed in the course of exploring TEASAR skeletonization of 3D image volumes (now available in Kimimaro). Other commonly available packages implementing Dijkstra used matricies or object graphs as their underlying implementation. In either case, these generic graph packages necessitate explicitly creating the graph's edges and vertices, which turned out to be a significant computational cost compared with the search time. Additionally, some implementations required memory quadratic in the number of vertices (e.g. an NxN matrix for N nodes) which becomes prohibitive for large arrays. In some cases, a compressed sparse matrix representation was used to remain within memory limits.

Neither of graph construction nor quadratic memory pressure are necessary for an image analysis application. The edges between voxels (3D pixels) are regular and implicit in the rectangular structure of the image. Additionally, the cost of each edge can be stored a single time instead of 26 times in contiguous uncompressed memory regions for faster performance.

C++ Use

#include <vector>
#include "dijkstra3d.hpp"

// 3d array represented as 1d array
float* labels = new float[512*512*512](); 

// x + sx * y + sx * sy * z
int source = 0 + 512 * 5 + 512 * 512 * 3; // coordinate <0, 5, 3>
int target = 128 + 512 * 128 + 512 * 512 * 128; // coordinate <128, 128, 128>

vector<unsigned int> path = dijkstra::dijkstra3d<float>(
  labels, /*sx=*/512, /*sy=*/512, /*sz=*/512,
  source, target, /*connectivity=*/26 // 26 is default
);

vector<unsigned int> path = dijkstra::bidirectional_dijkstra3d<float>(
  labels, /*sx=*/512, /*sy=*/512, /*sz=*/512,
  source, target, /*connectivity=*/26 // 26 is default
);

// A* search using a distance to target heuristic
vector<unsigned int> path = dijkstra::compass_guided_dijkstra3d<float>(
  labels, /*sx=*/512, /*sy=*/512, /*sz=*/512,
  source, target, /*connectivity=*/26 // 26 is default
);

uint32_t* parents = dijkstra::parental_field3d<float>(
  labels, /*sx=*/512, /*sy=*/512, /*sz=*/512, 
  source, /*connectivity=*/26 // 26 is default
);
vector<unsigned int> path = dijkstra::query_shortest_path(parents, target);


float* field = dijkstra::euclidean_distance_field3d<float>(
  labels, 
  /*sx=*/512, /*sy=*/512, /*sz=*/512, 
  /*wx=*/4, /*wy=*/4, /*wz=*/40, 
  source, /*free_space_radius=*/0 // set to > 0 to switch on
);

float* field = dijkstra::distance_field3d<float>(labels, /*sx=*/512, /*sy=*/512, /*sz=*/512, source);

Python pip Binary Installation

pip install dijkstra3d

Python pip Source Installation

Requires a C++ compiler.

pip install numpy
pip install dijkstra3d

Python Direct Installation

Requires a C++ compiler.

git clone https://github.com/seung-lab/dijkstra3d.git
cd dijkstra3d
virtualenv -p python3 venv
source venv/bin/activate
pip install -r requirements.txt
python setup.py develop

Performance

I ran three algorithms on a field of ones from the bottom left corner to the top right corner of a 512x512x512 int8 image using a 3.7 GHz Intel i7-4920K CPU. Unidirectional search takes about 42 seconds (3.2 MVx/sec) with a maximum memory usage of about 1300 MB. In the unidirectional case, this test forces the algorithm to process nearly all of the volume (dijkstra aborts early when the target is found). In the bidirectional case, the volume is processed in about 11.8 seconds (11.3 MVx/sec) with a peak memory usage of about 2300 MB. The A* version processes the volume in 0.5 seconds (268.4 MVx/sec) with an identical memory profile to unidirectional search. A* works very well in this simple case, but may not be superior in all configurations.

Theoretical unidirectional memory allocation breakdown: 128 MB source image, 512 MB distance field, 512 MB parents field (1152 MB). Theoretical bidirectional memory allocation breakdown: 128 MB source image, 2x 512 distance field, 2x 512 MB parental field (2176 MB).

Fig. 1: A benchmark of dijkstra.dijkstra run on a 512<sup>3</sup> voxel field of ones from bottom left source to top right target. (black) unidirectional search (blue) bidirectional search (red) A* search aka compass=True.
Fig. 1: A benchmark of dijkstra.dijkstra run on a 5123 voxel field of ones from bottom left source to top right target. (black) unidirectional search (blue) bidirectional search (red) A* search aka compass=True.

import numpy as np
import time
import dijkstra3d

field = np.ones((512,512,512), order='F', dtype=np.int8)
source = (0,0,0)
target = (511,511,511)

path = dijkstra3d.dijkstra(field, source, target) # black line
path = dijkstra3d.dijkstra(field, source, target, bidirectional=True) # blue line
path = dijkstra3d.dijkstra(field, source, target, compass=True) # red line

Fig. 2: A benchmark of dijkstra.dijkstra run on a 50<sup>3</sup> voxel field of random integers of increasing variation from random source to random target. (blue/squares) unidirectional search (yellow/triangles) bidirectional search (red/diamonds) A* search aka .compass=True.
Fig. 2: A benchmark of dijkstra.dijkstra run on a 503 voxel field of random integers of increasing variation from random source to random target. (blue/squares) unidirectional search (yellow/triangles) bidirectional search (red/diamonds) A* search aka compass=True.

import numpy as np
import time
import dijkstra3d

N = 250
sx, sy, sz = 50, 50, 50

def trial(bi, compass):
  for n in range(0, 100, 1):
    accum = 0
    for i in range(N):
      if n > 0:
        values = np.random.randint(1,n+1, size=(sx,sy,sz))
      else:
        values = np.ones((sx,sy,sz))
      values = np.asfortranarray(values)
      start = np.random.randint(0,min(sx,sy,sz), size=(3,))
      target = np.random.randint(0,min(sx,sy,sz), size=(3,))  

      s = time.time()
      path_orig = dijkstra3d.dijkstra(values, start, target, bidirectional=bi, compass=compass)
      accum += (time.time() - s)

    MVx_per_sec = N * sx * sy * sz / accum / 1000000
    print(n, ',', '%.3f' % MVx_per_sec)

print("Unidirectional")
trial(False, False)
print("Bidirectional")
trial(True, False)
print("Compass")
trial(False, True)

What is that pairing_heap.hpp?

Early on, I anticipated using decrease key in my heap and implemented a pairing heap, which is supposed to be an improvement on the Fibbonacci heap. However, I ended up not using decrease key, and the STL priority queue ended up being faster. If you need a pairing heap outside of boost, check it out.

References

  1. E. W. Dijkstra. "A Note on Two Problems in Connexion with Graphs" Numerische Mathematik 1. pp. 269-271. (1959)
  2. E. W. Dijkstra. "Go To Statement Considered Harmful". Communications of the ACM. Vol. 11, No. 3, pp. 147-148. (1968)
  3. Pohl, Ira. "Bi-directional Search", in Meltzer, Bernard; Michie, Donald (eds.), Machine Intelligence, 6, Edinburgh University Press, pp. 127-140. (1971)

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

dijkstra3d-1.8.0.tar.gz (297.1 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

dijkstra3d-1.8.0-cp39-cp39-win_amd64.whl (173.7 kB view details)

Uploaded CPython 3.9Windows x86-64

dijkstra3d-1.8.0-cp39-cp39-win32.whl (169.0 kB view details)

Uploaded CPython 3.9Windows x86

dijkstra3d-1.8.0-cp39-cp39-manylinux2014_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.9

dijkstra3d-1.8.0-cp39-cp39-macosx_11_0_arm64.whl (203.7 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

dijkstra3d-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl (270.7 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

dijkstra3d-1.8.0-cp38-cp38-win_amd64.whl (175.2 kB view details)

Uploaded CPython 3.8Windows x86-64

dijkstra3d-1.8.0-cp38-cp38-win32.whl (170.9 kB view details)

Uploaded CPython 3.8Windows x86

dijkstra3d-1.8.0-cp38-cp38-manylinux2014_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.8

dijkstra3d-1.8.0-cp38-cp38-manylinux2010_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.12+ x86-64

dijkstra3d-1.8.0-cp38-cp38-manylinux1_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.8

dijkstra3d-1.8.0-cp38-cp38-macosx_11_0_arm64.whl (212.4 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

dijkstra3d-1.8.0-cp38-cp38-macosx_10_9_x86_64.whl (266.3 kB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

dijkstra3d-1.8.0-cp37-cp37m-win_amd64.whl (171.0 kB view details)

Uploaded CPython 3.7mWindows x86-64

dijkstra3d-1.8.0-cp37-cp37m-win32.whl (165.7 kB view details)

Uploaded CPython 3.7mWindows x86

dijkstra3d-1.8.0-cp37-cp37m-manylinux2014_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.7m

dijkstra3d-1.8.0-cp37-cp37m-manylinux2010_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.12+ x86-64

dijkstra3d-1.8.0-cp37-cp37m-manylinux1_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.7m

dijkstra3d-1.8.0-cp37-cp37m-macosx_10_9_x86_64.whl (265.8 kB view details)

Uploaded CPython 3.7mmacOS 10.9+ x86-64

dijkstra3d-1.8.0-cp36-cp36m-win_amd64.whl (170.9 kB view details)

Uploaded CPython 3.6mWindows x86-64

dijkstra3d-1.8.0-cp36-cp36m-win32.whl (165.6 kB view details)

Uploaded CPython 3.6mWindows x86

dijkstra3d-1.8.0-cp36-cp36m-manylinux2014_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.6m

dijkstra3d-1.8.0-cp36-cp36m-manylinux2010_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.12+ x86-64

dijkstra3d-1.8.0-cp36-cp36m-manylinux1_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.6m

dijkstra3d-1.8.0-cp36-cp36m-macosx_10_9_x86_64.whl (266.1 kB view details)

Uploaded CPython 3.6mmacOS 10.9+ x86-64

File details

Details for the file dijkstra3d-1.8.0.tar.gz.

File metadata

  • Download URL: dijkstra3d-1.8.0.tar.gz
  • Upload date:
  • Size: 297.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for dijkstra3d-1.8.0.tar.gz
Algorithm Hash digest
SHA256 6019961ff48f7d663f1560191b4408c3ae61beb39925ecdeba90e653710386ea
MD5 636fa554d540ec7a84db2d438a9bf0e3
BLAKE2b-256 8c15dd62f8330898aaa3158038233564157f7fc17eebe0448cd36509c5d42a1b

See more details on using hashes here.

File details

Details for the file dijkstra3d-1.8.0-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: dijkstra3d-1.8.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 173.7 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for dijkstra3d-1.8.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 464e3105b9550dec25603af61ed2da1a4890702fc3e3b4682d627c2892e9c24e
MD5 7e9641cb2df4fae418f8791d178ccbec
BLAKE2b-256 4fe5535981c309f6cbf87489f16fe45eff43c7b59bd4e5114bb0efedaccbc425

See more details on using hashes here.

File details

Details for the file dijkstra3d-1.8.0-cp39-cp39-win32.whl.

File metadata

  • Download URL: dijkstra3d-1.8.0-cp39-cp39-win32.whl
  • Upload date:
  • Size: 169.0 kB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for dijkstra3d-1.8.0-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 5aaee79c39f642ae0830c131ef2690946cfab31bcdb8273ec3475fcc6f1dd68b
MD5 ec870c8faa6747ef3c925e6b6b9df6d4
BLAKE2b-256 77d34a4be9f849a1cacb3754fe2082be67f9ec3d8daab6a13cb39a76d55d6720

See more details on using hashes here.

File details

Details for the file dijkstra3d-1.8.0-cp39-cp39-manylinux2014_x86_64.whl.

File metadata

  • Download URL: dijkstra3d-1.8.0-cp39-cp39-manylinux2014_x86_64.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: CPython 3.9
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for dijkstra3d-1.8.0-cp39-cp39-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 45bdd4d40275768321475f26253b8c9f1b2e2bbb6af1862920bf03b6739dc978
MD5 8faddf6e55eddc24b0a2faa4e1d29078
BLAKE2b-256 3a4539e15f75304a588489cd662eb78bb2ef7f0b0dcd123e0ac926fa1066f7f4

See more details on using hashes here.

File details

Details for the file dijkstra3d-1.8.0-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

  • Download URL: dijkstra3d-1.8.0-cp39-cp39-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 203.7 kB
  • Tags: CPython 3.9, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.6.0.post20210108 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.9.1

File hashes

Hashes for dijkstra3d-1.8.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 63055e0a12c890a6df91eefb9745bce3d584851381c8608647aa7d3a9024ef04
MD5 7d6d099a28a1db3bd143a286ae270598
BLAKE2b-256 3ded3fdad5385cfb4f06c0e1cd403f0f45a091327bf6756d8b0d77a986231bfa

See more details on using hashes here.

File details

Details for the file dijkstra3d-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: dijkstra3d-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 270.7 kB
  • Tags: CPython 3.9, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for dijkstra3d-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 55edae996d50c3a7248cc804e4ad194e078acb17f3d7911b6cd69d14b5a7a462
MD5 c228ee074adb9561a9f99368b9668db9
BLAKE2b-256 c45b6d09c60eecf88ae980beff13179b5f24269e94abc8b54024c698ac99af92

See more details on using hashes here.

File details

Details for the file dijkstra3d-1.8.0-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: dijkstra3d-1.8.0-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 175.2 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for dijkstra3d-1.8.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 46692d4e66b5d7d0426369caa6788564ebcc4c46544d16c0661a4b17f0b3c8d4
MD5 c546e3bd2660cb6e253be5ec50b58598
BLAKE2b-256 f241f366d7c205a055864e062a312270e2d0b69e519c43e0b286a7e603467109

See more details on using hashes here.

File details

Details for the file dijkstra3d-1.8.0-cp38-cp38-win32.whl.

File metadata

  • Download URL: dijkstra3d-1.8.0-cp38-cp38-win32.whl
  • Upload date:
  • Size: 170.9 kB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for dijkstra3d-1.8.0-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 8bb796ec679be175e61abb9328b8dc739a1cc198c6a87cb34c94e4ec26d593b0
MD5 b21a6540ab0210d23a7317f9ac3ec2d3
BLAKE2b-256 becab7786ec4d36cdd3b011d2d0eb451bf4998324b172b75eb7e055bcfb88fbb

See more details on using hashes here.

File details

Details for the file dijkstra3d-1.8.0-cp38-cp38-manylinux2014_x86_64.whl.

File metadata

  • Download URL: dijkstra3d-1.8.0-cp38-cp38-manylinux2014_x86_64.whl
  • Upload date:
  • Size: 1.8 MB
  • Tags: CPython 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for dijkstra3d-1.8.0-cp38-cp38-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 da2e7ce5e369822b863ba58c428f3722442711b6ab9264a6e9f3319d8a5adae6
MD5 146d9045c059539d27dc6da332819352
BLAKE2b-256 abf3f4bcd792f3c9da8362a55e80f03ba5517c675c0f25279b09f2c461eb2efe

See more details on using hashes here.

File details

Details for the file dijkstra3d-1.8.0-cp38-cp38-manylinux2010_x86_64.whl.

File metadata

  • Download URL: dijkstra3d-1.8.0-cp38-cp38-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 1.6 MB
  • Tags: CPython 3.8, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for dijkstra3d-1.8.0-cp38-cp38-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 49011b2864964c870d47bddef96ed589c2de2d9d451703bbd613c10426bc1a1a
MD5 bc1a5934520109d0e68ff4a50dd35a31
BLAKE2b-256 33b7f065d9cd85edab1826c4ae7a84c45f327d217d0515c1271004509a1fea1d

See more details on using hashes here.

File details

Details for the file dijkstra3d-1.8.0-cp38-cp38-manylinux1_x86_64.whl.

File metadata

  • Download URL: dijkstra3d-1.8.0-cp38-cp38-manylinux1_x86_64.whl
  • Upload date:
  • Size: 1.6 MB
  • Tags: CPython 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for dijkstra3d-1.8.0-cp38-cp38-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 78d3e3fa9ea3e99b9e6de1caa684d09d5df39fa8e97de5e3c272ed19a40c4919
MD5 5c39c1b2b90f95ce2bb26e956d243e01
BLAKE2b-256 6d3004534bdb9d1ff5f6802505776d86b93e510505ed40ac0dd2806aaec2fbc2

See more details on using hashes here.

File details

Details for the file dijkstra3d-1.8.0-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

  • Download URL: dijkstra3d-1.8.0-cp38-cp38-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 212.4 kB
  • Tags: CPython 3.8, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.6.0.post20210108 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.8.6

File hashes

Hashes for dijkstra3d-1.8.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 eede4c37af8d7277918a64bab995478852ae74e80a4d50ea5051bfaf7cc8f9f9
MD5 4b1ed2cf922504ca35e9919097c627dd
BLAKE2b-256 138027d52dc2b3d7b080ce23c7185cd9d4102fce4ab8f5908706dd9ebf5631b6

See more details on using hashes here.

File details

Details for the file dijkstra3d-1.8.0-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: dijkstra3d-1.8.0-cp38-cp38-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 266.3 kB
  • Tags: CPython 3.8, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for dijkstra3d-1.8.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 b36ce4e978fa08474d5a81a31bd55febad4f06f884112bdf9603ccd35b3bee8e
MD5 819c1dd33e4734c517553637d37ce81f
BLAKE2b-256 4e1b9fbaa07a6ac2f70b7cfcdb53e96fda05eb986602115cbd1c5e3928c2a2b9

See more details on using hashes here.

File details

Details for the file dijkstra3d-1.8.0-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: dijkstra3d-1.8.0-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 171.0 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for dijkstra3d-1.8.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 3ecea886dab5ac6da87cb5d9353f3f52e5974ad2f1b316bbb9729481acfb8015
MD5 e8a04306f3e0692c55c4c967de3ca286
BLAKE2b-256 56a86a9764f7b33365130d448703a2e29b1c16c6ceda3f2ba5e7ac5891bd1da4

See more details on using hashes here.

File details

Details for the file dijkstra3d-1.8.0-cp37-cp37m-win32.whl.

File metadata

  • Download URL: dijkstra3d-1.8.0-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 165.7 kB
  • Tags: CPython 3.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for dijkstra3d-1.8.0-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 5d91a46cb07affb98e0d2cded94a0c0b2acafae13e5d71ae9e261bd2e0a2556c
MD5 5b226ae1f46d34d2631168250c967777
BLAKE2b-256 5930314eac57f15e443cf724721189113b5817d17dac4f7c6e802a036b4a3f35

See more details on using hashes here.

File details

Details for the file dijkstra3d-1.8.0-cp37-cp37m-manylinux2014_x86_64.whl.

File metadata

  • Download URL: dijkstra3d-1.8.0-cp37-cp37m-manylinux2014_x86_64.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for dijkstra3d-1.8.0-cp37-cp37m-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f64e2c162103fb77452859200109bc32d23bef8b204ca96bc0449642812a7499
MD5 aff6d9fae26f1b652f717e500ba087b8
BLAKE2b-256 d34644ff85b50db294021646c7db8566b2f7193e83fcb75dd38d8b8c43c50940

See more details on using hashes here.

File details

Details for the file dijkstra3d-1.8.0-cp37-cp37m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: dijkstra3d-1.8.0-cp37-cp37m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.7m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for dijkstra3d-1.8.0-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 552de0248b01d31cf4335a8c1e851eb21b62c6e30b70a11006b62ae2e67e285b
MD5 3a4ac69e6be5bfa840a0c7295b4fb712
BLAKE2b-256 50c5457e5f019e1b0ae82379b3743cfc42cb8b34cb37f8ca910beddc7fff1be9

See more details on using hashes here.

File details

Details for the file dijkstra3d-1.8.0-cp37-cp37m-manylinux1_x86_64.whl.

File metadata

  • Download URL: dijkstra3d-1.8.0-cp37-cp37m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for dijkstra3d-1.8.0-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 602f436c93e11b8ab1f91366f5478d76bb1afaef6dd97dd6ce14e7c7a39d149c
MD5 8c767fa6a22eb855f3f28911604b0dcd
BLAKE2b-256 a249414794aa3cb3cb274e29569ab3e9bb5fe1e220ac57f1e4a93a7e259af934

See more details on using hashes here.

File details

Details for the file dijkstra3d-1.8.0-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: dijkstra3d-1.8.0-cp37-cp37m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 265.8 kB
  • Tags: CPython 3.7m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for dijkstra3d-1.8.0-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 45dcc22f3e014b9298ed592eabc46794296a6c8402c712dfc772218c5bb497e8
MD5 0b83dd46313126ea9f17d82dfd39c3b4
BLAKE2b-256 6be28676b47dffff24855de2c4c9d802b9983b99a8dda7cd74b7a78e7b42d132

See more details on using hashes here.

File details

Details for the file dijkstra3d-1.8.0-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: dijkstra3d-1.8.0-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 170.9 kB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for dijkstra3d-1.8.0-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 715cf80fcbebbe24fbe648340e35830ccecff9725354dbbc9c1cb064d30ecf3b
MD5 23e5a215249d71146dc4186caedd73fb
BLAKE2b-256 8f89bcdec851e229e6f1dc1680d3091cf2728bb4ccba78b4b8cb2d516364add7

See more details on using hashes here.

File details

Details for the file dijkstra3d-1.8.0-cp36-cp36m-win32.whl.

File metadata

  • Download URL: dijkstra3d-1.8.0-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 165.6 kB
  • Tags: CPython 3.6m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for dijkstra3d-1.8.0-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 f60b85070dbda5b7447ec2c8d3320c13c42bcf7da73f1f351620ad3fd7c4c8f9
MD5 dad541a7f659106c9cad025f659d9bdb
BLAKE2b-256 0d197df903d3b6b47bb68c81272389a9fb0d817b3428f9d2f010cc571ece777a

See more details on using hashes here.

File details

Details for the file dijkstra3d-1.8.0-cp36-cp36m-manylinux2014_x86_64.whl.

File metadata

  • Download URL: dijkstra3d-1.8.0-cp36-cp36m-manylinux2014_x86_64.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for dijkstra3d-1.8.0-cp36-cp36m-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6f8bfb2367188d73e8a6e793049e93e7bc342bb6a7770d5a4cb388192c44a7ef
MD5 8bf6a40b4c24ef84873f83da5098157a
BLAKE2b-256 8c4ab2b22635cad721a883ba84fac83991945021007c7b631bb0e53dc4cb1327

See more details on using hashes here.

File details

Details for the file dijkstra3d-1.8.0-cp36-cp36m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: dijkstra3d-1.8.0-cp36-cp36m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.6m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for dijkstra3d-1.8.0-cp36-cp36m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 9cf9437dc2fe5ec43ba72affd586dbf6f6e8af283f9a907d0815b37229adcf22
MD5 74ec638f42680c0969dfad133c70237f
BLAKE2b-256 691d5e818684c5e1e585224dd82202eb2647427f600219af45a50d545f36ddcc

See more details on using hashes here.

File details

Details for the file dijkstra3d-1.8.0-cp36-cp36m-manylinux1_x86_64.whl.

File metadata

  • Download URL: dijkstra3d-1.8.0-cp36-cp36m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for dijkstra3d-1.8.0-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 7d8ece81ff9fae11f75282f62c667fa13ac06c299bf9fad0b894687a0dc7f921
MD5 6f4af5fb14ff3d9e494a34a2ee3cd5ef
BLAKE2b-256 745c682334b6d912f88e9e9e5519f77a39be8c417618c1afa610b5ff828afd60

See more details on using hashes here.

File details

Details for the file dijkstra3d-1.8.0-cp36-cp36m-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: dijkstra3d-1.8.0-cp36-cp36m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 266.1 kB
  • Tags: CPython 3.6m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for dijkstra3d-1.8.0-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 ad052f1754c6d82b5c174484f739aebc3885a33cf0bfa1e83596caedd3f368bf
MD5 64585e1e0d927767a2780123ba0b3379
BLAKE2b-256 f51ac34ba131749916f7bf9eb9f2003c26ac18301849b2b2d089e18e389739f1

See more details on using hashes here.

Supported by

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