From 9867d3bea145ddd1b7669b6aac01fbe973f36274 Mon Sep 17 00:00:00 2001
From: Alex McCaskey <mccaskeyaj@ornl.gov>
Date: Mon, 30 Jan 2017 21:40:50 +0000
Subject: [PATCH] Fixing bug that broke build - started FireTensorAccelerator

---
 examples/quantum/gate/CMakeLists.txt          |  2 +-
 quantum/gate/CMakeLists.txt                   |  3 -
 quantum/gate/accelerators/CMakeLists.txt      |  9 +-
 .../accelerators/FireTensorAccelerator.hpp    | 84 +++++++++++++++++++
 quantum/gate/{ => accelerators}/Qubits.hpp    |  0
 .../tests/FireTensorAcceleratorTester.cpp     | 40 +++++++++
 .../{ => accelerators}/tests/QubitsTester.cpp |  0
 quantum/gate/utils/CMakeLists.txt             |  4 +
 .../{ => utils}/tests/QasmToGraphTester.cpp   |  0
 xacc/accelerator/Accelerator.hpp              | 17 ++--
 xacc/program/Program.hpp                      |  3 +-
 11 files changed, 143 insertions(+), 19 deletions(-)
 create mode 100644 quantum/gate/accelerators/FireTensorAccelerator.hpp
 rename quantum/gate/{ => accelerators}/Qubits.hpp (100%)
 create mode 100644 quantum/gate/accelerators/tests/FireTensorAcceleratorTester.cpp
 rename quantum/gate/{ => accelerators}/tests/QubitsTester.cpp (100%)
 rename quantum/gate/{ => utils}/tests/QasmToGraphTester.cpp (100%)

diff --git a/examples/quantum/gate/CMakeLists.txt b/examples/quantum/gate/CMakeLists.txt
index 84d10749a..77bd2da42 100644
--- a/examples/quantum/gate/CMakeLists.txt
+++ b/examples/quantum/gate/CMakeLists.txt
@@ -28,6 +28,6 @@
 #   Initial API and implementation - Alex McCaskey
 #
 #**********************************************************************************/
-include_directories(${CMAKE_SOURCE_DIR}/quantum/gate)
+include_directories(${CMAKE_SOURCE_DIR}/quantum/gate/accelerators)
 add_executable(teleport_scaffold teleport_scaffold.cpp)
 target_link_libraries(teleport_scaffold xacc-scaffold ${Boost_LIBRARIES})
\ No newline at end of file
diff --git a/quantum/gate/CMakeLists.txt b/quantum/gate/CMakeLists.txt
index 55766fb17..827450d99 100644
--- a/quantum/gate/CMakeLists.txt
+++ b/quantum/gate/CMakeLists.txt
@@ -34,7 +34,4 @@ add_subdirectory(compilers)
 add_subdirectory(accelerators)
 add_subdirectory(utils)
 
-# Gather tests
-file (GLOB test_files tests/*.cpp)
-add_tests("${test_files}" "${CMAKE_CURRENT_SOURCE_DIR}/utils;${CMAKE_CURRENT_SOURCE_DIR}" "${Boost_LIBRARIES}")
 
diff --git a/quantum/gate/accelerators/CMakeLists.txt b/quantum/gate/accelerators/CMakeLists.txt
index 2bb538200..121ba18ad 100644
--- a/quantum/gate/accelerators/CMakeLists.txt
+++ b/quantum/gate/accelerators/CMakeLists.txt
@@ -28,11 +28,10 @@
 #   Initial API and implementation - Alex McCaskey
 #
 #**********************************************************************************/
-#add_subdirectory(compilers)
-#add_subdirectory(accelerators)
-#add_subdirectory(utils)
+
+include_directories(${CMAKE_SOURCE_DIR}/tpls/common/tpls/fire/tensor)
 
 # Gather tests
-#file (GLOB test_files tests/*.cpp)
-#add_tests("${test_files}" "${CMAKE_CURRENT_SOURCE_DIR}/utils;${CMAKE_CURRENT_SOURCE_DIR}" "${Boost_LIBRARIES}")
+file (GLOB test_files tests/*.cpp)
+add_tests("${test_files}" "${CMAKE_CURRENT_SOURCE_DIR};${CMAKE_SOURCE_DIR}/tpls/common/tpls/fire/tensors;${CMAKE_SOURCE_DIR}/tpls/common/tpls/fire/tensors/impl;${CMAKE_SOURCE_DIR}/tpls/common/tpls/fire/tpls/eigen" "${Boost_LIBRARIES}")
 
diff --git a/quantum/gate/accelerators/FireTensorAccelerator.hpp b/quantum/gate/accelerators/FireTensorAccelerator.hpp
new file mode 100644
index 000000000..e02bcc0bb
--- /dev/null
+++ b/quantum/gate/accelerators/FireTensorAccelerator.hpp
@@ -0,0 +1,84 @@
+/***********************************************************************************
+ * Copyright (c) 2016, UT-Battelle
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *   * Neither the name of the xacc nor the
+ *     names of its contributors may be used to endorse or promote products
+ *     derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Contributors:
+ *   Initial API and implementation - Alex McCaskey
+ *
+ **********************************************************************************/
+#ifndef QUANTUM_GATE_ACCELERATORS_FIRETENSORACCELERATOR_HPP_
+#define QUANTUM_GATE_ACCELERATORS_FIRETENSORACCELERATOR_HPP_
+
+#include "Accelerator.hpp"
+#include "Tensor.hpp"
+#include "Graph.hpp"
+#include "QasmToGraph.hpp"
+#include "GraphIR.hpp"
+
+namespace xacc {
+namespace quantum {
+
+/**
+ *
+ */
+class FireTensorAccelerator : public Accelerator {
+public:
+
+	virtual AcceleratorType getType() {
+		return AcceleratorType::qpu_gate;
+	}
+
+	virtual std::vector<xacc::IRTransformation> getIRTransformations() {
+		std::vector<xacc::IRTransformation> v;
+		return v;
+	}
+
+	virtual void execute(const std::shared_ptr<xacc::IR> ir) {
+
+		using GraphType = qci::common::Graph<CircuitNode>;
+
+		// Cast to a GraphIR, if we can...
+		auto graphir = std::dynamic_pointer_cast<xacc::GraphIR<GraphType>>(ir);
+		if (!graphir) {
+			QCIError("Invalid IR - this Accelerator on accepts GraphIR<Graph<CircuitNode>>.");
+		}
+
+	}
+
+	virtual ~FireTensorAccelerator() {
+	}
+
+protected:
+	bool canAllocate(const int N) {
+		return true;
+	}
+
+};
+}
+}
+
+
+
+#endif /* QUANTUM_GATE_ACCELERATORS_FIRETENSORACCELERATOR_HPP_ */
diff --git a/quantum/gate/Qubits.hpp b/quantum/gate/accelerators/Qubits.hpp
similarity index 100%
rename from quantum/gate/Qubits.hpp
rename to quantum/gate/accelerators/Qubits.hpp
diff --git a/quantum/gate/accelerators/tests/FireTensorAcceleratorTester.cpp b/quantum/gate/accelerators/tests/FireTensorAcceleratorTester.cpp
new file mode 100644
index 000000000..19dda0d9b
--- /dev/null
+++ b/quantum/gate/accelerators/tests/FireTensorAcceleratorTester.cpp
@@ -0,0 +1,40 @@
+/***********************************************************************************
+ * Copyright (c) 2016, UT-Battelle
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *   * Neither the name of the xacc nor the
+ *     names of its contributors may be used to endorse or promote products
+ *     derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Contributors:
+ *   Initial API and implementation - Alex McCaskey
+ *
+ **********************************************************************************/
+#define BOOST_TEST_DYN_LINK
+#define BOOST_TEST_MODULE FireTensorAcceleratorTester
+
+#include <boost/test/included/unit_test.hpp>
+#include "FireTensorAccelerator.hpp"
+
+
+BOOST_AUTO_TEST_CASE(checkConstruction) {
+}
+
diff --git a/quantum/gate/tests/QubitsTester.cpp b/quantum/gate/accelerators/tests/QubitsTester.cpp
similarity index 100%
rename from quantum/gate/tests/QubitsTester.cpp
rename to quantum/gate/accelerators/tests/QubitsTester.cpp
diff --git a/quantum/gate/utils/CMakeLists.txt b/quantum/gate/utils/CMakeLists.txt
index 38812e294..a48e77a3d 100644
--- a/quantum/gate/utils/CMakeLists.txt
+++ b/quantum/gate/utils/CMakeLists.txt
@@ -33,5 +33,9 @@ set (PACKAGE_DESCIPTION "Quantum XACC Common Utilities")
 
 file (GLOB HEADERS *.hpp)
 
+# Gather tests
+file (GLOB test_files tests/*.cpp)
+add_tests("${test_files}" "${CMAKE_CURRENT_SOURCE_DIR}" "${Boost_LIBRARIES}")
+
 install(FILES ${HEADERS} DESTINATION include)
 
diff --git a/quantum/gate/tests/QasmToGraphTester.cpp b/quantum/gate/utils/tests/QasmToGraphTester.cpp
similarity index 100%
rename from quantum/gate/tests/QasmToGraphTester.cpp
rename to quantum/gate/utils/tests/QasmToGraphTester.cpp
diff --git a/xacc/accelerator/Accelerator.hpp b/xacc/accelerator/Accelerator.hpp
index 4192ac41c..af8c41b27 100644
--- a/xacc/accelerator/Accelerator.hpp
+++ b/xacc/accelerator/Accelerator.hpp
@@ -57,21 +57,22 @@ public:
 	 * Reference to the number of bits
 	 */
 	static constexpr int N = Number;
-private:
-
-	/**
-	 *  The bits themselves
-	 */
-	std::bitset<(size_t)Number> bits;
 
 	/**
 	 * Return the current state of the bits
 	 * @return
 	 */
-	std::bitset<(size_t)Number> toBits() {
+	std::bitset<(size_t) Number> toBits() {
 		return bits;
 	}
 
+private:
+
+	/**
+	 *  The bits themselves
+	 */
+	std::bitset<(size_t)Number> bits;
+
 };
 
 /**
@@ -87,7 +88,7 @@ private:
  * instances that transform XACC IR to be amenable to execution
  * on the hardware.
  */
-class Accelerator {
+class Accelerator : public qci::common::QCIObject {
 
 public:
 
diff --git a/xacc/program/Program.hpp b/xacc/program/Program.hpp
index 180365de2..b8789a820 100644
--- a/xacc/program/Program.hpp
+++ b/xacc/program/Program.hpp
@@ -150,8 +150,7 @@ public:
 			xaccIR->persist(ostr);
 		}
 
-		// Execute IR Translations and Optimizations
-		// FIXME GET LIST OF TRANSFORMATION FROM
+		// Execute IR Translations
 		auto acceleratorType = accelerator->getType();
 		auto defaultTransforms = getAcceleratorIndependentTransformations(acceleratorType);
 		auto accDepTransforms = accelerator->getIRTransformations();
-- 
GitLab