-
Notifications
You must be signed in to change notification settings - Fork 3
Open
Description
Monument (CLI/lib)
Bugs
- In music patterns,
count
andcount_each
cause atodo!()
panic (found by @simon-bond). - When deduplicating links, always choose the one with the highest score (IIRC Monument currently chooses non-deterministically)
- Prevent user from inputting reversed ranges (e.g.
{ min = 1250, max = 1200 }
) - Non-duffers and multi-parts play really badly together
- Contiguous duffers don't work over the part head
- Contiguous duffer distances need to be computed for each part
-
splice_style = "calls"
not working for lead-wise comps -
splice_style = "calls"
still generating splices over part-heads - Count method splices over part-heads
- Occasional false comps (Occasional false comps #72)
- Rounds and backrounds count as
n
-bell runs from both front and back (and therefore get double counted). Considered not a bug (but a feature 😄!) - Make multiple start/end locations work with multi-parts (currently crashes)
Features
- Proper support for positional calls
- Allow specifying method ranges by percentage of length range
- Mixed stage splicing
- Uneven but still group multi-parts (e.g.
12{34,43}{56,65}
or1342, 132
) - Print stats on a fixed time interval, rather than every 100K iterations
- Better shorthand generation
- Add weights to repeating the same place bell multiple times
- Print warnings again after all compositions
- Specify start strokes for each start index individually
- Allow graph size limit to be set in the TOML files (because only specific files will require a larger size limit, and it seems dumb to only be able to set it as a CLI arg)
- Smarter algorithm for computing method balance
- Sort comps by absolute music?
- Add
bobs_only
andsingles_only
- Calculate/require ATW
- Print final comp list even for ctrl-C
- Limit on graph size
- Default music scoring
- Make
calling_bell
a global option - Add weights to changes of method
- Add column headers for the composition output
- Display music breakdown in comp output
- Music type presets for (e.g.
music = [{ preset = "near misses" }]
):- 5678 combinations
- Near misses
- CRUs
UX
- Show maxest
max len
value reached if a run fails. - Improve docs
- Host them as a proper site
- Add dedicated examples
- Add runnable/testable examples for each parameter
- Split parameter reference into its own page
- Rename
course_heads
tocourses
andch_weights
tocourse_weights
- Switch
allow_false
torequire_truth
- Remove
call.debug_symbol
and auto-generate it for bobs - Rename
lead_location(s)
tolead_label(s)
or justlabel(s)
- Print header line every 50 compositions
Optimisation
- Determine which ordering of successor links produces the best comps (currently they're assigned non-deterministically based on the order of links in a
HashMap
). - Run graph optimisation passes until the last pass that reduced graph size is run again (instead of waiting for a full round of optimisations)
- For multiparts, remove graph any start/ends which don't share a
RowIdx
with a corresponding end/start.
Refactoring
- Make
Count
take an index type parameter (i.e.Count<MusicTypeIdx>
andCount<MethodIdx>
to prevent mixing of counts of method rows/music types) - Make
OptRange
generic - Identify
Chunk
s by their range rather than their head? - Rewrite graph generation:
- Remove
Layout
, and generate aGraph
directly from aQuery
- Remove the distinction between lead- and course-wise compositions
- Allow CHs to be specified for lead-wise compositions
- Remove the CH incompatibility check, and have chunks labelled by the first matching CH in the list
- Make all ends 0-length. I.e. 0-length end chunks are no longer a special case
- Remove
- Add abstraction for
PartHeadGroup
s - Exclusively use
{PerPart,Total}Length
(i.e. implAdd
/Mul<usize>
) - Explicit memory limit (Add explicit memory limit #20,
blocked on having a benchmark suite/runner) - Remove
serde
dependency frommonument/lib
? - Rename
bellframe::Regex
tobellframe::Pattern
Warnings/suggestions:
- Loading an existing method by place notation
- Course heads which are unreachable/never appear in the graph
- Add warning that Grandsire and Stedman won't work very well
- Recommend
{bobs,singles}_only
if user gives massive negative weight to either of them -
UsingThis may be useful, and will produce explicitly errors rather than silently running for ages on an impossible task.method_count
with only one method? -
Suggest compatible course heads for resolvable conflicts.Incompatible course heads no longer cause an error
Errors:
- Unreachable part heads (e.g. out-of-course PHs in bobs-only comps)
- Duplicate methods
- Explicit error when no comps are possible because the graph is empty
- Add check & error for setting CH masks that aren't preserved by the part heads
- Add error for duplicate call names
- Better messages
- Statically prove when lengths are impossible (e.g. asking for a 5080 of whole-course Royal)
- Statically prove which method counts are actually possible
- Clearly impossible method bounds (e.g. where the total max method < min row count, and vice versa)
Graph optimisations
- Merge nodes with no splice which must be adjacent
- Remove links between mutually false nodes
- Remove links between chunks which contribute too many method counts (also will remove any chunks with too much method count by disconnecting them from the rest of the graph)
- Make the point of graph optimisation to minimise
(#nodes, #links, Reverse(#required))
Testing
- Run examples in the guide as integration tests
- Remove ANSI escape codes from error messages so (a) the tests work on Windows and (b) the error message diffs actually render correctly
- Make all tests deterministic
- Make test harness understand:
- Missing tests
- Moved tests
- Create benchmark suite and runner
BellFrame
- Remove dedicated place notation types (using them only for conversions to/from
Block
s orRow
s).- Implement jump changes
- Make
Row::closure{,_from_rounds}
return anIterator
rather than aVec
- Full docs/examples coverage
- Method library:
- Split into its own crate?
- Link a copy of the CC library into the binary, so internet access isn't required on first startup
- Use better compression/a binary format for storing the methods
- Fix unsoundness issues:
- Enforce
Mask
invariants - Give
Regex
s aStage
- Enforce
Regex
invariants
- Enforce
- Switch to making
Bell
/Stage
/etc. be newtypes overu8
(reducing memory usage, improving cache performance, potential for SIMD) - Remove
type Block = AnnotBlock<()>
and renameAnnotBlock
toBlock
Metadata
Metadata
Assignees
Labels
No labels