measure op• Data kinds: pairs → table
• Call: import fullseye as fs; fs.ledger.profile_sides(contour, n=101, normalise=True) (to call the implementation directly, import profileops; profileops.profile_sides(contour, n=101, normalise=True); from the registry, opsprofile.get("profile_sides"))
Extracts the upper and lower surfaces as functions of the chordwise coordinate. Returns a dict.
Divides the chord into n equal parts and, at each position, picks the upper and lower points where the contour crosses, by linear interpolation.
An open curve is rejected here -- if you pass a 1-valued (single-valued) function (such as an MTF curve), the lower surface cannot be obtained, so it fails explicitly, stating "this is not a closed section". This is guarded by validation, not by type (pairs is vocabulary used both for function data and for closed contours, so splitting the type would disconnect it from the existing contour-generating ops).
Returns:
dict: x ((n,)), upper / lower ((n,)), normalised.
• profile_metrology family guide
• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).
• Operator provenance and references — the sources of the research/methods this op family came from.
• The canonical algorithm (author, year) and its uses are named in the family usage guide above.
• profile_frame_tour — py -3.11 examples/profile_frame_tour.py
table as input)—
measure)profile_thickness · profile_camber · profile_leading_edge_radius · profile_trailing_edge_gap
*Provenance: profileops.py — PROFILE operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.