コード例 #1
0
        public void theta_60_phi_359_with_settings_Tests()
        {
            quantumBit = new Qubit(60, 359);
            PrintBlochSettings settings = new PrintBlochSettings(true, true, 3, DecimalSeparator.comma, ImaginaryUnit.i);

            Assert.AreEqual("|Ψ> = 0,866 |0> + 0,500 - 0,009i |1>", quantumBit.print_bloch_vector(settings));
        }
コード例 #2
0
        public void theta90_Tests()
        {
            quantumBit            = new Qubit(0, 0);
            quantumBit.thetaAngle = 90;

            quantumBit.phiAngle = 0;
            Assert.AreEqual("|Ψ> = 0,707 |0> + 0,707 |1>", quantumBit.print_bloch_vector());

            quantumBit.phiAngle = 45;
            Assert.AreEqual("|Ψ> = 0,707 |0> + 0,5 + 0,5i |1>", quantumBit.print_bloch_vector());
            PrintBlochSettings settings = new PrintBlochSettings(true, true, 3, DecimalSeparator.comma, ImaginaryUnit.i);

            Assert.AreEqual("|Ψ> = 0,707 |0> + 0,500 + 0,500i |1>", quantumBit.print_bloch_vector(settings));

            quantumBit.phiAngle = 90;
            Assert.AreEqual("|Ψ> = 0,707 |0> + 0,707i |1>", quantumBit.print_bloch_vector());

            quantumBit.phiAngle = 180;
            Assert.AreEqual("|Ψ> = 0,707 |0> - 0,707 |1>", quantumBit.print_bloch_vector());

            quantumBit.phiAngle = 270;
            Assert.AreEqual("|Ψ> = 0,707 |0> - 0,707i |1>", quantumBit.print_bloch_vector());

            quantumBit.phiAngle = 359;
            Assert.AreEqual("|Ψ> = 0,707 |0> + 0,707 - 0,012i |1>", quantumBit.print_bloch_vector());
        }
コード例 #3
0
ファイル: PrintQubit.cs プロジェクト: marcinbogiel/dotBloch
    private string print_only_imaginary_number(double imaginary_number, PrintBlochSettings printing_rules)
    {
        string result = string.Empty;

        result += print_imaginary_number(imaginary_number, printing_rules);
        return(result);
    }
コード例 #4
0
ファイル: PrintQubit.cs プロジェクト: marcinbogiel/dotBloch
    private string print_only_real_number(double real_number, PrintBlochSettings printing_rules)
    {
        string result = string.Empty;

        result += print_number(real_number, printing_rules);
        return(result);
    }
コード例 #5
0
        public void customSettings_theta30_phi_45_Test_4()
        {
            quantumBit = new Qubit(30, 45);
            PrintBlochSettings settings = new PrintBlochSettings(true, true, 15, PrintBlochSettings.DecimalSeparator.dot, PrintBlochSettings.ImaginaryUnit.J);

            Assert.AreEqual("|Ψ> = 0.965925826289068 |0> + 0.183012701892219 + 0.183012701892219J |1>", quantumBit.print_bloch_vector(settings));
        }
コード例 #6
0
    public static PrintBlochSettings printing_blochspere()
    {
        PrintBlochSettings printing_blochspere_settings;

        printing_blochspere_settings = new PrintBlochSettings(true, false, 3, PrintBlochSettings.DecimalSeparator.comma, PrintBlochSettings.ImaginaryUnit.i);
        return(printing_blochspere_settings);
    }
コード例 #7
0
        public void theta_43_with_trailing_zeros_Test()
        {
            quantumBit            = new Qubit(0, 0);
            quantumBit.thetaAngle = 43;
            PrintBlochSettings customSettings = new PrintBlochSettings(true, true, 3, PrintBlochSettings.DecimalSeparator.dot, PrintBlochSettings.ImaginaryUnit.i);

            Assert.AreEqual("0.930", quantumBit.print_zero_value(customSettings));
        }
コード例 #8
0
        public void theta_90_phi_45_Tests()
        {
            quantumBit = new Qubit(90, 45);
            Assert.AreEqual("|Ψ> = 0,707 |0> + 0,5 + 0,5i |1>", quantumBit.print_bloch_vector());
            PrintBlochSettings settings = new PrintBlochSettings(true, true, 3, DecimalSeparator.comma, ImaginaryUnit.i);

            Assert.AreEqual("|Ψ> = 0,707 |0> + 0,500 + 0,500i |1>", quantumBit.print_bloch_vector(settings));
        }
コード例 #9
0
        public void theta_167_Test()
        {
            quantumBit            = new Qubit(0, 0);
            quantumBit.thetaAngle = 167;
            PrintBlochSettings customSettings = new PrintBlochSettings(true, false, 3, PrintBlochSettings.DecimalSeparator.comma, PrintBlochSettings.ImaginaryUnit.i);

            Assert.AreEqual("0,113", quantumBit.print_zero_value(customSettings));
        }
コード例 #10
0
        public void theta_0_with_trailing_zeros_Test()
        {
            // no trailing zeroes when value is 0 or 1
            quantumBit            = new Qubit(0, 0);
            quantumBit.thetaAngle = 0;
            PrintBlochSettings customSettings = new PrintBlochSettings(true, true, 3, PrintBlochSettings.DecimalSeparator.comma, PrintBlochSettings.ImaginaryUnit.i);

            Assert.AreEqual("1", quantumBit.print_zero_value());
        }
コード例 #11
0
        public void theta_change_90_to_120_Test()
        {
            quantumBit = new Qubit(90, 30);
            Assert.AreEqual("0,612 + 0,354i", quantumBit.print_one_value());
            quantumBit.thetaAngle = 120;
            PrintBlochSettings settings = new PrintBlochSettings(false, true, 3, DecimalSeparator.dot, ImaginaryUnit.j);

            Assert.AreEqual("0.750+0.433j", quantumBit.print_one_value(settings));
        }
コード例 #12
0
        public void theta_change_120_to_170_Test()
        {
            quantumBit = new Qubit(120, 140);
            Assert.AreEqual("- 0,663 + 0,557i", quantumBit.print_one_value());
            quantumBit.thetaAngle = 170;
            PrintBlochSettings settings = new PrintBlochSettings(true, true, 3, DecimalSeparator.comma, ImaginaryUnit.i);

            Assert.AreEqual("- 0,763 + 0,640i", quantumBit.print_one_value(settings));
        }
コード例 #13
0
        public void custom_settings_theta_90_phi_180_Test()
        {
            quantumBit            = new Qubit(0, 0);
            quantumBit.thetaAngle = 90;
            quantumBit.phiAngle   = 180;
            PrintBlochSettings settings = new PrintBlochSettings(false, false, 3, PrintBlochSettings.DecimalSeparator.comma, PrintBlochSettings.ImaginaryUnit.J);

            Assert.AreEqual("-0,707", quantumBit.print_one_value(settings));
        }
コード例 #14
0
        public void customSettings_theta30_phi_45_Test_2()
        {
            quantumBit = new Qubit(30, 45);
            PrintBlochSettings settings = new PrintBlochSettings(true, true, 4, PrintBlochSettings.DecimalSeparator.dot, PrintBlochSettings.ImaginaryUnit.I);

            Assert.AreEqual("|Ψ> = 0.9659 |0> + 0.1830 + 0.1830I |1>", quantumBit.print_bloch_vector(settings));
            settings = new PrintBlochSettings(true, false, 4, PrintBlochSettings.DecimalSeparator.dot, PrintBlochSettings.ImaginaryUnit.I);
            Assert.AreEqual("|Ψ> = 0.9659 |0> + 0.183 + 0.183I |1>", quantumBit.print_bloch_vector(settings));
        }
コード例 #15
0
        public void custom_settings_theta_45_phi_45_with_cutsom_settings_2_Test()
        {
            quantumBit            = new Qubit(0, 0);
            quantumBit.thetaAngle = 45;
            quantumBit.phiAngle   = 45;
            PrintBlochSettings settings = new PrintBlochSettings(false, false, 3, PrintBlochSettings.DecimalSeparator.comma, PrintBlochSettings.ImaginaryUnit.j);

            Assert.AreEqual("0,271+0,271j", quantumBit.print_one_value(settings));
        }
コード例 #16
0
        public void custom_settings_theta_45_phi_45_with_cutsom_settings_3_Test()
        {
            quantumBit            = new Qubit(0, 0);
            quantumBit.thetaAngle = 45;
            quantumBit.phiAngle   = 45;
            PrintBlochSettings settings = new PrintBlochSettings(false, false, 0, PrintBlochSettings.DecimalSeparator.comma, PrintBlochSettings.ImaginaryUnit.j);

            Assert.AreEqual("P(|0>)=85%", quantumBit.print_zero_probability(settings));
            Assert.AreEqual("P(|1>)=15%", quantumBit.print_one_probability(settings));
        }
コード例 #17
0
        public void custom_settings_theta_90_phi_180_Test()
        {
            quantumBit            = new Qubit(0, 0);
            quantumBit.thetaAngle = 90;
            quantumBit.phiAngle   = 180;
            PrintBlochSettings settings = new PrintBlochSettings(false, false, 0, PrintBlochSettings.DecimalSeparator.comma, PrintBlochSettings.ImaginaryUnit.J);

            Assert.AreEqual("P(|0>)=50%", quantumBit.print_zero_probability(settings));
            Assert.AreEqual("P(|1>)=50%", quantumBit.print_one_probability(settings));
        }
コード例 #18
0
        public void customSettings_theta30_phi_45_Test_3()
        {
            quantumBit            = new Qubit(0, 0);
            quantumBit.thetaAngle = 30;
            quantumBit.phiAngle   = 45;
            PrintBlochSettings settings = new PrintBlochSettings(false, true, 8, PrintBlochSettings.DecimalSeparator.comma, PrintBlochSettings.ImaginaryUnit.j);

            Assert.AreEqual("|Ψ>=0,96592583|0>+0,18301270+0,18301270j|1>", quantumBit.print_bloch_vector(settings));
            settings = new PrintBlochSettings(false, false, 8, PrintBlochSettings.DecimalSeparator.comma, PrintBlochSettings.ImaginaryUnit.j);
            Assert.AreEqual("|Ψ>=0,96592583|0>+0,1830127+0,1830127j|1>", quantumBit.print_bloch_vector(settings));
        }
コード例 #19
0
ファイル: PrintQubit.cs プロジェクト: marcinbogiel/dotBloch
 private string set_number_rounding(PrintBlochSettings settings)
 {
     if (settings.endingZeros == true)
     {
         return(Constants.character.rounding_header + settings.decimalSpaces.ToString());
     }
     else
     {
         return(String.Empty);
     }
 }
コード例 #20
0
ファイル: PrintQubit.cs プロジェクト: marcinbogiel/dotBloch
    private string print_decimal_character(double number, PrintBlochSettings printingSettings = null)
    {
        string result = Constants.character.space;

        if (number >= 0)
        {
            result += Constants.math.plus_with_space;
        }

        return(result);
    }
コード例 #21
0
ファイル: PrintQubit.cs プロジェクト: marcinbogiel/dotBloch
 private PrintBlochSettings set_printing_rules(ref PrintBlochSettings custom_settings)
 {
     if (not_added(custom_settings))
     {
         return(default_settings.printing_blochspere());
     }
     else
     {
         return(custom_settings);
     }
 }
コード例 #22
0
ファイル: PrintQubit.cs プロジェクト: marcinbogiel/dotBloch
    private string print_one_for_bloch_vector(Complex[] quantumValue, PrintBlochSettings conditions)
    {
        string result = string.Empty;

        result += this.quantum_value(quantumValue[1], conditions);

        if (plus_is_needed_for_(result))
        {
            add_plus(ref result);
        }

        result += Constants.symbol.quantum_one;

        return(result);
    }
コード例 #23
0
ファイル: PrintQubit.cs プロジェクト: marcinbogiel/dotBloch
    private string print_number(double number, PrintBlochSettings printingSettings = null)
    {
        string             result         = string.Empty;
        PrintBlochSettings printing_rules = set_printing_rules(ref printingSettings);
        string             decimalSpaces  = this.set_number_rounding(printing_rules);

        double rounded_number = Math.Round(number, printing_rules.decimalSpaces);

        if (rounded_number < 0)
        {
            add_minus_to_(ref result);
        }

        result += Math.Abs(rounded_number).ToString(decimalSpaces);

        return(result);
    }
コード例 #24
0
ファイル: PrintQubit.cs プロジェクト: marcinbogiel/dotBloch
    public string bloch_vector(Complex[] quantumValue, PrintBlochSettings printingSettings = null)
    {
        string             result = string.Empty;
        PrintBlochSettings conditions;

        if (not_added(printingSettings))
        {
            conditions = default_settings.printing_blochspere();
        }
        else
        {
            conditions = printingSettings;
        }

        result += Constants.symbol.bloch_sphere + this.quantum_value(quantumValue[0], conditions) + Constants.symbol.quantum_zero + this.print_one_for_bloch_vector(quantumValue, conditions);

        if (conditions.printSpaces == false)
        {
            result = result.Replace(Constants.character.space, string.Empty);
        }

        return(result);
    }
コード例 #25
0
    public string percent_value(bool is_zero, double value, PrintBlochSettings printingSettings = null)
    {
        string             result         = String.Empty;
        PrintBlochSettings printing_rules = set_printing_rules(ref printingSettings);

        if (is_zero)
        {
            result += Constants.quantum_probability.zero_label;
        }
        else
        {
            result += Constants.quantum_probability.one_label;
        }

        value  *= 100;
        value   = Math.Round(value, printing_rules.decimalSpaces);
        result += value.ToString();

        result += Constants.character.percent;

        result = remove_spaces_if_needed(result, printing_rules.printSpaces);
        result = set_decimal_separator(result, printing_rules.decimalSeparator);
        return(result);
    }
コード例 #26
0
ファイル: PrintQubit.cs プロジェクト: marcinbogiel/dotBloch
    public string quantum_value(Complex number, PrintBlochSettings printingSettings = null)
    {
        string             result         = String.Empty;
        PrintBlochSettings printing_rules = set_printing_rules(ref printingSettings);

        double real_number      = Math.Round(number.Real, printing_rules.decimalSpaces);
        double imaginary_number = Math.Round(number.Imaginary, printing_rules.decimalSpaces);

        if (number_not_zero(real_number))
        {
            if (number_not_zero(imaginary_number))
            {
                result += print_real_and_imaginary_numers(real_number, imaginary_number, printing_rules);
            }
            else
            {
                result += print_only_real_number(real_number, printing_rules);
            }
        }
        else
        {
            if (imaginary_number == 0)
            {
                result += print_only_real_number(real_number, printing_rules);
            }
            else
            {
                result += print_only_imaginary_number(imaginary_number, printing_rules);
            }
        }

        result = remove_spaces_if_needed(result, printing_rules.printSpaces);
        result = set_decimal_separator(result, printing_rules.decimalSeparator);

        return(result);
    }
コード例 #27
0
 public string print_one_probability(PrintBlochSettings printingSettings = null)
 {
     return(print.percent_value(false, probability[1], printingSettings));
 }
コード例 #28
0
 public string print_zero_probability(PrintBlochSettings printingSettings = null)
 {
     return(print.percent_value(true, probability[0], printingSettings));
 }
コード例 #29
0
 public string printDensityMatrix(int row, int column, PrintBlochSettings printingSettings = null)
 {
     return(print.quantum_value(density_matrix[row, column], printingSettings));
 }
コード例 #30
0
 public string print_one_value(PrintBlochSettings printingSettings = null)
 {
     return(print.quantum_value(quantumValue[1], printingSettings));
 }