MATLAB TCL parity inventory
A function-level comparison of pytcl against the MATLAB library at commit
593ce51 of the U.S. Naval Research Laboratory’s Tracker Component
Library,
produced by walking every directory of the MATLAB repository rather than by
asserting a percentage.
Why this document exists
Earlier documentation claimed “full feature parity” and “100% MATLAB parity”. Those claims were scoped to a tier-1/tier-2 component list that was never published alongside them, and one of their checkmarks — NRLMSISE-00 — proved to be a placeholder shipped under the model’s name (gh-79). This inventory replaces assertion with enumeration.
Method
The MATLAB public surface was counted under MATLAB’s actual visibility rules:
a regular .m file exposes exactly its first function (later declarations
are file-local subfunctions), and classdef files expose their methods
except those in Access = private blocks. Third-party code, sample code and
compiled artifacts are excluded. That yields 2,549 public names across
1,843 files — against 1,899 public names in pytcl.
Automated name matching is a lower bound only: MATLAB ships one file per
variant where pytcl uses a keyword argument, and the port renamed
systematically (KalmanUpdate → kf_update). The verdicts below come
from reading each area’s function list against pytcl’s modules.
Summary
pytcl ports the core tracking workflow comprehensively and validates it
against independent references, but the MATLAB library’s full surface is
substantially broader. By function count, coverage is roughly a third of
the MATLAB public surface. By workflow — filter, associate, track, evaluate,
in Earth-referenced coordinates — coverage is near-complete, and in several
places pytcl exceeds the original (OSPA/MOT metrics, ionosphere models,
R-trees and cover trees, STFT/wavelet transforms and matched filtering,
SQL/HDF5 track storage, GPU backends). Min-cost flow is not among them:
MATLAB ships Mathematical_Functions/Graph_Algorithms/minCostFlow.m.
MATLAB area |
Public |
Coverage |
Notes |
|---|---|---|---|
Dynamic_Estimation |
113 |
Core strong |
KF/EKF/UKF/CKF, square-root and UD forms, SRIF, information filter,
H-infinity, IMM, particle filters, RBPF, and RTS/two-filter/fixed-lag
smoothers all ported ( |
Dynamic_Models |
62 |
Partial |
CV/CA (arbitrary polynomial order, via |
Assignment_Algorithms |
45 |
Core strong |
2D assignment (Hungarian, auction, Murty k-best), 3D assignment, JPDA with gating, min-cost flow all ported and oracle-validated. Missing: bottleneck assignment, knapsack, transportation problem, stable-matching family, missed-detection LR matrix builders, assignment-probability calculators beyond JPDA. |
Coordinate_Systems |
331 |
Partial |
Cartesian/spherical/polar/geodetic/ENU/NED/SEZ conversions, rotations,
quaternions, r-u-v (range plus direction cosines, |
Mathematical_Functions |
1,440 |
Selective |
The largest area and the largest gap, though much of it is generic
numerics rather than tracking. Ported well: the CFAR family
(pytcl adds GO/SO/2-D beyond MATLAB’s CA and OS), core statistics
(12 distribution classes vs MATLAB’s 54), interpolation, special
functions. Note that pytcl’s STFT/CWT/DWT and matched filtering are
not ports – the MATLAB library contains no STFT, wavelet or
matched-filter code at all, so they belong under “what pytcl adds”
below, not under parity. Signal processing overall is thin against
the original: roughly 6 of 51 MATLAB names, with the entire
17-file |
Astronomical_Code |
28 |
Partial |
SGP4 (validated against the official library), Kepler propagation, orbital elements, Lambert solvers, JPL ephemerides via jplephem. Missing: Hipparcos catalog access, aberration and light-deflection corrections, EOP acquisition, angles-only initial orbit determination, two-point velocity determination, equinoctial Kepler solver. |
Atmosphere_and_Refraction |
34 |
Partial |
U.S. Standard Atmosphere 1976/ISA validated; barometric thermosphere
with documented limits (gh-79); all 10 humidity conversions, both
dew-point functions, the refractivity helpers and the
astronomical-refraction group ( |
Gravity |
14 |
Good |
EGM coefficient loading, geoid height, normal gravity, tide offsets (solid/pole/ocean) ported. Missing: lunar gravity coefficients, polar-motion/drift coefficient adjustments, ellipsoidal parameter conversions. |
Magnetism |
12 |
Split |
Coefficient loading and field evaluation for WMM/IGRF/EMM ported and validated to sub-nT. Missing: the coordinate-system half — apex and quasi-dipole coordinates, centered-dipole transforms, magnetic-heading conversions, field-line tracing. |
Navigation |
21 |
Good |
Direct/indirect geodesic, great-circle and rhumb problems ported,
validated against GeographicLib; rhumb intersection is ported as
|
Static_Estimation |
11 |
Split |
Nine of the 11 localization estimators are ported in
|
Clustering_and_Mixture_Reduction |
14 |
Good |
Runnalls and West mixture reduction, k-means(++) ported; pytcl adds DBSCAN and hierarchical clustering. Missing: ISE-based reduction and its gradients, brute-force reduction, windowed grid centroiding. |
Container_Classes |
265 |
Different emphasis |
k-d tree and metric tree ported (as KDTree/BallTree/VPTree), ClusterSet ported; pytcl adds R-trees, cover trees and the whole track/measurement container layer. Missing: AVL tree, binary heaps, disjoint sets, linked lists, interval class, B-spline class — largely idiomatic-Python non-goals, but absent nonetheless. |
Performance_Evaluation |
12 |
Split |
NEES (with confidence bounds), RMSE ported; pytcl adds the standard
OSPA metric and CLEAR-MOT metrics. Missing: MATLAB’s MOSPA/MMOSPA
family ( |
Terrain |
3 |
Partial |
The Earth2014 dataset is read (plus GEBCO, which MATLAB lacks), but
not MATLAB’s function: |
Misc |
52 |
Mostly N/A |
Bit manipulation, MATLAB plotting, file utilities — superseded by
numpy/matplotlib/stdlib. Substantive absences: GSHHG coastline data
access and |
Transponders |
3 |
Partial |
MATLAB’s |
Scheduling |
4 |
Absent |
Interval scheduling algorithms not ported. |
Physical_Values |
14 |
Partial |
Physical constants partially ported: 43 module-level constants
against |
What pytcl has that the MATLAB library does not
The comparison runs both ways. pytcl adds: the standard OSPA metric and CLEAR-MOT evaluation, ionospheric delay models, R-trees and cover trees, DBSCAN and hierarchical clustering, min-cost-flow assignment, SQL and HDF5 track storage with migration tooling, dual-backend GPU acceleration, and a test suite of 8,000+ cases that includes 49 validation files checking against independent references — the MATLAB library distributes no test suite at all.
Honest bottom line
The defensible claim is not “full feature parity”. It is: the core tracking workflow is ported, oracle-validated, and in places extended; the MATLAB library’s long tail — its cubature collection, refraction suite, time-scale zoo, localization estimators and specialized coordinate systems — is substantially unported, at roughly a third of the full public surface by function count. Areas above marked Absent, Weak or Divergent are the honest priority list for anyone who needs them.