Skip to main content

Python versions on PyPI CeNTREX-TlF version on PyPI

See the changelog for release notes and migration guidance.

Extensions

CeNTREX-TlF-julia-extension version on PyPI CeNTREX-TlF version on PyPI

CeNTREX-TlF

Code for generating the CeNTREX TlF States, Hamiltonians, Transitions, Couplings and Lindblad equations.

Consists of six modules:

  • states
  • hamiltonian
  • transitions
  • couplings
  • lindblad
  • utils

states has code to generate states and the classes that describe the CoupledBasisState, UncoupledBasisState and State; where State holds multiple CoupledBasisStates or UncoupledBasisStates with different amplitudes, i.e. when superpositions arise.

Lindblad Solver Performance Options

CPU Rust Lindblad ODE solves default to the tested D+S+U RHS mode, structured_sparse_dense_diag_soa_single_unpack, with cpu_kernel="auto". This combines direct diagonal-Hamiltonian terms (D), split real/imaginary accumulation (S), and one density unpack per RHS call (U); the CPU kernel selects AVX2+FMA when supported and falls back safely otherwise. expanded_sparse remains available explicitly and is still the CUDA ODE mode.

result = solve_lindblad(
    prepared,
    rho0,
    (0.0, t_end),
)

Pass execution_mode="expanded_sparse" to select that alternative for CPU solves. The eight sparse-dense D/S/U combinations remain selectable; the default is the full D+S+U combination. cpu_kernel is independently selectable as "auto", "original", "avx2", "avx2_fma", "avx512", or "avx512_fma" when preparing the Rust problem.

Dependencies

  • numpy
  • scipy
  • sympy
  • pandas

Installation

python -m pip install .
where . is the path to the directory. To install directly from Github use:
python -m pip install git+https://github.com/ograsdijk/CeNTREX-TlF

states

states contains the functions and classes to represent the TlF states:
CoupledBasisState is a class representing a TlF state with coupled quantum numbers, i.e. F, mF, F1, J, I1, I2, Ω, P.
UncoupledBasisState is a class representing a TlF state with uncoupled quantum numbers, i.e. J, mJ, I1, m1, I2, m2, Ω, P.
Finally State is a class representing a collection of states, since in most cases the TlF molecules are in a superposition state.

from centrex_tlf import states
states.CoupledBasisState(F=1, mF=0, F1 = 1/2, J = 0, I1 = 1/2, I2 = 1/2, Omega = 0, P = 1)

or using some of the functions to generate all hyperfine substates in a given J level:

from centrex_tlf import states
QN = states.generate_uncoupled_states_ground(Js = [0,1])

which returns an array containing the UncoupledBasisStates

array([|X, J = 0, mJ = 0, I₁ = 1/2, m₁ = -1/2, I₂ = 1/2, m₂ = -1/2, P = +, Ω = 0>,
       |X, J = 0, mJ = 0, I₁ = 1/2, m₁ = -1/2, I₂ = 1/2, m₂ = 1/2, P = +, Ω = 0>,
       |X, J = 0, mJ = 0, I₁ = 1/2, m₁ = 1/2, I₂ = 1/2, m₂ = -1/2, P = +, Ω = 0>,
       |X, J = 0, mJ = 0, I₁ = 1/2, m₁ = 1/2, I₂ = 1/2, m₂ = 1/2, P = +, Ω = 0>,
       |X, J = 1, mJ = -1, I₁ = 1/2, m₁ = -1/2, I₂ = 1/2, m₂ = -1/2, P = -, Ω = 0>,
       |X, J = 1, mJ = -1, I₁ = 1/2, m₁ = -1/2, I₂ = 1/2, m₂ = 1/2, P = -, Ω = 0>,
       |X, J = 1, mJ = -1, I₁ = 1/2, m₁ = 1/2, I₂ = 1/2, m₂ = -1/2, P = -, Ω = 0>,
       |X, J = 1, mJ = -1, I₁ = 1/2, m₁ = 1/2, I₂ = 1/2, m₂ = 1/2, P = -, Ω = 0>,
       |X, J = 1, mJ = 0, I₁ = 1/2, m₁ = -1/2, I₂ = 1/2, m₂ = -1/2, P = -, Ω = 0>,
       |X, J = 1, mJ = 0, I₁ = 1/2, m₁ = -1/2, I₂ = 1/2, m₂ = 1/2, P = -, Ω = 0>,
       |X, J = 1, mJ = 0, I₁ = 1/2, m₁ = 1/2, I₂ = 1/2, m₂ = -1/2, P = -, Ω = 0>,
       |X, J = 1, mJ = 0, I₁ = 1/2, m₁ = 1/2, I₂ = 1/2, m₂ = 1/2, P = -, Ω = 0>,
       |X, J = 1, mJ = 1, I₁ = 1/2, m₁ = -1/2, I₂ = 1/2, m₂ = -1/2, P = -, Ω = 0>,
       |X, J = 1, mJ = 1, I₁ = 1/2, m₁ = -1/2, I₂ = 1/2, m₂ = 1/2, P = -, Ω = 0>,
       |X, J = 1, mJ = 1, I₁ = 1/2, m₁ = 1/2, I₂ = 1/2, m₂ = -1/2, P = -, Ω = 0>,
       |X, J = 1, mJ = 1, I₁ = 1/2, m₁ = 1/2, I₂ = 1/2, m₂ = 1/2, P = -, Ω = 0>],
      dtype=object)

State objects, which are superpositions of BasisStates are also generated easily:

superposition = 1*QN[0] + 0.1j*QN[1]

which returns

1.00 x |X, J = 0, mJ = 0, I₁ = 1/2, m₁ = -1/2, I₂ = 1/2, m₂ = -1/2, P = +, Ω = 0>
0.00+0.10j x |X, J = 0, mJ = 0, I₁ = 1/2, m₁ = -1/2, I₂ = 1/2, m₂ = 1/2, P = +, Ω = 0>

A subset of State, CoupledBasisStates can be selected with the QuantumSelector as follows:

QN = states.generate_coupled_states_ground(Js = [0,1])
qn_select = states.QuantumSelector(J = 1, mF = 0, electronic = states.ElectronicState.X)
qn_select.get_indices(QN)

which returns all the indices with J=1 and mJ=0:

array([ 4,  6,  9, 13], dtype=int64)

hamiltonian

hamiltonian contains the functions to generate TlF hamiltonians in the X and B state in either coupled or uncoupled form.
Generating a ground state X hamiltonian can be accomplished easily using some convenience functions:

from centrex_tlf import states, hamiltonian

# generate the hyperfine sublevels in J=0 and J=1
QN = states.generate_uncoupled_states_ground(Js = [0,1])

# generate a dictionary with X hamiltonian terms
H = hamiltonian.generate_uncoupled_hamiltonian_X(QN)

# create a function outputting the hamiltonian as a function of E and B
Hfunc = hamiltonian.generate_uncoupled_hamiltonian_X_function(H)

All functions generating hamiltonians only require a list or array of TlF states. Generating the hamiltonian only for certain hyperfine sublevels is hence also straightforward. The function calculate_uncoupled_hamiltonian_X calculates the hamiltonians from scratch, whereas generate_uncoupled_hamiltonian_X pulls the non-zero elements from an sqlite database.

To convert a hamiltonian from one basis to another transformation matrices can be generated or calculated (generate_transform_matrix pulls non-zero matrix elements from an sqlite database, calculate_transform_matrix does the full element wise calculation):

from centrex_tlf import states, hamiltonian

# generate the hyperfine sublevels in J=0 and J=1
QN = states.generate_uncoupled_states_ground(Js = [0,1])
# generate the coupled hyperfine sublevels in J=0 and J=1
QNc = states.generate_coupled_states_ground(Js = [0,1])

# generate a dictionary with X hamiltonian terms
H = hamiltonian.generate_uncoupled_hamiltonian_X(QN)
Hfunc = hamiltonian.generate_uncoupled_hamiltonian_X_function(H)
H0 = Hfunc(E = [0,0,0], B = [0,0,1e-3])

# generate the transformation matrix
transform = hamiltonian.generate_transform_matrix(QN, QNc)

# calculate the transformed matrix
H0c = transform.conj().T@H0@transform

This is mostly used for optical bloch simulations where the coupled states representation is more convenient.

Stark Shift Example

To calculate the energy levels as a function of the electric field the following code can be used, which calculates all energies up to J=6 but only plots the |J=2, mJ=0> hyperfine levels. These are the states focussed by the electrostatic quadrupole lens in the CeNTREX experiment. Quadrupole Lens States

import numpy as np
import matplotlib.pyplot as plt

from centrex_tlf import states, hamiltonian

# generate states up to J=6
QN = states.generate_uncoupled_states_ground(Js=np.arange(7))

# generate the X hamiltonian terms
H = hamiltonian.generate_uncoupled_hamiltonian_X(QN)

# create a function outputting the hamiltonian as a function of E and B
Hfunc = hamiltonian.generate_uncoupled_hamiltonian_X_function(H)

# V/cm
Ez = np.linspace(0, 50e3, 101)

# generate the Hamiltonian for (almost) zero field, add a small field to make states
# non-degenerate
Hi = Hfunc(E=[0, 0, 1e-3], B=[0, 0, 1e-3])
E, V = np.linalg.eigh(Hi)

# get the true superposition-states of the system
QN_states = hamiltonian.matrix_to_states(V, QN)

# original eigenvectors used in tracking states as energies change order
V_track = V.copy()

# indices of the J=2, mJ=0 states focused by the lens
indices_J2_mJ0 = [
    idx
    for idx, s in enumerate(QN_states)
    if s.largest.J == 2 and s.largest.mJ == 0
]

indices_J012 = [
    idx for idx, s in enumerate(QN_states) if s.largest.J in [0, 1, 2]
]

# empty array for storing energies
energy = np.empty([Ez.size, len(QN)], dtype=np.complex128)

# iterate over the electric field values
for idx, Ei in enumerate(Ez):
    Hi = Hfunc(E=[0, 0, Ei], B=[0, 0, 1e-3])
    E, V = np.linalg.eigh(Hi)

    # sort indices to keep the state order the same
    indices = np.argmax(np.abs(V_track.conj().T @ V), axis=1)
    energy[idx, :] = E[indices]
    V_track[:, :] = V[:, indices]

# plot the J=2, mJ=0 Stark curves
fig, ax = plt.subplots(figsize=(12, 8))
ax.plot(
    Ez,
    (energy.real[:, indices_J2_mJ0] - energy.real[:, indices_J2_mJ0][0, 0])
    / (2 * np.pi * 1e9),
)
ax.set_xlabel("E [V/cm]")
ax.set_ylabel("Energy [GHz]")
ax.set_title("|J=2, mJ=0> Stark Curve")
ax.grid(True)
plt.show()

Transition components versus electric field

transitions.build_optical_field_grid tracks the X and B levels adiabatically from zero field (hamiltonian.track_levels) and stores the frequency and dressed E1 coupling of every X→B component on an adaptive grid of electric fields (along z), interpolated with PCHIP:

import numpy as np
from centrex_tlf import transitions
from centrex_tlf.couplings import polarization_X

grid = transitions.build_optical_field_grid(J_ground_max=2, E_max_V_cm=300.0)
table = grid.at(171.6)                     # pandas DataFrame, one row per component
for c in grid.components(transitions.R2_F1_7o2_F3, 171.6):
    print(c.lower, c.upper, c.q, c.frequency_Hz / 1e12, c.strength)
weights = grid.strength(polarization_X, 171.6)   # |eps_q|^2 |d_q|^2 per component
grid.save("r_lines.npz")                   # TransitionFieldGrid.load refuses stale files

Frequencies are absolute (Hz), with the zero-field R(2) F1'=7/2 F'=3 line at constants.X_B_REFERENCE_FREQUENCY_HZ. Strengths are hints for identifying lines; real intensities need the optical Bloch equations.

couplings

Code for generating the CeNTREX TlF couplings. Includes code for generating branching ratios, electric dipole coupling elements and coupling fields

Generating branching ratios

The code below generates branching ratios from |J'=1, F1'=1/2, mF=0> to all states in the J=1 manifold.

from centrex_tlf import states, couplings

excited_state = states.CoupledBasisState(
    J=1, F1=1 / 2, F=1, mF=0, I1=1 / 2, I2=1 / 2, Omega=1, P=1
)
qn_select = states.QuantumSelector(J=1)
ground_states = [1*s for s in states.generate_coupled_states_X(qn_select)]
br = couplings.calculate_br(1 * excited_state, ground_states)

Generating couplings

The code below generates the coupling fields for the J=1 manifold to the J'=1, F1'=1/2, F'=1 manifold. The returned value is a dataclass CouplingFields containing the following fields:

  • ground_main
  • excited_main
  • main_coupling: the electric dipole coupling between ground_main and excited_main
  • ground_states: list of all ground states
  • excited_states: list of all excited states
  • fields: a list of CouplingField dataclasses with the following fields:
    • polarization: polarization vector
    • field: coupling field in the ground_states + excited_states basis
from centrex_tlf import states, couplings

qn_select = states.QuantumSelector(J=1)
ground_states = states.generate_coupled_states_X(qn_select)

qn_select = states.QuantumSelector(J=1, F1=1 / 2, F=1, P=1, Ω=1)
excited_states = states.generate_coupled_states_B(qn_select)

# the generate_coupling_field_* functions requires lists as inputs, not np.ndarrays
QN = list(1 * np.append(ground_states, excited_states))
ground_states = [1*s for s in  ground_states]
excited_states = [1*s for s in excited_states]

H_rot = np.eye(len(QN), dtype=complex) * np.arange(len(QN))
V_ref = np.eye(len(QN))
pol_vecs = [np.array([0.0, 0.0, 1.0]), np.array([1.0, 0.0, 0.0])]
normalize_pol = True

coupling = couplings.generate_coupling_field_automatic(
    ground_states_approx = ground_states, 
    excited_states_approx = excited_states, 
    QN_basis = QN,
    H_rot = H_rot, 
    QN = QN, 
    V_ref = V_ref, 
    pol_vecs = pol_vecs, 
    normalize_pol = normalize_pol
)

Metadata

Release files for centrex-tlf 0.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for centrex-tlf 0.4.0
File Actions
centrex_tlf-0.4.0-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details for centrex_tlf-0.4.0-cp314-cp314-win_amd64.whl
centrex_tlf-0.4.0-cp314-cp314-manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ x86-64 Details for centrex_tlf-0.4.0-cp314-cp314-manylinux_2_28_x86_64.whl
centrex_tlf-0.4.0-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details for centrex_tlf-0.4.0-cp314-cp314-macosx_11_0_arm64.whl
centrex_tlf-0.4.0-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details for centrex_tlf-0.4.0-cp313-cp313-win_amd64.whl
centrex_tlf-0.4.0-cp313-cp313-manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64 Details for centrex_tlf-0.4.0-cp313-cp313-manylinux_2_28_x86_64.whl
centrex_tlf-0.4.0-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details for centrex_tlf-0.4.0-cp313-cp313-macosx_11_0_arm64.whl
centrex_tlf-0.4.0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details for centrex_tlf-0.4.0-cp312-cp312-win_amd64.whl
centrex_tlf-0.4.0-cp312-cp312-manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ x86-64 Details for centrex_tlf-0.4.0-cp312-cp312-manylinux_2_28_x86_64.whl
centrex_tlf-0.4.0-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details for centrex_tlf-0.4.0-cp312-cp312-macosx_11_0_arm64.whl
centrex_tlf-0.4.0-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details for centrex_tlf-0.4.0-cp311-cp311-win_amd64.whl
centrex_tlf-0.4.0-cp311-cp311-manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64 Details for centrex_tlf-0.4.0-cp311-cp311-manylinux_2_28_x86_64.whl
centrex_tlf-0.4.0-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details for centrex_tlf-0.4.0-cp311-cp311-macosx_11_0_arm64.whl
centrex_tlf-0.4.0-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details for centrex_tlf-0.4.0-cp310-cp310-win_amd64.whl
centrex_tlf-0.4.0-cp310-cp310-manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ x86-64 Details for centrex_tlf-0.4.0-cp310-cp310-manylinux_2_28_x86_64.whl
centrex_tlf-0.4.0-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details for centrex_tlf-0.4.0-cp310-cp310-macosx_11_0_arm64.whl

Total release size: 16.2 MB

Release files / centrex_tlf-0.4.0-cp314-cp314-win_amd64.whl

Download URL centrex_tlf-0.4.0-cp314-cp314-win_amd64.whl
Size 1.1 MB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
868725b5d66424d3cb070d9ef798f48bacfc75da9aa1c16e7d0d56fc4818d900
BLAKE2b-256 checksum
How to use checksums
5022a94a73c26785f0e4129a0b5654a0884868890ab838e2206c25eb28771f02
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / centrex_tlf-0.4.0-cp314-cp314-manylinux_2_28_x86_64.whl

Download URL centrex_tlf-0.4.0-cp314-cp314-manylinux_2_28_x86_64.whl
Size 1.1 MB
Tags CPython 3.14 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
0ba0b6442f18c302dd7e1dbac2afd25d01fc22f73141f96c17f11e989b89537f
BLAKE2b-256 checksum
How to use checksums
b78649090b1c95aafd6fc1ae50a0b9ee7979e8055d795918100c2e261483c3fa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / centrex_tlf-0.4.0-cp314-cp314-macosx_11_0_arm64.whl

Download URL centrex_tlf-0.4.0-cp314-cp314-macosx_11_0_arm64.whl
Size 1.0 MB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
8b92a2bd261f40e0f06c468092dabdeb43043d936a9c8d6bc2d48315beb217f4
BLAKE2b-256 checksum
How to use checksums
bc662915e855be83564e20edab8f6d87d98e1f6c78c1ae871114704319c15d61
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / centrex_tlf-0.4.0-cp313-cp313-win_amd64.whl

Download URL centrex_tlf-0.4.0-cp313-cp313-win_amd64.whl
Size 1.1 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
6ea0145103f750c4b89b296ea063acdf9ed8847df0b95380b489d309eb91c6b2
BLAKE2b-256 checksum
How to use checksums
2e45145b5af229ce8ebd0807dbffbda40d440225b68bcef5b58642544d56e741
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / centrex_tlf-0.4.0-cp313-cp313-manylinux_2_28_x86_64.whl

Download URL centrex_tlf-0.4.0-cp313-cp313-manylinux_2_28_x86_64.whl
Size 1.1 MB
Tags CPython 3.13 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
cb116847afd4887ef1331be3e76e23c8ab44356bed9e88cede5dc7a49ec9529e
BLAKE2b-256 checksum
How to use checksums
5077913224b79afb24da1416d27d6924d0fe375e76f1ba16bacd2b39f25e7ac2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / centrex_tlf-0.4.0-cp313-cp313-macosx_11_0_arm64.whl

Download URL centrex_tlf-0.4.0-cp313-cp313-macosx_11_0_arm64.whl
Size 1.0 MB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
87130ab5bc593d7821c600bc67c81238366a4b6196f67bcaa237dc04bdb4965c
BLAKE2b-256 checksum
How to use checksums
4fcd2a0e4164485a4a161a7fba1155de2652eb37adf1a83781f13cb6c3cdee12
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / centrex_tlf-0.4.0-cp312-cp312-win_amd64.whl

Download URL centrex_tlf-0.4.0-cp312-cp312-win_amd64.whl
Size 1.1 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
b66021b96ff209c5007ea959cc5d4bc2e392751c1c2b8f2d36d25f337e952dc2
BLAKE2b-256 checksum
How to use checksums
a7e813a5df49121098f188853c5bb7fec3be767323ae865b634f604b8c9140f9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / centrex_tlf-0.4.0-cp312-cp312-manylinux_2_28_x86_64.whl

Download URL centrex_tlf-0.4.0-cp312-cp312-manylinux_2_28_x86_64.whl
Size 1.1 MB
Tags CPython 3.12 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
3f8d228d50d60a3038c9bbc645b494fad5468c72c9beac67dceb362949946974
BLAKE2b-256 checksum
How to use checksums
3fbc4b4c894978da00e7d4580776bfda9752e7c2c48263bf44bd4a60ebba6c5f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / centrex_tlf-0.4.0-cp312-cp312-macosx_11_0_arm64.whl

Download URL centrex_tlf-0.4.0-cp312-cp312-macosx_11_0_arm64.whl
Size 1.0 MB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
51ef358f873793aa896778ce7a8d42e6f1aafb15180798448cd990a8c3da7934
BLAKE2b-256 checksum
How to use checksums
e4e8ced1e410142183975289994922c0e01f3e0e7435241ee2ebe9a05e2c92ab
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / centrex_tlf-0.4.0-cp311-cp311-win_amd64.whl

Download URL centrex_tlf-0.4.0-cp311-cp311-win_amd64.whl
Size 1.1 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
081a32072c9c60d497d4e34588353b12699297a70571d2061508f40580bcd0e3
BLAKE2b-256 checksum
How to use checksums
eedce52bc18298d55b788792c779b01299801111385ea9181b66525e2e9d0a9f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / centrex_tlf-0.4.0-cp311-cp311-manylinux_2_28_x86_64.whl

Download URL centrex_tlf-0.4.0-cp311-cp311-manylinux_2_28_x86_64.whl
Size 1.1 MB
Tags CPython 3.11 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
15fe58522cd3c6a613a8a7a14621a27a9be822fe204b92b2f63e6ef67da406b1
BLAKE2b-256 checksum
How to use checksums
517fac26c7ababe055a7148edd2bec25e921e88ddbb0f3305a6e44d9e32d0a6b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / centrex_tlf-0.4.0-cp311-cp311-macosx_11_0_arm64.whl

Download URL centrex_tlf-0.4.0-cp311-cp311-macosx_11_0_arm64.whl
Size 1.0 MB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
b4b6f3161d007f5b9000498e1c9114eefdbd6cbc1bf2f00814a83db9ca59f010
BLAKE2b-256 checksum
How to use checksums
060d969c516e66c201effd4cd883b678b2ef65bb5d892254a0e81d93c1e96c85
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / centrex_tlf-0.4.0-cp310-cp310-win_amd64.whl

Download URL centrex_tlf-0.4.0-cp310-cp310-win_amd64.whl
Size 1.1 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
735a07b9b856f7ee2b7ed2f9a55ca6a4070a26b4a8876cfb43c8e025f8109a0d
BLAKE2b-256 checksum
How to use checksums
ad14d2acedb512a9990dac1f32a746469430b683abd599046915f14a0ac3060f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / centrex_tlf-0.4.0-cp310-cp310-manylinux_2_28_x86_64.whl

Download URL centrex_tlf-0.4.0-cp310-cp310-manylinux_2_28_x86_64.whl
Size 1.1 MB
Tags CPython 3.10 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
fc2872c179d88f8303859ff5b1c422a2da066502591c2b9aaf54a42f4cb6a52d
BLAKE2b-256 checksum
How to use checksums
ceb7be4da7e46c24c2821af8e2502c6bd4b54e62becc0a11dc6beb405c17a495
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / centrex_tlf-0.4.0-cp310-cp310-macosx_11_0_arm64.whl

Download URL centrex_tlf-0.4.0-cp310-cp310-macosx_11_0_arm64.whl
Size 1.0 MB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
7168e05305fde091583ca96016f9cf9aa2105438f1b4b32d3792a3317e4411e2
BLAKE2b-256 checksum
How to use checksums
57c4208dd4434a7474fa5f25f3f4d4d0bc25d20937625acfc54e94096ebb9f7b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Security for centrex-tlf 0.4.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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page