Skip to main content

cat-surf — Python bindings for CAT-Surface

PyPI Python License: GPL-2.0

cat-surf provides Python access to CAT-Surface, a mature C/C++ toolkit for surface-based neuroimaging analysis, focusing on the processing and analysis of cortical surface meshes.

CAT-Surface has been used internally for more than 10 years as part of CAT12, the SPM toolbox for computational anatomy. With this package, it is now distributed as an independent Python package for direct integration into external workflows to make CAT-Surface easier to use:

  • in T1Prep workflows (currently relying on CAT-Surface binaries)
  • in Python-based pipelines without subprocess-heavy wrappers
  • in reproducible environments via published wheels

Installation

pip install cat-surf

Pre-built wheels are available for:

  • macOS — arm64 (Apple Silicon), x86_64 (Intel)
  • Linux — x86_64, aarch64 (manylinux)
  • Python 3.9 – 3.15

Building from source

The extension modules are generated from the .pyx sources at build time; the intermediate .c files are build artifacts and are not tracked in the repository. Cython is declared in build-system.requires, so any PEP 517 build installs it for you:

# build libCAT first (see the CAT-Surface README), then:
pip install ./cat_surface_cython

For an in-place development build, Cython has to be in the ambient environment and libCAT has to be findable:

pip install cython
CAT_BUILD_DIR=/path/to/CAT-Surface python setup.py build_ext --inplace

Note that this regenerates every .c file, so a Cython version that differs from the one used elsewhere changes all of them — harmless now that they are untracked, but it is why they are not kept in git.


Basic usage

import cat_surf

# Check version
print(cat_surf.__version__)

# Load a surface file (GIFTI, FreeSurfer, BIC/MNI formats)
vertices, faces = cat_surf.read_surface("lh.central.gii")

# Per-vertex area
area, total_area = cat_surf.get_area(vertices, faces)

# Euler characteristic
chi = cat_surf.euler_characteristic(vertices, faces)

# Everything at once (mirrors CAT_SurfInfo); skip the expensive
# self-intersection test with check_intersections=False
info = cat_surf.surf_info(vertices, faces)
print(info["euler"], info["genus"], info["surface_area"],
      info["n_self_intersections"])

# Smooth per-vertex data (heat kernel, FWHM in mm)
smoothed = cat_surf.smooth_heatkernel(vertices, faces, area, fwhm=20.0)

Surface operations

Function Description Mirrors
read_surface / write_surface Multi-format surface I/O (GIFTI, FreeSurfer, BIC) —
read_values / write_values Per-vertex scalar I/O —
get_area Per-vertex and total surface area CAT_SurfArea
get_area_normalized Area normalized by a reference sphere CAT_SurfArea -sphere
euler_characteristic Topological integrity check —
surf_info Full geometry/topology summary as a dict: V/F/E, Euler, genus, components, area, volume, bounding box, self-intersections CAT_SurfInfo
read_gifti_darrays List the DataArrays a .gii embeds next to the mesh, with value range and NaN count —
smooth_heatkernel Heat-kernel smoothing of per-vertex data —
smooth_mesh Laplacian/Taubin mesh vertex smoothing —
smoothed_curvatures Mean curvature estimation —
sulcus_depth Sulcal depth via depth potential —
reduce_mesh Quadric (QEM) mesh decimation (aggressiveness, preserve_sharp) CAT_SurfReduce
fix_self_intersect Self-intersection repair (topology preserving) CAT_SurfFixSelfIntersect
count_intersections Count intersecting triangle pairs CAT_SurfSelfIntersect
surf_average Vertex-wise averaging across surfaces (return_rms for std dev) CAT_SurfAverage
surf_to_sphere Inflate surface to sphere CAT_Surf2Sphere
sphere_radius Mean radius of a spherical surface —
correct_thickness_folding Folding-based thickness correction (slope, max_dist clipping) CAT_SurfCorrectThicknessFolding
point_distance Linked vertex distance between two meshes CAT_SurfDistance -link
point_distance_mean Mean (Tfs) vertex distance CAT_SurfDistance -mean
hausdorff_distance Hausdorff distance between two surfaces —
resample_to_sphere Resample surface/values onto a target sphere CAT_SurfResample
surf_deform Deform a surface toward a volume isovalue CAT_SurfDeform
surf_to_pial_white Estimate pial + white surfaces from a central surface; the pial surface is placed by profile search (pial_profile), remove_intersect repairs both CAT_Surf2PialWhite
central_to_pial Generate a pial surface from central + thickness —
spherical_demon Spherical Demons spherical registration CAT_SurfSphericalDemon

Volume operations

Function Description Mirrors
vol_sanlm Structure-adaptive non-local means denoising CAT_VolSanlm
vol_blood_vessel_correction Blood vessel intensity correction (no CLI; the correction CAT_VolThicknessPbt applies unless -no-bvc)
vol_thickness_pbt Cortical thickness via projection-based method; unlike the binary it does not apply the blood-vessel correction first (see vol_blood_vessel_correction) CAT_VolThicknessPbt
vol_amap Adaptive maximum a posteriori tissue segmentation CAT_VolAmap (core only)
vol_marching_cubes Isosurface extraction with genus-0 topology correction CAT_VolMarchingCubes
vol_smooth Isotropic Gaussian volume smoothing CAT_VolSmooth
vol_calc Voxel-wise image calculator (spm_imcalc-style formula) CAT_VolCalc
vol_sheetness Multi-scale Hessian sheetness (plate) filter CAT_VolSheetness
vol_oriented_median Median over a sheetness-oriented neighbourhood CAT_VolLocalStat -oriented
vol_open_ppm_sulci Push buried sulcal valleys in a PPM below the isovalue CAT_VolMarchingCubes -strength-sulci
vol2surf Map a volume to a surface along inward normals CAT_Vol2Surf

Thin structures and the shrinking bias

Every isotropic regularizer — a local median, a Potts MRF, total variation — penalizes boundary area, and a thin structure has an extreme area-to-volume ratio, so deleting it is always the cheaper labelling. That is why one and the same median filter opens glued sulci in one place and closes cerebellar fissures in another, and why tuning its strength only trades one failure for the other.

vol_sheetness replaces the smoothness prior with a shape prior read off the Hessian eigenvalues, so it keeps thin sheets, ignores blobs, and shrinks nothing. Everything below is built on it, and all of it is a no-op where the sheetness is zero — the oriented operators are numerically identical to the isotropic ones they replace away from thin structures, so they are safe to switch on:

import cat_surf, nibabel as nib

t1  = nib.load("t1_corr.nii").get_fdata().astype("float32")
lab = nib.load("label.nii").get_fdata().astype("float32")
vx  = nib.load("label.nii").header.get_zooms()[:3]

# Inspect the evidence first: dark sheets are sulcal CSF, bright ones WM blades
sheet, normal = cat_surf.vol_sheetness(t1, voxelsize=vx, polarity=-1,
                                       return_normal=True)

# A median that cannot close a sulcus (orientation taken from the intensity)
clean = cat_surf.vol_oriented_median(lab, guide=t1, voxelsize=vx)

# the medians inside PBT are sheetness-oriented by default
gmt, ppm, _, _ = cat_surf.vol_thickness_pbt(lab, voxelsize=vx)

# The T1 is gone by the surface stage, but the PPM carries the geometry:
# a sulcus is a valley in it and a gyral blade a ridge, so the same filter
# finds buried sulci without any intensity image
ppm = cat_surf.vol_open_ppm_sulci(ppm, voxelsize=vx, isovalue=0.5)

Volume input convention

Every volume-consuming function accepts three input forms interchangeably:

import cat_surf, nibabel as nib
import numpy as np

# 1. file path
v, f = cat_surf.vol_marching_cubes("brain.nii.gz", threshold=0.5)

# 2. (ndarray, affine) tuple — supply a 4×4 RAS+ affine
v, f = cat_surf.vol_marching_cubes((array, affine), threshold=0.5)

# 3. any nibabel-image-like object (.affine + .get_fdata())
v, f = cat_surf.vol_marching_cubes(nib.load("brain.nii.gz"), threshold=0.5)

The data is auto-converted to float32 (matching the C library's expectation), and 4-D series default to the middle frame. No copy is made if the array is already float32/Fortran-order. Internally a minimal nifti_image is built from the affine — only the fields libCAT actually reads (dims, voxel sizes, sto_xyz).

Registration

Function Description
bbreg Full BBR pipeline: optional NMI init → boundary-based surface registration
bbreg_detect_contrast Auto-detect T1/FLAIR vs T2/BOLD from WM/GM intensity ratio
volume_register_nmi Cross-modal rigid registration via Normalised Mutual Information (≈ mri_coreg)
volume_register_robust Same-modality rigid registration via Tukey biweight M-estimation (≈ mri_robust_register --iscale)
vol_realign Head-motion correction of a 4-D series in mcflirt's conventions (≈ mcflirt)

Basic BBR usage

import cat_surf
import nibabel as nib

# Load surfaces (GIFTI or any format supported by cat_surf.read_surface)
lh_verts, lh_faces = cat_surf.read_surface("lh.white.surf.gii")
rh_verts, rh_faces = cat_surf.read_surface("rh.white.surf.gii")

# Full pipeline: NMI init from T1w reference, then BBR
matrix, cost = cat_surf.bbreg(
    "bold_mean.nii.gz",
    lh_surface=(lh_verts, lh_faces),
    rh_surface=(rh_verts, rh_faces),
    ref_file="T1w.nii.gz",     # NMI initialisation
    verbose=True,
)
print(f"BBR cost: {cost:.4f}")
print("EPI → T1 matrix:\n", matrix)

# Save the 4×4 world-space (RAS-to-RAS) transform.  This is not the
# convention of flirt -init (FSL's scaled voxel coordinates; see
# CAT_SurfBBReg -fsl-matrix) nor an ITK transform for ANTs.
import numpy as np
np.savetxt("epi_to_t1.txt", matrix)

Standalone volume registration

# Cross-modal (EPI ↔ T1w) — NMI
matrix, nmi = cat_surf.volume_register_nmi("T1w.nii.gz", "bold_mean.nii.gz")

# Same-modality (T1w ↔ T1w) — robust IRLS; a global intensity scale is
# estimated along with the motion (iscale=True)
matrix, res = cat_surf.volume_register_robust("t1_ref.nii.gz", "t1_moving.nii.gz")

Head-motion correction (mcflirt replacement)

# What fMRIPrep's head-motion workflow asks of mcflirt
#   mcflirt -in bold -out bold_mcf.nii.gz -reffile boldref -mats -plots -rmsabs -rmsrel
# with the same files: bold_mcf.nii.gz, bold_mcf.nii.gz.mat/MAT_%04d,
# bold_mcf.nii.gz.par, bold_mcf.nii.gz_{abs,rel}{,_mean}.rms
from cat_surf import cli
res = cli.vol_realign("bold.nii.gz", "bold_mcf.nii.gz", reffile="boldref.nii.gz",
                      mats=True, plots=True, rmsabs=True, rmsrel=True)

# In memory: transforms (world and FSL), mcflirt's parameters, RMS displacements
res = cat_surf.vol_realign(series_4d, affine, ref=boldref, ref_affine=affine)
res["par"]       # (nt, 6) rx ry rz (rad) tx ty tz (mm), as mcflirt's .par
res["fsl"]       # (nt, 4, 4) volume -> reference, as mcflirt's MAT files

Contrast auto-detection

# 0 = T1/FLAIR, 1 = T2/BOLD, -1 = undetermined
contrast = cat_surf.bbreg_detect_contrast(
    "bold_mean.nii.gz",
    lh_surface=(lh_verts, lh_faces),
    rh_surface=(rh_verts, rh_faces),
)

Conversion utilities

Function Description
arrays_to_polygons Convert NumPy vertex/face arrays to internal polygon mesh
polygons_to_arrays Convert internal polygon mesh back to NumPy arrays

cat_surf.cli — drop-in replacement for the CAT binaries

The cat_surf.cli subpackage mirrors the CAT_* command-line binaries one-to-one: same names (snake_case, CAT_ prefix dropped), same positional argument order, same option semantics and defaults. Each function reads its inputs from disk, calls the in-memory numpy wrapper, and writes the outputs — ideal for porting shell scripts to Python.

from cat_surf import cli

# CAT_VolMarchingCubes brain.nii.gz brain.gii -thresh 0.5
cli.vol_marching_cubes("brain.nii.gz", "brain.gii", threshold=0.5)

# CAT_Surf2PialWhite -remove_intersect central.gii thickness.txt labels.nii \
#     pial.gii white.gii
cli.surf2pial_white("central.gii", "thickness.txt", "labels.nii",
                    "pial.gii", "white.gii", remove_intersect=True)

# CAT_SurfDistance -mean surf1.gii surf2.gii out.txt
cli.surf_distance("surf1.gii", "surf2.gii", "out.txt", mode="mean")

# CAT_VolSanlm in.nii out.nii -strength 1.0
cli.vol_sanlm("in.nii", "out.nii", strength=1.0)

The full mapping:

CAT binary cat_surf.cli.<name>
CAT_Surf2PialWhite surf2pial_white
CAT_Surf2Sphere surf2sphere
CAT_SurfArea surf_area
CAT_SurfAverage surf_average
CAT_SurfCorrectThicknessFolding surf_correct_thickness_folding
CAT_SurfDeform surf_deform
CAT_SurfDistance surf_distance
CAT_SurfInfo surf_info
CAT_SurfReduce surf_reduce
CAT_SurfFixSelfIntersect surf_fix_self_intersect
CAT_SurfResample surf_resample
CAT_SurfSphericalDemon surf_spherical_demon
CAT_Vol2Surf vol2surf
CAT_VolAmap vol_amap
CAT_VolCalc vol_calc
CAT_VolLocalStat vol_local_stat (-oriented only)
CAT_VolMarchingCubes vol_marching_cubes
CAT_VolRealign vol_realign (mcflirt's flags as keywords: reffile, refvol, mats, plots, rmsabs, rmsrel)
CAT_VolSanlm vol_sanlm
CAT_VolSheetness vol_sheetness
CAT_VolSmooth vol_smooth
CAT_VolThicknessPbt vol_thickness_pbt (applies the blood-vessel correction like the binary; blood_vessel_correction=False is -no-bvc)

For composable in-memory pipelines, prefer the lower-level cat_surf API directly — the CLI shims are just thin convenience wrappers.


Typical use cases

  • Cortical mesh processing (resampling, smoothing, metrics)
  • Thickness and folding related computations
  • Volume-to-surface projection
  • Denoising and volume preprocessing for structural MRI

Citation / provenance

If you use this package in research, please cite Dahnke et al., 2013 and mention the cat-surf package version for reproducibility.


Source

Metadata

Release files for cat-surf 1.1.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 cat-surf 1.1.0
File
cat_surf-1.1.0-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.15 CPython 3.15 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
cat_surf-1.1.0-cp315-cp315-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl CPython 3.15 CPython 3.15 Linux glibc 2.28+ ARM64, Linux glibc 2.27+ ARM64 Details
cat_surf-1.1.0-cp315-cp315-macosx_11_0_arm64.whl CPython 3.15 CPython 3.15 macOS 11.0+ ARM64 Details
cat_surf-1.1.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
cat_surf-1.1.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.27+ ARM64, Linux glibc 2.28+ ARM64 Details
cat_surf-1.1.0-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details
cat_surf-1.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64 Details
cat_surf-1.1.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ ARM64 Details
cat_surf-1.1.0-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
cat_surf-1.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64 Details
cat_surf-1.1.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ ARM64 Details
cat_surf-1.1.0-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
cat_surf-1.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-64 Details
cat_surf-1.1.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ ARM64 Details
cat_surf-1.1.0-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
cat_surf-1.1.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ x86-64 Details
cat_surf-1.1.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ ARM64 Details
cat_surf-1.1.0-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details
cat_surf-1.1.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.17+ x86-64 Details
cat_surf-1.1.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl CPython 3.9 CPython 3.9 Linux glibc 2.17+ ARM64 Details
cat_surf-1.1.0-cp39-cp39-macosx_11_0_arm64.whl CPython 3.9 CPython 3.9 macOS 11.0+ ARM64 Details

Total release size: 153.6 MB

Release files / cat_surf-1.1.0-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL cat_surf-1.1.0-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 8.7 MB
Tags CPython 3.15 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
91c4655451534c7400bd4778a42c5df389032d4113c5592e75178dbc6dfeb3a5
BLAKE2b-256 checksum
How to use checksums
df8621306274fb60e0c6caf80f2090c31f00b5f99a1f9f6e08f2599ef949f05f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / cat_surf-1.1.0-cp315-cp315-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl

Download URL cat_surf-1.1.0-cp315-cp315-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Size 8.4 MB
Tags CPython 3.15 Linux glibc 2.27+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
7df9e7f19ebfe3b31b13688f88a66bc5d99b9a5fc1bed7cabb8ef7109aaf4dc6
BLAKE2b-256 checksum
How to use checksums
70b95ba95ac071d717676ae1265ce2d78e75e306674b808859d0e9e0af498348
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / cat_surf-1.1.0-cp315-cp315-macosx_11_0_arm64.whl

Download URL cat_surf-1.1.0-cp315-cp315-macosx_11_0_arm64.whl
Size 5.0 MB
Tags CPython 3.15 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
bd10ad73418bb6f11426769bf49a136a661059ac9c9306e511f6afbdb2cdeef4
BLAKE2b-256 checksum
How to use checksums
5e396653c3cecad95c14426fbeec2841d27da0455e104e97ffd8cf96335f51b3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / cat_surf-1.1.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL cat_surf-1.1.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 8.6 MB
Tags CPython 3.14 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
85f26568214892c61bcf759142ef22c107f61d1b3ad59ace33fad0c5fdbee5eb
BLAKE2b-256 checksum
How to use checksums
94dfabd010d21d7c458a405479223ebbbc6c45bd8079f45f2e827abcfc371c5f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / cat_surf-1.1.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl

Download URL cat_surf-1.1.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Size 8.4 MB
Tags CPython 3.14 Linux glibc 2.27+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
f2705aeffe801a04e4be0c0377e4fbfc7368fed1ac479d69e466f818021e5fee
BLAKE2b-256 checksum
How to use checksums
c8c89bc90a88e4b0751e2375700e243f27c788f558cac6832c7873cbfe3a42fa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / cat_surf-1.1.0-cp314-cp314-macosx_11_0_arm64.whl

Download URL cat_surf-1.1.0-cp314-cp314-macosx_11_0_arm64.whl
Size 5.0 MB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
e7cafaf2ab937ff1e6be08d67a0dcf779c52eec38d4b4948ecf1490822325b24
BLAKE2b-256 checksum
How to use checksums
a12f641e1ffb0e33dd9c33788fb81207d49a35732977707a0592a6da18d5b604
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / cat_surf-1.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl

Download URL cat_surf-1.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Size 8.6 MB
Tags CPython 3.13 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
62dedc7997fdf67d4844581f2ce9aaffa831349ce4a1ac916147c7859f149003
BLAKE2b-256 checksum
How to use checksums
9069c76abf5c6db9e19b2afa174e71138da117d85fa9b134003b5512f90d7664
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / cat_surf-1.1.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl

Download URL cat_surf-1.1.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Size 8.4 MB
Tags CPython 3.13 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
284ace9503c785d25eb540d524528d43eb3c9d0be106294acdf440d6ca8cd636
BLAKE2b-256 checksum
How to use checksums
c8615a660b2c6d43a2e190c8784735b11ea5f9df6ded54985b8312a2530e7880
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / cat_surf-1.1.0-cp313-cp313-macosx_11_0_arm64.whl

Download URL cat_surf-1.1.0-cp313-cp313-macosx_11_0_arm64.whl
Size 5.0 MB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
980a0331ef89ec2f96e083b75ed6ca94aebaad01cb4451b6f196fada3786577d
BLAKE2b-256 checksum
How to use checksums
a5b13b7433a884780359c950e498b34239ebb886cdbeb1759e2d09dc07a99947
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / cat_surf-1.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl

Download URL cat_surf-1.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Size 8.6 MB
Tags CPython 3.12 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
9b04e6d599d49d1cc99f26b19cea61984391bf85a6b7860e5e01eddeccea9bf7
BLAKE2b-256 checksum
How to use checksums
0b3fb3d452819e4dca808a4be8e23f17136c7f4abac2f13b20eef64397cedd8f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / cat_surf-1.1.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl

Download URL cat_surf-1.1.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Size 8.4 MB
Tags CPython 3.12 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
4c5f82f9c5f1988a9848a41072fad9408e9de2d0b464549245ac3cbb12b2eeb8
BLAKE2b-256 checksum
How to use checksums
0a9b583f905f6a2bac49af5f4ff85f51b46704bc7ef7c71d8f54fb8192bb58d3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / cat_surf-1.1.0-cp312-cp312-macosx_11_0_arm64.whl

Download URL cat_surf-1.1.0-cp312-cp312-macosx_11_0_arm64.whl
Size 5.0 MB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
c6eb9167f04ed9dc76a3372f16ff1489fa599f2ac4c8c231cc38e3c90ad274c5
BLAKE2b-256 checksum
How to use checksums
a75b9bdb0b0f154ea5b1a6c517ac0ba3dca11a5f55250793ae6d56496d345aa2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / cat_surf-1.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl

Download URL cat_surf-1.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Size 8.6 MB
Tags CPython 3.11 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
170eebfb3b733248df66d6b1441c11c7620aa20f05a9bd67a9644758c7fee9d6
BLAKE2b-256 checksum
How to use checksums
70a100ae50d6a729ca885ed67faa6265bc82fe6cfd69146ef44d3f99c101fe65
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / cat_surf-1.1.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl

Download URL cat_surf-1.1.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Size 8.4 MB
Tags CPython 3.11 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
4aecc004d31bb8a2ff358034466c00d0cde7ac6da7b5befa1e32cf98b05ceba7
BLAKE2b-256 checksum
How to use checksums
f0b437f1320bf6a975e171ca1c7f0b9d066fae6576477f57467b1c6e698b170e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / cat_surf-1.1.0-cp311-cp311-macosx_11_0_arm64.whl

Download URL cat_surf-1.1.0-cp311-cp311-macosx_11_0_arm64.whl
Size 5.0 MB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
def54905f8f5ee88f0f63c2c2edf4fe6fcf9739bcf0330bb717dfc2d08d42993
BLAKE2b-256 checksum
How to use checksums
b50b014064970c885c53944cab8cf1ea11fc25a1194225802cd9b1c5506cb2a6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / cat_surf-1.1.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl

Download URL cat_surf-1.1.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Size 8.5 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
d3bb3be11bda0217506617b8b37afca8ea79f94a032dddca57c7797c851f74f4
BLAKE2b-256 checksum
How to use checksums
b6a82e71ac1ec6f2af7c566e196427a00bcf061c91a1beb52b95107da0014172
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / cat_surf-1.1.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl

Download URL cat_surf-1.1.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Size 8.3 MB
Tags CPython 3.10 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
828282999ee845dc16c5241bbb4ed7889632ffa5d6eda58bdfa797844396ac84
BLAKE2b-256 checksum
How to use checksums
a4da0a1c3bfed8f0b8981c678a52f680f95fec3b68a097f2a74bd2adce01284b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / cat_surf-1.1.0-cp310-cp310-macosx_11_0_arm64.whl

Download URL cat_surf-1.1.0-cp310-cp310-macosx_11_0_arm64.whl
Size 5.0 MB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
acdc21119cbedf44760727599f6a21c22e8b72de450314fe390bb59bfb1f6ffd
BLAKE2b-256 checksum
How to use checksums
3331e1ee722022bae4fbf447d986d887ebe50ead3bc6a5352b3570b6c6f5e573
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / cat_surf-1.1.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl

Download URL cat_surf-1.1.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Size 8.4 MB
Tags CPython 3.9 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
d99b05c4c16bc6174048a8262d84e2cf9de7cf13346898054baf9e4f00d03a10
BLAKE2b-256 checksum
How to use checksums
9b0f130550db10baca529176dae5400309e5710092faa158a913c94277a7fd46
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / cat_surf-1.1.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl

Download URL cat_surf-1.1.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Size 8.3 MB
Tags CPython 3.9 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
d1c6e30277f7accb004a262966e7a5e0d15e5ca032acc4822f65a7e97ff25fd0
BLAKE2b-256 checksum
How to use checksums
f2895b6818ea67ed807d0063d68668d3efd901f37df89e2378e714cf14acc1e6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / cat_surf-1.1.0-cp39-cp39-macosx_11_0_arm64.whl

Download URL cat_surf-1.1.0-cp39-cp39-macosx_11_0_arm64.whl
Size 5.0 MB
Tags CPython 3.9 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
38639cce521337df4c13f30bcf128d3146aa34ce3a30ea213b107237ba2c8500
BLAKE2b-256 checksum
How to use checksums
9fc8e9844c968778d56ed0c8abb5832e5500f10e6222ae395a0441c54489e00b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Security for cat-surf 1.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.

Full provenance

All 21 files in this release have been uploaded with provenance metadata.

Select from 21 files

Attestation for cat_surf-1.1.0-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

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.

Release history Release notifications | RSS feed

This release

1.1.0 This release

21 release files Full provenance

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