Current Stable Version: 0.2.0
Download Source 
Browse `stable` Directory
  
Full Description: 
OpenQubit 0.2.0 has been released to Freshmeat as the first
[stable] public release. This release correctly factors any
number, limited only by memory. Shor's algorithm, however, does
not work for numbers that are prime powers (such as 25 which is
5^2). The current release cannot test for prime powers correctly,
thus attempts to factor such a number will always fail. Everything 
else functions. The next devel tree (0.3.x) will feature a static
QState class and QRegister subclasses to model the quantum machine 
more correctly. This will allow for cleaner code in Shor's
factoring algorithm as well.
  
  Current Development Version: 0.3.3a
Download Source 
Browse `devel` Directory
Full Description:
[General] 
| *Renamed: | QState ->
Q_StateVector |  
| QRegister -> Q_BitSet |  
| QException -> Q_Exception |    
| *Added: | Q_GateMatrix, a class that contains the
SingleBit
and Controlled classes inside. This is simply for clarification on the
fact that the SingleBit and Controlled classes are in fact classes that
simulate gate matrices. |   
0.2.0
[General] 
This is rafals release of fixed 0.1.6 code 
now the factoring is _really_ working 
63 factorable on 32MB of RAM 
removed ReverseBits operator class (not functioning properly) 
use the Reverse() function in utility.h instead 
0.1.5b
[General] 
removed _State variable 
implemented operators as classes with operator() overloaded 
two base classes for operators: SingleBit for one bit gates
and Controlled for multi-bit controlled gates where the
first parameter is the controlling bitmask, and the second
is the controlled bit. Please see the qop.h file for more information and 
main.cc for examples. 
created DoAllBits class that allows any ordinary operator
to operator on all bits. so opWalshHadamard is really:
 
typedef DoAllBits<opHadamard> opWalshHadamard;
  
 
this is an experimental class. It probably will only work
with gates requiring no parameters such as the Hadamard
operator. 
added stream printing for QState using code by Artur Ruszczynski 
changed some code in stream printing to support printing plus sign between 
two coefficients separated by more than one zero, and changed some other 
things for cleaner code.
 
0.1.0a
[General] 
Array of amplitudes implemented as STL vector 
Perceps used for documentation of classes. 
only classes are documented. header files not containing classes are not
documented by perceps. 
[qstate.h & qstate.cc] 
implemented 'Bernhard's Algorithm' for collapse which uses a random
starting point in the collapse 
added Dump() to put state to file using Bernhard Oemer's format 
added Read() to read in from file 
 
I believe this version to be more or less 'complete' in the sense that it
has achieved the model of a quantum register/state including entanglement.
This is why I have jumped revision numbers to 0.1. The next step, 0.2 will
be the implementation of basic quantum gates. This version is still to be
considered alpha and is open to testing, debugging, and discussion. If
the only changes are made to this current code and no additions, it should 
remain as 0.1 but will change revision states according to letters
(alpha,beta,gamma) and minor additions will earn minor revision numbers
such as 0.1.1. 
0.0.4
[General] 
QRegister has been renamed to QState. 
QState implements Rafal's collapsing algorithms. 
States that are not direct tensor products are now possible. 
See main.cc for examples. 
0.0.3
Completely rewritten almost from scratch. 
Language has been [temporarily] named 'h' for obvious reasons.
  
Changes executed: 
[General] 
Made major changes to Makefile. 
Qubit stuff is not compiled into a lib. 
   (qregister.o and qubit.o -> libOpenQubit.a) 
Added debugging module "debug.h" 
   (please see debug.h for use) 
 
[qubit.h & qubit.cc] 
Qubit is the basic unit. 
Added normalization and validation code for coefficients and
probabilities. 
Added default constructor (no coefficients given) 
Cleaned code; got rid of int() cast because short() cast will be implicitly promoted to int 
Moved srand() to QRegister code, otherwise collapse happens too fast for numbers to be random. 
 
[qregister.h & qregister.cc] 
Create QRegister class which implements a Qubit array. 
Each Qubit holds its own probability coefficients. 
This removes the necessity to hold 2^n complex numbers. 
   Instead, to compute each of the outcome probabilities 
the function prob() is used, which multiplies various probabilities to
obtain the state probability. 
Use dtob() function implemented in binary.h in order to calculate above
mentioned probabilities. 
Added auto-collapsing int cast and auto-collapsint stream << operator. 
 
[misc: complex.h & binary.h & random.h] 
Changed conjuageMult() to abs2() in complex.h 
Added assignment operator for complex numbers 
   Complex c; c=5; (re=5,im=0); 
Added stream >> operator to read in complex number 
   as "[real] [img]" 
   -RNG encapsulation (random.h) contributed by Joe Nelson 
[main.cpp] 
Implemented prototype mini-parser for commands. 
Accepts one command: "qureg" and upon recieving this command asks for size
and coefficients for a quantum register, creates it and collapses it. 
Coefficients read in space delimited, so in order to use 
   .707 + 0i, .707 + 0i you type
 
   h Coefficients?> .707 0 .707 0
 
Development Comments:
rand() will not be sufficient for sure. We need good PRNG. Any 
suggestions? I do not own Knuth's book on the topic but planning to get it
soon. We're going to need a fairly sophisticated PRNG if this is going to
work at all. srand() based on time() does not work because, for example
the qubits collapse so fast that repeatdly srand()ing in that time period
causes the same seed and thus the same number. I battled this by putting
the srand() into the function in QRegister which then calls all the
individual Qubit collapses.
  
Last development updates made by the following:
Yan Pritzker (skwp)   (qubit.h, qubit.cc, qregister.h, qregister.cc, complex.h, binary.h, random.h, main.cpp) 
Jonathan Blow   (binary.h) 
Joe Nelson   (random.h) 
Additional Code Contributions By:
Igor Kofman 
Danny Rathjens 
Bill Yerazunis 
Daniel W. Dulitz 
 0.0.2: 
Download Source 
Igor Kofman ([digriz])   (qbit.h, main.cpp, qubit.cpp, Makefile)
 0.0.1: 
Download Source 
Yan Pritzker (skwp)   (qbit [main], complex.h, driver program)
  
			 |  
			 |  
		 
		 |  
	 
 |