All scripts are now contained in a package named "bonemarketsolver".
The command-line interface has been moved to __main__.py.
The solver script has been moved to solve.py.
Relative module imports are now used where appropriate.
The invocation method of the CLI has changed: instead of running Python
itself, you can now use "pipenv run bone_market_solver".
The README has been updated to reflect the new usage method.
Spelling out what is public in each module helps to futureproof the
project, and allows the main script to import the relevant names without
contravening best practices.
Buyer was missing from the main script's interface, despite being used
to call Solve. This has been fixed.
In order to move remaining enumerations into other files, dependencies
in this file need to be moved as well.
The folder is named "objects" because "types" is taken as a name.
The curses module is not included with Python on Windows, and must be
installed as a package. The Pipfile has been updated to do this when run
on Windows.
In the absence of provided values, the script will use the "normal"
values for everything. While this may produce suboptimal results, it
could prove helpful for creating worst-case scenario designs.
All arguments are now enclosed in a single argument group to improve the
generated help text.
Due to how argparse works, this means that the script now allows
redundant command-line arguments like specifying the occasional buyer
and explicit buyers.
The grammar of the help text has been made slightly more consistent.
'-v' and '--verbose' no longer accept an argument, optional or
otherwise. Instead, they simply act as a flag.
This dramatically simplifies the help text and implementation of the
flags.
Declarations that require a specific range of torso style now use one
constraint to model that, rather than two.
Inconsistent whitespace has been cleaned up.
Skipping tails is only possible if there are tails to skip.
Rather than laboriously replicating every fascination the Trifling
Diplomat has, the script now exploits the consistent member names to
generate the list automatically.
This should not have any effect on usage, but will ease future
maintainance.
This buyer actually changes based on a world quality. As such, it has
been implemented in a similar fashion to Occasional Buyer.
The scaling for this buyer's difficulty level has not been established
at the time of this writing, so it is being treated as 0.
The script now uses dictionary unpacking to pass arguments, rather than
explicitly listing each one.
The parser now suppresses missing parameters by default. This means that
the default values of the Solve function can be taken advantage, rather
than having to repeat them for the parser's sake.
Certain declarations now have their value boosted by 15% during
Zoological Mania, rather than just 10%.
The list of declarations is currently hardcoded, and may need to be
updated in the future.
A docstring has been added describing the module's purpose.
__all__ has been added. It is limited to the declarations needed to use
Solve().
The author's name has been added.
Unlike comments, docstrings support runtime introspection and other
features.
The docstrings are arguably a bit sparse, but this is sufficient for the
time being.