private void Matrix_Click(object sender, RoutedEventArgs e) { /* * Complex[] values = new Complex[MatrixDefinition.Rows*MatrixDefinition.Columns]; * for(int i = 0; i < MatrixDefinition.Columns; i++ ) * for(int j = 0; j < MatrixDefinition.Rows; j++) * values[i * MatrixDefinition.Rows + j] = ComplexParser.FromString(MatrixDefinition[j, i]); * Transformation transformation = Transformation.FromValuesColumnMajor(values, MatrixDefinition.Columns); * _circuit.DefineUnitaryGateModel((int)QubitsBox.SelectedItem, false, new StandardGateSymbol(MatrixName.Text), transformation, _circuit.CustomGates); */ ErrorMessage.Visibility = Visibility.Collapsed; Complex[, ] values = new Complex[MatrixDefinition.Rows, MatrixDefinition.Columns]; for (int i = 0; i < MatrixDefinition.Columns; i++) { for (int j = 0; j < MatrixDefinition.Rows; j++) { try { values[i, j] = ComplexParser.FromString(MatrixDefinition[i, j]); } catch (FormatException) { ErrorMessage.Content = string.Format($"Value at [{0}, {1}] could not be parsed", i, j); ErrorMessage.Visibility = Visibility.Visible; return; } } } if (!Transformation.IsUnitary(values)) { ErrorMessage.Content = "Defined matrix is not unitary"; ErrorMessage.Visibility = Visibility.Visible; return; } Transformation transformation = Transformation.FromValues(values); _circuit.DefineUnitaryGateModel((int)QubitsBox.SelectedItem, false, new StandardGateSymbol(MatrixName.Text), transformation, _circuit.CustomGates); }
private void CoefficientsCreate_Click(object sender, RoutedEventArgs e) { ErrorMessage.Visibility = Visibility.Collapsed; Complex[,] coefs = new Complex[2, 1]; double phase; try { coefs[0, 0] = ComplexParser.FromString(Alpha.Text); coefs[1, 0] = ComplexParser.FromString(Beta.Text); phase = double.Parse(Phase.Text); } catch (FormatException) { ErrorMessage.Content = "Inserted value(s) could not be parsed"; ErrorMessage.Visibility = Visibility.Visible; return; } if (coefs[0, 0] == Complex.Zero && coefs[1, 0] == Complex.Zero) { ErrorMessage.Content = "At least one of alpha/beta must be nonzero"; ErrorMessage.Visibility = Visibility.Visible; return; } Transformation transformation = Transformation.FromCoefficients(coefs[0, 0], coefs[1, 0], phase); _circuit.DefineUnitaryGateModel(1, false, new StandardGateSymbol(MatrixName.Text), transformation, _circuit.CustomGates); }
private Complex[, ] ReadTextMatrix() { int rows = MatrixDefinition.Rows, cols = MatrixDefinition.Columns; Complex[, ] values = new Complex[rows, cols]; for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { try { values[i, j] = ComplexParser.FromString(MatrixDefinition[i, j]); } catch (FormatException) { ErrorMessage.Content = string.Format($"Value at [{0}, {1}] could not be parsed", i, j); ErrorMessage.Visibility = Visibility.Visible; return(null); } } } return(values); }