cascade.block module
- class cascade.block.Block(key, shuffle, start_index, end_index, parent_block)
Bases:
objectA block is a contiguous subset of bits in a shuffled key.
- ERRORS_EVEN = 0
The block contains an odd number of errors.
- ERRORS_ODD = 1
The block contains an even number of errors.
- ERRORS_UNKNOWN = None
We don’t know whether the block contains an even or an odd number of errors.
- __init__(key, shuffle, start_index, end_index, parent_block)
Create a block, which is a contiguous subset of bits in a shuffled key.
- Parameters:
key (Key) – The key for which to create one single block that covers a subset of the key.
shuffle (Shuffle) – The shuffle to apply to the key before creating the block.
start_index (int) – The shuffle index, inclusive, at which the block starts. Must be in range [0, shuffle._size).
end_index (int) – The shuffle index, exclusive, at which the block end. Must be in range [0, shuffle._size]. The range must encompass at least 1 bit, i.e. end_index > start_index.
parent_block (Block) – The parent block. None if there is no parent, i.e. if this is a top-level block.
- __repr__()
Get the unambiguous string representation of the block.
- Returns:
The unambiguous string representation of the block.
- __str__()
Get the human-readable string representation of the block.
- Returns:
The human-readable string representation of the block.
- static create_covering_blocks(key, shuffle, block_size)
Create a list of blocks of a given size that cover a given shuffled key.
- Parameters:
key (Key) – The key for which to create a list of block that collectively cover the entire key.
shuffle (Shuffle) – The shuffle to apply to the key before creating the blocks.
block_size (int) – The size of each block. Each block in the list, except for the last one, will be exactly this size. The last block may be smaller.
- Returns:
A list of blocks that cover the shuffled key.
- create_left_sub_block()
Create the left sub-block of this block. If the block has an odd size, the left sub-block will be one bit larger than the right sub-block. The block must be at least 2 bits in size.
- Returns:
The left sub-block.
- create_right_sub_block()
Create the right sub-block of this block. If the block has an odd size, the left sub-block will be one bit larger than the right sub-block. The block must be at least 2 bits in size.
- Returns:
The right sub-block.
- flip_bit(flipped_shuffle_index)
Flip a bit in the block.
- Params:
flipped_shuffle_index: The shuffle index of the bit to flip.
- flip_parity()
Flip the current parity of this block. This is needed when a single bit in the block is flipped as a result of a single bit error correction.
- get_correct_parity()
Get the correct parity of the block, if we know it.
- Returns:
The current parity (0 or 1) of the block, or None if we don’t know it.
- get_current_parity()
Get the current parity of the block.
- Returns:
The current parity (0 or 1) of the block.
- get_end_index()
Get the end index of the block, i.e. the shuffled key index for the first bit after the last bit in the block.
- Returns:
The end index.
- get_error_parity()
Does this block have an odd or an even number of errors?
- Returns:
ERRORS_ODD = The block contains an odd number of errors.
ERRORS_EVEN = The block contains an even number of errors.
ERRORS_UNKNOWN = We don’t yet know whether the block contains an odd or even number of errors because we have not yet asked what the parity of the original key (witout noise) is.
- get_key_index(shuffle_index)
The the key index that corresponds to a given shuffle index.
- Params:
shuffle_index: The shuffle index.
- Returns:
The key index.
- get_key_indexes()
Get a list of key indexes for this block.
- Returns:
The key indexes for this block (the ordering of the list is undefined; in particular don’t assume that the key indexes are in increasing order.)
- get_left_sub_block()
Return the left sub-block of this block, if it has one.
- Returns:
The left sub-block, or None if there is no left sub-block.
- get_parent_block()
Return the parent block of this block, if it has one.
- Returns:
The parent block, or None if there is no parent block.
- get_right_sub_block()
Return the right sub-block of this block, if it has one.
- Returns:
The right sub-block, or None if there is no right sub-block.
- get_shuffle()
Get the shuffle for this block.
- Returns:
The shuffle for this block.
- get_size()
Get the size of the block in bits.
- Returns:
The size of the block in bits.
- get_start_index()
Get the start index of the block, i.e. the shuffled key index for the first bit in the block.
- Returns:
The start index.
- is_top_block()
Is this block a top-level block?
- Returns:
True if the block was created by splitting a shuffled key into blocks. False if the block was created by splitting a block into sub-blocks.
- set_correct_parity(correct_parity)
Set the correct parity of the block.
- Params:
correct_parity (int): The current parity (0 or 1).