Tag Line

PolyBoRi was created by man. There are two developers. And they have a plan.“

Saturday, February 26, 2011

PolyBoRi 0.7

And now, here it is: Release 0.7 of PolyBoRi!

Of course, we had to change a few things since the first release candidate I mentioned last time. For instance, some paragraphs of the README file and the tutorial had to be clarified. Also, the example code listings of the latter could now be used instantly, because the multiplication character * was replaced by a nice-looking (but unusable) asterisk symbol.

But there was one real bug. Due to a mistake during refactoring the member function .nNodes() (.n_nodes() from python) for counting the decision-diagram nodes of our  internal data structures had miscounted by two. It did not influence the algorithms, so the original (black box-style) tests were not able to detect this mistake. Again it was a unit test (this time from the Sage interface), pointing out this problem.

The conclusion arising is as follows: extensive testing is mandatory. Best tests came from people with no or little knowledge about our internals. Back in high-school, we had called this Freddy testing, named after a classmate, who was fond in finding corners of our implementations. He was very creative in pushing obviously wrong buttons. Successful software development needs several Freddys.

My best,
  Alexander

Monday, February 14, 2011

First release candidate of PolyBoRi 0.7

Wow, that was hard! But finally we manged to complete our goals for PolyBoRi 0.7, whose first release candidate can be found at Sourceforge.

Indeed, the ChangeLog is short:
Release Name: 0.7.0:
* Polynomials, monomials, variables, and BooleSets now own a reference to

  a fully-functionally BoolePolyRing (including ordering)
* Orderings can work independently from ring
* Simplified interface: remove *Assign() variants from diagrams
* Added polybori.nf.simple_nf
* Simplification of declare_ring in ipbori
* Rename BoolePolynomials::reducibleBy ->

    BoolePolynomials::firstReducibleBy
* Unittests for libpolybori are available, covering 98% of libpolybori
* Added experimental PolyGUI


But what does this actually mean? We completely rewrote the Boolean ring management. Each polynomial now owns a reference to a full ring (including the ordering). This erases several implicit assumptions - like having a global ordering - which were not transparent to the user. For supporting this, we added atomic unit tests for libpolybori (98% coverage, the remaining 2% correspond to unhitable C++-artifacts). A corollary of the latter is, that bugs at corner cases of the implementation had been found and fixed.

Another nice gimmick: there also a small QT-based GUI for interactive use of the groebner_basis command. People can play around without further knowledge of our text-based frontends.

For the full release, PolyBoRi 0.7 has to be tested together with Singular and Sage. For the latter the interface has to be updated for sure (the current one works around some of the issues mentioned above, also we broke the one or another internals Sage might use). For Singular the things got much easier recently: now Singular's owns a Python interface, which can be used to access PolyBoRi as I explained here.

After that, I will start collecting todos for 0.8!

My best,
Alexander