def test___init___invalid_argument(self):
        # noinspection SpellCheckingInspection
        test_cases_type = [None, '', '1234567890abcd', 'NonHexaString_!?', 0, 123, [b'']]
        for test in test_cases_type:
            with self.assertRaises(TypeError):
                # noinspection PyTypeChecker
                Seed(test)  # type: ignore

        test_cases_value = [b'', b'tooShort', b'63bytesLongSoExactlyOneByteShortOfBeingValidSoCloseYetSoFarSAD!',
                            b'soLongItHurtsHurDurBlaBlaButAnywayThisShouldFail123456789101112131415',
                            unhexlify(TREZOR_TEST_VECTORS['english'][0][2]) + b'almost_ok']
        for test in test_cases_value:
            with self.assertRaises(ValueError):
                Seed(test)
 def test__ne__(self):
     s1 = Seed(self.seed_bytes_a1)
     self.assertFalse(s1 != s1)
     self.assertFalse(Seed(self.seed_bytes_a1) != Seed(self.seed_bytes_a1))
     self.assertFalse(Seed(self.seed_bytes_a1) != Seed(self.seed_bytes_a2))
     self.assertTrue(Seed(self.seed_bytes_a1) != Seed(self.seed_bytes_b))
     self.assertTrue(s1 != [1, 2, 3])
 def test___eq__(self):
     s1 = Seed(self.seed_bytes_a1)
     self.assertTrue(s1 == s1)
     self.assertTrue(Seed(self.seed_bytes_a1) == Seed(self.seed_bytes_a1))
     self.assertTrue(Seed(self.seed_bytes_a1) == Seed(self.seed_bytes_a2))
     self.assertFalse(Seed(self.seed_bytes_a1) == Seed(self.seed_bytes_b))
     self.assertFalse(s1 == [1, 2, 3])
 def test_verify(self):
     for i in range(self.SUBTEST_COUNT):
         password = get_random_valid_password()
         mnemonic_phrase = get_random_valid_mnemonic_phrase()
         seed_trezor = self.trezor.to_seed(mnemonic_phrase, password)
         with self.subTest(i=i,
                           mnemonic_phrase=mnemonic_phrase,
                           seed=seed_trezor,
                           password=password):
             self.assertTrue(
                 verify(Mnemonic(mnemonic_phrase), Seed(seed_trezor),
                        password))
 def test___init__(self):
     for test_vector in TREZOR_TEST_VECTORS['english']:
         Seed(unhexlify(test_vector[2]))
 def test_to_seed(self):
     for test_vector in TREZOR_TEST_VECTORS['english']:
         with self.subTest(mnemonic=test_vector[1]):
             mnemonic = Mnemonic(test_vector[1])
             seed_expected = Seed(unhexlify(test_vector[2]))
             self.assertEqual(seed_expected, mnemonic.to_seed(TREZOR_PASSWORD))
 def test_verify(self):
     for test_vector in TREZOR_TEST_VECTORS['english']:
         self.assertTrue(verify(Mnemonic(test_vector[1]), Seed(unhexlify(test_vector[2])), TREZOR_PASSWORD))
 def test_recover(self):
     for test_vector in TREZOR_TEST_VECTORS['english']:
         entropy, seed = recover(Mnemonic(test_vector[1]), TREZOR_PASSWORD)
         self.assertEqual(Entropy(unhexlify(test_vector[0])), entropy)
         self.assertEqual(Seed(unhexlify(test_vector[2])), seed)
 def test_generate(self):
     for test_vector in TREZOR_TEST_VECTORS['english']:
         mnemonic, seed = generate(Entropy(unhexlify(test_vector[0])), TREZOR_PASSWORD)
         self.assertEqual(Mnemonic(test_vector[1]), mnemonic)
         self.assertEqual(Seed(unhexlify(test_vector[2])), seed)
            "7b4a10be9d98e6cba265566db7f136718e1398c71cb581e1b2f464cac1ceedf4f3e274dc270003c670ad8d02c4558b2f8e39edea2775c9e232c7cb798b069e88",  # nopep8
            "xprv9s21ZrQH143K4aERa2bq7559eMCCEs2QmmqVjUuzfy5eAeDX4mqZffkYwpzGQRE2YEEeLVRoH4CSHxianrFaVnMN2RYaPUZJhJx8S5j6puX"  # nopep8
        ],
        [
            "f585c11aec520db57dd353c69554b21a89b20fb0650966fa0a9d6f74fd989d8f",  # nopep8
            "void come effort suffer camp survey warrior heavy shoot primary clutch crush open amazing screen patrol group space point ten exist slush involve unfold",  # nopep8
            "01f5bced59dec48e362f2c45b5de68b9fd6c92c6634f44d6d40aab69056506f0e35524a518034ddc1192e1dacd32c1ed3eaa3c3b131c88ed8e7e54c49a5d0998",  # nopep8
            "xprv9s21ZrQH143K39rnQJknpH1WEPFJrzmAqqasiDcVrNuk926oizzJDDQkdiTvNPr2FYDYzWgiMiC63YmfPAa2oPyNB23r2g7d1yiK6WpqaQS"  # nopep8
        ]
    ]
}

VALID_MNEMONIC_PHRASE_TREZOR = TREZOR_TEST_VECTORS['english'][0][1]
VALID_MNEMONIC_TREZOR = Mnemonic(TREZOR_TEST_VECTORS['english'][0][1])
VALID_ENTROPY_TREZOR = Entropy(unhexlify(TREZOR_TEST_VECTORS['english'][0][0]))
VALID_SEED_TREZOR = Seed(unhexlify(TREZOR_TEST_VECTORS['english'][0][2]))
VALID_SEED_HEX_TREZOR = TREZOR_TEST_VECTORS['english'][0][2]
VALID_PASSWORD_TREZOR = TREZOR_PASSWORD

INVALID_MNEMONIC_PHRASE_INVALID_UTF8 = "mn3\n\udcd6 " * 12
INVALID_PASSWORD_INVALID_UTF8 = "icpa\u202e\U000e0ec1\udcaassword1"

def get_random_valid_mnemonic_phrase():
    return str(Entropy(get_random_valid_entropy_bytes()).to_mnemonic())


def get_random_valid_entropy_bytes():
    return bytes(getrandbits(8) for _ in range(choice(Entropy.VALID_ENTROPY_BYTE_LENGTHS)))


def get_random_valid_password():