Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
424 commits
Select commit Hold shift + click to select a range
91eec87
debug bootstrap indexing
Jan 12, 2026
c8ac551
simplify bug fix
Jan 12, 2026
93afbb6
allow bootstrap to optionally update positional errors
Jan 15, 2026
5a049fe
Fix bootstrap index size error
wei-lingfeng Jan 15, 2026
d87766d
Simplify n_params calculation
wei-lingfeng Jan 22, 2026
a7af1e1
Merge branch 'mm_rework_lingfeng' into mm_rework
hustonm Jan 23, 2026
82448d3
Merge pull request #20 from wei-lingfeng/mm_rework
hustonm Jan 23, 2026
2170fbc
Reorder parameters of MosaicSelf/ToRef
wei-lingfeng Jan 26, 2026
1422171
Update type comparison method
wei-lingfeng Jan 26, 2026
b2a28c7
Merge branch 'mm_rework_lingfeng' of https://github.com/MovingUnivers…
wei-lingfeng Jan 26, 2026
93f4d44
Add save path for log file
wei-lingfeng Jan 28, 2026
9251d9c
Fix mag_lim error in align
wei-lingfeng Jan 30, 2026
4980483
Update save path: Must ends with pkl
wei-lingfeng Feb 2, 2026
b78c876
Merge branch 'mm_rework_lingfeng' of https://github.com/wei-lingfeng/…
wei-lingfeng Feb 2, 2026
dcf8d13
Fix string warning message
wei-lingfeng Feb 3, 2026
89eaee5
Update motion model used for keep_orig stars in align; Update chi2 af…
wei-lingfeng Feb 8, 2026
316e79d
Fixed testing errors (Except general_match); Fixed parallax align err…
wei-lingfeng Feb 9, 2026
2aedc4d
Restore commented functions; Restore update chi squares
wei-lingfeng Feb 9, 2026
8bf14a9
Temporarily added parallax test
wei-lingfeng Feb 9, 2026
2a4a611
Midpoint test commit
wei-lingfeng Feb 11, 2026
f979af7
Add motion_model_for_new_star used in add_rows_for_new_stars; Fixed m…
wei-lingfeng Feb 18, 2026
0686a9a
Trim trailing spaces
wei-lingfeng Feb 26, 2026
ed8eea0
Update test data paths
wei-lingfeng Mar 12, 2026
4f816f2
Slightly accelerated fit motion model preparation
wei-lingfeng Mar 12, 2026
0a4c276
Added determine motion model function used in get_ref_list_from_table…
wei-lingfeng Mar 12, 2026
646a957
Passed parallax fit
wei-lingfeng Mar 12, 2026
3927e66
Add number of iterations in align output information
wei-lingfeng Mar 19, 2026
6a94841
n_fit now requires unique times as well
wei-lingfeng Mar 19, 2026
f5102b1
Added seed for test function
wei-lingfeng Mar 25, 2026
ab85b4d
Added mag offset to verbose output
wei-lingfeng Mar 25, 2026
aaadaa5
Minor fix of variable names in docstring
wei-lingfeng Mar 25, 2026
e097536
Masking close to 0 values in xe ye in fit motion model to avoid infin…
wei-lingfeng Mar 25, 2026
c85d2af
Revert "Minor fix of variable names in docstring"
wei-lingfeng Mar 25, 2026
82462bc
Minor fix of variable names in docstring
wei-lingfeng Mar 25, 2026
93fa222
Added singular matrix handling; Optimized warning message printing
wei-lingfeng Mar 30, 2026
3d611b7
Removed unecessary fixed motion model fit; Fixed bootstrap unmatched …
wei-lingfeng Mar 30, 2026
942e148
Merged show_progress into verbose; Changed to construct list of param…
wei-lingfeng Mar 30, 2026
c9b54a5
Adjusted import orders
wei-lingfeng Mar 30, 2026
5332543
Removed velocity assertion in align.ref_table if all epochs are the s…
wei-lingfeng Mar 30, 2026
f982b5b
Rename matplotlib imports
wei-lingfeng Apr 25, 2026
4f22e99
Update prompt message when length < Nbrite
wei-lingfeng Apr 25, 2026
4bac085
Add dimension check and update dimension manipulation for input starl…
wei-lingfeng Apr 25, 2026
9beff67
Updated outlier_tol default behavior; Added prefix_name for saved fil…
wei-lingfeng Apr 25, 2026
1405972
Convert combine_lists into mask lists to avoid minus .data; Optimized…
wei-lingfeng Apr 25, 2026
938dbb2
Remove main function
wei-lingfeng Apr 25, 2026
c7a55e8
Merge branch 'mm_rework_lingfeng' of https://github.com/wei-lingfeng/…
wei-lingfeng Apr 25, 2026
7012551
Added verbose control over done with fit message
wei-lingfeng Apr 26, 2026
66dc631
Revert get all epochs to numpy array; Changed default mask_lists to N…
wei-lingfeng Apr 27, 2026
0faeb87
Fix dr calculation in match
wei-lingfeng Apr 27, 2026
abbf98d
Fix xe and ye when not provided
wei-lingfeng Apr 27, 2026
594657a
Changed plotly scatter to scattergl for faster plotting
wei-lingfeng Apr 29, 2026
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
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
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
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
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
60 changes: 60 additions & 0 deletions CHANGES.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
=========
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.

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