Skip to content

Releases: kneasle/ringing

Monument v0.14.5

24 Feb 19:21
Compare
Choose a tag to compare

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

20 Oct 20:51
Compare
Choose a tag to compare

Patch release over v0.14.3, which fixes a massive performance regression caused by continually recalculating music for compositions.

Monument v0.14.3

19 Oct 18:41
Compare
Choose a tag to compare

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 largest Bell possible (i.e. the 254th)
  • (#221) Stop bell-path methods (e.g. Block::path_of) from returning Option. Instead, passing
    a Bell out of the Block's Stage will cause a panic.
  • (#221) Add Mask::contains, returning true if the Mask constrains that Bell.
  • (#321) Almost all operations will panic on Stage mismatch, rather than returning a
    Result<_, IncompatibleStages>.

Monument v0.13.4

04 Jan 01:06
Compare
Choose a tag to compare

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 with require_truth.
  • (#185) Rename ch_weights to course_weights, and course_heads to courses.

Internal Improvements

  • (#167) Remove dependence on serde from Monument's library. Now, all the handling of TOML files is in monument_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

21 Oct 19:58
Compare
Choose a tag to compare

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 to 90% 80% of
    available system memory.

Internal Improvements

  • (#165) Only require clippy lints on releases.
  • (#146) Merge fields of graph::build::MethodData into query::Method.
  • (#142) Implement builder API to make monument easier to use as a library
  • (#142) Make Query private and build Searches 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 the monument 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 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_bells to Mask::with_fixed_bells.
  • (#140) Don't return borrowed data in the error from MethodLib::get_by_title_with_suggestions.
  • (#156) Only implement Add/Sub for Bell with i16 (i.e. not u8 or i8). If you want to
    add/subtract Bells with i8 or u8, cast them to i16.
  • (#156) Add Method::lead_end (to complement Method::lead_head).
  • (#156) Add Mask::from_{bells,vec} and Mask::bells.

Monument v0.11.0

31 Jul 17:04
Compare
Choose a tag to compare

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 to label (for brevity).
  • (#120) Allow queue_limit and graph_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 to INFO.
  • (#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 to usize), 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

  • (#117) Rationalise the use of unsafe in bellframe.
  • (#115) Remove unnecessary unsafe in bellframe::music.
  • (#115) Fix integer underflow when computing internal runs.
  • (#115) Implement Ord for Mask
  • (#112) Rename Mask::combine to Mask::intersect

Monument v0.10.0

04 Jul 21:51
Compare
Choose a tag to compare

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 because 12345867 could be given two different course heads.
    • course_heads always Just Works™, even in e.g. cyclic multi-parts. Previously cyclic comps would simply ignore course_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!).
  • (#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 and end_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 after start_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 add Methods and Calls explicitly to a Query.
  • (#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 for Stroke.
  • (#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 new Block with only the specified leftover row.
    • Block::leftover_row_mut: to mutably borrow the leftover row of a Block.
  • (#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 to music::Pattern (it isn't anywhere near as powerful as true regexes).
  • (#96) Add Stage::extent, which returns a SameStageVec containing every possible Row of that Stage in an arbitrary order.
  • (#96) Allow addition/subtraction between Stages and u8s with +/-, panicking on overflow or a Stage of 0. checked_add and checked_sub are the non-panicking versions.
  • (#96) Add conversions from Row/RowBuf to Mask and Regex (via the From trait)

Monument v0.9.0

24 May 23:23
Compare
Choose a tag to compare

Headline Features

  • (#94) Replace default_music with base_music (to be consistent with base_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 just 1342).
  • (#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" } to lead_locations = { LE = 0, HL = 16 }. The same
    label can be added to multiple rows like lead_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

  • (#92) Give Regexes a specific Stage.
  • (#91) Allow multiple lead labels to be placed on the same row

Monument v0.8.1

02 May 15:32
Compare
Choose a tag to compare

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 specify length 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"] and part_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

28 Mar 14:48
Compare
Choose a tag to compare

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.