Skip to main content

Factor graph optimization library with Python bindings

Project description

Factorama Python

A Python interface to the Factorama C++ factor graph optimization library. Factorama provides a simple and efficient framework for factor graph-based optimization, perfect for small to medium-scale SLAM, calibration, and structure-from-motion problems.

Purpose

Factor graphs are a powerful framework for non-linear optimization problems commonly found in robotics and computer vision. Factorama's Python bindings make it easy to:

  • Build factor graphs with poses, landmarks, and custom variables
  • Add constraints through various factor types (bearing observations, priors, relative constraints)
  • Optimize using Gauss-Newton or Levenberg-Marquardt algorithms
  • Visualize results with built-in plotting capabilities

Perfect for prototyping SLAM algorithms, camera calibration, bundle adjustment, and sensor fusion applications.

Installation

pip install factorama

Dependencies

Factorama requires:

  • numpy - For matrix operations and numerical arrays
  • matplotlib - For visualization and plotting (optional, but recommended)

Examples

Basic Robot Localization

from factorama import FactorGraph, PoseVariable, LandmarkVariable, PosePositionPriorFactor, PoseOrientationPriorFactor, BearingObservationFactor

# Create factor graph and add variables
graph = FactorGraph()
robot_pose = PoseVariable(1, initial_pos, initial_dcm)
landmark = LandmarkVariable(2, landmark_pos)
graph.add_variable(robot_pose)
graph.add_variable(landmark)

# Add factors
position_prior = PosePositionPriorFactor(100, robot_pose, prior_pos, 0.1)
orientation_prior = PoseOrientationPriorFactor(101, robot_pose, prior_dcm, 0.1)
bearing_factor = BearingObservationFactor(200, robot_pose, landmark, bearing_obs, 0.01)
graph.add_factor(position_prior)
graph.add_factor(orientation_prior)
graph.add_factor(bearing_factor)

# Optimize
graph.finalize_structure()
optimizer = SparseOptimizer()
settings = OptimizerSettings()
settings.method = OptimizerMethod.LevenbergMarquardt
optimizer.setup(graph, settings)
optimizer.optimize()

→ Complete runnable example: examples/basic_localization.py

Bundle Adjustment with Multiple Views

from factorama import FactorGraph, PoseVariable, LandmarkVariable, PosePositionPriorFactor, PoseOrientationPriorFactor, BearingObservationFactor, PlotFactorGraph

# Create factor graph with multiple poses and landmarks
graph = FactorGraph()

# Add camera poses
poses = []
for i in range(3):
    pose = PoseVariable(i + 1, pose_pos, pose_dcm)
    poses.append(pose)
    graph.add_variable(pose)

# Add landmarks and priors
landmarks = []
for i, pos in enumerate(landmark_positions):
    landmark = LandmarkVariable(10 + i, pos)
    landmarks.append(landmark)
    graph.add_variable(landmark)

# Add bearing observations between all pose-landmark pairs
for pose in poses:
    for landmark in landmarks:
        factor = BearingObservationFactor(factor_id, pose, landmark, bearing, 0.01)
        graph.add_factor(factor)

# Optimize and visualize
graph.finalize_structure()
optimizer.optimize()
PlotFactorGraph(graph)

→ Complete runnable example: examples/bundle_adjustment.py

Inverse Depth Parameterization

import numpy as np
from factorama import FactorGraph, PoseVariable, InverseRangeVariable, InverseRangeBearingFactor, SparseOptimizer, OptimizerSettings

graph = FactorGraph()

# Camera pose
camera_pose = PoseVariable(1, camera_pos, camera_dcm)
graph.add_variable(camera_pose)

# Inverse depth landmark (origin, bearing direction, initial range)
origin_pos = np.array([0.0, 0.0, 0.0])
bearing_direction = np.array([1.0, 0.0, 0.0])
initial_range = 10.0
inv_depth_landmark = InverseRangeVariable(2, origin_pos, bearing_direction, initial_range)
graph.add_variable(inv_depth_landmark)

# Bearing observation factor
bearing_obs = np.array([1.0, 0.0, 0.0])
bearing_factor = InverseRangeBearingFactor(100, camera_pose, inv_depth_landmark, bearing_obs, 0.01)
graph.add_factor(bearing_factor)

# Optimize
graph.finalize_structure()
optimizer = SparseOptimizer()
settings = OptimizerSettings()
optimizer.setup(graph, settings)
optimizer.optimize()

print(f"Final landmark position: {inv_depth_landmark.pos_W()}")

Variables

PoseVariable

Represents SE(3) poses with 6 DOF (position + orientation)

from factorama import PoseVariable

# From position and rotation matrix
pose = PoseVariable(id, position_3d, rotation_matrix_3x3)

# Alternative: From SE(3) vector [tx, ty, tz, rx, ry, rz]
pose = PoseVariable(id, pose_vector)

# Access position and rotation
position = pose.pos_W()
rotation_matrix = pose.dcm_CW()

LandmarkVariable

Represents 3D landmarks with 3 DOF

from factorama import LandmarkVariable

landmark = LandmarkVariable(id, position_3d)
position = landmark.pos_W()

GenericVariable

Represents arbitrary N-dimensional variables

from factorama import GenericVariable

generic = GenericVariable(id, initial_vector)

RotationVariable

Represents SO(3) rotations with 3 DOF

from factorama import RotationVariable

rotation = RotationVariable(id, rotation_matrix_3x3)
dcm = rotation.dcm_AB()

InverseRangeVariable

Represents landmarks using inverse depth parameterization (1 DOF)

from factorama import InverseRangeVariable

inv_range = InverseRangeVariable(id, origin_pos, bearing_direction, initial_range)
position = inv_range.pos_W()
inverse_depth = inv_range.inverse_range()

Factors

Prior Factors

  • GenericPriorFactor: Prior constraints on any variable type
  • PosePositionPriorFactor: Position-only prior for poses
  • PoseOrientationPriorFactor: Orientation-only prior for poses
  • RotationPriorFactor: Prior constraints on rotation variables

Observation Factors

  • BearingObservationFactor: 3D bearing measurements from poses to landmarks
  • InverseRangeBearingFactor: Bearing constraints with inverse depth parameterization
  • BearingProjectionFactor2D: 2D bearing projections

Relative Constraint Factors

  • GenericBetweenFactor: Relative constraints between any variable types
  • PosePositionBetweenFactor: Position-only relative constraints between poses
  • PoseOrientationBetweenFactor: Orientation-only relative constraints between poses

Optimization

from factorama import SparseOptimizer, OptimizerSettings, OptimizerMethod

# Create optimizer
optimizer = SparseOptimizer()

# Configure settings
settings = OptimizerSettings()
settings.method = OptimizerMethod.LevenbergMarquardt  # or GaussNewton
settings.max_num_iterations = 100
settings.step_tolerance = 1e-6
settings.residual_tolerance = 1e-6
settings.verbose = True

# Setup and optimize
optimizer.setup(factor_graph, settings)
optimizer.optimize()

# Access results
print(f"Iterations: {optimizer.current_stats.current_iteration}")
print(f"Final chi2: {optimizer.current_stats.chi2}")

Utility Functions

from factorama import ExpMapSO3, LogMapSO3, PlotFactorGraph

# SO(3) exponential and logarithm maps
rotation_matrix = ExpMapSO3(rotation_vector)
rotation_vector = LogMapSO3(rotation_matrix)

# Factor graph visualization
PlotFactorGraph(graph, plot_3d=True)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

factorama-1.1.1-cp312-cp312-win_amd64.whl (4.5 MB view details)

Uploaded CPython 3.12Windows x86-64

factorama-1.1.1-cp312-cp312-musllinux_1_1_x86_64.whl (3.2 MB view details)

Uploaded CPython 3.12musllinux: musl 1.1+ x86-64

factorama-1.1.1-cp312-cp312-musllinux_1_1_i686.whl (3.2 MB view details)

Uploaded CPython 3.12musllinux: musl 1.1+ i686

factorama-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

factorama-1.1.1-cp312-cp312-macosx_11_0_arm64.whl (2.5 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

factorama-1.1.1-cp311-cp311-win_amd64.whl (4.1 MB view details)

Uploaded CPython 3.11Windows x86-64

factorama-1.1.1-cp311-cp311-musllinux_1_1_x86_64.whl (3.2 MB view details)

Uploaded CPython 3.11musllinux: musl 1.1+ x86-64

factorama-1.1.1-cp311-cp311-musllinux_1_1_i686.whl (3.2 MB view details)

Uploaded CPython 3.11musllinux: musl 1.1+ i686

factorama-1.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

factorama-1.1.1-cp311-cp311-macosx_11_0_arm64.whl (2.5 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

factorama-1.1.1-cp310-cp310-win_amd64.whl (3.8 MB view details)

Uploaded CPython 3.10Windows x86-64

factorama-1.1.1-cp310-cp310-musllinux_1_1_x86_64.whl (3.2 MB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ x86-64

factorama-1.1.1-cp310-cp310-musllinux_1_1_i686.whl (3.2 MB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ i686

factorama-1.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

factorama-1.1.1-cp310-cp310-macosx_11_0_arm64.whl (2.5 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

factorama-1.1.1-cp39-cp39-win_amd64.whl (3.5 MB view details)

Uploaded CPython 3.9Windows x86-64

factorama-1.1.1-cp39-cp39-musllinux_1_1_x86_64.whl (3.2 MB view details)

Uploaded CPython 3.9musllinux: musl 1.1+ x86-64

factorama-1.1.1-cp39-cp39-musllinux_1_1_i686.whl (3.2 MB view details)

Uploaded CPython 3.9musllinux: musl 1.1+ i686

factorama-1.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

factorama-1.1.1-cp39-cp39-macosx_11_0_arm64.whl (2.5 MB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

factorama-1.1.1-cp38-cp38-win_amd64.whl (3.2 MB view details)

Uploaded CPython 3.8Windows x86-64

factorama-1.1.1-cp38-cp38-musllinux_1_1_x86_64.whl (3.2 MB view details)

Uploaded CPython 3.8musllinux: musl 1.1+ x86-64

factorama-1.1.1-cp38-cp38-musllinux_1_1_i686.whl (3.2 MB view details)

Uploaded CPython 3.8musllinux: musl 1.1+ i686

factorama-1.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

factorama-1.1.1-cp38-cp38-macosx_11_0_arm64.whl (2.5 MB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

File details

Details for the file factorama-1.1.1-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: factorama-1.1.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 4.5 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for factorama-1.1.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 f8ca1f251a348fb709be1fa843b11da4b21692e7132f5461719ae6a0c0074bd2
MD5 f244e2408866d1f8cc586c08c9871b97
BLAKE2b-256 b594bcbe5d10f8b429e59704cda7bef1d1048a6ce83b9e0bc246525330738f7d

See more details on using hashes here.

File details

Details for the file factorama-1.1.1-cp312-cp312-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for factorama-1.1.1-cp312-cp312-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 43326d81c91c6b750e2adfd62abc9ce526b377ca863d5ea8ce2427217775cf79
MD5 52bedbf725af383013ecbd4f075ebd22
BLAKE2b-256 689e8d8ed7757237bbafed6d6302f2d90a2d17b03134fa8d7a02b6322f18ed10

See more details on using hashes here.

File details

Details for the file factorama-1.1.1-cp312-cp312-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for factorama-1.1.1-cp312-cp312-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 783c4ba905d59b70a2e63bfde5ffc7055cb17ca9bfadfe17894abb725065c8f6
MD5 6635276b30d3090dd294f03559178c5e
BLAKE2b-256 46dda5bd478ec017809e36816062ae05c409723d223a55f4c7eee6b59cd55045

See more details on using hashes here.

File details

Details for the file factorama-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for factorama-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8d2e16cc4472546a85380b5b322c0ad0e13a2e35dc2e68fd4f2995296474e392
MD5 872a07e0aa37e9c07ca432b93b191d0c
BLAKE2b-256 92e18a16320dc0ef7f02872552d36434a6c56aa8d5c4482214719b31a7acfd9c

See more details on using hashes here.

File details

Details for the file factorama-1.1.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for factorama-1.1.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 601269297daaf71b41ebfaa062cdb9f818ce16d4b276115476c6fa127c797038
MD5 3b49bc9576c37df0a9063e2a9a6940ff
BLAKE2b-256 93f82cf06b18eab6ae354a593f33819dab70c3ad6b93b2e12b1f0e73d0b15ddc

See more details on using hashes here.

File details

Details for the file factorama-1.1.1-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: factorama-1.1.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 4.1 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for factorama-1.1.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 fc8ada38701dc31dc4fe33c2197897bc50b43c83e09c6fa426a9685a974f7de8
MD5 bd2e13748f6ade93dc9dcc6a40e6ea53
BLAKE2b-256 116bcd6b52ec6c2babb782054f350c1dc9ee95f29d7246ab7332fa94d1dcb2f6

See more details on using hashes here.

File details

Details for the file factorama-1.1.1-cp311-cp311-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for factorama-1.1.1-cp311-cp311-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 f78f3d892ca9893ad0ddf2dd224a79a4dc94b8a6129cbd3c72777ee77cff94c7
MD5 f2615f9f9c6a5a41b0b893edf3e9dc83
BLAKE2b-256 b747295c1f9907be9b017d4dfcd859e59c470cb7b8ab95b1fa91fe3f61d6547f

See more details on using hashes here.

File details

Details for the file factorama-1.1.1-cp311-cp311-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for factorama-1.1.1-cp311-cp311-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 3c3bd96bccf7cda5ec0f056c2550b08897a4febfa28c4e2bb2cd314196a2b50b
MD5 c02ad1a41d392d3e22d3d09f34697fa0
BLAKE2b-256 8d1b92e32cd8f07b0c1965b9d028c4e69d1bcb789827cadc59ce73903cc39111

See more details on using hashes here.

File details

Details for the file factorama-1.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for factorama-1.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4dbbc8d823c8d68b0a68b6c5e3e9cdc6b2b4a366955f97b8dc1132b46a4f146b
MD5 17fdbd037798ed6d6a24dca3c73177a0
BLAKE2b-256 b2441dcf0952dae32cd3f763e888ad5cf3ac89f75b3ef4e04869f2bb9f5d0c72

See more details on using hashes here.

File details

Details for the file factorama-1.1.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for factorama-1.1.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f212da09727ecf6e50608373641671123700f22fb5ec32601d5b646a11724d4e
MD5 54a8303d9baf3e3e9110b6aeb8842873
BLAKE2b-256 7ba3b1d6d82214ddbe77223d5117b46f32f83dc02f38744ab6aa6059898a18d9

See more details on using hashes here.

File details

Details for the file factorama-1.1.1-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: factorama-1.1.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 3.8 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for factorama-1.1.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 0f876011c52b22854a782f4d3cd2562d63fb30052af2fdfa003bcf7064485023
MD5 afb39d491adb02a7f3000671d9b6ec3c
BLAKE2b-256 1fe8943eed80351d290097c92544ec61b1a79a1a12a2ebcced75a6db9f749df3

See more details on using hashes here.

File details

Details for the file factorama-1.1.1-cp310-cp310-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for factorama-1.1.1-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 7c35bb1ff1e83f873edd4efb6fc7755c761754865b13b0eb70d996ca2792951a
MD5 5fb933ef760ce6bbfadce0e4870f1632
BLAKE2b-256 67603a328f386e37d3ca6c7d6c810e63efbd6d0c9e6299ef847dd5287eb07c16

See more details on using hashes here.

File details

Details for the file factorama-1.1.1-cp310-cp310-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for factorama-1.1.1-cp310-cp310-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 ddd219bc176d31c72b21881eda2a2e8e6d7954a23bc9e3557d340bd71d60dd6c
MD5 d72aace9a1dffd5daab3ac7cf3bdc264
BLAKE2b-256 5a91103d4325aa97966cb5ec70e4681d98a3d4d4c3c06b8dd1ef954cd7fade2d

See more details on using hashes here.

File details

Details for the file factorama-1.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for factorama-1.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 85795b65fa6ccc6b9d343a523eeb7b9f6704c6af8ccbd88419b705bc51643bc4
MD5 0c7d2caa3a9d006caafc5dcd1144f618
BLAKE2b-256 d54fe56a29bba91ff67d0da9c45368d8f66ded9feb640e1f1528b6d574c33897

See more details on using hashes here.

File details

Details for the file factorama-1.1.1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for factorama-1.1.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 73cce8c8c1449fdcf7c8b2fc5eadb12e45204c6a189f6cde3aa6d47f8219045b
MD5 9d8e2f5efbb0adde5bdf99adaabb1e44
BLAKE2b-256 ce88b59be739b83b510385ca057d7ff7917cc25a8b9f470cd099c1f12ac764be

See more details on using hashes here.

File details

Details for the file factorama-1.1.1-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: factorama-1.1.1-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 3.5 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for factorama-1.1.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 3c399bc15cefcd992283b0e05f2dadb93c0e8cba2343e92e4f29ce9f2204a20d
MD5 b8baff1b12316dfbdc3c6a8766b7c661
BLAKE2b-256 03232b306a95c196936313fd2fcea2c6c98d2af1e83533a5f18116c3439d3205

See more details on using hashes here.

File details

Details for the file factorama-1.1.1-cp39-cp39-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for factorama-1.1.1-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 0c67054d705ba49d525156bcc7851bb521b1c7826b46b07a085a13570173c8e4
MD5 39ef6f727674405691b279d238b8f2f5
BLAKE2b-256 f18bf12166718222984860a0b77cb7e29b6f7ce2c88c094465a85342cdfc522d

See more details on using hashes here.

File details

Details for the file factorama-1.1.1-cp39-cp39-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for factorama-1.1.1-cp39-cp39-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 d3d7954cc2659aabbd30501a13fb796f62b4d34ef6a0908bf71123e0c7569d92
MD5 83869089a5770124d71b9ac2277fa1ff
BLAKE2b-256 b4643348bd52828f904f4b9ce10a9c59eb9bacd3243b6ca84e75bf161c94c151

See more details on using hashes here.

File details

Details for the file factorama-1.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for factorama-1.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 576198c796df7df69c55302f5501dc3f73c9eba2a1445cbefe31c27213b87046
MD5 139875e309d5de1f132ddf6530d8b981
BLAKE2b-256 5929616c3f82b7ccdfdeca7539a298aea22cfc6e09cacebaf4fa34c24ddbdb32

See more details on using hashes here.

File details

Details for the file factorama-1.1.1-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for factorama-1.1.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 817628ad65e589848422437f4dae6ce2516d452f071d35f76d8fb4ef3a945f42
MD5 631757f8c289e3c122e40cf5ee812d17
BLAKE2b-256 a17460b0195a3026c2e20b25e66b60cf32b30df27d9ed63d00b4cda071f24c5c

See more details on using hashes here.

File details

Details for the file factorama-1.1.1-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: factorama-1.1.1-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 3.2 MB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for factorama-1.1.1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 b84119de2ddf2a065b93a1213cdbfd261bce3214ed945693f132677e3b254cec
MD5 21c1acf3b1d696d9fd8f965b2a9ba0c9
BLAKE2b-256 5d91912d3b5ff0e10c9636de4061fe6ffa45216431d7d992f7903949260b0ab4

See more details on using hashes here.

File details

Details for the file factorama-1.1.1-cp38-cp38-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for factorama-1.1.1-cp38-cp38-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 7d6b0f5087ff6f142a59f68dcd913a8306349699912a3cfbc3d39d0471f342f5
MD5 cb10e38b0ceb2077302d34fa9d14ec18
BLAKE2b-256 bc45bb615d79d96e0346423ed69e9ee18e444e3d66a76a2e1dc431af78cafbf7

See more details on using hashes here.

File details

Details for the file factorama-1.1.1-cp38-cp38-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for factorama-1.1.1-cp38-cp38-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 9fe1b13e060f22c26d0455ec569a8ff1ab5757c1a1264f35f959698e5e1922bd
MD5 6ed43602d5f5a4a0642b1f6353b1aa5c
BLAKE2b-256 f5630f9578b8977a11efc5237f16ff0bd2216397eb90740c4e02573fe4544a10

See more details on using hashes here.

File details

Details for the file factorama-1.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for factorama-1.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e25f03cffaf65e6ff41252a2b338bd8b2d255858d525f893c2f9d903304c7058
MD5 39e5ba3bfd05fcfdbdd20fe1439adad0
BLAKE2b-256 72aabd85796f79ee4e477c2d7f9ebf66a00c156511b9b663022e045d6deb4a19

See more details on using hashes here.

File details

Details for the file factorama-1.1.1-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for factorama-1.1.1-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 71f3139cbec5ca9c2ff4674a5f339a4db3179b015e015bf04a3fbcd5b87ff98c
MD5 7f8d9f437281a3ddb693192442ed88b3
BLAKE2b-256 e5d8220b428f51c5c4f59b620e4f54669ec343189639bb2808c8c541e2041c1d

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