seeVol
seevol analyses line-of-sight visibility in 3D binary volumes, where 0 represents a solid/opaque voxel, and 1 represents open/transparent voxels.
The core functionality is based on the Amanatides & Woo voxel traversal algorithm 1 and is implemented in C++ to compute straight line visibility between all pairs of open (non solid) voxels in a given volume.
This tool tests visibility between all open pairs throughout the volume, which permits per-voxel visibility analysis metrics to be calculated downstream for every open voxel.
Dependencies
A C++17 or greater build toolchain is required for source installation, alongside Python >=3.10.
Pyvista is a dependency for visualisations of the visibility metrics output onto the 3D volume itself (see this visual example for use).
Installation
To install seevol:
pip install seevol
or for uv users:
uv pip install seevol
Usage
The core function visible_pairs() accepts a 3D binary (0 = solid, 1 = open) NumPy array as input and outputs two NumPy arrays:
coords— shape (N, 3), the open voxel coordinates in the volumeedges— shape (M, 2), pairs of indices intocoordsfor voxels that are mutually visible
For example, if edges[0] is [2, 7],the visibility edge connects coords[2] and coords[7] and these two voxels are visible to each other via direct line of sight.
Users can load .npy files in Python using np.load() and pass the result to visible_pairs().
Downstream analyses or visualisations are then possible from this output, such as visualising a 'visibility heatmap' using Pyvista (see below)
Limitations
This tool currently uses all-pair calculation using voxel ray traversal. Because of this, the ray traversal algorithm scales as O(open_voxels2) and is therefore quickly unusable for large volumes.
A hard limit is imposed in the C++ source file which limits open voxels to 1,000,000. In reality, volumes with over 500,000 open voxels are likely to significant memory issues as very large visible edges will be stored. Methods to reduce this runtime will hopefully be introduced over time.
Minimal example
The quickstart example creates a small volume of open voxels with one solid voxel blocking visibility:
import numpy as np
import seevol
# 1 = open, 0 = solid
volume = np.ones((3, 3, 3), dtype=np.uint8)
# adds an obstruction
volume[1, 1, 1] = 0
# calculate pairwise voxel visibility
coords, edges = seevol.visible_pairs(volume)
print(f"{len(coords)} open voxels containing {len(edges)} visible pairs")
It prints the number of open voxels and visible pairs:
26 open voxels containing 214 visible pairs
Using .npy files
To import your own 3D NumPy volume and calculate visibility as with the above example:
import numpy as np
import seevol
# load your own 3D NumPy volume: 0 = solid, 1 = open
volume = np.load("my_volume.npy")
# calculate pairwise voxel visibility
coords, edges = seevol.visible_pairs(volume)
print(f"{len(coords)} open voxels containing {len(edges)} visible pairs")
Visualisation examples on large artificial volumes
Below shows an example output of the visibility score per voxel as a heatmap within an intricate 150x150x150 volume, generated using tunnel_excavator() to mimic an ant-nest structure and visualised with Pyvista using visibility_visualiser():
A visibility scored volume using a generated porespy volume:
References
- Amanatides, J., & Woo, A. (1987, August). A fast voxel traversal algorithm for ray tracing. In Eurographics (Vol. 87, No. 3, pp. 3-10).
Metadata
Release files for seevol 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| seevol-0.1.0.tar.gz | 6.5 MB | Without provenance | Details for seevol-0.1.0.tar.gz |
Built distributions (wheels)
Total release size: 7.9 MB
Release files / seevol-0.1.0.tar.gz
| Download URL | seevol-0.1.0.tar.gz |
|---|---|
| Size | 6.5 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b1348b611d39596cc7171a3e19f2d1dd9fa2974028d4f76a4fd8ef0fbe88dbf7
|
|
BLAKE2b-256 checksum How to use checksums |
c2911d4a09335247f37dd2b23d13bdddfaed7859a317191904eb29d6877ad1bf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / seevol-0.1.0-cp312-cp312-macosx_26_0_arm64.whl
| Download URL | seevol-0.1.0-cp312-cp312-macosx_26_0_arm64.whl |
|---|---|
| Size | 78.4 kB |
| Tags | CPython 3.12 macOS 26.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
888375d79eb6786dce2623267c1e19d652d413c61e282c0576cc94e93d2b73dc
|
|
BLAKE2b-256 checksum How to use checksums |
b21f6b7bbeeeb4f045cfc59399f186c22ec3b1dfe1ddfb716c5bd83137aecaf8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / seevol-0.1.0-cp311-cp311-win_amd64.whl
| Download URL | seevol-0.1.0-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 95.8 kB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
6787856a191e78bd17e88ba94ad9477ef0d66d11fbde096ff3d5617e3515f2b4
|
|
BLAKE2b-256 checksum How to use checksums |
914d3c7c606afb46d73698396ab9f4e32cc9fb573f5ca1b6c85846d671015465
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / seevol-0.1.0-cp311-cp311-win32.whl
| Download URL | seevol-0.1.0-cp311-cp311-win32.whl |
|---|---|
| Size | 82.5 kB |
| Tags | CPython 3.11 Windows x86-32 |
|
SHA-256 checksum How to use checksums |
d513d8af4c71c8fe6b6504a5ce35101f06ba20fe0cad98d4e92d2ff2824be9ce
|
|
BLAKE2b-256 checksum How to use checksums |
ac317a95631e6668459dd2df81aa2113355086ee1ca388fb6144e82106578aa0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / seevol-0.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | seevol-0.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 179.8 kB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
3db6d09f0f85a16c1831f71b8881f98664dbdb209a43f112bdadd8a686fdcf53
|
|
BLAKE2b-256 checksum How to use checksums |
db106e70b6f4dd3b94561935c5fc90daa6433360e912bb7bc8a256e61acb5a23
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / seevol-0.1.0-cp311-cp311-macosx_26_0_arm64.whl
| Download URL | seevol-0.1.0-cp311-cp311-macosx_26_0_arm64.whl |
|---|---|
| Size | 326.8 kB |
| Tags | CPython 3.11 macOS 26.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
035cf6c7b6509007671e95a2796a9b2cf209db10fabc88faa176c2055ae41041
|
|
BLAKE2b-256 checksum How to use checksums |
0c71260b7c4384d7166012861cf97e37ab5a90bec3cc5ed309c85d4a390d2439
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / seevol-0.1.0-cp310-cp310-win_amd64.whl
| Download URL | seevol-0.1.0-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 95.2 kB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
6be4767c0807bcd01d0978827dab6f200b2b871b26be400b8090feae64633e9e
|
|
BLAKE2b-256 checksum How to use checksums |
cefa7369d800fdc691fa7cdcb34d8a3f09da334b38b84d31b37d763cadb91f76
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / seevol-0.1.0-cp310-cp310-win32.whl
| Download URL | seevol-0.1.0-cp310-cp310-win32.whl |
|---|---|
| Size | 81.5 kB |
| Tags | CPython 3.10 Windows x86-32 |
|
SHA-256 checksum How to use checksums |
acd39da4240dcb1a55a97b0d9254133e9a301ebc18df06f6879528b269cdb2c3
|
|
BLAKE2b-256 checksum How to use checksums |
31200cc71af8b0119172268dec015f71984a3ca8b69145281b821d3715bea0b5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / seevol-0.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | seevol-0.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 178.8 kB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
adad1b2de6805b0ace22edefc4fb494ad2f0b2ea5ed4d7d070616501fdca2d19
|
|
BLAKE2b-256 checksum How to use checksums |
b29fe74bc74757ba0f05933ae3e1e47adbb6bf978405b58259bf5a87902ca9e3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / seevol-0.1.0-cp310-cp310-macosx_26_0_arm64.whl
| Download URL | seevol-0.1.0-cp310-cp310-macosx_26_0_arm64.whl |
|---|---|
| Size | 325.6 kB |
| Tags | CPython 3.10 macOS 26.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
d3e62d0b577ce3e097ebdfcf40aaf26f4f67e799d308cf67fe2cbd80cbb23935
|
|
BLAKE2b-256 checksum How to use checksums |
3cdb05dd0c1708e6dc7e394b7460f76cc2e0b3ef1ba8e8c45437046b71599f47
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for seevol 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.