Skip to main content

ktch - A Python package for model-based morphometrics

PyPI version Anaconda-Server Badge codecov License Python

ktch is a Python package for model-based morphometrics with scikit-learn compatible APIs.

Overview

ktch implements the following morphometric analysis methods:

  • Landmark-based methods: Generalized Procrustes Analysis (GPA) with curve/surface semilandmark sliding, thin-plate spline interpolation
  • Harmonic-based methods: Elliptic Fourier Analysis (EFA) for 2D/3D closed curves, spherical harmonic analysis (SPHARM) and disk harmonic analysis (DHA) for surfaces
  • Theoretical morphological models of coiling: Raup's model and the growing tube model
  • File I/O: Support for standard morphometric file formats (TPS, CHC, NEF, SPHARM-PDM)
  • Datasets: Built-in example datasets for learning and testing
  • Visualization: TPS deformation grids, PCA variance plots (with optional plot extra)

All analysis classes follow the scikit-learn API (fit, transform, fit_transform), so you can plug them into your existing pipelines.

Installation

Python >= 3.11 is required.

From PyPI

pip install ktch

From conda-forge

conda install -c conda-forge ktch

Optional dependencies

Via PyPI:

pip install ktch[plot]  # matplotlib, plotly, seaborn for visualization
pip install ktch[data]  # pooch for remote dataset downloads

Via conda-forge:

conda install -c conda-forge ktch-plot  # matplotlib, plotly, seaborn for visualization
conda install -c conda-forge ktch-data  # pooch for remote dataset downloads
conda install -c conda-forge ktch-all   # all optional dependencies

Development installation

git clone https://github.com/noshita/ktch.git
cd ktch
uv sync

Quick start

Elliptic Fourier Analysis on 2D outlines

from sklearn.decomposition import PCA

from ktch.datasets import load_outline_mosquito_wings
from ktch.harmonic import EllipticFourierAnalysis

# Load outline data (126 specimens, 100 points, 2D)
data = load_outline_mosquito_wings()
coords = data.coords

# Elliptic Fourier Analysis
efa = EllipticFourierAnalysis(n_harmonics=20)
coeffs = efa.fit_transform(coords)

# PCA on EFA coefficients
pca = PCA(n_components=5)
pc_scores = pca.fit_transform(coeffs)

Documentation

See doc.ktch.dev for full documentation:

  • Tutorials: Step-by-step guides for GPA, EFA, spherical harmonics, and more
  • How-to guides: Task-oriented recipes for data loading, visualization, and pipeline integration
  • Explanation: Theoretical background on morphometric methods
  • API reference: Complete API documentation

Contributing and support

Bug reports, feature requests, and usage questions are all welcome via GitHub Issues.

See CONTRIBUTING.md for development setup and conventions.

License

ktch is licensed under the Apache License, Version 2.0.

Release files for ktch 0.11.1

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

Source distribution (sdist)

Source distribution for ktch 0.11.1
File Size Uploaded
ktch-0.11.1.tar.gz 741.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ktch 0.11.1
File Interpreter ABI Platform
ktch-0.11.1-py3-none-any.whl Python 3 none any Details

Total release size: 1.5 MB

Release files / ktch-0.11.1.tar.gz

Download URL ktch-0.11.1.tar.gz
Size 741.4 kB
Tags Source
SHA-256 checksum
How to use checksums
872ef5db27428f53d0a9c5c90d6cbc4ff7288dbe50c8d6b693e5ccdb6319063d
BLAKE2b-256 checksum
How to use checksums
18e484e9c14127b7f38c5fa938e5630bdd57c8ba02d9d3ee8e91a56140d6ade3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / ktch-0.11.1-py3-none-any.whl

Download URL ktch-0.11.1-py3-none-any.whl
Size 761.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
be2190d9f5c302e06d61a3de492f9a867760787bd5780fa20e8efe4c4ebe597a
BLAKE2b-256 checksum
How to use checksums
d697a1b69368e22ee8f80bace7ba0371d5a38b70961cca7703cc0f198ab31348
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
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