Compensated Received Signal Dara reading/writing objects (sarpy.io.received.crsd)

Module for reading and writing CRSD version 1.0 files

class sarpy.io.received.crsd.CRSDDetails(file_object: str | BinaryIO)

Bases: object

The basic CRSD element parser.

property file_name: str

The CRSD filename.

Type:

str

property file_object: BinaryIO

The binary file object

Type:

BinaryIO

property crsd_version: str

The CRSD version.

Type:

str

property crsd_header: CRSDHeader

The CRSD header object

Type:

CRSDHeader

property crsd_meta: CRSDType

The CRSD structure, which is version dependent.

Type:

CRSDType

get_crsd_bytes() bytes

Extract the (uninterpreted) bytes representation of the CRSD structure.

Return type:

bytes

class sarpy.io.received.crsd.CRSDReader(*args, **kwargs)

Bases: CRSDTypeReader

The Abstract CRSD reader instance, which just selects the proper CRSD reader class based on the CRSD version. Note that there is no __init__ method for this class, and it would be skipped regardless. Ensure that you make a direct call to the BaseReader.__init__() method when extending this class.

Updated in version 1.3.0 for reading changes.

property crsd_details: CRSDDetails

The crsd details object.

Type:

CRSDDetails

property crsd_version: str

The CRSD version.

Type:

str

property crsd_header: CRSDHeader

The CRSD header object

Type:

CRSDHeader

property file_name: str

Defined as a convenience property.

Type:

None|str

read_support_array(index: int | str, *ranges: Sequence[None | int | Tuple[int, ...] | slice]) ndarray

Read the support array.

Parameters:
  • index (int|str) – The support array integer index.

  • ranges (Sequence[None|int|Tuple[int, ...]|slice]) – The slice definition appropriate for support array usage.

Return type:

numpy.ndarray

Raises:

TypeError – If called on a reader which doesn’t support this.

read_support_block() Dict[str, ndarray]

Reads the entirety of support block(s).

Returns:

Dictionary of numpy.ndarray containing the support arrays.

Return type:

Dict[str, numpy.ndarray]

read_pvp_variable(variable: str, index: int | str, the_range: None | int | Tuple[int, ...] | slice = None) ndarray | None

Read the vector parameter for the given variable and CRSD channel.

Parameters:
  • variable (str) –

  • index (int|str) – The channel index or identifier.

  • the_range (None|int|Tuple[int, ...]|slice) – The indices for the vector parameter. None returns all, a integer returns the single value at that location, otherwise the input determines a slice.

Returns:

This will return None if there is no such variable, otherwise the data.

Return type:

None|numpy.ndarray

read_pvp_array(index: int | str, the_range: None | int | Tuple[int, ...] | slice = None) ndarray

Read the PVP array from the requested channel.

Parameters:
  • index (int|str) – The support array integer index (of cphd.Data.Channels list) or identifier.

  • the_range (None|int|Tuple[int, ...]|slice) – The indices for the vector parameter. None returns all, a integer returns the single value at that location, otherwise the input determines a slice.

Returns:

pvp_array

Return type:

numpy.ndarray

read_pvp_block() Dict[str, ndarray]

Reads the entirety of the PVP block(s).

Returns:

Dictionary containing the PVP arrays.

Return type:

Dict[str, numpy.ndarray]

read_signal_block() Dict[str, ndarray]

Reads the entirety of signal block(s), with data formatted as complex64 (after accounting for AmpSF).

Returns:

Dictionary of numpy.ndarray containing the signal arrays.

Return type:

Dict[str, numpy.ndarray]

read_signal_block_raw() Dict[str, ndarray]

Reads the entirety of signal block(s), with data formatted in file storage format (no converting to complex, no consideration of AmpSF).

Returns:

Dictionary of numpy.ndarray containing the signal arrays.

Return type:

Dict[str, numpy.ndarray]

close()

This should perform any necessary clean-up operations, like closing open file handles, deleting any temp files, etc.

property closed: bool

Is the reader closed? Reading will result in a ValueError

Type:

bool

property crsd_meta: None | CRSDType

the crsd meta_data.

Type:

None|CRSDType1_0

property data_segment: DataSegment | Tuple[DataSegment, ...]

The data segment collection.

Type:

DataSegment|Tuple[DataSegment, …]

property data_size: Tuple[int, ...] | Tuple[Tuple[int, ...]]

the output/formatted data size(s) of the data segment(s). If there is a single data segment, then this will be Tuple[int, …], otherwise it will be Tuple[Tuple, int, …], …].

Type:

Tuple[int, …]|Tuple[Tuple[int, …], …]

property files_to_delete_on_close: List[str]

A collection of files to delete on the close operation.

Type:

List[str]

get_data_segment_as_tuple() Tuple[DataSegment, ...]

Get the data segment collection as a tuple, to avoid the need for redundant checking issues.

Return type:

Tuple[DataSegment, …]

get_data_size_as_tuple() Tuple[Tuple[int, ...], ...]

Get the data size collection as a tuple of tuples, to avoid the need for redundant checking issues.

Return type:

Tuple[Tuple[int, …], …]

get_raw_data_size_as_tuple() Tuple[Tuple[int, ...], ...]

Get the raw data size collection as a tuple of tuples, to avoid the need for redundant checking issues.

Return type:

Tuple[Tuple[int, …], …]

property image_count: int

The number of images/data segments from which to read.

Type:

int

property raw_data_size: Tuple[int, ...] | Tuple[Tuple[int, ...]]

the raw data size(s) of the data segment(s). If there is a single data segment, then this will be Tuple[int, …], otherwise it will be Tuple[Tuple, int, …], …].

Type:

Tuple[int, …]|Tuple[Tuple[int, …], …]

read(*ranges: None | int | Tuple[int, ...] | slice, index: int = 0, squeeze: bool = True) ndarray

Read formatted data from the given data segment. Note this is an alias to the __call__() called as reader(*ranges, index=index, raw=False, squeeze=squeeze).

Parameters:
  • ranges (Sequence[Union[None, int, Tuple[int, ...], slice]]) – The slice definition appropriate for data_segment[index].read() usage.

  • index (int) – The data_segment index. This is ignored if image_count== 1.

  • squeeze (bool) – Squeeze length 1 dimensions out of the shape of the return array?

Return type:

numpy.ndarray

See also

See

meth:sarpy.io.general.data_segment.DataSegment.read.

read_chip(*ranges: Sequence[None | int | Tuple[int, ...] | slice], index: int = 0, squeeze: bool = True) ndarray

This is identical to read(), and presented for backwards compatibility.

Parameters:
  • ranges (Sequence[Union[None, int, Tuple[int, ...], slice]]) –

  • index (int) –

  • squeeze (bool) –

Return type:

numpy.ndarray

See also

read()

read_raw(*ranges: None | int | Tuple[int, ...] | slice, index: int = 0, squeeze: bool = True) ndarray

Read raw data from the given data segment. Note this is an alias to the __call__() called as reader(*ranges, index=index, raw=True, squeeze=squeeze).

Parameters:
  • ranges (Sequence[Union[None, int, Tuple[int, ...], slice]]) – The slice definition appropriate for data_segment[index].read() usage.

  • index (int) – The data_segment index. This is ignored if image_count== 1.

  • squeeze (bool) – Squeeze length 1 dimensions out of the shape of the return array?

Return type:

numpy.ndarray

See also

See

meth:sarpy.io.general.data_segment.DataSegment.read_raw.

property reader_type: str

A descriptive string for the type of reader

Type:

str

class sarpy.io.received.crsd.CRSDReader1(*args, **kwargs)

Bases: CRSDReader

The CRSD version 1 reader.

Updated in version 1.3.0 for reading changes.

property crsd_meta: CRSDType

the crsd meta_data.

Type:

CRSDType

property crsd_header: CRSDHeader

The CRSD header object.

Type:

CRSDHeader

read_support_array(index: int | str, *ranges) ndarray

Read the support array.

Parameters:
  • index (int|str) – The support array integer index.

  • ranges (Sequence[None|int|Tuple[int, ...]|slice]) – The slice definition appropriate for support array usage.

Return type:

numpy.ndarray

Raises:

TypeError – If called on a reader which doesn’t support this.

read_support_block() Dict

Reads the entirety of support block(s).

Returns:

Dictionary of numpy.ndarray containing the support arrays.

Return type:

Dict[str, numpy.ndarray]

read_pvp_variable(variable, index, the_range=None)

Read the vector parameter for the given variable and CRSD channel.

Parameters:
  • variable (str) –

  • index (int|str) – The channel index or identifier.

  • the_range (None|int|Tuple[int, ...]|slice) – The indices for the vector parameter. None returns all, a integer returns the single value at that location, otherwise the input determines a slice.

Returns:

This will return None if there is no such variable, otherwise the data.

Return type:

None|numpy.ndarray

read_pvp_array(index, the_range=None)

Read the PVP array from the requested channel.

Parameters:
  • index (int|str) – The support array integer index (of cphd.Data.Channels list) or identifier.

  • the_range (None|int|Tuple[int, ...]|slice) – The indices for the vector parameter. None returns all, a integer returns the single value at that location, otherwise the input determines a slice.

Returns:

pvp_array

Return type:

numpy.ndarray

read_pvp_block() Dict[str, ndarray]

Reads the entirety of the PVP block(s).

Returns:

Dictionary containing the PVP arrays.

Return type:

Dict[str, numpy.ndarray]

read_signal_block() Dict[str, ndarray]

Reads the entirety of signal block(s), with data formatted as complex64 (after accounting for AmpSF).

Returns:

Dictionary of numpy.ndarray containing the signal arrays.

Return type:

Dict[str, numpy.ndarray]

read_signal_block_raw() Dict[str, ndarray]

Reads the entirety of signal block(s), with data formatted in file storage format (no converting to complex, no consideration of AmpSF).

Returns:

Dictionary of numpy.ndarray containing the signal arrays.

Return type:

Dict[str, numpy.ndarray]

read_chip(*ranges: Sequence[None | int | Tuple[int, ...] | slice], index: int | str = 0, squeeze: bool = True) ndarray

This is identical to read(), and presented for backwards compatibility.

Parameters:
  • ranges (Sequence[Union[None, int, Tuple[int, ...], slice]]) –

  • index (int|str) –

  • squeeze (bool) –

Return type:

numpy.ndarray

See also

read()

read(*ranges: Sequence[None | int | Tuple[int, ...] | slice], index: int | str = 0, squeeze: bool = True) ndarray

Read formatted data from the given data segment. Note this is an alias to the __call__() called as reader(*ranges, index=index, raw=False, squeeze=squeeze).

Parameters:
  • ranges (Sequence[Union[None, int, Tuple[int, ...], slice]]) – The slice definition appropriate for data_segment[index].read() usage.

  • index (int|str) – The data_segment index or channel identifier.

  • squeeze (bool) – Squeeze length 1 dimensions out of the shape of the return array?

Return type:

numpy.ndarray

See also

See

meth:sarpy.io.general.data_segment.DataSegment.read.

read_raw(*ranges: Sequence[None | int | Tuple[int, ...] | slice], index: int | str = 0, squeeze: bool = True) ndarray

Read raw data from the given data segment. Note this is an alias to the __call__() called as reader(*ranges, index=index, raw=True, squeeze=squeeze).

Parameters:
  • ranges (Sequence[Union[None, int, Tuple[int, ...], slice]]) – The slice definition appropriate for data_segment[index].read() usage.

  • index (int|str) – The data_segment index or crsd channel identifier.

  • squeeze (bool) – Squeeze length 1 dimensions out of the shape of the return array?

Return type:

numpy.ndarray

See also

See

meth:sarpy.io.general.data_segment.DataSegment.read_raw.

close()

This should perform any necessary clean-up operations, like closing open file handles, deleting any temp files, etc.

property closed: bool

Is the reader closed? Reading will result in a ValueError

Type:

bool

property crsd_details: CRSDDetails

The crsd details object.

Type:

CRSDDetails

property crsd_version: str

The CRSD version.

Type:

str

property data_segment: DataSegment | Tuple[DataSegment, ...]

The data segment collection.

Type:

DataSegment|Tuple[DataSegment, …]

property data_size: Tuple[int, ...] | Tuple[Tuple[int, ...]]

the output/formatted data size(s) of the data segment(s). If there is a single data segment, then this will be Tuple[int, …], otherwise it will be Tuple[Tuple, int, …], …].

Type:

Tuple[int, …]|Tuple[Tuple[int, …], …]

property file_name: str

Defined as a convenience property.

Type:

None|str

property files_to_delete_on_close: List[str]

A collection of files to delete on the close operation.

Type:

List[str]

get_data_segment_as_tuple() Tuple[DataSegment, ...]

Get the data segment collection as a tuple, to avoid the need for redundant checking issues.

Return type:

Tuple[DataSegment, …]

get_data_size_as_tuple() Tuple[Tuple[int, ...], ...]

Get the data size collection as a tuple of tuples, to avoid the need for redundant checking issues.

Return type:

Tuple[Tuple[int, …], …]

get_raw_data_size_as_tuple() Tuple[Tuple[int, ...], ...]

Get the raw data size collection as a tuple of tuples, to avoid the need for redundant checking issues.

Return type:

Tuple[Tuple[int, …], …]

property image_count: int

The number of images/data segments from which to read.

Type:

int

property raw_data_size: Tuple[int, ...] | Tuple[Tuple[int, ...]]

the raw data size(s) of the data segment(s). If there is a single data segment, then this will be Tuple[int, …], otherwise it will be Tuple[Tuple, int, …], …].

Type:

Tuple[int, …]|Tuple[Tuple[int, …], …]

property reader_type: str

A descriptive string for the type of reader

Type:

str

sarpy.io.received.crsd.is_a(file_name: str) CRSDReader | None

Tests whether a given file_name corresponds to a CRSD file. Returns a reader instance, if so.

Parameters:

file_name (str) – the file_name to check

Returns:

Appropriate CRSDReader instance if CRSD file, None otherwise

Return type:

CRSDReader1|None

class sarpy.io.received.crsd.CRSDWriter1(file_object: str | BinaryIO, meta: CRSDType | None = None, writing_details: CRSDWritingDetails | None = None, check_existence: bool = True)

Bases: CPHDWriter1

The CRSD version 1 writer.

Updated in version 1.3.0 for writing changes.

close()

This should perform any necessary final steps, like closing open file handles, deleting any temp files, etc. Trying to read newly created file without closing may raise a ValueError.

property closed: bool

Is the writer closed? Reading file after writing can result in a ValueError if writer was not closed.

Type:

bool

property data_segment: Tuple[DataSegment, ...]

The data segment collection.

Type:

Tuple[DataSegment, …]

property data_size: Tuple[Tuple[int, ...]]

the formatted data sizes of the data segments.

Type:

Tuple[Tuple[int, …], …]

flush(force: bool = False) None

Try to perform any necessary steps to flush written data to the disk/buffer.

Parameters:

force (bool) – Try force flushing, even for incompletely written data.

Return type:

None

property image_count: int

The number of overall images/data segments.

Type:

int

property raw_data_size: Tuple[int, ...] | Tuple[Tuple[int, ...]]

the raw data sizes of the data segments.

Type:

Tuple[Tuple[int, …], …]

write(data: ndarray, start_indices: None | int | Tuple[int, ...] = None, subscript: None | Tuple[slice, ...] = None, index: int | str = 0) None

Write the data to the appropriate data segment. This is an alias to writer(data, start_indices=start_indices, subscript=subscript, index=index, raw=False).

Only one of `start_indices` and `subscript` should be specified.

Parameters:
  • data (numpy.ndarray) – The data to write.

  • start_indices (None|int|Tuple[int, ...]) – Assuming a contiguous chunk of data, this provides the starting indices of the chunk. Any missing (tail) coordinates will be filled in with 0’s.

  • subscript (None|Tuple[slice, ...]) – In contrast to providing start_indices, the slicing definition in formatted coordinates pertinent to the specified data segment.

  • index (int) – The index of the

See also

See

meth:sarpy.io.general.data_segment.DataSegment.write.

write_chip(data: ndarray, start_indices: None | int | Tuple[int, ...] = None, subscript: None | Tuple[slice, ...] = None, index: int | str = 0) None

This is identical to write(), and presented for backwards compatibility.

Parameters:
  • data (numpy.ndarray) –

  • start_indices (None|int|Tuple[int, ...]) –

  • subscript (None|Tuple[slice, ...]) –

  • index (int) –

See also

See

meth:sarpy.io.general.data_segment.DataSegment.write.

write_file(pvp_block: Dict[int | str, ndarray], signal_block: Dict[int | str, ndarray], support_block: Dict[int | str, ndarray] | None = None)

Write the blocks to the file.

Parameters:
  • pvp_block (Dict[str, numpy.ndarray]) – Dictionary of numpy.ndarray containing the PVP arrays. Keys must be consistent with self.meta

  • signal_block (Dict[str, numpy.ndarray]) – Dictionary of numpy.ndarray containing the complex64 formatted signal arrays. Keys must be consistent with self.meta

  • support_block (None|Dict[str, numpy.ndarray]) – Dictionary of numpy.ndarray containing the support arrays.

write_file_raw(pvp_block: Dict[int | str, ndarray], signal_block: Dict[int | str, ndarray], support_block: Dict[int | str, ndarray] | None = None)

Write the blocks to the file.

Parameters:
  • pvp_block (Dict[str, numpy.ndarray]) – Dictionary of numpy.ndarray containing the PVP arrays. Keys must be consistent with self.meta

  • signal_block (Dict[str, numpy.ndarray]) – Dictionary of numpy.ndarray containing the raw formatted (i.e. file storage format) signal arrays. Keys must be consistent with self.meta

  • support_block (None|Dict[str, numpy.ndarray]) – Dictionary of numpy.ndarray containing the support arrays.

write_pvp_array(identifier: int | str, data: ndarray) None

Write the PVP array data to the file.

Parameters:
  • identifier (int|str) –

  • data (numpy.ndarray) –

write_pvp_block(pvp_block: Dict[int | str, ndarray]) None

Write PVP block to the file.

Parameters:

pvp_block (dict) – Dictionary of numpy.ndarray containing the PVP arrays.

write_raw(data: ndarray, start_indices: None | int | Tuple[int, ...] = None, subscript: None | Tuple[slice, ...] = None, index: int | str = 0) None

Write the raw data to the file(s). This is an alias to writer(data, start_indices=start_indices, subscript=subscript, index=index, raw=True).

Only one of `start_indices` and `subscript` should be specified.

Parameters:
  • data (numpy.ndarray) – The data to write.

  • start_indices (None|int|Tuple[int, ...]) – Assuming a contiguous chunk of data, this provides the starting indices of the chunk. Any missing (tail) coordinates will be filled in with 0’s.

  • subscript (None|Tuple[slice, ...]) – In contrast to providing start_indices, the slicing definition in raw coordinates pertinent to the specified data segment.

  • index (int) –

See also

See

meth:sarpy.io.general.data_segment.DataSegment.write_raw.

write_signal_block(signal_block: Dict[int | str, ndarray]) None

Write signal block to the file.

Parameters:

signal_block (dict) – Dictionary of numpy.ndarray containing the signal arrays in complex64 format.

write_signal_block_raw(signal_block)

Write signal block to the file.

Parameters:

signal_block (dict) – Dictionary of numpy.ndarray containing the raw formatted (i.e. file storage format) signal arrays.

write_support_array(identifier: int | str, data: ndarray) None

Write support array data to the file.

Parameters:
  • identifier (int|str) –

  • data (numpy.ndarray) –

write_support_block(support_block: Dict[int | str, ndarray]) None

Write support block to the file.

Parameters:

support_block (dict) – Dictionary of numpy.ndarray containing the support arrays.

property file_name: str | None

Defined as a convenience property.

Type:

None|str

property meta: CRSDType

The metadata

Type:

CRSDType