Releases: kneasle/ringing
Releases · kneasle/ringing
Monument v0.14.5
Minor release over v0.14.4, bumping the version of the factorial create from v0.3.0 to v0.4.0. v0.3.0 has been yanked from crates.io and therefore caused cargo install monument_cli to fail.
Monument v0.14.4
Patch release over v0.14.3, which fixes a massive performance regression caused by continually recalculating music for compositions.
Monument v0.14.3
Headline Changes
- (#284) Allow scoring of all-the-work compositions, using the
atw_weightparameter. - (#306) Add new option
base_music = "complib", which adds base music which exactly matches that
of CompLib (except that Monument can't count wraps). Thanks, @samuelsenior! - (#319) Remove non-duffer pruning. The non-duffer implementation was fiddly and complex and
difficult to both use and to maintain. It was useful, but just didn't justify its complexity. - (#323) Automatically expand courses which don't exist in other parts. This is particularly
relevant to link-method cyclic compositions, where previously one would have to provide every
cyclic course ("1234567890", "1023456789", "19023456789", etc.). Now, only one is required
and the rest are inferred.
Smaller Changes
- (#205) Remove chunks and links which contribute too much method counts. This should have a small
speed improvement for compositions which include one lead of each method in each part
(e.g. 23-spliced Surprise Major). - (#221) In the guide, always use valid values for
{start,end}_rows. - (#309) Align columns correctly when the maximum composition length is 2-digits long.
- (#314) Don't display "default music" warning if user explicitly asks for Complib music.
- (#314) Add
require_atwoption, which filters out any non-atw compositions in Monument's output. - (#314) Display which order the compositions in the final output were emitted, even in the sorted
summary output.
Internal Improvements
- (#203) Automate the release workflow. Now,
cargo cut-releaseis enough to trigger the
whole release pipeline. - (#204, #304, #310) Implement benchmark runner, and add benchmarks from real use-case (first
contribution; thanks @samuelsenior!). - (#296) Add
ARCHITECTURE.mdto help new contributors getting an idea of the code - (#303) Completely rewrite the interface of Monument's internal library to make it more amenable
to a graphical interface. - (#320) Remove the cached data stored in
Query(and generate it from scratch). This leads to... - (#322) Fully remove
Query. Now, all the composition-parameter data is calculated directly from
Parameters. - (#324) Remove a lot of cached data from
Composition, which was dependent on the specific set of
Parametersused to generate that composition.
Bellframe v0.12.0
- (#221) Add
Bell::MAX, which returns the largestBellpossible (i.e. the 254th) - (#221) Stop bell-path methods (e.g.
Block::path_of) from returningOption. Instead, passing
aBellout of theBlock'sStagewill cause a panic. - (#221) Add
Mask::contains, returningtrueif theMaskconstrains thatBell. - (#321) Almost all operations will panic on
Stagemismatch, rather than returning a
Result<_, IncompatibleStages>.
Monument v0.13.4
Headline Features
- (#201) Print an extra header line every 50 compositions.
- (#200) Remove
debug_symboland calculate it automatically for bobs. - (#200) Replace
allow_falsewithrequire_truth. - (#185) Rename
ch_weightstocourse_weights, andcourse_headstocourses.
Internal Improvements
- (#167) Remove dependence on
serdefrom Monument's library. Now, all the handling of TOML files is inmonument_cli. - (#171) Don't store test cases in Markdown files, instead storing them all as individual TOML files. Apart from massively simplifying the code, this also means that all test cases can be easily run directly from the command line (a very useful feature for debugging).
- (#172) Test Monument's
stdoutoutput, rather than driving the library directly. - (no PR) Fix test case path that was invalid on Windows.
Monument v0.12.0
Headline Features
- (#156) Implement non-duffer pruning. In short, you specify courses which are 'non-duffer' (e.g.
those with 4-bell runs) and then you can enforce a limit on how much contiguous/total 'duffer'
rows can be rung. Think MBD's no-duffer Bristol, but this works for any composition. - (#143) Use explicit memory limit. Set by
--mem-limitor-M, defaults to90%80% of
available system memory.
Internal Improvements
- (#165) Only require clippy lints on releases.
- (#146) Merge fields of
graph::build::MethodDataintoquery::Method. - (#142) Implement builder API to make
monumenteasier to use as a library - (#142) Make
Queryprivate and buildSearches directly. - (#140) Rename some fields of
Query(which, after #138, are no longer exposed externally) - (#138) Heavily clean up the API of the
monumentlibrary. This PR focusses on removing as much
API surface as possible, so that the remaining API can be made as easy as possible to use. With
some more attention, it should be possible to embed themonumentlibrary into programs other
than its CLI interface.
Pre-Release Bug Fixes/Tweaks
(these are bugs which were created during this release, so were never public)
- (#166) Output correct contiguous duffer lengths in multi-parts.
- (#166) Make
Chunks non-duffer only if they are a non-duffer in every part. - (#145) Reduce memory limit from 90% to 80% of the available memory.
BellFrame v0.11.0
- (#140) Rename
Mask::fix_bellstoMask::with_fixed_bells. - (#140) Don't return borrowed data in the error from
MethodLib::get_by_title_with_suggestions. - (#156) Only implement
Add/SubforBellwithi16(i.e. notu8ori8). If you want to
add/subtractBells withi8oru8, cast them toi16. - (#156) Add
Method::lead_end(to complementMethod::lead_head). - (#156) Add
Mask::from_{bells,vec}andMask::bells.
Monument v0.11.0
Headline Features
- (#116) Much smarter way of determining default method balance. (Nerdy details: Method counts are
weighted by the square root of each method's lead length (so shorter methods won't need as many
rows), and will round 'outwards' for cases like cyclic spliced where a 'perfect' method balance
actually has a wide range of different counts). - (#121) Renamed
lead_locationtolabel(for brevity). - (#120) Allow
queue_limitandgraph_size_limitto be set in TOML files. - (#116) Prove which lengths and method counts are actually possible, and error if the two can't
match.
Smaller Changes
- (#122) Stop graph optimisation when all passes fail to make progress once (rather than waiting for
an entire run of passes to not make progress). - (#115) Demote 'default music' message from
WARNtoINFO. - (#112) Massively speed up falseness generation when using custom CHs in cyclic comps, by computing
all the false lead heads rather than computing falseness between all pairs of masks.
Bug Fixes
- (#124) Fix incorrect output for single-method cyclic comps.
Internal Improvements
Monument
- (#113) Remove unnecessary threading from the search code (which can currently only use one thread
anyway). - (#112) Refactor
FalsenessTable::newinto multiple helper functions - (#110) Exclusively use
{Total,PerPart}Lengthto refer to lengths (as opposed tousize), thus
allowing the compiler to spot when we mix them up. - (#109) Encapsulate all the part-head logic into
PartHeadGroup/PartHead/PhRotation.
BellFrame v0.10.0
Monument v0.10.0
Headline Features
-
(#105) Completely rewrite and simplify the graph building code. Lots of things relating to
course_headsand multi-parts should now Just Work™:- Incompatible course heads are no longer a thing. You can now do things like
course_heads = ["*78", "12345*"]and it will Just Work™. Previously this would error because12345867could be given two different course heads. course_headsalways Just Works™, even in e.g. cyclic multi-parts. Previously cyclic comps would simply ignorecourse_heads.- Specifying multiple start/end indices now Just Works™ in multi-parts - i.e. snap start/finishes are allowed, but Monument won't mix them or put an illegal splice over the part head. This would previously cause a crash (found by Jadd Virji - thanks!).
- Incompatible course heads are no longer a thing. You can now do things like
-
(#96) Add music presets for:
- Near misses (for any stage)
- CRUs (for >= Triples)
- 5678 combinations (for both Triples and Major)
Load them with, e.g.:
music = [ { preset = "5678 combinations" }, { preset = "near misses" }, { preset = "crus" }, ]
Smaller Features
- (#105) Add
start_rowandend_rowfor making compositions start/stop at a row other than rounds. Useful for using Monument to extend 720s to get QPs of Minor. - (#105) Remove
splice_style = "call locations"(which would allow splices only where a call could have been made). - (#105)
start_strokenow refers to the row afterstart_row(i.e. the first non-rounds row). - (#104) Fix column alignments for (a) negative scores and (b) long (i.e. at least 5-digit) lengths.
Bug Fixes
- (#105) Fix bug where Monument would, in obscure situations, produce false compositions (found by David Thomas - thanks!). Monument now expands the rows of each composition generated and explicitly checks for truth - so if falseness bugs do creep in, you'll know about it (and hopefully the large test suite will catch it before it reaches you).
Internal Improvements
Monument
- (#105) Remove
monument::Layoutand addMethods andCalls explicitly to aQuery. - (#104) Make all test cases deterministic by (a) rounding the composition scores and (b) making sure that all test cases are exhaustive searches (to negate Monument's non-deterministic search order).
BellFrame v0.9.0
- (#104) Implement
OrdforStroke. - (#104) Add
Mulimplementations for every combination of&Row/&RowBuf/RowBufversus anything from&Row/&RowBuf/RowBufor&Mask/Mask. - (#104) Fix bug in
Block::extend_range, where too many annotations would be copied. - (#104) Add new methods:
Row::copy_from: in-place write to an&mut Row(i.e. requiring the stages to match),
analogous to<[T]>::copy_from_slice.Block::with_leftover_row: create a newBlockwith only the specified leftover row.Block::leftover_row_mut: to mutably borrow the leftover row of aBlock.
- (#97) Enforce extra invariants for
music::Pattern(making it much more robust, at the cost of needing to handle some errors that should have been handled anyway). - (#97) Rename
music::Regextomusic::Pattern(it isn't anywhere near as powerful as true regexes). - (#96) Add
Stage::extent, which returns aSameStageVeccontaining every possibleRowof thatStagein an arbitrary order. - (#96) Allow addition/subtraction between
Stages andu8s with+/-, panicking on overflow or aStageof 0.checked_addandchecked_subare the non-panicking versions. - (#96) Add conversions from
Row/RowBuftoMaskandRegex(via theFromtrait)
Monument v0.9.0
Headline Features
- (#94) Replace
default_musicwithbase_music(to be consistent withbase_calls). - (#92) Print music as part of the composition summary.
Smaller Features
- (#95) Suggest using
{bob,single}s_only = trueif{single,bob}_weightis set to a large
negative value.{bob,single}s_onlyis faster than using{single,bob}_weight, but sometimes
both call types are required to bring a composition round with the right length so Monument
can't automatically set{bob,single}s_only. - (#92) Remove fixed tenors from part heads in summary (e.g.
1342567890ETis now be just1342). - (#91) Calls can now go from/to different lead labels. Set this with e.g.
lead_location = { from = "2nds", to = "HL" }. Useful for adding finer control over where
calls can be placed. - (#91) Allow multiple labels on the same row within a lead. Also reversed the syntax from e.g.
lead_locations = { 0 = "LE", 16 = "HL" }tolead_locations = { LE = 0, HL = 16 }. The same
label can be added to multiple rows likelead_locations = { SE = [3, 9] }(for Six-Ends in
Stedman).
Internal Improvements
Monument
- (#89) Refactor the search algorithm (splitting the node expansion from the best-first search code)
BellFrame v0.8.5
Monument v0.8.1
Headline Features
- (#82) Add
calling_bellparameter to override the bell used when determining calling positions
(a.k.a. the 'observation' bell). If unspecified, this defaults to the heaviest bell in the
stage. - (#81) Fall back on a default music profile if no music is specified.
default_music = falsewill
disable this. Now, Monument will produce good results even if you only specifylengthand
method.
Bug Fixes
- (#73)
splice_style = "calls"will no longer generate splices over part heads. - (#73)
splice_weightis now applied to splices over part heads. - (#73)
splice_style = "calls"now works for cyclic compositions.
Smaller Changes
- (#80) Add error for CHs that aren't in other parts (e.g. setting
course_heads = ["*78", "*7856"]andpart_head = "134265"now produces an error, because
*7856becomes*7865in even-numbered parts). - (#79) Generate a final 'search complete' progress update just after the search finishes.
- (#79) Print number of compositions generated in the progress line.
- (#77) When outputting compositions, tie-break equally musical compositions by their average
overall score per row. - (#71) Allow specifying an exact count with e.g.
count = 224rather than
count = { min = 224, max = 224 }.
Monument v0.7.0
Major Changes
- (#69) Allow weights on method splicing with
splice_weight(defaults to 0). - (#66) Allow method counts to be overridden per-method (by adding a
countparameter to methods). - (#67) Add error messages for giving the same debug/display name to multiple calls (specifically,
two calls at the same lead location but with different place notations). - (#70) New graph optimisation: remove links between mutually false chunks.
Internal Improvements
- (#64) Use
goldilocks-json-fmtto format the test result files.