tag:github.com,2008:https://github.com/wkschwartz/pigosat/releasesRelease notes from pigosat2017-07-31T18:10:21Ztag:github.com,2008:Repository/15954402/v1.0.02017-07-31T18:24:59Zv1.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>wkschwartztag:github.com,2008:Repository/15954402/v1.0.0b2017-01-12T23:58:46Zv1.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>wkschwartztag:github.com,2008:Repository/15954402/v0.3.12017-01-05T19:54:13Zv0.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>wkschwartztag:github.com,2008:Repository/15954402/v0.2.22014-01-30T00:13:23Zv0.2.2<p>Documentation improvements</p>wkschwartztag:github.com,2008:Repository/15954402/v0.2.12014-01-29T23:53:11Zv0.2.1<p>Minor documentation fix</p>wkschwartztag:github.com,2008:Repository/15954402/v0.2.02014-01-28T15:31:16Zv0.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>wkschwartztag:github.com,2008:Repository/15954402/v0.1.02014-01-18T21:59:04Zv0.1.0<p>First version. Provides basic solving capabilities.</p>wkschwartz