Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
475 commits
Select commit Hold shift + click to select a range
01f3e7e
Add symbol control in plotly_stars
wei-lingfeng Apr 30, 2026
0655987
Changed to png with dpi=300 for faster viewing; Fixed marker symbol f…
wei-lingfeng May 1, 2026
33c1dfa
Added required_fixed_param_names and optional_fixed_params for motion…
wei-lingfeng May 1, 2026
0a9c5ce
Update fixed params dict construction in fit_motion_model: If not spe…
wei-lingfeng May 1, 2026
d826990
Unify run_fit parameters for motion models
wei-lingfeng May 1, 2026
6caf11e
Added star name option in plotly stars
wei-lingfeng May 1, 2026
62f9248
Utilized scipy curve_fit fvec to accelerate chi2 calculation; Added s…
wei-lingfeng May 22, 2026
3f2ce00
Fixed infer positions dimension handling
wei-lingfeng May 22, 2026
6ab1c68
catch missing column case
Jun 16, 2026
b41896d
Fix wrong parameter name in curve_fit
wei-lingfeng Jun 16, 2026
2f64d7d
Added starlist_vertices function to find briteN stars only in overlap…
wei-lingfeng Jun 16, 2026
c106631
Update from_lis_file column from snr to me (NEED CONFIRMATION)
wei-lingfeng Jun 16, 2026
dbe0462
Fixed test functions after fixing match.match dr calculation
wei-lingfeng Jun 16, 2026
33b35d2
Save bootstrap results automatically after calc_bootstrap_errors
wei-lingfeng Jun 16, 2026
6431e52
Add actual shape of arg_test in StarList init error message
wei-lingfeng Jun 16, 2026
5857f15
Merge branch 'mm_rework_lingfeng' of https://github.com/wei-lingfeng/…
wei-lingfeng Jun 16, 2026
9df7b00
Changed fit_motion_model to fit_motion_models; Changed n_params to re…
wei-lingfeng Jun 17, 2026
fcb5058
Added reflist_vertex for MosaicToRef; Removed motion_model_for_new_star
wei-lingfeng Jun 17, 2026
cf29f75
Update variable names in example notebook
wei-lingfeng Jun 17, 2026
a7d1e6b
Fix duplicate columns; Fix plotting error
wei-lingfeng Jun 18, 2026
d494c23
Revert n_params name and add n_fit_params attribute
wei-lingfeng Jun 18, 2026
3d70e5a
Search for fixed params in the order of fixed_params_dict -> table co…
wei-lingfeng Jun 19, 2026
4520ed9
Update adding fixed parameter into meta or column in fit_motion_models
wei-lingfeng Jun 19, 2026
4f6d646
debug match dr calculation
Jun 22, 2026
e6f2583
Remove extra import
wei-lingfeng Jun 23, 2026
e76292c
Add missing parameters in determine_motion_model
wei-lingfeng Jun 23, 2026
d0ae608
Switched back to standard deviation as uncertainties in startables.co…
wei-lingfeng Jul 2, 2026
90b2bb6
Change default absolute_sigma=True in align, consistent with motion m…
wei-lingfeng Jul 3, 2026
43e285e
Reverted back to trans_weights and vel_weights
wei-lingfeng Jul 7, 2026
22eefd4
Reverted back to snr
wei-lingfeng Jul 7, 2026
7407bce
Added checking metadata for optional fixed parameters checking
wei-lingfeng Jul 7, 2026
aaff539
Merge branch 'mm_rework_lingfeng' of https://github.com/wei-lingfeng/…
wei-lingfeng Jul 7, 2026
af80a05
Updated shift_reference_frame
wei-lingfeng Jul 7, 2026
34227db
Added keyword check in shift_reference_frame
wei-lingfeng Jul 7, 2026
9d7c12b
Added xlabel and ylabel control for plotly_stars
wei-lingfeng Jul 9, 2026
dc943a0
Add t0 if all motion_model_input==Fixed
wei-lingfeng Jul 9, 2026
01c9c47
Merge branch 'mm_rework_lingfeng' of https://github.com/MovingUnivers…
wei-lingfeng Jul 9, 2026
10280eb
Update adding t0 and n_fit at the end of fit
wei-lingfeng Jul 10, 2026
78bd1a0
Update xe ye logic when not provided
wei-lingfeng Jul 10, 2026
06df7bf
Adjusted hover label ordering; Updated docstring
wei-lingfeng Jul 10, 2026
4b2da35
fixed config file
gregorydavidmartinez Jul 22, 2026
34611d4
Added flystar modules to docs.
gregorydavidmartinez Jul 23, 2026
92b44cd
Changed docs formatting a little.
gregorydavidmartinez Jul 23, 2026
e4f7c06
Merge pull request #24 from gregorydavidmartinez/mm_rework
mwhosek Jul 23, 2026
702674f
Moved use_in_trans selection BEFORE deriving transformation to avoid …
wei-lingfeng Jul 29, 2026
0fc17a1
Optimized calculation and added data checking in match.match
wei-lingfeng Jul 29, 2026
b52b880
Added plt.show/close! Adjusted figure size
wei-lingfeng Jul 29, 2026
1bc48ce
Changed uncertainty to error propagation (error on the mean) in combi…
wei-lingfeng Jul 29, 2026
98854cd
Fix testing errors
wei-lingfeng Jul 30, 2026
598029d
Implemented multiprocesssing for fit_motion_models and added testing …
wei-lingfeng Jul 30, 2026
91a5c27
Implemented multiprocessing in align
wei-lingfeng Jul 30, 2026
3ecbf85
Added control of scipy curve_fit method in startable and align
wei-lingfeng Jul 30, 2026
cc05db4
Fixed bugs and match updated mm_rework results
wei-lingfeng Aug 6, 2026
a6991e9
Cleaned up imports, avoided cyclic imports, and reverted back to abso…
wei-lingfeng Aug 6, 2026
3209314
Added Parallax testing data
wei-lingfeng Aug 6, 2026
46be405
Moved generic_match to align to avoid cyclic imports, as it does not …
wei-lingfeng Aug 7, 2026
2e0a1a2
Updated transformation save plot folder name
wei-lingfeng Aug 7, 2026
6ea68a5
Added keep existing option for fit_motion_models
wei-lingfeng Aug 7, 2026
8f7a850
Update plot save path; Added indices mode in trans_initial_guess
wei-lingfeng Aug 7, 2026
48a02e4
Merge branch 'mm_rework_lingfeng' of https://github.com/wei-lingfeng/…
wei-lingfeng Aug 7, 2026
d26d86b
Merge branch 'dev' into mm_rework_lingfeng
wei-lingfeng Aug 7, 2026
a0e4570
Removed unecessary if statement
wei-lingfeng Aug 7, 2026
305b14e
Merge branch 'mm_rework_lingfeng' of https://github.com/MovingUnivers…
wei-lingfeng Aug 7, 2026
8834a49
Fixed bugs
wei-lingfeng Aug 7, 2026
4642bec
Removed white trailing spaces
wei-lingfeng Aug 7, 2026
5106742
Fixed testing errors and trimmed white spaces
wei-lingfeng Aug 7, 2026
dcf9e2c
Added support for only setting list_time meta in starlists and optimi…
wei-lingfeng Aug 11, 2026
e536b6a
Updated initialization; Added support for list_time meta in add_starlist
wei-lingfeng Aug 11, 2026
278fee3
Added support for different mag limits in each iteration in align
wei-lingfeng Aug 12, 2026
59f4d7c
Save ref table in fits as well
wei-lingfeng Aug 12, 2026
cf9cd24
Fix mag_lim errors; Initialize uncertainties to be infinity
wei-lingfeng Aug 13, 2026
d71ab31
Changed masked_values to masked_where, as the former masks the range …
wei-lingfeng Aug 13, 2026
1850ed8
Removed requirement for weighted 1-column combine lists, as the new u…
wei-lingfeng Aug 13, 2026
9f474f1
Vectorized determine_motion_models and motion_model_param_names; Adde…
wei-lingfeng Aug 14, 2026
1c5bb72
Added select stars in combine_lists, avoiding redundant calculations …
wei-lingfeng Aug 14, 2026
b4be86f
Rewrite np.ma modules with pure numpy functions, as np.ma is slower
wei-lingfeng Aug 14, 2026
506c2cf
Fixed numpy.ma indexing bottleneck in fit_motion_models (~38% faster)…
wei-lingfeng Aug 15, 2026
cea7916
Vectorize Fixed motion model fitting and route Fixed/Empty stars arou…
wei-lingfeng Aug 15, 2026
c223460
Fix mag weighting error
wei-lingfeng Aug 15, 2026
cb7dbd3
Fix magnitude weighting consistency between combine_lists_xym and fit…
wei-lingfeng Aug 15, 2026
2bc7926
Suppress false-positive StarList warning on pickle/copy round-trips
wei-lingfeng Aug 15, 2026
43bc7cb
"Claude PR Assistant workflow"
wei-lingfeng Aug 16, 2026
ef78316
"Claude Code Review workflow"
wei-lingfeng Aug 16, 2026
d2cb7f3
Merge pull request #1 from wei-lingfeng/add-claude-github-actions-178…
wei-lingfeng Aug 16, 2026
97e2c7e
Fix NaN propagation bugs exposed by real, invalid-error astrometric data
wei-lingfeng Aug 16, 2026
14e7f00
Add inherit_n_detect: propagate per-star detection counts across alig…
wei-lingfeng Aug 16, 2026
eba8435
Simplify combine_lists' no-usable-weight fallback and fix its silent …
wei-lingfeng Aug 16, 2026
9a0f8c5
Add vectorized Linear.run_fit_batch, fixing a stale singular-fit inf-…
wei-lingfeng Aug 16, 2026
2d07f94
Remove misleading tqdm wrapper from determine_motion_models' model-ty…
wei-lingfeng Aug 16, 2026
6aa6d38
Avoid vstack's transient double-copy in add_rows_for_new_stars
wei-lingfeng Aug 16, 2026
9287e51
Fix redundant full-table copying, a stale-param bug, and consolidate …
wei-lingfeng Aug 16, 2026
5485d21
Add configurable KDTree threading and a multiprocessing-overhead thre…
wei-lingfeng Aug 17, 2026
66ac298
fixed config file
gregorydavidmartinez Jul 22, 2026
7b3fb01
Added flystar modules to docs.
gregorydavidmartinez Jul 23, 2026
a1b2409
Changed docs formatting a little.
gregorydavidmartinez Jul 23, 2026
5f00827
Set up Read the Docs and fix the docs/install build chain
wei-lingfeng Aug 17, 2026
83913b6
Move match_workers from MosaicSelfRef/MosaicToRef.__init__ to .fit()
wei-lingfeng Aug 18, 2026
575bcd4
Docstring cleanup: split mp_star_threshold's long first sentence, fix…
wei-lingfeng Aug 18, 2026
04910d9
Move match_workers before mp_star_threshold in fit()/match_and_transf…
wei-lingfeng Aug 18, 2026
8d6cacd
Fix two spurious warnings: a real add_starlist() bug and a benign-but…
wei-lingfeng Aug 18, 2026
2f2b05e
Simplify the list_times warning fix: suppress it, don't feed a value …
wei-lingfeng Aug 18, 2026
d8de7ea
Added function to suppress meta warnings when saving a table; Removed…
wei-lingfeng Aug 18, 2026
4b0d6e2
Validate trans_args length against iters, and default it to a bare dict
wei-lingfeng Aug 18, 2026
d40751b
Move trans_args broadcast/validation into fix_iterable_conditions
wei-lingfeng Aug 18, 2026
fc13e3f
Simplified check trans input
wei-lingfeng Aug 18, 2026
bdcfe1a
Replace save_path's redundant pkl+fits writes with HDF5 + a slim tran…
wei-lingfeng Aug 18, 2026
40928ca
Save trans_list_inverse as its own file instead of bundling it into t…
wei-lingfeng Aug 18, 2026
7414843
Fix 0*inf->nan in error propagation, two unrelated transform bugs, an…
wei-lingfeng Aug 18, 2026
18db484
Removed empty motion model warning message
wei-lingfeng Aug 19, 2026
9752df8
Add save_object option to pickle the whole mosaic object on fit()
wei-lingfeng Aug 19, 2026
3787630
Add custom_dict option to plotly_stars for extra hover fields
wei-lingfeng Aug 19, 2026
a61fcca
Use 0 instead of -1 for n_detect_list's "no detection" cells
wei-lingfeng Aug 19, 2026
1f82952
Remove curve_fit/use_scipy from motion models; unify fit()/run_fit() …
wei-lingfeng Aug 20, 2026
9c46f45
Add std_method option for combine_lists' weighted-average uncertainty
wei-lingfeng Aug 20, 2026
46b3220
Interactive figure in error message if plotly is installed
wei-lingfeng Aug 21, 2026
ca39454
Fix Fixed.run_fit's chi2 to use the fit's own weights
wei-lingfeng Aug 21, 2026
0de5dcc
Add scipy.optimize.curve_fit agreement tests for every motion model
wei-lingfeng Aug 21, 2026
bbceec2
Replace combine_lists' std_method with scipy's absolute_sigma convention
wei-lingfeng Aug 21, 2026
8a849fb
Route stars by requested motion model, not epoch count, when only Fix…
wei-lingfeng Aug 21, 2026
d07ed20
Report inf, not a fabricated finite error, when no uncertainties exist
wei-lingfeng Aug 21, 2026
c2115bd
Standardize the time argument: shape decides shared-grid vs per-star
wei-lingfeng Aug 21, 2026
48c9e07
Add tests for the time-argument shape contract
wei-lingfeng Aug 21, 2026
55702c6
Document the time-argument shape contract in the docstrings
wei-lingfeng Aug 21, 2026
7296366
Propagate reference stars with their best available motion model
wei-lingfeng Aug 21, 2026
185c5c0
Add test for reference propagation vs fitted motion models
wei-lingfeng Aug 21, 2026
2a76d1e
Keep extra keyword columns in StarList instead of dropping them
wei-lingfeng Aug 21, 2026
60bad9c
Honor a caller-supplied motion_model_input when propagating
wei-lingfeng Aug 21, 2026
cdb9489
Add tests for propagation model precedence
wei-lingfeng Aug 21, 2026
23eb6b4
Drop the honor flag: stop auto-filling motion_model_input instead
wei-lingfeng Aug 21, 2026
a130ebd
Merge determine_propagation_models into determine_motion_models
wei-lingfeng Aug 21, 2026
bba2dec
Let infer_positions choose the motion model itself
wei-lingfeng Aug 22, 2026
e3b5b0e
Label a row with the model its own parameters constitute
wei-lingfeng Aug 22, 2026
f3b30e9
Make outlier_tol's second rejection pass actually run
wei-lingfeng Aug 22, 2026
40a8dfd
Add test that outlier_tol re-derives the transformation
wei-lingfeng Aug 22, 2026
aaed1dd
Stop degenerate fits from surfacing as an unrelated match error
wei-lingfeng Aug 22, 2026
f40cc18
Add chi2 matching so crowded fields stop splitting one star into many
wei-lingfeng Aug 22, 2026
1fd2324
Skip 1D columns when copying per-list values into ref_table
wei-lingfeng Aug 23, 2026
64f66d9
Report the error of the mean, not the scatter, in combine_lists
wei-lingfeng Aug 23, 2026
e5040b1
Distinguish iter_callback's final call, and document the hook
wei-lingfeng Aug 23, 2026
3a77354
Build the docs from this branch instead of a separate docs branch
wei-lingfeng Aug 23, 2026
332380a
Fix docstring RST so the API reference renders
wei-lingfeng Aug 23, 2026
e8701d5
Fix the remaining docstring RST so every section renders
wei-lingfeng Aug 23, 2026
acabd1e
Add a live-reload docs preview
wei-lingfeng Aug 23, 2026
6bce5dc
Call infer_positions, not the nonexistent predict_positions
wei-lingfeng Aug 23, 2026
bc97156
Derive the epoch grid instead of requiring a fully-detected star
wei-lingfeng Aug 23, 2026
5ebb27c
Remove the test suite's only network dependency
wei-lingfeng Aug 24, 2026
d736fa8
Reorganize the docs around the science goal, and derive the equations
wei-lingfeng Aug 24, 2026
d6ed0d6
Update the motion model notebook to this branch's API
wei-lingfeng Aug 24, 2026
c33b4cc
Publish an ad-free docs mirror to GitHub Pages
wei-lingfeng Aug 24, 2026
ff91a82
Fix two prose references to the old singular method name
wei-lingfeng Aug 24, 2026
6a264c3
Read epochs as TDB, the scale the parallax code actually works in
wei-lingfeng Aug 24, 2026
ace706b
Re-execute the notebook now that parallax fits are warning-free
wei-lingfeng Aug 24, 2026
f3b75c9
Convert UTC epochs to TDB rather than relabelling them
wei-lingfeng Aug 24, 2026
501b7d9
Use realistic epochs in the notebook; label the sidebar section API
wei-lingfeng Aug 24, 2026
190b6d1
Removed Empty model warnings
wei-lingfeng Aug 24, 2026
9052521
Document that epochs are UTC decimal years
wei-lingfeng Aug 24, 2026
b60f568
Justify the epoch convention by its effect, not by input precision
wei-lingfeng Aug 24, 2026
3f7b1d4
Update example notebook
wei-lingfeng Aug 24, 2026
f920584
Report why the initial match failed instead of UnboundLocalError
wei-lingfeng Aug 24, 2026
27f62fb
Add a from-scratch alignment walkthrough, and a nav entry for the fro…
wei-lingfeng Aug 24, 2026
18dc58f
Make ignore_contains reachable, and stop it dropping stars silently
wei-lingfeng Aug 24, 2026
84ce25d
Point the match-failure message at the actual cause
wei-lingfeng Aug 24, 2026
b6aa944
Accept mag_lim as a list, not only as an array
wei-lingfeng Aug 24, 2026
8b9e54d
Lead with what FlyStar does, document every aligner parameter, blind-…
wei-lingfeng Aug 24, 2026
2e48f26
Make mag_lim's 2D form index iterations, like every other schedule
wei-lingfeng Aug 24, 2026
e9e828b
Fold uncertainties into motion models; split Examples in two
wei-lingfeng Aug 24, 2026
6a75dfc
Normalize docstring style: no gaps between params, optional + default…
wei-lingfeng Aug 24, 2026
3eddead
Update docstrings
wei-lingfeng Aug 24, 2026
60fa6a6
Give transformations their own page, and settle on sentence case
wei-lingfeng Aug 24, 2026
11ec9ee
Nest the notebook's two sections, document motion_models' input forms
wei-lingfeng Aug 24, 2026
d18f291
Put transformations before alignment in the guide
wei-lingfeng Aug 24, 2026
16b1ad2
Match motion model names case-insensitively
wei-lingfeng Aug 24, 2026
ddb5e29
Show the plotting code in the alignment example, escape absolute_sigm…
wei-lingfeng Aug 24, 2026
e8c057e
Rename archive_io to io
wei-lingfeng Aug 24, 2026
2368aa1
Let determine_motion_models see metadata, and accept per-star fixed p…
wei-lingfeng Aug 24, 2026
aae9f09
Document how the motion-model fits are vectorized, and where fixed pa…
wei-lingfeng Aug 24, 2026
9699506
Write fitted fixed params under their own name, moving conflicts to <…
wei-lingfeng Aug 24, 2026
e9f4c41
Show the fit timings as a figure, and commit the script that made them
wei-lingfeng Aug 24, 2026
a2fde73
Put the 2-epoch case back in the timings, as the fallback boundary
wei-lingfeng Aug 24, 2026
bb816d5
Time the fits against the number of stars too, at fixed epochs
wei-lingfeng Aug 24, 2026
8d69d10
Correct the fixed-param precedence in the source, and document adding…
wei-lingfeng Aug 25, 2026
afda82c
Lead the timings with the star count, and name both sweeps for their …
wei-lingfeng Aug 25, 2026
52091f6
Put getting started and a working alignment on the front page
wei-lingfeng Aug 25, 2026
ece5cf6
Declare the real dependencies in setup.cfg
wei-lingfeng Aug 25, 2026
677f45f
Point the README at both doc builds, and split the front-page example
wei-lingfeng Aug 26, 2026
ab2d1c8
One sidebar entry for the front page, and FlyStar as the displayed name
wei-lingfeng Aug 26, 2026
50f7c9d
Cut align memory use roughly in half by indexing per-list names
wei-lingfeng Aug 26, 2026
3bc4add
Complete and normalize the align docstrings
wei-lingfeng Aug 26, 2026
ac43c0b
Update readme
wei-lingfeng Aug 26, 2026
76ef9d8
Keep the docs build warning-free under -W
wei-lingfeng Aug 26, 2026
81a35af
Make the package installable from PyPI
wei-lingfeng Aug 26, 2026
e558c83
Ship code, not fixtures: 9.1 MB wheel -> 0.19 MB
wei-lingfeng Aug 26, 2026
6380f72
Add a Trusted Publishing workflow for PyPI releases
wei-lingfeng Aug 26, 2026
9e8ee96
Read the docs metadata from pyproject.toml, not setup.cfg
wei-lingfeng Aug 26, 2026
9eb2d42
Require dr_tol, drop iters, take the pass count from the longest sche…
wei-lingfeng Sep 1, 2026
b049243
Indent the stray docstring line that broke the docs build
wei-lingfeng Sep 1, 2026
5b4fff4
Drop the Claude workflows: not authorized in the lab repo
wei-lingfeng Sep 1, 2026
cf9c468
Add save_format option; stop suppress_meta_warnings mutating ref_tabl…
wei-lingfeng Sep 1, 2026
8670d3c
Give ref_mag_lim the same per-iteration schedule as mag_lim
wei-lingfeng Sep 1, 2026
551f8f7
Document ref_mag_lim's new per-iteration schedule form
wei-lingfeng Sep 1, 2026
32a1f0a
Fix infer_positions for tables containing Empty-model stars
wei-lingfeng Sep 6, 2026
26add87
Let Parallax.run_fit survive epochs a star was not observed in
wei-lingfeng Sep 6, 2026
a337e6d
Have calc_bootstrap_errors honor save_format and save_object
wei-lingfeng Sep 6, 2026
e7cc3b0
Carry motion model fixed parameters from a ref list into the ref table
wei-lingfeng Sep 6, 2026
f4c032f
Return str, not bytes, from StarTable.read
wei-lingfeng Sep 6, 2026
d24571d
Give trans_args the same per-list/per-iteration shape as dr_tol
wei-lingfeng Sep 9, 2026
db4b5b9
add option to plot parallax models in reference star plots
nsabrams Sep 17, 2026
d0bdb7f
Document trans_args' per-list shape, and test it
wei-lingfeng Sep 18, 2026
44e0cb9
Give StarList and StarTable their own class docstrings
wei-lingfeng Sep 18, 2026
6987eab
removing a pdb.settrace and adding a savefig in quiver plots
jluastro Sep 28, 2026
e8dd302
merging
jluastro Sep 28, 2026
b1ff6dc
Merge mm_rework into mm_rework_lingfeng (local); conflicts resolved i…
jluastro Oct 1, 2026
a6c75b3
Add the approved Keplerian Orbit motion-model plan.
cursoragent Oct 2, 2026
7772378
Add a Newtonian Orbit motion model and freeze controls.
cursoragent Oct 2, 2026
444d17e
Take orbit constants from astropy and rename the axis to a.
cursoragent Oct 3, 2026
8857f41
Document orbit tests and rename the semi-major-axis helper.
cursoragent Oct 3, 2026
b3cad9b
Trim orbits.py docstrings and add blank lines before returns.
jluastro Oct 3, 2026
a974d49
Keep Kepler's equation from oscillating at mean anomaly zero.
cursoragent Oct 3, 2026
83cceea
Move the Orbit class to sit after Parallax.
cursoragent Oct 3, 2026
aa4b3df
Spacing and formatting fixes.
jluastro Oct 7, 2026
49bd37a
Add name matching (override/tiebreak) to match and Mosaic*Ref
jluastro Oct 8, 2026
7afc911
Restore the held-versus-refit split in the frozen-orbit align test.
cursoragent Oct 10, 2026
efc29eb
Minor documentation fixes.
jluastro Oct 12, 2026
47f1e43
Cleaned up variable names.
jluastro Oct 12, 2026
7e9f12c
Adding more inline comments.
jluastro Oct 12, 2026
14fe153
Comment 8: set Orbit.n_params=6, demote=True; update demotion comment
jluastro Oct 20, 2026
80a886c
Comment 1: add name_match_example notebook and docs toctree entry
jluastro Oct 22, 2026
0de113d
Comment 7: remove unused seed param from _element_jacobian; drop del …
jluastro Oct 22, 2026
64d5080
Comment 10: inline name-match kwargs at each match.match call site
jluastro Oct 22, 2026
35300f9
align: remove name_prefer2; add duplicate-name check in MosaicToRef
jluastro Oct 22, 2026
62d4ba9
match: remove name_prefer2 / prefer2 throughout
jluastro Oct 22, 2026
40e37cd
align: inline name-match kwargs explicitly at each match.match call site
jluastro Oct 22, 2026
9ef1579
motion_model, orbits: move orbit helpers to orbits.py; rename _solve_…
jluastro Oct 22, 2026
0c0d1fb
motion_model, orbits: replace _row_value with Orbit._broadcast_fixed/…
jluastro Oct 22, 2026
d893b8b
motion_model, startables, tests: add orb_fit_status column (Comment 6)
jluastro Oct 22, 2026
9986462
Move _sky_xy and _position_sigma into Orbit as instance methods
jluastro Oct 22, 2026
13d0815
Comment 9: add params_init_guess_dict; standardize run_fit to 5-tuple
jluastro Oct 22, 2026
c56c05c
Replace fixed_motion_models + fit_motion with update_ref_motion boole…
jluastro Oct 22, 2026
7c12764
Fix add_rows_for_new_stars default for update_ref_motion; add docs
jluastro Oct 22, 2026
a18377e
Fix Orbit.demote reverted to False; restore demote=True
jluastro Oct 22, 2026
9bee32d
Merge pull request #29 from MovingUniverseLab/cursor/orbit-motion-mod…
jluastro Oct 23, 2026
0d1c687
calc_bootstrap_errors: sum differences from the first iteration, not …
wei-lingfeng Oct 23, 2026
37f6790
Merge pull request #30 from MovingUniverseLab/fix-bootstrap-cancellation
wei-lingfeng Oct 23, 2026
a34ff5e
Packaging fixes for PyPI publishing
wei-lingfeng Oct 23, 2026
7bd36c7
Merge pull request #31 from MovingUniverseLab/release-prep
wei-lingfeng Oct 23, 2026
dcc414a
test_chi2_matching_reduces_split_stars: check the matches against the…
wei-lingfeng Oct 23, 2026
6d6f765
Aligned all naming conventions to use get_predicted_positions() on Mo…
jluastro Oct 28, 2026
e9bba8f
Fix plotting utilities that predict motion-model positions
jluastro Oct 29, 2026
8de9cc7
Per-model demote setting; call fit starting values initial parameters
jluastro Oct 29, 2026
a281c8c
docs: fix the three Sphinx warnings that fail the docs build
jluastro Oct 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 71 additions & 0 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
# Build the Sphinx docs and publish them to GitHub Pages.
#
# This is an ad-free mirror of the Read the Docs build, not a replacement:
# RTD still provides the per-branch versions (/en/<branch>/) and rebuilds on
# every push. GitHub Pages serves a single site per repository, so this
# publishes one version -- the branch this workflow runs on.
#
# Before the first run, enable Pages on the repository:
# Settings -> Pages -> Build and deployment -> Source: "GitHub Actions"
# That needs repo admin. The site then appears at
# https://<owner>.github.io/<repo>/
#
# Note the docs build never imports flystar (sphinx-autoapi reads the source
# statically), so the science stack is deliberately not installed here.

name: docs

on:
push:
branches: [mm_rework_lingfeng]
paths:
- 'docs/**'
- 'flystar/**'
- '.readthedocs.yaml'
- '.github/workflows/docs.yml'
workflow_dispatch:

permissions:
contents: read
pages: write
id-token: write

# Let a newer run supersede an in-flight one, but never cancel a deploy midway.
concurrency:
group: pages
cancel-in-progress: false

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: '3.12'
cache: pip
cache-dependency-path: docs/requirements.txt

- name: Install documentation requirements
run: |
python -m pip install --upgrade pip
python -m pip install -r docs/requirements.txt

- name: Build HTML
run: |
python -m sphinx -b html -W --keep-going docs docs/_build/html

- uses: actions/upload-pages-artifact@v3
with:
path: docs/_build/html

deploy:
needs: build
runs-on: ubuntu-latest
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- id: deployment
uses: actions/deploy-pages@v4
79 changes: 79 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
# Build the distributions and publish them to PyPI.
#
# Authentication is PyPI Trusted Publishing (OpenID Connect), so there is no
# API token to store or rotate: PyPI verifies the workflow's identity directly.
# That needs a one-time setup on PyPI, under the project's
# Publishing -> Add a new pending publisher:
#
# PyPI project name : flystar
# Owner : MovingUniverseLab
# Repository : flystar
# Workflow name : publish.yml
# Environment : pypi
#
# Publishing is triggered by publishing a GitHub Release, not by pushing a tag,
# so creating the tag stays a reversible act and the upload takes a deliberate
# second step. The version comes from the tag via setuptools_scm, so the tag is
# what decides the version that is uploaded -- and a version can never be
# re-uploaded to PyPI, so it is worth being sure of.

name: publish

on:
release:
types: [published]
workflow_dispatch: # manual run, for a TestPyPI dry run

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # setuptools_scm needs the tags to find the version
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Build sdist and wheel
run: |
python -m pip install --upgrade build twine
python -m build
twine check dist/*
- name: Show what will be uploaded
run: ls -l dist/
- uses: actions/upload-artifact@v4
with:
name: dist
path: dist/

publish-testpypi:
# Manual runs go to TestPyPI, so the whole path can be rehearsed without
# burning a version number on PyPI proper.
if: github.event_name == 'workflow_dispatch'
needs: build
runs-on: ubuntu-latest
environment: testpypi
permissions:
id-token: write
steps:
- uses: actions/download-artifact@v4
with:
name: dist
path: dist/
- uses: pypa/gh-action-pypi-publish@release/v1
with:
repository-url: https://test.pypi.org/legacy/

publish-pypi:
if: github.event_name == 'release'
needs: build
runs-on: ubuntu-latest
environment: pypi
permissions:
id-token: write
steps:
- uses: actions/download-artifact@v4
with:
name: dist
path: dist/
- uses: pypa/gh-action-pypi-publish@release/v1
16 changes: 16 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
*.png
*random*.fits
*random*.lis
*.DS_Store
*.pyc
.ipynb_checkpoints/

Expand Down Expand Up @@ -66,6 +70,7 @@ instance/

# Sphinx documentation
docs/_build/
docs/api/

# PyBuilder
target/
Expand Down Expand Up @@ -106,3 +111,14 @@ ENV/
# mypy
.mypy_cache/

docs/jupyter_execute/

# Documentation figures are generated by docs/make_example_figures.py but are
# committed, so the docs build needs no science stack. Exempt them from the
# blanket *.png rule above.
!docs/_static/*.png

# Written at build time by setuptools_scm (see setup.py use_scm_version).
# Tracking it makes every build dirty the tree, which appends a ".d<date>"
# suffix to the version -- including on tagged release builds.
flystar/version.py
25 changes: 25 additions & 0 deletions .readthedocs.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Read the Docs configuration file
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details

version: 2

build:
os: ubuntu-24.04
tools:
python: "3.12"

sphinx:
configuration: docs/conf.py
fail_on_warning: false

# flystar itself is deliberately NOT installed here. The API reference is
# generated by sphinx-autoapi from the source tree via static analysis, so the
# package never has to be imported and its science-stack dependencies
# (numpy/scipy/astropy/matplotlib) don't need to resolve for a docs build to
# succeed.
python:
install:
- requirements: docs/requirements.txt

formats:
- htmlzip
72 changes: 72 additions & 0 deletions CHANGES.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
=========
Changelog
=========

Unreleased
==========

API changes to ``MosaicSelfRef`` and ``MosaicToRef``
----------------------------------------------------

- ``dr_tol`` is now a required argument, given before the optional ones.
Matching is a radius search, so there is no meaningful default: the old
``dr_tol=[1.0]`` silently applied a one-unit radius in whatever units the
reference frame happened to use.
- The ``iters`` argument is gone. It had never been read -- the iteration
count has always come from the length of ``dr_tol`` -- so calls that passed
a disagreeing ``iters`` were already running the ``dr_tol`` schedule. Drop
it from the call.
- The number of iterations is now the length of the longest schedule given:
``dr_tol``, ``dm_tol``, ``outlier_tol`` or ``trans_args``. Any of them may
be a single value, broadcast to that length, so ``dr_tol=0.5,
dm_tol=[1.0, 0.5]`` is two passes at a constant radius, and all single
values is a single pass. Two schedules of differing length remain an error.
``mag_lim`` does not take part -- its ``[min, max]`` form is a pair, not a
schedule -- and is still checked against the resulting count.
- ``dm_tol`` now defaults to ``None``, which places no magnitude cut on the
match. The old default of ``[1.0]`` rejected pairs more than one magnitude
apart, which is wrong across filters and arbitrary within one.
- ``trans_args`` now carries a per-starlist axis as well as a per-iteration
one, and is normalized to ``(N_iters, N_lists)``. It accepts a bare dict, a
flat list of ``N_iters`` dicts, or a nested ``(N_iters, N_lists)`` list, so
one epoch can be given a different transformation order from the rest. As
with ``mag_lim``, a single axis indexes iterations, so existing calls keep
working unchanged; per-list arguments use the nested form, a single
iteration of them being ``[[...]]``.
- ``calc_bootstrap_errors`` now re-fits with the whole ``trans_args`` dict from
the last iteration. It had been reaching for ``trans_args[0]['order']``,
which took the *first* iteration's order -- bootstrapping a rising-order
schedule at the loose starting order rather than the one the fit converged
with -- and dropped every other key.

0.1.0 (2026-08-26)
==================

First release on PyPI.

FlyStar cross-matches and aligns stellar astrometry catalogues. It derives
the transformations between a stack of starlists and a common reference
frame, matches stars across them, and fits a motion model per star
(``Empty``, ``Fixed``, ``Linear``, ``Acceleration`` or ``Parallax``).

``MosaicSelfRef`` builds the reference frame from the starlists themselves;
``MosaicToRef`` aligns them to an external catalogue such as Gaia.

Notes for this release
----------------------

- The reference table records each star's identity in each starlist as
``idx_in_list``, an integer index into that starlist, rather than as a copy
of the name. Use :func:`flystar.align.names_in_list` to recover the names.
Tables written by pre-release versions of the code carry a string
``name_in_list`` column instead; ``flystar.plots`` and ``flystar.analysis``
read either.
- ``jplephem`` is a hard requirement, not an extra: astropy uses it whenever a
solar-system ephemeris is evaluated, which the ``Parallax`` motion model
does.
- ``shapely``, ``astroquery`` and ``plotly`` are imported lazily by the
features that need them (polygon footprints for the initial guess, Gaia and
JPL Horizons queries, and interactive diagnostic plots respectively). Install
them with ``pip install flystar[optional]``.
- Tests are not included in the distributions; run them from a checkout of the
repository.
20 changes: 12 additions & 8 deletions MANIFEST.in
Original file line number Diff line number Diff line change
@@ -1,17 +1,21 @@
include README.rst
include CHANGES.rst
include setup.cfg
include LICENSE.rst
include pyproject.toml

recursive-include flystar *.pyx *.c *.pxd
recursive-include docs *
include setup.cfg
recursive-include licenses *
recursive-include cextern *
recursive-include scripts *

# Documentation sources, but not the example data: docs/examples carries ~10 MB
# of .lis/.fits inputs for the Gaia notebook, which Read the Docs takes from the
# repository rather than from an sdist.
recursive-include docs *.rst *.py *.ipynb *.txt Makefile make.bat
recursive-include docs/_static *
prune docs/examples/flystar_mosaic_to_gaia

# Tests are not distributed -- see the packages.find exclude in pyproject.toml.
prune flystar/tests

prune build
prune docs/_build
prune docs/api

global-exclude *.pyc *.o
global-exclude *.pyc *.pyo *.o __pycache__
71 changes: 45 additions & 26 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,51 @@ FlyStar
:target: http://www.astropy.org
:alt: Powered by Astropy Badge

FlyStar aligns many star lists into one common frame and fits each star's motion
there, choosing per star from a set of motion models. It cross-matches the stars
across every list, solves for the transformation that carries each list into a
common reference frame, and fits positions, proper motions and where wanted
parallaxes, with uncertainties.

Documentation
-------------

Two builds of the same source, both from the ``mm_rework_lingfeng`` branch:

* **Read the Docs** -- https://flystar.readthedocs.io/en/mm_rework_lingfeng/
Rebuilt on every push, and keeps a version per branch under ``/en/<branch>/``.
Note that ``/en/latest/`` tracks the default branch, which does not have these
pages.
* **GitHub Pages** -- https://wei-lingfeng.github.io/flystar/
An ad-free mirror of the same build. One version only: whatever
``mm_rework_lingfeng`` last published.

Start on either front page: it installs FlyStar and then builds a synthetic
four-epoch data set, aligns it, and checks the recovered positions and proper
motions against the truth that went in.

.. warning::

These describe the ``mm_rework_lingfeng`` branch, whose motion-model
framework does not exist on ``main``. The API reference on both sites is
generated from this branch's source.

Installation
------------

Not on PyPI; install from the repository::

git clone https://github.com/MovingUniverseLab/flystar.git
cd flystar
pip install -e .

That pulls in numpy, scipy, astropy, matplotlib, pandas, joblib and tqdm, all of
which the package imports at module level. Python 3.7 or newer. Three further
packages are imported lazily and only needed for the features that use them --
``shapely``, ``astroquery`` and ``plotly`` -- grouped as an extra::

pip install -e '.[optional]'


License
-------
Expand All @@ -21,29 +66,3 @@ Contributing

We love contributions! FlyStar is open source,
built on open source, and we'd love to have you hang out in our community.

**Imposter syndrome disclaimer**: We want your help. No, really.

There may be a little voice inside your head that is telling you that you're not
ready to be an open source contributor; that your skills aren't nearly good
enough to contribute. What could you possibly offer a project like this one?

We assure you - the little voice in your head is wrong. If you can write code at
all, you can contribute code to open source. Contributing to open source
projects is a fantastic way to advance one's coding skills. Writing perfect code
isn't the measure of a good developer (that would disqualify all of us!); it's
trying to create something, making mistakes, and learning from those
mistakes. That's how we all improve, and we are happy to help others learn.

Being an open source contributor doesn't just mean writing code, either. You can
help out by writing documentation, tests, or even giving feedback about the
project (and yes - that includes giving feedback about the contribution
process). Some of these contributions may be the most valuable to the project as
a whole, because you're coming to the project with fresh eyes, so you can see
the errors and assumptions that seasoned contributors have glossed over.

Note: This disclaimer was originally written by
`Adrienne Lowe <https://github.com/adriennefriend>`_ for a
`PyCon talk <https://www.youtube.com/watch?v=6Uj746j9Heo>`_, and was adapted by
FlyStar based on its use in the README file for the
`MetPy project <https://github.com/Unidata/MetPy>`_.
Loading
Loading