Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Todo list #46

Open
kneasle opened this issue Feb 14, 2022 · 0 comments
Open

Todo list #46

kneasle opened this issue Feb 14, 2022 · 0 comments

Comments

@kneasle
Copy link
Owner

kneasle commented Feb 14, 2022

Monument (CLI/lib)

Bugs

  • In music patterns, count and count_each cause a todo!() 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} or 1342, 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 and singles_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 to courses and ch_weights to course_weights
  • Switch allow_false to require_truth
  • Remove call.debug_symbol and auto-generate it for bobs
  • Rename lead_location(s) to lead_label(s) or just label(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> and Count<MethodIdx> to prevent mixing of counts of method rows/music types)
  • Make OptRange generic
  • Identify Chunks by their range rather than their head?
  • Rewrite graph generation:
    • Remove Layout, and generate a Graph directly from a Query
    • 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
  • Add abstraction for PartHeadGroups
  • Exclusively use {PerPart,Total}Length (i.e. impl Add/Mul<usize>)
  • Explicit memory limit (Add explicit memory limit #20, blocked on having a benchmark suite/runner)
  • Remove serde dependency from monument/lib?
  • Rename bellframe::Regex to bellframe::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
  • Using method_count with only one method? This may be useful, and will produce explicitly errors rather than silently running for ages on an impossible task.
  • 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 Blocks or Rows).
    • Implement jump changes
  • Make Row::closure{,_from_rounds} return an Iterator rather than a Vec
  • 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 Regexs a Stage
    • Enforce Regex invariants
  • Switch to making Bell/Stage/etc. be newtypes over u8 (reducing memory usage, improving cache performance, potential for SIMD)
  • Remove type Block = AnnotBlock<()> and rename AnnotBlock to Block
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant