///|
#derive(Debug)
pub(all) suberror QuantumError {
  /// A wire dimension is below two; carries that dimension.
  InvalidDimension(UInt32)
  /// A size budget is invalid or exceeded; carries the reported limit.
  SizeLimit(Int32)
  /// Gate data or a gate capability violates its contract; carries the reason.
  InvalidGate(String)
  /// A logical ID repeats; carries its position in the supplied array.
  DuplicateQid(Int32)
  /// Target count mismatch; carries expected and actual wire counts.
  TargetCount(Int32, Int32)
  /// Wire shape mismatch; carries target position, expected dimension, and actual
  /// dimension.
  DimensionMismatch(Int32, UInt32, UInt32)
  /// Ordered wire dimensions or required logical IDs differ.
  RegisterMismatch
  /// An index or basis digit is out of range; carries the rejected value.
  InvalidBasis(Int32)
  /// State data or numerical output violates its contract; carries the reason.
  InvalidState(String)
}

///|
pub extend QuantumError with Debug::{to_repr}