Recent Releases of pykp
pykp - 4.3.1
v4.3.1 (2025-02-12)
Bug Fixes
- fix: f-strings in py3.10/3.11 multi-line f-string.
Multi-line f-strings throw syntax errors prior to py3.12. (d11fe0b)
Build System
- build: support Python version 3.10, 3.11.
Installed tox to test for multiple Python versions." (793ffc2)
- Python
Published by github-actions[bot] about 1 year ago
pykp - 4.3.0
v4.3.0 (2025-02-11)
Features
- feat(solvers): add propagations to SolutionStatistics.
Added propagations filed to solution statistics, which is
populated for solvers that record propagations (so far only gecode)
and is otherwise None. (c96aef8)
- Python
Published by github-actions[bot] about 1 year ago
pykp - 4.2.0
v4.2.0 (2025-02-05)
Documentation
- docs: clarify phase transition doc. (
991f61b)
Features
- feat(knapsack): implement from_file() class method.
In order to load a knapsack from a JSON file, one had to provide a
path parameter to the init method. This commiut introduces a
`from_file()` class method, that makes it cleaner to load
instances from a file. (0f032ab)
Testing
- test: add test for knapsack.summary(). (
1e29bb8)
- Python
Published by github-actions[bot] about 1 year ago
pykp - 4.1.2
v4.1.2 (2025-02-04)
Bug Fixes
- fix(knapsack): summary incorrect dimensions.
Knapsack.summary() was raising an error due to incorrect dimensions
of data supplied to the Pandas DataFrame. (2ff8008)
Documentation
- docs: fix references to old import system. (
ae92f1c)
- Python
Published by github-actions[bot] about 1 year ago
pykp - 4.0.1
v4.0.1 (2025-01-21)
Bug Fixes
- fix(knapsack): less clunky saving/loading to .json.
The old method required item and capacity arguments to be
specified as None when initialising a Knapsack instance from
a config file. The new API makes all arguments None by default,
and then checks if either path or items and capacity are
specified in __init__. (96f5faa)
- Python
Published by github-actions[bot] about 1 year ago
pykp - 4.0.0
v4.0.0 (2025-01-17)
Breaking
- refactor(knapsack): rename plotterminalnodes_histogram.
Renamed pykp.knapsack.Knapsack.plot_termnal_nodes_histogram method
to plot_terminal_node_hist. Added cleaner example.
BREAKING CHANGE: Renamed plot_terminal_nodes_histogram method to
plot_terminal_node_hist. (512f9ae)
- feat(plot_graph): added colour-map and legend args.
Changed name from plot_network to plot_graph. Added optional
arguments for colour_map and show_legend.
BREAKING CHANGE: pykp.knapsack.Knapsack.plot_network method is
renamed to pykp.knapsack.Knapsack.plot_graph. (2aeb9c7)
- refactor: modular directory structure.
Migrated to a new directory structure that allows individual functions/classes to be located inside their own private modules.
Removed sphinx.ext.napoleon because it was causing unpredictable
conflicts with numpydoc.
Updated autosummary templates to match scipy style.
BREAKING CHANGE: namespaces have moved around, which will break
existing import statements. Item, Arrangement, Knapsack, and
Sampler are now all imported from the pykp.knapsack namespace. (031c0ad)
Chores
- chore(knapsack): improve str and repr. (
63f14e4)
Documentation
docs: numpdocuseplots = False. (
2783db4)docs: fix incorrect examples. (
4bcd5be)docs(Sampler): add example. (
301acfc)
Refactoring
- refactor: moved Sampler to pykp.sampling. (
e9c3661)
Unknown
- tests: update imports for pykp.sampling. (
535c577)
- Python
Published by github-actions[bot] about 1 year ago
pykp - 3.7.0
v3.7.0 (2025-01-16)
Bug Fixes
fix(knapsack): unable to parse non-list solution. (
e8ae313)fix(phase_transition): use time from solution.statistics. (
8565b91)fix: remove brute_force from solver list. (
59eb947)
Chores
- chore: clean up unused import. (
96012cb)
Features
feat: change mzn_gecode to generic minizinc call. (
b3d9989)feat: add solver
Solutionclass.
Add Solution class to provide consistent interface for solutions
returned by solvers.
Refactored pykp.Knapsack to make use of the new return types.
Also moved brute_force solver to own method, initialise_graph
which now populates the self.graph attribute along with the
orginal self.optimal_nodes, self.terminal_nodes,
self.feasible_nodes, self.nodes attributes. (99bdd15)
- Python
Published by github-actions[bot] about 1 year ago
pykp - 3.5.1
v3.5.1 (2025-01-14)
Bug Fixes
- fix: decision variant algorithm not pruning effectively.
Branch and bound decision variant algorithm was pruning based on
a stored incumbent value, which was incrementally updated with
each seen node. It is mor efficient to prune based on the target
value.
This issue was causing the solver to take the most
time to solve unsatisfiable instances. (d9d96ca)
- Python
Published by github-actions[bot] about 1 year ago
pykp - 3.5.0
v3.5.0 (2025-01-13)
Features
- feat(phase_transition): outcome argument only accepts str.
pykp.metrics.phase_transition accepts an outcome argument that is
one of "solvability", "time", or "both", and produces the
corresponding phase transition matrices. Updated docs to reflect
these changes. (11c2a35)
- Python
Published by github-actions[bot] about 1 year ago
pykp - 3.4.0
v3.4.0 (2025-01-13)
Documentation
- docs: fix incorrect int type hint. (
aa7efe2)
Features
- feat(phase_transition): allow time-based matrix.
Added an optional argument outcome, to specify whether the
returned phase transition matrix should be stated in terms of
solvability or time.
Integrate solvers._branch_and_bound_decision_variant() solver to
give relevant estimations of time, and faster compute performance. (f3b1051)
Performance Improvements
perf: add mzn decision variant solver. (
a93cfee)perf: add branch-and-bound decision solver. (
423fde4)
- Python
Published by github-actions[bot] about 1 year ago
pykp - 3.3.0
v3.3.0 (2025-01-13)
Features
- feat(sampler): make reproducible.
pykp.sampler.Sampler.sample() now accepts a seed argument which
ensures samples are reproducible. Stop storing already-bound
generator methods in the constructor. Instead, store the
distribution name and kwargs, which are initialised in a seperate
private method. This allows a new rng with a provided seed
to bne generated in teh sample method. (a051c54)
- Python
Published by github-actions[bot] about 1 year ago
pykp - 3.1.3
v3.1.3 (2025-01-12)
Bug Fixes
- fix(phase_transition): dimensions back to front.
The final phase_transition array was being reshaped in a manner
that was inconsistent with the way in which resolution was passed
to the function. The expected outcome should be to reshape the
phase transition in such a way that nc varies along the x-axis
(column-wise) and np along the y-axis (row-wise). (e8fbcfc)
- Python
Published by github-actions[bot] about 1 year ago
pykp - 3.1.0
v3.1.0 (2025-01-12)
Bug Fixes
fix: remove reference to missing .size attribute. (
a7f950d)fix(Knapsack.plot_network): fix incorrect default for
ax. (37b109f)fix: remove reference to missing .size attribute. (
528868c)fix: store optimal nodes as list not np.ndarray. (
dcff89f)fix(arrangement): internal state should be np.array. (
1b932b2)
Build System
build: add matplotlib to doc. (
e70c379)build: add venv* pattern. (
90d82be)build: add missing docs dependency. (
5572c4c)build: add numpy and tqdm to doc deps.
These packages are imported in pykp, and thus required to render
documentation. The previous solution was to use MagicMock to do
a mock import, but this messed with the rendering of type hints
in the documentation. Listing numpy and tqdm as 'doc' dependencies
rectifies this issue. (d836764)
Chores
chore: remove redundant requirements.txt. (
4c78cec)chore: clean up and comment sphinx conf. (
a03e88c)chore: remove test notebook. (
84b0ef8)
Code Style
Continuous Integration
ci: update doc requirements. (
be932c6)ci: docstring convention to numpy. (
311d158)ci: shorten workflow names. (
c92708a)ci: clearer workflow names. (
e9cf9a0)ci: prevent redundant workflow runs.
Lint and test workflows were running two times.
(1) When a pull request was submitted, to verify that it was okay
to merge into main.
(2) After a pull request was merged, as a check before building
and releasing the next version of the package on PyPi.
The second run is unnecessary, as (1) ensures that (2) will always
pass. This commit removes (2). (b30f529)
- ci: start workflows on pull request. (
d5bcb22)
Documentation
docs: add terminal nodes plot. (
827e803)docs(tests): docstrings to numpydoc. (
6eecbcc)docs(pykp): docstrings to numpydoc. (
298a945)docs(solvers): docstrings to numpydoc. (
008eafa)docs(sampler): docstrings to numpydoc. (
312dfb1)docs: add phase transition plot. (
5c5a8df)docs(metrics): docstrings to numpydoc. (
e0122cf)docs(knapsack): docstrings to numpydoc. (
dc4353e)docs(item): docstrings to numpydoc. (
60179a6)docs(arrangement): docstrings to numpydoc. (
9c9f50b)docs: update templates to match scipy style. (
39d5496)docs: set groupwise autodoc. (
afd68d3)docs(knapsack): minor improvements for clarity. (
45a4801)docs(sampler): move init doc to class level. (
6fc9a4d)docs(item): fix style errors. (
da3a12a)docs(knapsack): add property documentation. (
4c2b2c6)docs: minor improvements for clarity. (
0e5fbc9)docs: clarify solver documentation. (
c861f24)docs(sahni-k): fix indendtation. (
e3b34aa)docs: add complexity metrics to quick-start. (
100a244)docs: remove references to missing images. (
7da8d2f)docs: update quick-start guide. (
5c1d027)docs: change order of nav items. (
5f319d8)docs: update contributer guide. (
7e404e3)
Features
- feat(solvers): add brute force solver.
Add brute force solver to compute optimal, terminal, feasible, and
all possible nodes in the graph of a provided KP instance. Changed
the name of _is_terminal_node() method used by branch and bound
algorithm to _is_leaf_node(), to avoid confusion with the
is_subset_terminal() method used by the new brute force
algorithm. (8918eb1)
- feat(branchandbound): add n-best functionality.
pykp.solvers.branch_and_bound now accepts an optional argument
n, which specifies the number of 'best' solutions to return.
The n argument is on solution values, not the number of
solutions. If n is set to 1, the solver returns all solutions
that achieve the distinct optimal value. More than one solution
may be returned if there are multiple solutions with the same
optimal value. Similarly, if n is set to n, the solver returns
all solutions that achieve the n-highest possible values. (574b509)
Refactoring
refactor(knapsack): don't save optimal to config. (
464bce4)refactor(arrangement): add @property decorators. (
b63f6b5)refactor(knapsack): implement brute_force solver.
Allow "brute_force" to specified as the method argument to
Knapsack.solve(). Remove methods in Knapsack that are now
redundant with the addition of a seperate brute-force solver. (fa81822)
- refactor(solvers): move pacakge to module.
Refactored pykp.solvers pacakage to pykp.solvers module. This
makes auto generated documentation appear in a more sensible way.
Under the previous approach, documentation for functions inside
modules in the pykp.solvers package would not render, because these
functions shared the same name as the module. Including all
functions inside a single solvers.py module rectifies this problem. (f425dc4)
- refactor: move metrics package to module. (
47e2686)
Testing
- test: ammend test for list solution type. (
318f37d)
Unknown
- tests(knapsack): account for new state setter. (
4c144e8)
- Python
Published by github-actions[bot] about 1 year ago
pykp - 3.0.0
v3.0.0 (2025-01-10)
Breaking
- refactor(sampler): remove
*_rangeargs.
Removed weight_range, solution_value_range and density_range
arguments from Sampler(). Sampler() now works by sampling
weights and values based on a supplied distribution, which is
unifrom (0,1) by default.
BREAKING CHANGE: weight_range, solution_value_range and
density_range arguments to pykp.Sampler() no longer exist. (358c3a6)
Bug Fixes
- fix(mzn_geocode): nest asynchronous loops.
MiniZinc raised an error when being called from a Jupyter notebook because both MiniZinc's solve() method and Jupyter run their own conflicting async loop. The issue is fixed by patching asyncio using the nested_asyncio package.
See https://github.com/MiniZinc/minizinc-python/issues/38. (3a94ea4)
fix(sampler): don't convert capacity to int. (
a182e16)fix: remove unexpected argument from .solve().
The old .solve() method accepted an argument for
solve_second_best. This was removed in 2.0 with the addition of
a seperate package for solvers. (5754958)
Build System
Chores
- chore: fix tab spacing. (
28f511b)
Continuous Integration
- ci: create release workflow.
Refined version of the previous continuous-delivery workflow.
Lints and tests before publishing release on pushes to the main
branch. (4b1b9bc)
ci(lint): make callable. (
bc69b09)ci: add lint with Ruff workflow. (
4a97d52)ci: add test with pytest workflow. (
1b78077)ci: point to correct requirements. (
c0b90df)ci: generate requirements from pyproject.toml
Add script to extract dependencies from pyproject.toml into
separate files. (a1f7555)
Documentation
docs: remove 'await' from solve() calls. (
a19520d)docs: shorten phrasing.
Global find and replace 'This module provides' -> 'Provides'. (7ce509e)
docs(tests): add docstring for test. (
4ddeb4d)docs: add favicons. Fix wildcard warnings. (
7a5d4df)docs: add 'edit page' button. (
6125aae)docs: add PyPi icon. (
242ff80)docs: show primary sidebar on reference. (
7e80eec)docs: add logo. (
28533b7)docs: add missing imports. (
4e9f272)
Testing
- test: remove solver.mzn_geocode tests.
Minizinc tests only work if the solver is installed on the machine.
It doesn't make sense to call these tests regularly. (dcfaf17)
test: wrap assert in (
c0dd273)test: remove incorrect int conversion. (
3a1fcc8)test: write tests for pykp.solvers. (
2468af1)test: write tests for pykp.sampler. (
f45c8bc)test: write tests for pykp.knapsack. (
c9d3be0)
Unknown
- Apply ruff formatting. (
77ea023)
- Python
Published by github-actions[bot] about 1 year ago
pykp - 2.1.1
v2.1.1 (2025-01-07)
Bug Fixes
- fix: incorrect docs path. (
80d357f)
Chores
chore: remove underscores from filename. (
fb687cd)chore: remove Solver ABC. (
0821748)chore: remove underscores from filename. (
c982c2d)chore: remove Solver ABC. (
99f57d6)
Documentation
docs: add missing import. (
c6b1f5c)docs: add missing import. (
f7049af)docs: integrate pydata and autosummary.
Integrated pydata theme
Integrated sphinx.ext.autosummary to recursively document all modules in pykp
Merge pull request #4 from HRSAndrabi/docs/clean-up (1657d5b)
docs(solvers): move examples to module level. (
59f9cdf)docs(sampler): removed unintentional linebreaks. (
8627520)docs: integrate pydata docs and autosummary.
Integrated pydata theme and autosummary to recursively generate
documentation for all modules in pykp. (0505a70)
- docs(solvers): move examples to module level. (
9a183c4)
Refactoring
refactor(phase_transition): use refactored solvers. (
89513be)refactor(mzn_gecode): make functional. (
6e1fe82)refactor(greedy): make functional. (
adbc5a0)refactor(branchandbound): make functional. (
e2009ff)refactor(phase_transition): use refactored solvers. (
156f3ec)refactor(mzn_gecode): make functional. (
f987124)refactor(greedy): make functional. (
d3c14e9)refactor(branchandbound): make functional. (
3af1327)
Unknown
- Merge branch 'main' into docs/clean-up (
10f11ce)
- Python
Published by github-actions[bot] about 1 year ago
pykp - 2.1.0
v2.1.0 (2025-01-05)
Bug Fixes
- fix(mzn_geocode): change input type to allow floats.
Previous implementation only accepted knapsack instances with
integer weights/values/capacity. Now accepts floats. (9728808)
Documentation
- docs(phase_transition): add module docs. (
1da8756)
Features
feat(phase_transition): add save method. (
04d46b4)feat(metrics): add phase transition metric. (
8dc3f19)feat(metrics): add metrics package, add Sahni-k metric. (
bc0e725)
Refactoring
refactor(knapsack): remove knapsack.calculatesahnik(). (
a584dba)refactor(metrics.sahni_k): make independent of Knapsack class. (
f3424aa)refactor(metrics.sahni_k): take capacity as input.
Take capacity as input instead of the whole knapsack problem
instances. This makes calls to the metric cleaner. (9add168)
- Python
Published by github-actions[bot] about 1 year ago
pykp - 2.0.0
v2.0.0 (2025-01-05)
Breaking
- feat(solvers): add minizinc gecode solver.
Add minizinc gecode solver class.
BREAKING CHANGE: knapsack.solve() is now an async method in order
to inferface with minizinc. (3b4027b)
- refactor(knapsack.solve()): clean up branch and bound.
Move branch and bound solver to own module. Make use of queue.PriorityQueue. Add eq and hash methods to Arrangement class.
BREAKING CHANGE: new branch and bound solver introduces a new
argument to knapsack.solve() method. This method should now be
called with a method parameter that specifies the solver to use. (94cf4e6)
Bug Fixes
- fix(solvers): make return types consistent with docs.
Branch and bound solver should return a numpy array of optimal
solutions, but was returning a list instead. Similarly, minizinc
gecode solver was returning an nparray, but should instead return
a single arrangement since it is not robust to multiple solutions. (954e3e6)
fix(item): allow id-based hashing. (
056a10e)fix(knapsack): density sort items on initialisation.
Branch and bound requires items to be density sorted. This created
a discrepancy between the order of items in the KP instance, and
the order of the items in the optimal arangement returned by the
branch and bound solver (which is assuming items are density
sorted. (14e0260)
- fix(branchandbound): return list instead of set.
Optimal nodes were converted to a set to remove duplicates, but
this creates issues with indexing through the optimal nodes array
stored in the Knapsack instances. Now converts to a set and then a
list. (065ce39)
Documentation
docs(solvers): update documentation. (
4bb25ac)docs(knapsack): simplify knapsack.summary() docstring. (
fe0a0d6)
Features
- feat: add greedy solver. (
a9b4213)
Refactoring
refactor(solvers): implement solver abstract class. (
782e9b4)refactor(item): convert to dataclass. (
bee732f)
Unknown
- Merge pull request #1 from HRSAndrabi/chore/clean-up-branch-and-bound
Chore/clean up branch and bound
- Create module for solvers
- Convert Item to data class
- Add minizinc geocode solver
- Add greedy solver
- Clean up branch and bound and refactor to own solver (
ac89a18)
- Python
Published by github-actions[bot] about 1 year ago
pykp - 1.2.0
v1.2.0 (2024-11-18)
Bug Fixes
- fix(knapsack): fix incorrectly suppressed deprecation warnings. (
ca56656)
Documentation
- docs: remove v prefix from version numbers. (
c894c22)
Features
- feat(knapsack.plot_network): add fig/ax optional arguments. (
8f74c81)
Refactoring
- refactor(knapsack): remove unused variables. (
d1d13ec)
- Python
Published by github-actions[bot] over 1 year ago
pykp - 1.1.0
v1.1.0 (2024-11-13)
Bug Fixes
- fix(knapsack): check relevant nodes are solved before plotting.
Previous implementation would try to produce plots even if the relevant nodes had not been populated. This fix populates the nodes (if they don't already exist) and then produces the plot. (5f16162)
- fix(knapsack): reset node attributes when solving all nodes.
Fixes an issue where nodes were being duplicated when calling self.solveallnodes() multiple times in a row, or after self.solve(). (bfc7777)
- fix(knapsack): removes scienceplots styling. (
4851769)
Build System
build: change version tag format to remove v prefix. (
3f220a0)build: delete unused workflow. (
1e085ed)
Chores
- chore(knapsack): deletes unused variables. (
9331641)
Documentation
- docs: import networkx. (
eb634dc)
Features
- feat(knapsack): adds method for plotting network of knapsack instance. (
7b4b7ea)
Performance Improvements
- perf(knapsack): move terminal/feasible node computation to solveallnodes().
Moved terminal and feasible node computation to solve_all_nodes(). Better for performance, as both methods applied brute-force and this now only happens once. Added deprecation warnings for solve_terminal_nodes() and solve_feasible_nodes(). (b590ef3)
Testing
- test(sampler): add tolerance for range checks.
Samples sometimes violated solution value/density ranges due to whole number rounding, causing tests to fail. This commit adds a tolerance parameter. Tests now ensure that the solution value/density is within the specified range + tolerance. (eb9b0ec)
test(knapsack): fix typo. (
d89cf42)test(knapsack): remove np.array from initialisation. (
7e2af96)test(knapsack): check value of sahni-k in test. (
b40fe8d)test(knapsack): fixed typo. (
4b8e6c9)test: added docstrings. (
5f28e89)
- Python
Published by github-actions[bot] over 1 year ago
pykp - 1.0.1
1.0.1 (2024-11-12)
Bug Fixes
- fix(knapsack): don't solve second-best solution by default.
Fixed default argument solve_second_best == False to be consistent with the documentation. Refactored summary() to not try to print out second-best solution if it hasn't been generated. (94f72a2)
Build System
build: update pyproject.toml for PSR. (
648f124)build: use latest version of pypi-publish. (
ff651a0)build: add workflow for PSR.
Added workflow to bump version and create release on commit to main branch. (e6522ff)
- build: add github-action to publish package. (
85293f2)
Unknown
Relocate setup.py to pyproject.toml. (
b611cc6)Add pykp to requirements.txt. (
22c2703)Fix path to allow autodoc to work. (
6d698af)Fix typos. (
2417fcf)Fix conf file path. (
7208707)Populate .readthedocs.yaml. (
9f01ae4)Add initial docs. (
3928deb)Update doc-strings to confirm with Napolean (Google). (
4a6e6a5)Make docstrings comply to Google styleguide. (
faea1bb)Update readme.md. (
7b8ff6c)Fix typo. (
0083dc0)Add orcid. (
1911531)Update citation DOI. (
f4f847f)Increment version 1.0.0. Add CITATION.cff. (
0ae6939)Increment version. (
b8e4934)Remove unused class. (
f92d66d)Add docstring to init.py. (
262730d)Add license. (
0ddebab)Add docstring for method. (
ef92f00)Update classifiers. (
a0963f0)Increment version. (
4b297b6)Change items to ndarray where list is given. (
41a65de)Increment version. (
da7bf30)Delete test notebook. (
7e31938)Update README.md. (
79a2126)Removed unused import. (
46c5230)Ensure package directory is correctly recognised. (
f68cc71)Clean up knapsack and sampler classes.
Removed redundant arguments.
Removed redundant imports. (
eb18095)Remove
optimise_solution_delta().
Removed algorithm to increase difference between optimal and second-best solution because it will probably never be used. (2f6e51f)
- Removed weight range from sampler. Wrote tests.
Removed weight_range parameter from sampler. Sampler now samples weights from U[100, 1000], and then scales to the drawn solution value. Implemented basic tests to cover sampler. (df2fa72)
- Initial commit.
Intial commit to port over from KME24 project. (f4e8769)
- Python
Published by github-actions[bot] over 1 year ago
pykp - 1.1.0
1.1.0 (2024-11-13)
Bug Fixes
- fix(knapsack): check relevant nodes are solved before plotting.
Previous implementation would try to produce plots even if the relevant nodes had not been populated. This fix populates the nodes (if they don't already exist) and then produces the plot. (5f16162)
- fix(knapsack): reset node attributes when solving all nodes.
Fixes an issue where nodes were being duplicated when calling self.solveallnodes() multiple times in a row, or after self.solve(). (bfc7777)
- fix(knapsack): removes scienceplots styling. (
4851769)
Build System
- build: delete unused workflow. (
1e085ed)
Chores
- chore(knapsack): deletes unused variables. (
9331641)
Features
- feat(knapsack): adds method for plotting network of knapsack instance. (
7b4b7ea)
Performance Improvements
- perf(knapsack): move terminal/feasible node computation to solveallnodes().
Moved terminal and feasible node computation to solve_all_nodes(). Better for performance, as both methods applied brute-force and this now only happens once. Added deprecation warnings for solve_terminal_nodes() and solve_feasible_nodes(). (b590ef3)
Testing
- test(sampler): add tolerance for range checks.
Samples sometimes violated solution value/density ranges due to whole number rounding, causing tests to fail. This commit adds a tolerance parameter. Tests now ensure that the solution value/density is within the specified range + tolerance. (eb9b0ec)
test(knapsack): fix typo. (
d89cf42)test(knapsack): remove np.array from initialisation. (
7e2af96)test(knapsack): check value of sahni-k in test. (
b40fe8d)test(knapsack): fixed typo. (
4b8e6c9)test: added docstrings. (
5f28e89)
- Python
Published by github-actions[bot] over 1 year ago
pykp - 1.0.1
1.0.1 (2024-11-12)
Bug Fixes
- fix(knapsack): don't solve second-best solution by default.
Fixed default argument solve_second_best == False to be consistent with the documentation. Refactored summary() to not try to print out second-best solution if it hasn't been generated. (94f72a2)
Build System
build: update pyproject.toml for PSR. (
648f124)build: use latest version of pypi-publish. (
ff651a0)build: add workflow for PSR.
Added workflow to bump version and create release on commit to main branch. (e6522ff)
- build: add github-action to publish package. (
85293f2)
Unknown
- Relocate setup.py to pyproject.toml. (
b611cc6)
- Python
Published by github-actions[bot] over 1 year ago