Repository navigation
Conversation
The second badge pointed at .github/workflows/publish_pypi.yml, a workflow file the repository does not have, so GitHub answered with "publish to PyPI - no status" and the badge row named no version at all. It now carries the version PyPI serves, read from shields.io, next to the status badge of the publish workflow under the file name that exists, python-publish.yml. The version badge follows every release on its own, because it reads the package index instead of the repository. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Bump the package version from 0.11.0 to 0.12.0 for the v0.12.0 release, as the contributing section of the README asks for after a merge with master. The README badges are part of this PR because the one that was meant to stand for the release pointed at a workflow file the repository does not have.
pyproject.tomlis the only place the version is written:doc/conf.py, the headers of the extinction coefficient result files and, since #158, the first header line of every step 3 result file read it throughimportlib.metadata.version('ledsa'), so the documentation and every result file written from here on name 0.12.0.Minor over patch because the release adds a config option and moves numbers users can see:
img_rotationinconfig.iniand the automatic orientation of every image are new behaviour (read images in the orientation they were taken in #156),weighting_curvaturefrom 1e-6 to 1e-2 andnum_iterationsfrom 200 to 1000 (Let the nonlinear solver reach the minimum of its cost function #155),Nothing is removed or renamed, and config files written by 0.11.0 run unchanged:
img_rotationis missing there and falls back toauto.After the merge, the tag
v0.12.0and a release created from it publish the package to PyPI through.github/workflows/python-publish.yml, which runs on a published release.The badges
The second badge asked GitHub for
.github/workflows/publish_pypi.yml/badge.svg. That file does not exist - the workflow ispython-publish.yml- so the badge rendered as "publish to PyPI - no status" and the row named no version at all:It is now a version badge reading the package index, next to the status badge of the publish workflow under the file name that exists:
The version badge needs no maintenance at the next release, because it reads PyPI rather than the repository.
Draft release notes
The notes below are drafted for the GitHub release and are part of this PR for review only - nothing in the repository carries them, as the project keeps no CHANGELOG. They cover the three pull requests merged since v0.11.0 (#155, #156 and #158). The draft #157 stays open.
What's Changed
New features
Exif.Image.Orientationfor JPG and PNG and fromsizes.flipof LibRaw for RAW files, which covers the vendor formats that carry no plain EXIF orientation. The Bayer filter array is turned with the pixels, so it keeps naming the colour of each pixel and the channel sums stay unmixed. All eight EXIF orientations are implemented and verified against Pillow'sImageOps.exif_transpose. The new optionimg_rotationin[DEFAULT]ofconfig.ini(auto,0,90,180,270) turns images that were exported without their metadata and overrides a wrong orientation; it governs step 1, the plot of the search areas, step 3 and the postprocessing pixel view alike (Use Vertical Images #133, read images in the orientation they were taken in #156).Bugfixes
rmse(sigma) + weighting_curvature * mean((D2 sigma)^2) + weighting_preference * mean(sigma), every term a mean, with the gradient of all three terms handed to the minimiser and the forward model as one matrix product. Across nine noise realisations and four starting points per image, the spread between starts drops from 0.8 to 1e-4 and the worst rmse against the input profiles from 0.45 to 0.031, at no more than 264 cost evaluations per image (Nonlinear solver misses one test profile (test data seed 0) #134, Let the nonlinear solver reach the minimum of its cost function #155).raw.black_level_per_channelremains the fallback for sensors with a margin narrower than 8 px. JPG and PNG carry no black level and are untouched (Take the black level of RAW images from the optical black #158).all_parameters.h5is rewritten instead of appended to.create_binary_datawrote the file withappend=Trueand nothing removed the file of an earlier run, so every LED landed in the table once per run and the analysis saw each image as often as the step had been repeated. The loop reads the result files from the start every time, so appending could only duplicate. The file is now replaced, and the replacement is reported (Take the black level of RAW images from the optical black #158).Shape of passed values is (n, 12), indices imply (n, 10), which says nothing about the cause. The error now names both files, both column counts and the re-run that fixes it (Take the black level of RAW images from the optical black #158).Other
img_rotation, and the PyPI badge shows the released version instead of pointing at a workflow file that does not exist.test_image_orientation.py(the transformation table against Pillow, the parsing of the option, real JPG and PNG files with an orientation entry, and the RAW path with a faked rawpy),test_black_level.py(the optical black estimate and the fallback),test_extinction_coefficients_nonlinear.py(the cost function, its gradient and the second difference operator), six tests intest_file_handling.pyfor the two guards above, and the acceptance suite11_test_vertical_images.robot, which runs-s1through--analysison sideways stored images, once with the EXIF entry and once withimg_rotation = 90.Needs attention when updating
weighting_curvaturemultiplies the mean squared second difference from now on, so a value tuned for the old term has to be set again; the default moves from 1e-6 to 1e-2 andnum_iterationsfrom 200 to 1000.analysis/channel*/all_parameters.h5before re-running the analysis on data extracted with an older version.img_rotationis part of reading an image, so step 1 and step 3 have to use the same value: changing it means running the workflow again from-s1, because the search areas no longer fit an image read in another orientation.Full Changelog: v0.11.0...v0.12.0
🤖 Generated with Claude Code