tag:github.com,2008:https://github.com/wkschwartz/pigosat/releases Release notes from pigosat 2017-07-31T18:10:21Z tag:github.com,2008:Repository/15954402/v1.0.0 2017-07-31T18:24:59Z v1.0.0 <p>This is a feature-complete version 1.0 and the API is now stable.</p> <p>There have been no major changes since <a href="https://github.com/wkschwartz/pigosat/releases/tag/v1.0.0b">the beta release</a>.</p> <h2>Minor backward incompatible change</h2> <ul> <li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="213374057" data-permission-text="Title is private" data-url="https://github.com/wkschwartz/pigosat/issues/30" data-hovercard-type="issue" data-hovercard-url="/wkschwartz/pigosat/issues/30/hovercard" href="https://github.com/wkschwartz/pigosat/issues/30">#30</a>: Removed the version-number type and replaced it with simple string.</li> </ul> <h3>Updating client code</h3> <p><code>pigosat.Version</code> is now a constant string. You can parse it with a library such as <a href="https://github.com/Masterminds/semver">semver</a>.</p> <h2>Bug fix</h2> <ul> <li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="208502306" data-permission-text="Title is private" data-url="https://github.com/wkschwartz/pigosat/issues/29" data-hovercard-type="issue" data-hovercard-url="/wkschwartz/pigosat/issues/29/hovercard" href="https://github.com/wkschwartz/pigosat/issues/29">#29</a>: Fixed a benign data race when writing traces.</li> </ul> <h2>Upgrade</h2> <ul> <li>Implemented continuous integration testing and test-coverage reporting and added the corresponding badges to README.</li> </ul> wkschwartz tag:github.com,2008:Repository/15954402/v1.0.0b 2017-01-12T23:58:46Z v1.0.0b <h1>v1.0 <em>beta</em></h1> <p>This is hopefully a feature-complete version 1.0. Ideally PiGoSAT's API will now be stable, and I promise it will be once it's out of beta. It will live in beta for awhile until I get some feedback or I get tired of it being in beta.</p> <p>Special thanks to <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/justinfx/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/justinfx">@justinfx</a> for all his help.</p> <h2>Add support for</h2> <ul> <li>Writing traces <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="58862715" data-permission-text="Title is private" data-url="https://github.com/wkschwartz/pigosat/issues/13" data-hovercard-type="pull_request" data-hovercard-url="/wkschwartz/pigosat/pull/13/hovercard" href="https://github.com/wkschwartz/pigosat/pull/13">#13</a> (thanks to <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/justinfx/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/justinfx">@justinfx</a>)</li> <li>Making and analyzing assumptions <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="58488961" data-permission-text="Title is private" data-url="https://github.com/wkschwartz/pigosat/issues/12" data-hovercard-type="pull_request" data-hovercard-url="/wkschwartz/pigosat/pull/12/hovercard" href="https://github.com/wkschwartz/pigosat/pull/12">#12</a> (thanks to <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/justinfx/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/justinfx">@justinfx</a>)</li> <li>Deleting <code>Pigosat</code> objects manually <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="179267787" data-permission-text="Title is private" data-url="https://github.com/wkschwartz/pigosat/issues/18" data-hovercard-type="issue" data-hovercard-url="/wkschwartz/pigosat/issues/18/hovercard" href="https://github.com/wkschwartz/pigosat/issues/18">#18</a></li> </ul> <h2>Backward incompatible changes</h2> <ul> <li>Renamed <code>AddClauses</code> to <code>Add</code> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="198878359" data-permission-text="Title is private" data-url="https://github.com/wkschwartz/pigosat/issues/28" data-hovercard-type="issue" data-hovercard-url="/wkschwartz/pigosat/issues/28/hovercard" href="https://github.com/wkschwartz/pigosat/issues/28">#28</a></li> <li>Switched order of <code>Solve</code>'s return values <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="57759102" data-permission-text="Title is private" data-url="https://github.com/wkschwartz/pigosat/issues/10" data-hovercard-type="issue" data-hovercard-url="/wkschwartz/pigosat/issues/10/hovercard" href="https://github.com/wkschwartz/pigosat/issues/10">#10</a> (this also resulted in switching the order of arguments and return values for <code>Minimizer</code>)</li> <li>Removed call to <code>BlockSolution</code> from <code>Solve</code> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="197947001" data-permission-text="Title is private" data-url="https://github.com/wkschwartz/pigosat/issues/22" data-hovercard-type="issue" data-hovercard-url="/wkschwartz/pigosat/issues/22/hovercard" href="https://github.com/wkschwartz/pigosat/issues/22">#22</a></li> <li>Renamed <code>NewPigosat</code> to <code>New</code> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="57552351" data-permission-text="Title is private" data-url="https://github.com/wkschwartz/pigosat/issues/7" data-hovercard-type="issue" data-hovercard-url="/wkschwartz/pigosat/issues/7/hovercard" href="https://github.com/wkschwartz/pigosat/issues/7">#7</a></li> <li>PiGoSAT-specific types for <code>Literal</code>, <code>Clause</code>, <code>Formula</code> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="57553839" data-permission-text="Title is private" data-url="https://github.com/wkschwartz/pigosat/issues/8" data-hovercard-type="issue" data-hovercard-url="/wkschwartz/pigosat/issues/8/hovercard" href="https://github.com/wkschwartz/pigosat/issues/8">#8</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="57740134" data-permission-text="Title is private" data-url="https://github.com/wkschwartz/pigosat/issues/9" data-hovercard-type="pull_request" data-hovercard-url="/wkschwartz/pigosat/pull/9/hovercard" href="https://github.com/wkschwartz/pigosat/pull/9">#9</a></li> </ul> <h3>Updating client code</h3> <h4>Before</h4> <div class="highlight highlight-source-go notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="p := pigosat.New(nil) p.AddClauses(pigosat.Formula{{1, 2}, {2, 3}, {1}}) for status, solution := p.Solve(); status == pigosat.Satisfiable; status, solution = p.Solve() { // process solutions here }"><pre><span class="pl-s1">p</span> <span class="pl-c1">:=</span> <span class="pl-s1">pigosat</span>.<span class="pl-c1">New</span>(<span class="pl-c1">nil</span>) <span class="pl-s1">p</span>.<span class="pl-c1">AddClauses</span>(pigosat.<span class="pl-smi">Formula</span>{{<span class="pl-c1">1</span>, <span class="pl-c1">2</span>}, {<span class="pl-c1">2</span>, <span class="pl-c1">3</span>}, {<span class="pl-c1">1</span>}}) <span class="pl-k">for</span> <span class="pl-s1">status</span>, <span class="pl-s1">solution</span> <span class="pl-c1">:=</span> <span class="pl-s1">p</span>.<span class="pl-c1">Solve</span>(); <span class="pl-s1">status</span> <span class="pl-c1">==</span> <span class="pl-s1">pigosat</span>.<span class="pl-c1">Satisfiable</span>; <span class="pl-s1">status</span>, <span class="pl-s1">solution</span> <span class="pl-c1">=</span> <span class="pl-s1">p</span>.<span class="pl-c1">Solve</span>() { <span class="pl-c">// process solutions here</span> }</pre></div> <h4>After</h4> <p>Most importantly, you need to</p> <ul> <li>use <code>Add</code> instead of <code>AddClauses</code>,</li> <li>switch the order of solution and status, and</li> <li>explicitly call <code>p.BlockSolution(solution)</code>.<br> Calling <code>p.Delete()</code> when you're done with <code>p</code> is only important in library code or if you're generating a lot of <code>pigosat.Pigosat</code> objects. This is because the <a href="https://golang.org/pkg/runtime/#SetFinalizer" rel="nofollow">garbage collector can call</a> <code>p.Delete()</code>, but the GC may not get around to doing so before the program exits.</li> </ul> <div class="highlight highlight-source-go notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="p := pigosat.New(nil) defer p.Delete() // Not necessary in casual or one-off use p.Add(pigosat.Formula{{1, 2}, {2, 3}, {1}}) for solution, status := p.Solve(); status == pigosat.Satisfiable; solution, status = p.Solve() { // process solutions here p.BlockSolution(solution) }"><pre><span class="pl-s1">p</span> <span class="pl-c1">:=</span> <span class="pl-s1">pigosat</span>.<span class="pl-c1">New</span>(<span class="pl-c1">nil</span>) <span class="pl-k">defer</span> <span class="pl-s1">p</span>.<span class="pl-c1">Delete</span>() <span class="pl-c">// Not necessary in casual or one-off use</span> <span class="pl-s1">p</span>.<span class="pl-c1">Add</span>(pigosat.<span class="pl-smi">Formula</span>{{<span class="pl-c1">1</span>, <span class="pl-c1">2</span>}, {<span class="pl-c1">2</span>, <span class="pl-c1">3</span>}, {<span class="pl-c1">1</span>}}) <span class="pl-k">for</span> <span class="pl-s1">solution</span>, <span class="pl-s1">status</span> <span class="pl-c1">:=</span> <span class="pl-s1">p</span>.<span class="pl-c1">Solve</span>(); <span class="pl-s1">status</span> <span class="pl-c1">==</span> <span class="pl-s1">pigosat</span>.<span class="pl-c1">Satisfiable</span>; <span class="pl-s1">solution</span>, <span class="pl-s1">status</span> <span class="pl-c1">=</span> <span class="pl-s1">p</span>.<span class="pl-c1">Solve</span>() { <span class="pl-c">// process solutions here</span> <span class="pl-s1">p</span>.<span class="pl-c1">BlockSolution</span>(<span class="pl-s1">solution</span>) }</pre></div> <h2>Bug fixes</h2> <ul> <li>Accept empty clauses <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="88680923" data-permission-text="Title is private" data-url="https://github.com/wkschwartz/pigosat/issues/14" data-hovercard-type="issue" data-hovercard-url="/wkschwartz/pigosat/issues/14/hovercard" href="https://github.com/wkschwartz/pigosat/issues/14">#14</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="92744905" data-permission-text="Title is private" data-url="https://github.com/wkschwartz/pigosat/issues/15" data-hovercard-type="pull_request" data-hovercard-url="/wkschwartz/pigosat/pull/15/hovercard" href="https://github.com/wkschwartz/pigosat/pull/15">#15</a> (thanks to <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sacado/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sacado">@sacado</a>)</li> <li>Panic when trying to use uninitialized or deleted Pigosat objects <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="57413851" data-permission-text="Title is private" data-url="https://github.com/wkschwartz/pigosat/issues/6" data-hovercard-type="pull_request" data-hovercard-url="/wkschwartz/pigosat/pull/6/hovercard" href="https://github.com/wkschwartz/pigosat/pull/6">#6</a></li> </ul> <h2>Upgrades</h2> <ul> <li>Upgrade PicoSAT from 960 to 965 <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="179925183" data-permission-text="Title is private" data-url="https://github.com/wkschwartz/pigosat/issues/21" data-hovercard-type="issue" data-hovercard-url="/wkschwartz/pigosat/issues/21/hovercard" href="https://github.com/wkschwartz/pigosat/issues/21">#21</a></li> <li>Improved documentation <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="198646003" data-permission-text="Title is private" data-url="https://github.com/wkschwartz/pigosat/issues/25" data-hovercard-type="issue" data-hovercard-url="/wkschwartz/pigosat/issues/25/hovercard" href="https://github.com/wkschwartz/pigosat/issues/25">#25</a></li> <li><code>Minimizer</code>'s <code>RecordSolution</code> no longer needs to be safe for concurrent use <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="179909087" data-permission-text="Title is private" data-url="https://github.com/wkschwartz/pigosat/issues/19" data-hovercard-type="issue" data-hovercard-url="/wkschwartz/pigosat/issues/19/hovercard" href="https://github.com/wkschwartz/pigosat/issues/19">#19</a></li> <li>Improved testing and stability <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="57324667" data-permission-text="Title is private" data-url="https://github.com/wkschwartz/pigosat/issues/5" data-hovercard-type="pull_request" data-hovercard-url="/wkschwartz/pigosat/pull/5/hovercard" href="https://github.com/wkschwartz/pigosat/pull/5">#5</a> (thanks to <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/justinfx/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/justinfx">@justinfx</a>) <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="57413851" data-permission-text="Title is private" data-url="https://github.com/wkschwartz/pigosat/issues/6" data-hovercard-type="pull_request" data-hovercard-url="/wkschwartz/pigosat/pull/6/hovercard" href="https://github.com/wkschwartz/pigosat/pull/6">#6</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="179914182" data-permission-text="Title is private" data-url="https://github.com/wkschwartz/pigosat/issues/20" data-hovercard-type="issue" data-hovercard-url="/wkschwartz/pigosat/issues/20/hovercard" href="https://github.com/wkschwartz/pigosat/issues/20">#20</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="198632364" data-permission-text="Title is private" data-url="https://github.com/wkschwartz/pigosat/issues/24" data-hovercard-type="issue" data-hovercard-url="/wkschwartz/pigosat/issues/24/hovercard" href="https://github.com/wkschwartz/pigosat/issues/24">#24</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="198748076" data-permission-text="Title is private" data-url="https://github.com/wkschwartz/pigosat/issues/26" data-hovercard-type="issue" data-hovercard-url="/wkschwartz/pigosat/issues/26/hovercard" href="https://github.com/wkschwartz/pigosat/issues/26">#26</a></li> </ul> wkschwartz tag:github.com,2008:Repository/15954402/v0.3.1 2017-01-05T19:54:13Z v0.3.1 <ul> <li>Upgrade to PicoSAT 960 (was using version 957)</li> <li>Make PiGoSAT <code>go get</code>able: Now you can obtain PiGoSAT simply by running <code>go get https://github.com/wkschwartz/pigosat</code>. Thanks to <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/justinfx/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/justinfx">@justinfx</a> for help with this.</li> <li>Add <code>BlockSolution</code> public method as another way to add a clause to your CNF formula</li> <li>Teach <code>pigosat.Solve</code> to be iterable:</li> </ul> <div class="highlight highlight-source-go notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content=" for status, solution := p.Solve(); status == Satisfiable; status, solution = p.Solve() { // Do stuff with `solution` }"><pre> <span class="pl-k">for</span> <span class="pl-s1">status</span>, <span class="pl-s1">solution</span> <span class="pl-c1">:=</span> <span class="pl-s1">p</span>.<span class="pl-c1">Solve</span>(); <span class="pl-s1">status</span> <span class="pl-c1">==</span> <span class="pl-s1">Satisfiable</span>; <span class="pl-s1">status</span>, <span class="pl-s1">solution</span> <span class="pl-c1">=</span> <span class="pl-s1">p</span>.<span class="pl-c1">Solve</span>() { <span class="pl-c">// Do stuff with `solution`</span> }</pre></div> <ul> <li>Improved testing</li> <li>Add the <code>Minimizer</code> interface for using iterated constraint optimization (need to add some examples to the documentation in the future)</li> </ul> wkschwartz tag:github.com,2008:Repository/15954402/v0.2.2 2014-01-30T00:13:23Z v0.2.2 <p>Documentation improvements</p> wkschwartz tag:github.com,2008:Repository/15954402/v0.2.1 2014-01-29T23:53:11Z v0.2.1 <p>Minor documentation fix</p> wkschwartz tag:github.com,2008:Repository/15954402/v0.2.0 2014-01-28T15:31:16Z v0.2.0 <p>Automate memory management of <code>Pigosat</code> instances: users no longer have to call <code>p.Delete()</code> when they are done with a <code>var p *Pigosat</code>.</p> wkschwartz tag:github.com,2008:Repository/15954402/v0.1.0 2014-01-18T21:59:04Z v0.1.0 <p>First version. Provides basic solving capabilities.</p> wkschwartz