Skip to content

Add satellite, cable, and whitehead_double functions - #74

Merged
NathanDunfield merged 5 commits into
3-manifolds:masterfrom
alexeldridge:satellite
Aug 10, 2026
Merged

Add satellite, cable, and whitehead_double functions#74
NathanDunfield merged 5 commits into
3-manifolds:masterfrom
alexeldridge:satellite

Conversation

@alexeldridge

@alexeldridge alexeldridge commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

This change adds several functions to perform satellite operations on knots. Given an (n, n)-Tangle representing a pattern knot in the solid torus, the satellite function returns the satellite of a given knot by that pattern optionally with a specified number of full twists. The satellite inherits its orientation from the pattern. Specialized functions for cables and Whitehead doubles are also implemented.

@NathanDunfield

Copy link
Copy Markdown
Member

@alexeldridge Many thanks for doing this. Overall the code looks good, but I have two requests before merging:

  1. I think most of your new functions should be made methods of Link. You can do this in spherogram_src/links/links_base in a similar matter as Link.backtrack.

  2. The new methods should have doctests in their docstrings. These both give examples for the user and can serve as regression tests (e.g. you could check the number of crossings of some cable, or compute tau of some whitehead double). To make sure they pass, install spherogram and then do python -m spherogram.test.

Let me know if anything is unclear.

@alexeldridge

alexeldridge commented Aug 7, 2026

Copy link
Copy Markdown
Contributor Author

I've added the methods to links_base.Link along with some doctests as requested.

One thing I noticed while testing some edge cases: the __repr__ for Link includes a count of link components, but does not include self.unlinked_unknot_components. I went to change this to include all components, but this breaks a couple doctests. Would this change be helpful (changing the appropriate doctests too) or is the current behavior intended?

1. Shortened lines.

2. Prefered string literal indicator `"` -> `'`.

3. Translate Markdown to re-Structured text as this needed for the docs.
work without an explicit import.  Also hack around the
need to do "from . import BraidTangle, IdentityBraid" as
that will not work for the end-user.
@NathanDunfield

Copy link
Copy Markdown
Member

@alexeldridge Thanks for the changes. I made few changes to the doctests to be compatible the auto-generator for the documentation for SnapPy, which uses reStructuredText rather than Markdown.

Concerning __repr__: unfortunately, the handling of components with no crossings is a bit of a mess, of which this one aspect. Let's leave it be for now.

I'll merge this PR shortly.

@NathanDunfield
NathanDunfield merged commit 056b9af into 3-manifolds:master Aug 10, 2026
20 of 21 checks passed
@NathanDunfield

Copy link
Copy Markdown
Member

Ok, merged and I put a note in SnapPy docs to mention this in the new features list for the next release. Thanks for contributing this!

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants