From 263cea53be1191f0f57560ddf585c1da28f3f67f Mon Sep 17 00:00:00 2001 From: christian-B Date: Wed, 13 May 2026 17:19:24 +0100 Subject: [PATCH 01/15] python_checks.yml@mypy2 --- .github/workflows/python_actions.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python_actions.yml b/.github/workflows/python_actions.yml index 64e299dd8..1004a2f32 100644 --- a/.github/workflows/python_actions.yml +++ b/.github/workflows/python_actions.yml @@ -20,7 +20,7 @@ on: [push] jobs: call: - uses: SpiNNakerManchester/SupportScripts/.github/workflows/python_checks.yml@main + uses: SpiNNakerManchester/SupportScripts/.github/workflows/python_checks.yml@mypy2 with: dependencies: SpiNNUtils SpiNNMachine SpiNNMan PACMAN spalloc test-directories: unittests fec_integration_tests From 273fea5fe93afb84008f8c8ff072e030d1b6d981 Mon Sep 17 00:00:00 2001 From: christian-B Date: Wed, 13 May 2026 17:57:43 +0100 Subject: [PATCH 02/15] does not need to be bytearray --- .../set_reinjection_packet_types_message.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spinn_front_end_common/utilities/utility_objs/extra_monitor_scp_messages/set_reinjection_packet_types_message.py b/spinn_front_end_common/utilities/utility_objs/extra_monitor_scp_messages/set_reinjection_packet_types_message.py index 58dd94d3b..07aa8cb04 100644 --- a/spinn_front_end_common/utilities/utility_objs/extra_monitor_scp_messages/set_reinjection_packet_types_message.py +++ b/spinn_front_end_common/utilities/utility_objs/extra_monitor_scp_messages/set_reinjection_packet_types_message.py @@ -53,7 +53,7 @@ def __init__(self, x: int, y: int, p: int, multicast: bool, argument_1=int(bool(multicast)), argument_2=int(bool(point_to_point)), argument_3=int(bool(fixed_route)), - data=bytearray(struct.pack(" CheckOKResponse: From 16b325461d6ad0871b7d17226535ec8bdae5d42a Mon Sep 17 00:00:00 2001 From: christian-B Date: Wed, 13 May 2026 18:30:59 +0100 Subject: [PATCH 03/15] type is bytearray --- .../interface/buffer_management/buffer_manager.py | 2 +- spinn_front_end_common/interface/ds/ds_sqllite_database.py | 6 +++--- .../data_speed_up_packet_gatherer_machine_vertex.py | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/spinn_front_end_common/interface/buffer_management/buffer_manager.py b/spinn_front_end_common/interface/buffer_management/buffer_manager.py index e50433f9d..6cbf09d57 100644 --- a/spinn_front_end_common/interface/buffer_management/buffer_manager.py +++ b/spinn_front_end_common/interface/buffer_management/buffer_manager.py @@ -132,7 +132,7 @@ def __init__(self) -> None: def _request_data( self, placement_x: int, placement_y: int, address: int, - length: int) -> bytes: + length: int) -> bytearray: """ Uses the extra monitor cores for data extraction. diff --git a/spinn_front_end_common/interface/ds/ds_sqllite_database.py b/spinn_front_end_common/interface/ds/ds_sqllite_database.py index 93d1d42a0..31a44aaa6 100644 --- a/spinn_front_end_common/interface/ds/ds_sqllite_database.py +++ b/spinn_front_end_common/interface/ds/ds_sqllite_database.py @@ -287,7 +287,7 @@ def get_double_region(self) -> Iterable[Tuple[int, int, int, int]]: yield (row["x"], row["y"], row["p"], row["region_num"]) def set_region_content( - self, x: int, y: int, p: int, region_num: int, content: bytes, + self, x: int, y: int, p: int, region_num: int, content: bytearray, content_debug: Optional[str]) -> None: """ Sets the content for this region @@ -458,7 +458,7 @@ def set_region_pointer(self, x: int, y: int, p: int, region_num: int, def get_region_pointers_and_content( self, x: int, y: int, p: int) -> Iterable[Tuple[ - int, int, Optional[bytes]]]: + int, int, Optional[bytearray]]]: """ Yields the number, pointers and content for each reserved region @@ -486,7 +486,7 @@ def get_region_pointers_and_content( yield row["region_num"], row["pointer"], content def get_regions_content( - self, x: int, y: int, p: int) -> Iterable[Tuple[int, int, bytes]]: + self, x: int, y: int, p: int) -> Iterable[Tuple[int, int, bytearray]]: """ Yields the number, pointers and content for each region diff --git a/spinn_front_end_common/utility_models/data_speed_up_packet_gatherer_machine_vertex.py b/spinn_front_end_common/utility_models/data_speed_up_packet_gatherer_machine_vertex.py index 8e6ea3c49..f5b9bb6d2 100644 --- a/spinn_front_end_common/utility_models/data_speed_up_packet_gatherer_machine_vertex.py +++ b/spinn_front_end_common/utility_models/data_speed_up_packet_gatherer_machine_vertex.py @@ -994,7 +994,7 @@ def unset_cores_for_data_streaming(self) -> None: def get_data( self, extra_monitor: ExtraMonitorSupportMachineVertex, placement: Placement, memory_address: int, - length_in_bytes: int) -> bytes: + length_in_bytes: int) -> bytearray: """ Gets data from a given core and memory address. From db0db5869ade0a322d65cdca9f884b18ce02ebc1 Mon Sep 17 00:00:00 2001 From: christian-B Date: Thu, 14 May 2026 07:44:48 +0100 Subject: [PATCH 04/15] no need to convert to bytearray --- .../interface_functions/host_no_bitfield_router_compression.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spinn_front_end_common/interface/interface_functions/host_no_bitfield_router_compression.py b/spinn_front_end_common/interface/interface_functions/host_no_bitfield_router_compression.py index bfc338b4b..f91ed379e 100644 --- a/spinn_front_end_common/interface/interface_functions/host_no_bitfield_router_compression.py +++ b/spinn_front_end_common/interface/interface_functions/host_no_bitfield_router_compression.py @@ -228,4 +228,4 @@ def _build_data(self, table: AbstractMulticastRoutingTable) -> bytes: entry.key, entry.mask, Router.convert_routing_table_entry_to_spinnaker_route(entry), get_defaultable_source_id(entry)) - return bytearray(data) + return data From 1b63a4b9bbbb840b9769c05328ee19e4e0aeac8d Mon Sep 17 00:00:00 2001 From: christian-B Date: Thu, 14 May 2026 08:38:04 +0100 Subject: [PATCH 05/15] bytes vs bytearray --- .../interface/buffer_management/buffer_manager.py | 6 +++--- .../buffer_management/storage_objects/buffer_database.py | 4 ++-- .../interface_functions/load_data_specification.py | 2 +- spinn_front_end_common/interface/profiling/profile_data.py | 2 +- .../data_speed_up_packet_gatherer_machine_vertex.py | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/spinn_front_end_common/interface/buffer_management/buffer_manager.py b/spinn_front_end_common/interface/buffer_management/buffer_manager.py index 6cbf09d57..75d5b7614 100644 --- a/spinn_front_end_common/interface/buffer_management/buffer_manager.py +++ b/spinn_front_end_common/interface/buffer_management/buffer_manager.py @@ -176,7 +176,7 @@ def _request_data( return extra_mon_data @staticmethod - def _verify_data(extra_mon_data: bytes, txrx_data: bytes) -> None: + def _verify_data(extra_mon_data: memoryview, txrx_data: memoryview) -> None: sm = difflib.SequenceMatcher(a=extra_mon_data, b=txrx_data) failed_index = -1 for (tag, i1, i2, j1, j2) in sm.get_opcodes(): @@ -432,7 +432,7 @@ def get_data_by_placement(self, placement: Placement, f"Unable to get data for vertex {placement.vertex}") def get_recording(self, placement: Placement, - recording_region_id: int) -> Tuple[bytes, bool]: + recording_region_id: int) -> Tuple[memoryview, bool]: """ Get the data container for the data retrieved during the simulation from a specific region area of a core. @@ -457,7 +457,7 @@ def get_recording(self, placement: Placement, placement, recording_region_id, lookup_error) def get_download(self, placement: Placement, - recording_region_id: int) -> Tuple[bytes, bool]: + recording_region_id: int) -> Tuple[memoryview, bool]: """ Get the data container for the data retrieved during the simulation from a specific region area of a core. diff --git a/spinn_front_end_common/interface/buffer_management/storage_objects/buffer_database.py b/spinn_front_end_common/interface/buffer_management/storage_objects/buffer_database.py index ad8578f7f..74a2c3e4e 100644 --- a/spinn_front_end_common/interface/buffer_management/storage_objects/buffer_database.py +++ b/spinn_front_end_common/interface/buffer_management/storage_objects/buffer_database.py @@ -338,7 +338,7 @@ def get_last_extraction_id(self) -> int: raise LookupError("No Extraction id found") def store_recording(self, x: int, y: int, p: int, region: int, - missing: bool, data: bytes) -> None: + missing: bool, data: bytearray | bytes) -> None: """ Store some information in the corresponding buffer for a specific chip, core and recording region. @@ -368,7 +368,7 @@ def store_recording(self, x: int, y: int, p: int, region: int, def store_download( self, x: int, y: int, p: int, region: int, missing: bool, - data: bytes) -> None: + data: bytearray | bytes) -> None: """ Store some information in the corresponding buffer for a specific chip, core and recording region. diff --git a/spinn_front_end_common/interface/interface_functions/load_data_specification.py b/spinn_front_end_common/interface/interface_functions/load_data_specification.py index 200b54821..a2e9bfb39 100644 --- a/spinn_front_end_common/interface/interface_functions/load_data_specification.py +++ b/spinn_front_end_common/interface/interface_functions/load_data_specification.py @@ -34,7 +34,7 @@ from spinn_front_end_common.interface.ds import DsSqlliteDatabase logger = FormatAdapter(logging.getLogger(__name__)) -_Writer: TypeAlias = Callable[[int, int, int, bytes], Any] +_Writer: TypeAlias = Callable[[int, int, int, bytearray], Any] MONITOR_CUTOFF = 12800 # 50 packets of 256 bytes diff --git a/spinn_front_end_common/interface/profiling/profile_data.py b/spinn_front_end_common/interface/profiling/profile_data.py index 1031daec7..67dad642c 100644 --- a/spinn_front_end_common/interface/profiling/profile_data.py +++ b/spinn_front_end_common/interface/profiling/profile_data.py @@ -58,7 +58,7 @@ def __init__(self, tag_labels: Mapping[int, str]): self._tags: Dict[str, Tuple[numpy.ndarray, numpy.ndarray]] = dict() self._max_time: float = 0.0 - def add_data(self, data: bytes) -> None: + def add_data(self, data: bytearray) -> None: """ Add profiling data read from the profile section. diff --git a/spinn_front_end_common/utility_models/data_speed_up_packet_gatherer_machine_vertex.py b/spinn_front_end_common/utility_models/data_speed_up_packet_gatherer_machine_vertex.py index f5b9bb6d2..a744aca18 100644 --- a/spinn_front_end_common/utility_models/data_speed_up_packet_gatherer_machine_vertex.py +++ b/spinn_front_end_common/utility_models/data_speed_up_packet_gatherer_machine_vertex.py @@ -572,7 +572,7 @@ def __make_data_in_message(self, payload: bytes) -> SDPMessage: @staticmethod def __make_data_out_message( - placement: Placement, payload: bytes) -> SDPMessage: + placement: Placement, payload: bytearray | bytes) -> SDPMessage: return SDPMessage( sdp_header=SDPHeader( destination_chip_x=placement.x, From 8c76c0ed1d4890148a2e30331799bc5cea920c90 Mon Sep 17 00:00:00 2001 From: christian-B Date: Thu, 14 May 2026 09:34:20 +0100 Subject: [PATCH 06/15] canit just be bytes --- .../data_speed_up_packet_gatherer_machine_vertex.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spinn_front_end_common/utility_models/data_speed_up_packet_gatherer_machine_vertex.py b/spinn_front_end_common/utility_models/data_speed_up_packet_gatherer_machine_vertex.py index a744aca18..b81081218 100644 --- a/spinn_front_end_common/utility_models/data_speed_up_packet_gatherer_machine_vertex.py +++ b/spinn_front_end_common/utility_models/data_speed_up_packet_gatherer_machine_vertex.py @@ -572,7 +572,7 @@ def __make_data_in_message(self, payload: bytes) -> SDPMessage: @staticmethod def __make_data_out_message( - placement: Placement, payload: bytearray | bytes) -> SDPMessage: + placement: Placement, payload: bytes) -> SDPMessage: return SDPMessage( sdp_header=SDPHeader( destination_chip_x=placement.x, @@ -1200,7 +1200,7 @@ def _determine_and_retransmit_missing_seq_nums( len(missing_seq_nums) - seq_num_offset) # build data holder accordingly - data = bytearray( + data = bytes( (size_of_data_left_to_transmit + WORDS_FOR_COMMAND_N_MISSING_TRANSACTION) * BYTES_PER_WORD) @@ -1223,7 +1223,7 @@ def _determine_and_retransmit_missing_seq_nums( len(missing_seq_nums) - seq_num_offset) # build data holder accordingly - data = bytearray( + data = bytes( (size_of_data_left_to_transmit + WORDS_FOR_COMMAND_TRANSACTION) * BYTES_PER_WORD) From dead4fdbf13c97e66901f55290cce1db4215e4c8 Mon Sep 17 00:00:00 2001 From: christian-B Date: Thu, 14 May 2026 09:34:41 +0100 Subject: [PATCH 07/15] return Never --- .../interface/buffer_management/buffer_manager.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/spinn_front_end_common/interface/buffer_management/buffer_manager.py b/spinn_front_end_common/interface/buffer_management/buffer_manager.py index 75d5b7614..c1ab062a1 100644 --- a/spinn_front_end_common/interface/buffer_management/buffer_manager.py +++ b/spinn_front_end_common/interface/buffer_management/buffer_manager.py @@ -19,6 +19,8 @@ import logging from typing import ( Dict, Iterable, List, Optional, Set, Tuple, cast, TYPE_CHECKING) +from typing_extensions import Never + from spinn_utilities.config_holder import get_config_bool from spinn_utilities.log import FormatAdapter from spinn_utilities.ordered_set import OrderedSet @@ -176,7 +178,7 @@ def _request_data( return extra_mon_data @staticmethod - def _verify_data(extra_mon_data: memoryview, txrx_data: memoryview) -> None: + def _verify_data(extra_mon_data: bytearray, txrx_data: bytearray) -> None: sm = difflib.SequenceMatcher(a=extra_mon_data, b=txrx_data) failed_index = -1 for (tag, i1, i2, j1, j2) in sm.get_opcodes(): @@ -407,7 +409,7 @@ def __python_extract_no_monitors( self._retreive_by_placement(placement) def get_data_by_placement(self, placement: Placement, - recording_region_id: int) -> Tuple[bytes, bool]: + recording_region_id: int) -> Tuple[memoryview, bool]: """ Deprecated use get_recording or get_download @@ -432,7 +434,7 @@ def get_data_by_placement(self, placement: Placement, f"Unable to get data for vertex {placement.vertex}") def get_recording(self, placement: Placement, - recording_region_id: int) -> Tuple[memoryview, bool]: + recording_region_id: int) -> Tuple[bytes, bool]: """ Get the data container for the data retrieved during the simulation from a specific region area of a core. @@ -479,11 +481,11 @@ def get_download(self, placement: Placement, placement.x, placement.y, placement.p, recording_region_id, -1) except LookupError as lookup_error: - return self._raise_error( + self._raise_error( placement, recording_region_id, lookup_error) def _raise_error(self, placement: Placement, recording_region_id: int, - lookup_error: LookupError) -> Tuple[bytes, bool]: + lookup_error: LookupError) -> Never: """ Raises the correct exception- """ From b8b42baa9da84550d80575223b809cf32e451e01 Mon Sep 17 00:00:00 2001 From: christian-B Date: Thu, 14 May 2026 09:49:20 +0100 Subject: [PATCH 08/15] byte bytearray annotation fixes --- .../interface/buffer_management/buffer_manager.py | 2 +- .../data_speed_up_packet_gatherer_machine_vertex.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/spinn_front_end_common/interface/buffer_management/buffer_manager.py b/spinn_front_end_common/interface/buffer_management/buffer_manager.py index c1ab062a1..8e36a18d0 100644 --- a/spinn_front_end_common/interface/buffer_management/buffer_manager.py +++ b/spinn_front_end_common/interface/buffer_management/buffer_manager.py @@ -434,7 +434,7 @@ def get_data_by_placement(self, placement: Placement, f"Unable to get data for vertex {placement.vertex}") def get_recording(self, placement: Placement, - recording_region_id: int) -> Tuple[bytes, bool]: + recording_region_id: int) -> Tuple[memoryview, bool]: """ Get the data container for the data retrieved during the simulation from a specific region area of a core. diff --git a/spinn_front_end_common/utility_models/data_speed_up_packet_gatherer_machine_vertex.py b/spinn_front_end_common/utility_models/data_speed_up_packet_gatherer_machine_vertex.py index b81081218..0ef209ef0 100644 --- a/spinn_front_end_common/utility_models/data_speed_up_packet_gatherer_machine_vertex.py +++ b/spinn_front_end_common/utility_models/data_speed_up_packet_gatherer_machine_vertex.py @@ -489,7 +489,7 @@ def _generate_data_in_report( def send_data_into_spinnaker( self, x: int, y: int, base_address: int, - data: Union[BinaryIO, bytes, str, int], *, + data: BinaryIO | bytearray | bytes | str | int], *, n_bytes: Optional[int] = None, offset: int = 0) -> None: """ Sends a block of data into SpiNNaker to a given chip. From 62440e968cfb8307eff8ec588695605557db1b48 Mon Sep 17 00:00:00 2001 From: christian-B Date: Thu, 14 May 2026 10:06:38 +0100 Subject: [PATCH 09/15] revert changes --- .../set_reinjection_packet_types_message.py | 2 +- .../data_speed_up_packet_gatherer_machine_vertex.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/spinn_front_end_common/utilities/utility_objs/extra_monitor_scp_messages/set_reinjection_packet_types_message.py b/spinn_front_end_common/utilities/utility_objs/extra_monitor_scp_messages/set_reinjection_packet_types_message.py index 07aa8cb04..58dd94d3b 100644 --- a/spinn_front_end_common/utilities/utility_objs/extra_monitor_scp_messages/set_reinjection_packet_types_message.py +++ b/spinn_front_end_common/utilities/utility_objs/extra_monitor_scp_messages/set_reinjection_packet_types_message.py @@ -53,7 +53,7 @@ def __init__(self, x: int, y: int, p: int, multicast: bool, argument_1=int(bool(multicast)), argument_2=int(bool(point_to_point)), argument_3=int(bool(fixed_route)), - data=bytes(struct.pack(" CheckOKResponse: diff --git a/spinn_front_end_common/utility_models/data_speed_up_packet_gatherer_machine_vertex.py b/spinn_front_end_common/utility_models/data_speed_up_packet_gatherer_machine_vertex.py index 0ef209ef0..60a545130 100644 --- a/spinn_front_end_common/utility_models/data_speed_up_packet_gatherer_machine_vertex.py +++ b/spinn_front_end_common/utility_models/data_speed_up_packet_gatherer_machine_vertex.py @@ -489,7 +489,7 @@ def _generate_data_in_report( def send_data_into_spinnaker( self, x: int, y: int, base_address: int, - data: BinaryIO | bytearray | bytes | str | int], *, + data: BinaryIO | bytearray | bytes | str | int, *, n_bytes: Optional[int] = None, offset: int = 0) -> None: """ Sends a block of data into SpiNNaker to a given chip. @@ -1200,7 +1200,7 @@ def _determine_and_retransmit_missing_seq_nums( len(missing_seq_nums) - seq_num_offset) # build data holder accordingly - data = bytes( + data = bytearray( (size_of_data_left_to_transmit + WORDS_FOR_COMMAND_N_MISSING_TRANSACTION) * BYTES_PER_WORD) @@ -1223,7 +1223,7 @@ def _determine_and_retransmit_missing_seq_nums( len(missing_seq_nums) - seq_num_offset) # build data holder accordingly - data = bytes( + data = bytearray( (size_of_data_left_to_transmit + WORDS_FOR_COMMAND_TRANSACTION) * BYTES_PER_WORD) From 2f8d81d7cb78c5cf394e8e25acc462f92ea6e8ee Mon Sep 17 00:00:00 2001 From: christian-B Date: Thu, 14 May 2026 12:00:11 +0100 Subject: [PATCH 10/15] does it need to be bytearray --- .../set_reinjection_packet_types_message.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spinn_front_end_common/utilities/utility_objs/extra_monitor_scp_messages/set_reinjection_packet_types_message.py b/spinn_front_end_common/utilities/utility_objs/extra_monitor_scp_messages/set_reinjection_packet_types_message.py index 58dd94d3b..391e3e44e 100644 --- a/spinn_front_end_common/utilities/utility_objs/extra_monitor_scp_messages/set_reinjection_packet_types_message.py +++ b/spinn_front_end_common/utilities/utility_objs/extra_monitor_scp_messages/set_reinjection_packet_types_message.py @@ -53,7 +53,7 @@ def __init__(self, x: int, y: int, p: int, multicast: bool, argument_1=int(bool(multicast)), argument_2=int(bool(point_to_point)), argument_3=int(bool(fixed_route)), - data=bytearray(struct.pack(" CheckOKResponse: From 48babc9c66b19609607fd8a052656ad15a17cf24 Mon Sep 17 00:00:00 2001 From: christian-B Date: Thu, 14 May 2026 12:41:26 +0100 Subject: [PATCH 11/15] bytearray or bytes --- .../interface_functions/load_data_specification.py | 2 +- .../data_speed_up_packet_gatherer_machine_vertex.py | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/spinn_front_end_common/interface/interface_functions/load_data_specification.py b/spinn_front_end_common/interface/interface_functions/load_data_specification.py index a2e9bfb39..fc011c698 100644 --- a/spinn_front_end_common/interface/interface_functions/load_data_specification.py +++ b/spinn_front_end_common/interface/interface_functions/load_data_specification.py @@ -34,7 +34,7 @@ from spinn_front_end_common.interface.ds import DsSqlliteDatabase logger = FormatAdapter(logging.getLogger(__name__)) -_Writer: TypeAlias = Callable[[int, int, int, bytearray], Any] +_Writer: TypeAlias = Callable[[int, int, int, bytearray | bytes], Any] MONITOR_CUTOFF = 12800 # 50 packets of 256 bytes diff --git a/spinn_front_end_common/utility_models/data_speed_up_packet_gatherer_machine_vertex.py b/spinn_front_end_common/utility_models/data_speed_up_packet_gatherer_machine_vertex.py index 60a545130..8f93af71a 100644 --- a/spinn_front_end_common/utility_models/data_speed_up_packet_gatherer_machine_vertex.py +++ b/spinn_front_end_common/utility_models/data_speed_up_packet_gatherer_machine_vertex.py @@ -606,7 +606,7 @@ def __open_connection(self) -> SCAMPConnection: def _send_data_via_extra_monitors( self, destination_chip: Chip, start_address: int, - data_to_write: bytes) -> None: + data_to_write: bytearray | bytes) -> None: """ Sends data using the extra monitor cores. @@ -739,7 +739,7 @@ def _read_in_missing_seq_nums( return seen_last, seen_all def _outgoing_retransmit_missing_seq_nums( - self, data_to_write: bytes, missing: Set[int], + self, data_to_write: bytearray | bytes, missing: Set[int], connection: SCAMPConnection) -> None: """ Transmits back into SpiNNaker the missing data based off missing @@ -772,7 +772,7 @@ def __position_from_seq_number(seq_num: int) -> int: return BYTES_IN_FULL_PACKET_WITH_KEY * seq_num def __make_data_in_stream_message( - self, data_to_write: bytes, seq_num: int, + self, data_to_write: bytearray | bytes, seq_num: int, position: Optional[int]) -> Tuple[SDPMessage, int]: """ Determine the data needed to be sent to the SpiNNaker machine @@ -833,7 +833,7 @@ def __send_tell_flag(self, connection: SCAMPConnection) -> None: _DataInCommands.SEND_TELL, self._transaction_id))) def _send_all_data_based_packets( - self, data_to_write: bytes, start_address: int, + self, data_to_write: bytearray | bytes, start_address: int, connection: SCAMPConnection) -> None: """ Send all the data as one block. From b8a22d3fb446c6c0368c9197c9420b588af2463b Mon Sep 17 00:00:00 2001 From: christian-B Date: Thu, 14 May 2026 12:47:53 +0100 Subject: [PATCH 12/15] send bytes to the message --- .../data_speed_up_packet_gatherer_machine_vertex.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spinn_front_end_common/utility_models/data_speed_up_packet_gatherer_machine_vertex.py b/spinn_front_end_common/utility_models/data_speed_up_packet_gatherer_machine_vertex.py index 8f93af71a..262deb642 100644 --- a/spinn_front_end_common/utility_models/data_speed_up_packet_gatherer_machine_vertex.py +++ b/spinn_front_end_common/utility_models/data_speed_up_packet_gatherer_machine_vertex.py @@ -1243,7 +1243,7 @@ def _determine_and_retransmit_missing_seq_nums( # build SDP message and send it to the core connection.send_sdp_message(self.__make_data_out_message( - placement, data)) + placement, bytes(data))) # sleep for ensuring core doesn't lose packets time.sleep(self._TIMEOUT_FOR_SENDING_IN_SECONDS) From 0b1bea54ece392acc4d866341aab22125d8b5d75 Mon Sep 17 00:00:00 2001 From: christian-B Date: Thu, 14 May 2026 13:45:37 +0100 Subject: [PATCH 13/15] mocks signature to match super --- .../test_front_end_common_dsg_region_reloader.py | 2 +- .../interface_functions/test_load_data_specification.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/unittests/interface/interface_functions/test_front_end_common_dsg_region_reloader.py b/unittests/interface/interface_functions/test_front_end_common_dsg_region_reloader.py index fcde7da50..392de1931 100644 --- a/unittests/interface/interface_functions/test_front_end_common_dsg_region_reloader.py +++ b/unittests/interface/interface_functions/test_front_end_common_dsg_region_reloader.py @@ -111,7 +111,7 @@ def __init__(self) -> None: @overrides(MockableTransceiver.write_memory) def write_memory( self, x: int, y: int, base_address: int, - data: Union[BinaryIO, bytes, int, str], *, + data: Union[BinaryIO, bytearray, bytes, int, str], *, n_bytes: Optional[int] = None, offset: int = 0, cpu: int = 0, get_sum: bool = False) -> Tuple[int, int]: self._regions_rewritten.append((base_address, data)) diff --git a/unittests/interface/interface_functions/test_load_data_specification.py b/unittests/interface/interface_functions/test_load_data_specification.py index 5d2055166..5442cb98d 100644 --- a/unittests/interface/interface_functions/test_load_data_specification.py +++ b/unittests/interface/interface_functions/test_load_data_specification.py @@ -68,7 +68,7 @@ def malloc_sdram( @overrides(Version5Transceiver.write_memory) def write_memory( self, x: int, y: int, base_address: int, - data: Union[BinaryIO, bytes, int, str], *, + data: Union[BinaryIO, bytearray, bytes, int, str], *, n_bytes: Optional[int] = None, offset: int = 0, cpu: int = 0, get_sum: bool = False) -> Tuple[int, int]: if isinstance(data, int): From 59937e301f9c19f43ff53e5d7213c2067d8e7ca3 Mon Sep 17 00:00:00 2001 From: christian-B Date: Thu, 14 May 2026 13:45:37 +0100 Subject: [PATCH 14/15] flake8 --- .../interface/buffer_management/buffer_manager.py | 7 ++++--- spinn_front_end_common/interface/ds/ds_sqllite_database.py | 4 ++-- .../data_speed_up_packet_gatherer_machine_vertex.py | 3 +-- .../test_front_end_common_dsg_region_reloader.py | 2 +- .../interface_functions/test_load_data_specification.py | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/spinn_front_end_common/interface/buffer_management/buffer_manager.py b/spinn_front_end_common/interface/buffer_management/buffer_manager.py index 8e36a18d0..2e36ccafc 100644 --- a/spinn_front_end_common/interface/buffer_management/buffer_manager.py +++ b/spinn_front_end_common/interface/buffer_management/buffer_manager.py @@ -134,7 +134,7 @@ def __init__(self) -> None: def _request_data( self, placement_x: int, placement_y: int, address: int, - length: int) -> bytearray: + length: int) -> bytearray: """ Uses the extra monitor cores for data extraction. @@ -408,8 +408,9 @@ def __python_extract_no_monitors( for placement in progress.over(recording_placements): self._retreive_by_placement(placement) - def get_data_by_placement(self, placement: Placement, - recording_region_id: int) -> Tuple[memoryview, bool]: + def get_data_by_placement( + self, placement: Placement, + recording_region_id: int) -> Tuple[memoryview, bool]: """ Deprecated use get_recording or get_download diff --git a/spinn_front_end_common/interface/ds/ds_sqllite_database.py b/spinn_front_end_common/interface/ds/ds_sqllite_database.py index 31a44aaa6..1d45c2745 100644 --- a/spinn_front_end_common/interface/ds/ds_sqllite_database.py +++ b/spinn_front_end_common/interface/ds/ds_sqllite_database.py @@ -485,8 +485,8 @@ def get_region_pointers_and_content( content = None yield row["region_num"], row["pointer"], content - def get_regions_content( - self, x: int, y: int, p: int) -> Iterable[Tuple[int, int, bytearray]]: + def get_regions_content(self, x: int, y: int, + p: int) -> Iterable[Tuple[int, int, bytearray]]: """ Yields the number, pointers and content for each region diff --git a/spinn_front_end_common/utility_models/data_speed_up_packet_gatherer_machine_vertex.py b/spinn_front_end_common/utility_models/data_speed_up_packet_gatherer_machine_vertex.py index 262deb642..2f3f20936 100644 --- a/spinn_front_end_common/utility_models/data_speed_up_packet_gatherer_machine_vertex.py +++ b/spinn_front_end_common/utility_models/data_speed_up_packet_gatherer_machine_vertex.py @@ -19,8 +19,7 @@ import struct from enum import Enum, IntEnum from typing import ( - Any, BinaryIO, Iterable, List, Optional, Set, Tuple, Union, - TYPE_CHECKING) + Any, BinaryIO, Iterable, List, Optional, Set, Tuple, TYPE_CHECKING) from spinn_utilities.config_holder import get_config_bool, get_report_path from spinn_utilities.overrides import overrides diff --git a/unittests/interface/interface_functions/test_front_end_common_dsg_region_reloader.py b/unittests/interface/interface_functions/test_front_end_common_dsg_region_reloader.py index fcde7da50..392de1931 100644 --- a/unittests/interface/interface_functions/test_front_end_common_dsg_region_reloader.py +++ b/unittests/interface/interface_functions/test_front_end_common_dsg_region_reloader.py @@ -111,7 +111,7 @@ def __init__(self) -> None: @overrides(MockableTransceiver.write_memory) def write_memory( self, x: int, y: int, base_address: int, - data: Union[BinaryIO, bytes, int, str], *, + data: Union[BinaryIO, bytearray, bytes, int, str], *, n_bytes: Optional[int] = None, offset: int = 0, cpu: int = 0, get_sum: bool = False) -> Tuple[int, int]: self._regions_rewritten.append((base_address, data)) diff --git a/unittests/interface/interface_functions/test_load_data_specification.py b/unittests/interface/interface_functions/test_load_data_specification.py index 5d2055166..5442cb98d 100644 --- a/unittests/interface/interface_functions/test_load_data_specification.py +++ b/unittests/interface/interface_functions/test_load_data_specification.py @@ -68,7 +68,7 @@ def malloc_sdram( @overrides(Version5Transceiver.write_memory) def write_memory( self, x: int, y: int, base_address: int, - data: Union[BinaryIO, bytes, int, str], *, + data: Union[BinaryIO, bytearray, bytes, int, str], *, n_bytes: Optional[int] = None, offset: int = 0, cpu: int = 0, get_sum: bool = False) -> Tuple[int, int]: if isinstance(data, int): From a4a57fc43b566655c87de0f127211d8bce0af7cd Mon Sep 17 00:00:00 2001 From: "Christian Y. Brenninkmeijer" Date: Mon, 18 May 2026 10:08:54 +0100 Subject: [PATCH 15/15] python_checks.yml@main --- .github/workflows/python_actions.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python_actions.yml b/.github/workflows/python_actions.yml index 1004a2f32..64e299dd8 100644 --- a/.github/workflows/python_actions.yml +++ b/.github/workflows/python_actions.yml @@ -20,7 +20,7 @@ on: [push] jobs: call: - uses: SpiNNakerManchester/SupportScripts/.github/workflows/python_checks.yml@mypy2 + uses: SpiNNakerManchester/SupportScripts/.github/workflows/python_checks.yml@main with: dependencies: SpiNNUtils SpiNNMachine SpiNNMan PACMAN spalloc test-directories: unittests fec_integration_tests