In addition to qubit registers, circuits contain operations (Op). All operations have to reference register qubits by their index.

Scotty supports two types of operations: Gate and Measure.

Measure is a one-qubit operation that forces the superposition to collapse at the end of the circuit execution. Scotty simulator uses the deferred measurement principle meaning that the simulator doesn’t perform any measurements until all operations (besides the Measure itself) are done executing.

RunAndMeasure returns Collapsed but run returns a generic State. If you don’t know whether your circuit contains any Measure operations you’ll have to pattern match on the return type:

QuantumSimulator().run(circuit) match {
  case s: Superposition => println("not measured")
  case s: Collapsed => println("measured")

Gate is another Op type and it deserves its own section.