Skip to main content

Storage and tooling for 3D radiation fields with C++ core and Python bindings.

Project description

RadFiled3D

Tests

This Repository contains the file format and API according to the Paper: "RadField3D: A Data Generator and Data Format for Deep Learning in Radiation-Protection Dosimetry for Medical Applications".

The aim of this library is, to provide a simple to use API for a structured, binary file format, that can store all relevant information from a three dimensional radiation field calculated by applications that use algorithms like Monte-Carlo radiation transport simulations. Such a binary file format is useful, when one needs to process a huge amount of radiation field files like when training a neural network. With that use-case in mind, RadFiled3D also provides a python interface with a pyTorch integration. In order to directly iterate a dataset generated with the RadField3D tool, just jump to the section RadField3D Datasets.

🌟 Why Use RadFiled3D

  • Efficient Storage: Structured, binary file format for storing large amounts of radiation field data.
  • Easy Integration: Simple API for C++ and Python with pyTorch support.
  • High Performance: Optimized for fast data access and manipulation.
  • Versatile: Supports both Cartesian and Polar coordinate systems.
  • Extensible: Easily extendable to include additional metadata and data types.

Table of Contents

Building and Installing

Installing from PyPi

Prebuilt versions of this module for python 3.11, 3.12 and 3.13 for Windows and most Linuxsystems can be installed directly by using pip.

pip install RadFiled3D

Installing from Source

You can build and install this library and python module from source by using CMake and a C++ compiler. The CMake Project will be built automatically, but will take some time.

Prerequisites

  • C++ Compiler
    • g++ or clang for Linux
    • MSVC or clang from Visual Studio 2022 for Windows
  • CMake >= 3.30
  • Python >= 3.11

CMake

In order to use the module directly from another C++ Project, you can integrate it by adding the local location of this repository via add_submodule() and then link against the target libRadFiled3D. All classes are then available from the namespace RadFiled3D. Check the Example or the First Test File as a first reference.

Python

The Python package is built with scikit-build-core, the standard PEP 517 backend for CMake projects. It drives the CMake/pybind11 build automatically; no setup.py is required. CMake and Ninja are provisioned by the build backend if they are not already present.

Installing locally

python -m pip install .

Building a wheel

python -m build --wheel

The package version is taken from the release tag (GITHUB_REF / CI_COMMIT_TAG) at build time and falls back to 0.0.0 for non-release builds.

Getting Started

Disclaimer: Not all methods support keyword arguments as they need to be defined manually in the bindings. For some methods like add_layer or the Metadata methods those are implemented.

From Python

Simple example on how to create and store a radiation field. Find more in the example file: Example

from RadFiled3D.RadFiled3D import vec3, CartesianRadiationField, DType
from RadFiled3D.utils import FieldStore, StoreVersion
from RadFiled3D.metadata.v1 import Metadata


# Creating a cartesian radiation field
field = CartesianRadiationField(vec3(2.5, 2.5, 2.5), vec3(0.05, 0.05, 0.05))
# defining a channel and a layer on it
field.add_channel("channel1").add_layer("layer1", "unit1", DType.FLOAT32)

# accessing the voxels by using numpy arrays
array = field.get_channel("channel1").get_layer_as_ndarray("layer1")
assert array.shape == (50, 50, 50, 1)

# modify voxels content by using numpy array as no data is copied, just referenced
array[2:5, 2:5, 2:5] = 2.0

# addressing a voxel by providing a point in space
voxel = field.get_channel("channel1").get_voxel_by_coord("layer1", 0.1, 2.4, 2.1)

# Store changes to a file
metadata = Metadata.default()
FieldStore.store(field, metadata, "test01.rf3", StoreVersion.V1)

# load data
field2 = FieldStore.load("test01.rf3")
metadata2 = FieldStore.load_metadata("test01.rf3")

Integrating with pyTorch

RadFiled3D comes with a submodule at RadFiled3D.pytorch. This module provides some dataset classes to support the usage. Datasets can be loaded from folders or .zip-Files.

from RadFiled3D.pytorch.datasets import MetadataLoadMode
from RadFiled3D.pytorch.datasets.cartesian import CartesianFieldSingleLayerDataset
from RadFiled3D.pytorch import DataLoaderBuilder
from RadFiled3D.pytorch.helpers import RadiationFieldHelper
from RadFiled3D.RadFiled3D import VoxelGrid
from torch import Tensor
from RadFiled3D.metadata.v1 import Metadata
from RadFiled3D.pytorch.types import TrainingInputData, DirectionalInput


# Extend one of the provided dataset classes to match the output to the current needs
class MyLayerDataset(CartesianFieldSingleLayerDataset):
    def __getitem____(self, idx: int) -> TrainingInputData:
        layer, metadata = super().__getitem__(idx)
        tube_dir = metadata.get_header().simulation.tube.radiation_direction
        tube_pos = metadata.get_header().simulation.tube.radiation_origin
        # transform the layers data to a tensor
        return TrainingInputData(
            input=DirectionalInput(
                direction=torch.tensor([tube_dir.x, tube_dir.y, tube_dir.z]),
                origin=torch.tensor([tube_pos.x, tube_pos.y, tube_pos.z]),
                spectrum=None
            )
            ground_truth=RadiationFieldHelper.load_tensor_from_layer(layer)
        )


def finalize_dataset(dataset: MyLayerDataset)
    dataset.set_channel_and_layer("test_channel", "test_layer")
    dataset.metadata_load_mode = MetadataLoadMode.HEADER

# Pass the dataset class and other options to the DataLoaderBuilder
builder = DataLoaderBuilder(
    "./test_dataset.zip",
    train_ratio=0.7,
    val_ratio=0.15,
    test_ratio=0.15,
    dataset_class=MyLayerDataset,
    on_dataset_created=finalize_dataset     # Optional: provide a finalizer to perform configuration of the dataset once it was created by the builder
)

# Build the training dataset
train_dl = builder.build_train_dataloader(
    batch_size=8,
    shuffle=True,
    worker_count=4
)

# iterate over the dataset
for field, metadata in train_dl:
    pass

Direct integration with RadField3D datasets

Directly iterate RadField3D datasets either by loading whole fields or iterating each voxel independently. The dataset classes will return pyTorch compatible NamedTuples, that preserve the structure of the raw radiation fields and layers.

from RadField3D.pytorch.datasets.radfield3d import RadField3DDataset
from RadField3D.pytorch.datasets.radfield3d import RadField3DVoxelwiseDataset
# import the pyTorch compatible datatypes
from RadField3D.pytorch import DataLoaderBuilder
from RadField3D.pytorch.types import DirectionalInput, PositionalInput, TrainingInputData, RadiationField


builder = DataLoaderBuilder(
    "./test_dataset_folder/",
    train_ratio=0.7,
    val_ratio=0.15,
    test_ratio=0.15,
    dataset_class=RadField3DDataset
)

train_dl = builder.build_train_dataloader(
    batch_size=8,
    shuffle=True,
    worker_count=4
)

# iterate over the dataset using fully useable pyTorch classes
for train_data in train_dl:
    input: DirectionalInput | PositionalInput = train_data.input
    field: RadiationField = train_data.ground_truth

TrainingInputData consists of two components metadata (as DirectionalInput or PositionalInput) contains the following information

  • radiation direction (x, y, z)
  • radiation origin (x, y, z)
  • field shape (Cone, Rectangle, Ellipsis)
  • field shape parameters (opening angle, size at origin, ...)
  • x-ray tube output spectrum

field (as RadiationField) contains the following information

  • direct x-ray beam component (as RadiationFieldChannel)
    • spectrum per voxel
    • fluence per voxel
    • statistical error per voxel
  • scatter field component (as RadiationFieldChannel)
    • spectrum per voxel
    • fluence per voxel
    • statistical error per voxel
  • geometry (binary density map)

Tracing paths in Cartesian Coordinate Systems

In order to integrate RadFiled3D with other simulation frameworks or applications, one can either take the final results and write it voxel-wise to RadFiled3D or one can already use RadFiled3D during the particle tracking. Therefore, this library offers GridTracers. Each of them implements a different line-segment tracing algorithm to find consecutive voxels that are intersected.

The following GridTracers exists:

  • SamplingGridTracer: Traces a line between two points in the grid using a sampling approach. In this approach the minimum sampling size is the length of the line segment. If the line segment is longer than the minimum sampling size, which is half the L2-Norm of the voxel size, the line is divided into segments of the minimum sampling size. This approach counts the hits if the line segment is incident to a voxel, only!
  • BresenhamGridTracer: Traces a line between two points in the grid using the Bresenham algorithm. This algorithm is a line rasterization algorithm that is used to trace a line between two points in a grid. The starting point is excluded as this can only exit a voxel.
  • LinetracingGridTracer: This class traces a line between two points in the grid using a combination of the SamplingGridTracer and a line tracing algorithm. First the lossy sampling tracer is used to trace the line. Then all adjacent voxels to the voxels that were hit are tested using a line-segment intersection test algorithm.

All those tracers can be created by calling the GridTracerFactory.construct(..) method. The tracers share one single interface method:

def trace(self, p1: vec3, p2: vec3) -> list[int]:

This method takes two points as the definition of the considered line-segment and returns the flat indices of all voxels intersected, that are inside the grid.

Example usage:

from RadFiled3D.RadFiled3D import vec3, GridTracerFactory, GridTracerAlgorithm, CartesianRadiationField, DType

field = CartesianRadiationField(vec3(1.0, 1.0, 1.0), vec3(0.01, 0.01, 0.01))
field.add_channel("test").add_layer("flux", "counts", DType.INT32)
hits_counts = field.get_channel("test").get_layer_as_ndarray("flux")
hits_counts = hits_counts.flatten()

tracer = GridTracerFactory.construct(field, GridTracerAlgorithm.SAMPLING)

indices = tracer.trace(vec3(0.5, 0.5, 0.0), vec3(0.5, 0.85, 1.0))
hits_counts[indices] += 1
grid_shape = field.get_voxel_counts()
hits_counts.reshape((grid_shape.x, grid_shape.y, grid_shape.z))

Faster loading of field series

As the RadFiled3D format possesses a dynamic structure, the loading of a radiation field requires the discovery of channels and layers as well as calculating the binary entry points of channels, layers and voxels. When loading datasets for machine learning, the structure of the fields loaded will likely be constant for each dataset. Therefore, the binary entry points can be precalculated to access only those parts of the RadFiled3D files that are really needed to increase the loading speed and to reduce the needed memory. This is relealized by the FieldAccessors objects.

from RadFiled3D.RadFiled3D import CartesianFieldAccessor, FieldType, uvec3
from RadFiled3D.utils import FieldStore
from RadFiled3D.metadata.v1 import Metadata

accessor: CartesianFieldAccessor = FieldStore.construct_field_accessor("a_file.rf3")
field_type = accessor.get_field_type()
assert field_type == FieldType.CARTESIAN

print(accessor)
field = accessor.access_field("a_similar_file.rf3")
layer = accessor.access_layer("a_similar_file.rf3", "channel1", "layer1")
voxel = accessor.access_voxel("a_similar_file.rf3", "channel1", "layer1", uvec3(0, 0, 0))

FieldAccessors are implemented for the two currently supported coordinate systems: CartesianFieldAccessor and PolarFieldAccessor. Depending on the actual field type, FieldStore.construct_field_accessor(AFile) returns one of them. The pyTorch Datasets are implemented using the FieldAccessor objects to allow for quicker access of datasets. The tests shall act as example code see test_field_accessor.py.

From C++

Simple example on how to create and store a radiation field. Find more in the example file: Example

#include <RadFiled3D/storage/RadiationFieldStore.hpp>
#include <RadFiled3D/RadiationField.hpp>

using namespace RadFiled3D;
using namespace RadFiled3D::Storage;

void main() {
    auto field = std::make_shared<CartesianRadiationField>(glm::vec3(2.5f), glm::vec3(0.05f)); // field extents: 2.5 m x 2.5 m x 2.5 m and voxel extents: 5 cm x 5 cm x 5 cm

    auto metadata = std::make_shared<RadFiled3D::Storage::V1::RadiationFieldMetadata>(
        // learn about the existing data fields from the example file in ./examples/cxx/examples01.cpp
    )

    FieldStore::store(field, metadata, "test_field.rf3", StoreVersion::V1);

    auto field2 = FieldStore::load("test_field.rf3");
}

Available Voxel Datatypes

In general, a C++ Scalar- or HistogramVoxel (and thus layers) can hold any datatype. But in order to deserialize them from a file or use them from Python, there is only a specific list implemented. The Available datatypes are:

C++ Type RadFiled3D.DType
float DType.FLOAT32
double DType.FLOAT64
int DType.INT32
uint8_t DType.BYTE
unsigned char DType.BYTE
char DType.SCHAR
uint32_t DType.UINT32
uint64_t DType.UINT64
unsigned long long DType.UINT64
glm::vec2 DType.VEC2
glm::vec3 DType.VEC3
glm::vec4 DType.VEC4
HistogramVoxel DType.HISTOGRAM
AngularResolvedVoxel DType.ANGULAR

Field Structure

RadFiled3D defines a field structure, that provides the user with the possibility to first define in which kind of space he wants to operate. Therefore one can choose between CartesianRadiationField and PolarRadiationField.

  • CartesianRadiationField: Segments a room defined by an extent of the room itself and each cuboid voxel into a set of voxels. Each voxel can be addressed by a 3D position (coordinate: x, y, z), a 3D index (number of the voxel in each dimension) or a flat 1D index.
  • PolarRadiationField: Segements the surface of a unit sphere into surface segments. Each segment (voxel) can be addressed by a 2D position (coordinate: theta, phi), a 2D index (number of the segment in each dimension) or a flat 1D index.

Fields are then partitioned into channels (VoxelGridBuffer/PolarSegmentsBuffer). All channels share the same size and resolution. A channel is again partitioned into layers (VoxelGrid/PolarSegment). Each layer holds the actual voxel data and can be constructed from various data types (float, double, uint32_t, uint64_t, glm::vec2, glm::vec3, glm::vec4, N-D-Histogram (list of floats)). Additionally, a layer has a unit string assigned to it as well as a statistical uncertainty to perserve those information.

Dependencies

RadFiled3D comes with a possibly low amount of dependencies. We integrated the OpenGL Math Library (GLM) just to provide those datatypes out of the box and as GLM is a head-only library we suspect no issues by doing so.

All C++ dependencies (Will be fetched by CMake):

All python dependencies:

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

radfiled3d-1.3.3.tar.gz (127.1 kB view details)

Uploaded Source

Built Distributions

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

radfiled3d-1.3.3-cp314-cp314-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.14Windows x86-64

radfiled3d-1.3.3-cp314-cp314-musllinux_1_2_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

radfiled3d-1.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (828.7 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

radfiled3d-1.3.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (827.4 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

radfiled3d-1.3.3-cp313-cp313-win_amd64.whl (1.3 MB view details)

Uploaded CPython 3.13Windows x86-64

radfiled3d-1.3.3-cp313-cp313-musllinux_1_2_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

radfiled3d-1.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (829.0 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

radfiled3d-1.3.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (826.7 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

radfiled3d-1.3.3-cp312-cp312-win_amd64.whl (1.3 MB view details)

Uploaded CPython 3.12Windows x86-64

radfiled3d-1.3.3-cp312-cp312-musllinux_1_2_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

radfiled3d-1.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (829.1 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

radfiled3d-1.3.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (826.5 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

radfiled3d-1.3.3-cp311-cp311-musllinux_1_2_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

radfiled3d-1.3.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (823.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

radfiled3d-1.3.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (821.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

File details

Details for the file radfiled3d-1.3.3.tar.gz.

File metadata

  • Download URL: radfiled3d-1.3.3.tar.gz
  • Upload date:
  • Size: 127.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for radfiled3d-1.3.3.tar.gz
Algorithm Hash digest
SHA256 ad551df0feb81e5269af58155944a8d86b670ab4601f4c6625f185e1a87f221e
MD5 d04c6dae2d789b4686ffa82f7a9e10d8
BLAKE2b-256 929baf07b1953d005c1845320e9ac9649a41fc56eb66f880970cd591aba62ff5

See more details on using hashes here.

Provenance

The following attestation bundles were made for radfiled3d-1.3.3.tar.gz:

Publisher: package-test-publish.yml on Centrasis/RadFiled3D

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file radfiled3d-1.3.3-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: radfiled3d-1.3.3-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for radfiled3d-1.3.3-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 9d78daa129e2def807669b65c88b07eed77614ffe4caa08aff097e8a5631cbda
MD5 fd47bc3982c3803d889c42583a267725
BLAKE2b-256 df679a3e9231f8498e73a873a6799f08ae7753bebbd48497d2522e4e3aead570

See more details on using hashes here.

File details

Details for the file radfiled3d-1.3.3-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for radfiled3d-1.3.3-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 9f1cd6759c41cefbaa5f504e815e6b2699380f351e999fe0398438ac49cfe5de
MD5 e90da5d30f1840a9b3ae182da35ee01a
BLAKE2b-256 3670174e7f34468d98b3325c22f5819b972200004572119aaaec54fdd8c001fc

See more details on using hashes here.

Provenance

The following attestation bundles were made for radfiled3d-1.3.3-cp314-cp314-musllinux_1_2_x86_64.whl:

Publisher: package-test-publish.yml on Centrasis/RadFiled3D

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file radfiled3d-1.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for radfiled3d-1.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 30d49708081f94c9103cf5c11859c00b2a89b23c908cb3b73532f402e0f415e3
MD5 8d442f6aace625faf4ae861ebc39cb23
BLAKE2b-256 36e6547e759683f2e6301ac422063340be0c6d9f52c32beb05b06ebb09b92f40

See more details on using hashes here.

Provenance

The following attestation bundles were made for radfiled3d-1.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: package-test-publish.yml on Centrasis/RadFiled3D

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file radfiled3d-1.3.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for radfiled3d-1.3.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 1c9c5629b846add9fefd8495a0b3a401c02a1e17b17f8a2109cff29a134ad2a7
MD5 fd1405aed14cd02a4df046937762df34
BLAKE2b-256 bd1925640256fa8e82e49d7f86cefe3199bcee266938c12191e2fa4696c53f85

See more details on using hashes here.

Provenance

The following attestation bundles were made for radfiled3d-1.3.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl:

Publisher: package-test-publish.yml on Centrasis/RadFiled3D

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file radfiled3d-1.3.3-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: radfiled3d-1.3.3-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 1.3 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for radfiled3d-1.3.3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 f435cce363726c832f648de07440286c17e0ff75c53ca17785e34408bd3be561
MD5 6e0b5149089b1e73a72e26fdc9f4fdce
BLAKE2b-256 2ae4f70e59a2ffdc5572e38f1da02420f1f38e415fb3b58beee61991d2fc65e8

See more details on using hashes here.

File details

Details for the file radfiled3d-1.3.3-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for radfiled3d-1.3.3-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c1e4ac4a54571971e593ba3a50233e5718cd5ff59af66ca831b899b518594450
MD5 68bdd7972d9ce99328b6908441249e51
BLAKE2b-256 689a5f26fe04768e06b1bd9b86509052a110ba2b4a21624166e37cbde260d2f0

See more details on using hashes here.

Provenance

The following attestation bundles were made for radfiled3d-1.3.3-cp313-cp313-musllinux_1_2_x86_64.whl:

Publisher: package-test-publish.yml on Centrasis/RadFiled3D

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file radfiled3d-1.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for radfiled3d-1.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 456c8a7fd55c1bca48751bb61336e6c210f8d30653a19f8ee917f59845310860
MD5 f0463648f9736a08135ec81ad9bdc93f
BLAKE2b-256 90d75f22c5ad61cb46e3eba48d55ca20651ffc24c754c4913bbd818ff4ce60fc

See more details on using hashes here.

Provenance

The following attestation bundles were made for radfiled3d-1.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: package-test-publish.yml on Centrasis/RadFiled3D

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file radfiled3d-1.3.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for radfiled3d-1.3.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 eff36f025a6d69c0e4f74996c4fca752f634595fc7e0b9d9c7cd5403d037f25c
MD5 f7b5227da7c73ed9984e7e83ed88dec4
BLAKE2b-256 6c7584bfa2878b994d353f10b663dea9b5e0127c0daf2dbb38eed8c9be5aa302

See more details on using hashes here.

Provenance

The following attestation bundles were made for radfiled3d-1.3.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl:

Publisher: package-test-publish.yml on Centrasis/RadFiled3D

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file radfiled3d-1.3.3-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: radfiled3d-1.3.3-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 1.3 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for radfiled3d-1.3.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 00dd44b7eccecbf4ac8f7307e341760a61ae9f62bb1f5c3f23792c3861b2d52f
MD5 f3e2292e4df9b849f1f0ae6c5b403804
BLAKE2b-256 5ed0f7666f344d8e1f8888f050be65bb99775e04da8ddbb21e87372dbcc4045e

See more details on using hashes here.

File details

Details for the file radfiled3d-1.3.3-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for radfiled3d-1.3.3-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 de0e100863ff5e0c3e37ed07335f5be8a307c6ad921f9b744879d97bd55bda83
MD5 4cae7f1426a7c9d0bd29c1189dc9f12c
BLAKE2b-256 a2f6c7e25eadff506d40549889765c40a2c63aada5d4a839e6a5ca86941dccf9

See more details on using hashes here.

Provenance

The following attestation bundles were made for radfiled3d-1.3.3-cp312-cp312-musllinux_1_2_x86_64.whl:

Publisher: package-test-publish.yml on Centrasis/RadFiled3D

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file radfiled3d-1.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for radfiled3d-1.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d4628db7d3db7cf089a9ed7a16f8430251446e00cdf0e0b56c0757c4d145ab49
MD5 6617e412404c677972a64b3509262f30
BLAKE2b-256 6821afff541bbf599782be9b20e2d4954b9e5b468e131caa92af8c3abf2940b6

See more details on using hashes here.

Provenance

The following attestation bundles were made for radfiled3d-1.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: package-test-publish.yml on Centrasis/RadFiled3D

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file radfiled3d-1.3.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for radfiled3d-1.3.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 ee75b3e0f3619ec8fbc2465fcbdf89a0991da5edad399a9537baa104916bd68b
MD5 f7429e70e161c5c56fd8f32156d20a6e
BLAKE2b-256 8e54008f14a861c692570fa3bd824b3157e71d5be3121b2e1fb57d1ebf286732

See more details on using hashes here.

Provenance

The following attestation bundles were made for radfiled3d-1.3.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl:

Publisher: package-test-publish.yml on Centrasis/RadFiled3D

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file radfiled3d-1.3.3-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for radfiled3d-1.3.3-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 1ef441845ab3962c0846b302f3a5c1754fd5c8acfbe24fea410b29b05d1f5b65
MD5 ce6180b26b6a5a471ece490baa37bd85
BLAKE2b-256 b1add14d2fe4a7c7cccb8916e7c6f1caf870f2adf3b7e52c8bcaa9483220505c

See more details on using hashes here.

Provenance

The following attestation bundles were made for radfiled3d-1.3.3-cp311-cp311-musllinux_1_2_x86_64.whl:

Publisher: package-test-publish.yml on Centrasis/RadFiled3D

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file radfiled3d-1.3.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for radfiled3d-1.3.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c0822c15872fd1a52c68ad3bbfd7bfc0b2de500f9a8f230f3ffb63deee1fdada
MD5 9f39ec16c068b99d1715289674755313
BLAKE2b-256 e2e681f6da95f963cacd87ee5b5d5b2b8b7960da2af7013c169530692d762311

See more details on using hashes here.

Provenance

The following attestation bundles were made for radfiled3d-1.3.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: package-test-publish.yml on Centrasis/RadFiled3D

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file radfiled3d-1.3.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for radfiled3d-1.3.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 b092dcd169596d8db9739c9ee2bed5d9a33c1f0134d5b31dacb7b21ead5f4fd1
MD5 1c599519ff03f12559cea697f34504b0
BLAKE2b-256 58c79a30013c668ab91616ae96d0452830b7c71235ee345fd9b56e56fb7fc078

See more details on using hashes here.

Provenance

The following attestation bundles were made for radfiled3d-1.3.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl:

Publisher: package-test-publish.yml on Centrasis/RadFiled3D

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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