Skip to content

DOC: Add direct C-extension testing guide - #20239

Draft
ReemHamraz wants to merge 1 commit into
astropy:mainfrom
ReemHamraz:docs-testing-extensions
Draft

DOC: Add direct C-extension testing guide#20239
ReemHamraz wants to merge 1 commit into
astropy:mainfrom
ReemHamraz:docs-testing-extensions

Conversation

@ReemHamraz

Copy link
Copy Markdown
Contributor

Description

Hi everyone!!

This PR adds TESTING_EXTENSIONS.rst to the developer docs and wires it up in index_dev.rst.

Over the course of my GSoC project, I've been writing a lot of tests for our C and Cython extensions. Since establishing this direct test layer is a big prerequisite for safely splitting the low-level layer into a separate package (the APE split), I wanted to put together a proper guide on how to test these compiled modules directly and in pure isolation.

Here is a quick rundown of what the guide covers:

  • How to bypass high-level Python wrappers and hit the C-slots directly using minimal shims and .view() casting.
  • Why we need to use strict type() checks instead of isinstance() at the C-boundary, and guidelines for using numpy.typing.NDArray.
  • Tips for exhaustive structural validation, using zip(..., strict=True), and handling tricky edge cases like explosive memory allocations and np.nan.
  • Best practices for catching and safely validating C-level crashes across the Python boundary using substring matching.
  • Architectural rules for static analysis, like locking dimensions with TypeVar and enforcing positional-only arguments.

I'd really love to get your thoughts on this! Please let me know if anything feels off, if the tone works, or if there are any sections that need more clarity. Looking forward to any suggested changes or improvements, I'm more than happy to iterate on this to make sure it's as helpful as possible for future contributors.

Related Issues

cc: @neutrinoceros

@github-actions github-actions Bot added the Docs label Aug 15, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Thank you for your contribution to Astropy! 🌌 This checklist is meant to remind the package maintainers who will review this pull request of some common things to look for.

  • Do the proposed changes actually accomplish desired goals?
  • Do the proposed changes follow the Astropy coding guidelines?
  • Are tests added/updated as required? If so, do they follow the Astropy testing guidelines?
  • Are docs added/updated as required? If so, do they follow the Astropy documentation guidelines?
  • Is rebase and/or squash necessary? If so, please provide the author with appropriate instructions. Also see instructions for rebase and squash.
  • Did the CI pass? If no, are the failures related? If you need to run daily and weekly cron jobs as part of the PR, please apply the "Extra CI" label. Codestyle issues can be fixed by the bot.
  • Is a change log needed? If yes, did the change log check pass? If no, add the "no-changelog-entry-needed" label. If this is a manual backport, use the "skip-changelog-checks" label unless special changelog handling is necessary.
  • Is this a big PR that makes a "What's new?" entry worthwhile and if so, is (1) a "what's new" entry included in this PR and (2) the "whatsnew-needed" label applied?
  • At the time of adding the milestone, if the milestone set requires a backport to release branch(es), apply the appropriate "backport-X.Y.x" label(s) before merge.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant