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_weight
parameter. - (#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_atw
option, 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-release
is 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.md
to 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
Parameters
used to generate that composition.
Bellframe v0.12.0
- (#221) Add
Bell::MAX
, which returns the largestBell
possible (i.e. the 254th) - (#221) Stop bell-path methods (e.g.
Block::path_of
) from returningOption
. Instead, passing
aBell
out of theBlock
'sStage
will cause a panic. - (#221) Add
Mask::contains
, returningtrue
if theMask
constrains thatBell
. - (#321) Almost all operations will panic on
Stage
mismatch, rather than returning a
Result<_, IncompatibleStages>
.
Monument v0.13.4
Headline Features
- (#201) Print an extra header line every 50 compositions.
- (#200) Remove
debug_symbol
and calculate it automatically for bobs. - (#200) Replace
allow_false
withrequire_truth
. - (#185) Rename
ch_weights
tocourse_weights
, andcourse_heads
tocourses
.
Internal Improvements
- (#167) Remove dependence on
serde
from 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
stdout
output, 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-limit
or-M
, defaults to90%80% of
available system memory.
Internal Improvements
- (#165) Only require clippy lints on releases.
- (#146) Merge fields of
graph::build::MethodData
intoquery::Method
. - (#142) Implement builder API to make
monument
easier to use as a library - (#142) Make
Query
private and buildSearch
es directly. - (#140) Rename some fields of
Query
(which, after #138, are no longer exposed externally) - (#138) Heavily clean up the API of the
monument
library. 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 themonument
library 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
Chunk
s 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_bells
toMask::with_fixed_bells
. - (#140) Don't return borrowed data in the error from
MethodLib::get_by_title_with_suggestions
. - (#156) Only implement
Add
/Sub
forBell
withi16
(i.e. notu8
ori8
). If you want to
add/subtractBell
s withi8
oru8
, 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_location
tolabel
(for brevity). - (#120) Allow
queue_limit
andgraph_size_limit
to 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
WARN
toINFO
. - (#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::new
into multiple helper functions - (#110) Exclusively use
{Total,PerPart}Length
to 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_heads
and 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 because12345867
could be given two different course heads. course_heads
always 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_row
andend_row
for 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_stroke
now 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::Layout
and addMethod
s andCall
s 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
Ord
forStroke
. - (#104) Add
Mul
implementations for every combination of&Row
/&RowBuf
/RowBuf
versus anything from&Row
/&RowBuf
/RowBuf
or&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 newBlock
with 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::Regex
tomusic::Pattern
(it isn't anywhere near as powerful as true regexes). - (#96) Add
Stage::extent
, which returns aSameStageVec
containing every possibleRow
of thatStage
in an arbitrary order. - (#96) Allow addition/subtraction between
Stage
s andu8
s with+
/-
, panicking on overflow or aStage
of 0.checked_add
andchecked_sub
are the non-panicking versions. - (#96) Add conversions from
Row
/RowBuf
toMask
andRegex
(via theFrom
trait)
Monument v0.9.0
Headline Features
- (#94) Replace
default_music
withbase_music
(to be consistent withbase_calls
). - (#92) Print music as part of the composition summary.
Smaller Features
- (#95) Suggest using
{bob,single}s_only = true
if{single,bob}_weight
is set to a large
negative value.{bob,single}s_only
is 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.
1342567890ET
is 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_bell
parameter 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 = false
will
disable this. Now, Monument will produce good results even if you only specifylength
and
method
.
Bug Fixes
- (#73)
splice_style = "calls"
will no longer generate splices over part heads. - (#73)
splice_weight
is 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
*7856
becomes*7865
in 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 = 224
rather 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
count
parameter 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-fmt
to format the test result files.