def get_sdram_usage_for_atoms(self, vertex_slice, graph):
        send_buffer_size = 0
        if self._send_buffer_times is not None:
            send_buffer_size = self._send_buffer_max_space

        recording_size = (ReverseIPTagMulticastSourcePartitionedVertex.
                          get_recording_data_size(1))
        if self._recording_enabled:
            if self._using_auto_pause_and_resume:
                recording_size += self._minimum_sdram_for_buffering
            else:
                recording_size += self._record_buffer_size
                recording_size += (ReverseIPTagMulticastSourcePartitionedVertex
                                   .get_buffer_state_region_size(1))
        mallocs = \
            ReverseIPTagMulticastSourcePartitionedVertex.n_regions_to_allocate(
                self._send_buffer_times is not None, self._recording_enabled)
        allocation_size = mallocs * constants.SARK_PER_MALLOC_SDRAM_USAGE

        return ((constants.DATA_SPECABLE_BASIC_SETUP_INFO_N_WORDS * 4) +
                (ReverseIPTagMulticastSourcePartitionedVertex.
                 _CONFIGURATION_REGION_SIZE) + send_buffer_size +
                recording_size + allocation_size +
                (ReverseIPTagMulticastSourcePartitionedVertex.
                 get_provenance_data_size(0)))
    def get_sdram_usage_for_atoms(self, vertex_slice, graph):
        send_buffer_size = 0
        if self._send_buffer_times is not None:
            send_buffer_size = self._send_buffer_max_space

        recording_size = ReverseIPTagMulticastSourcePartitionedVertex.get_recording_data_size(1)
        if self._record_buffer_size > 0:
            recording_size += self._record_buffer_size
            recording_size += ReverseIPTagMulticastSourcePartitionedVertex.get_buffer_state_region_size(1)
        mallocs = ReverseIPTagMulticastSourcePartitionedVertex.n_regions_to_allocate(
            self._send_buffer_times is not None, self._recording_enabled
        )
        allocation_size = mallocs * constants.SARK_PER_MALLOC_SDRAM_USAGE

        return (
            (constants.DATA_SPECABLE_BASIC_SETUP_INFO_N_WORDS * 4)
            + (ReverseIPTagMulticastSourcePartitionedVertex._CONFIGURATION_REGION_SIZE)
            + send_buffer_size
            + recording_size
            + allocation_size
        )
    def create_subvertex(self,
                         vertex_slice,
                         resources_required,
                         label=None,
                         constraints=None):
        send_buffer_times = self._send_buffer_times
        if (self._send_buffer_times is not None
                and len(self._send_buffer_times) > 0):
            if hasattr(self._send_buffer_times[0], "__len__"):
                send_buffer_times = self._send_buffer_times[
                    vertex_slice.lo_atom:vertex_slice.hi_atom + 1]
        subvertex = ReverseIPTagMulticastSourcePartitionedVertex(
            n_keys=vertex_slice.n_atoms,
            resources_required=resources_required,
            machine_time_step=self._machine_time_step,
            timescale_factor=self._timescale_factor,
            label=label,
            constraints=constraints,
            board_address=self._board_address,
            receive_port=self._receive_port,
            receive_sdp_port=self._receive_sdp_port,
            receive_tag=self._receive_tag,
            virtual_key=self._virtual_key,
            prefix=self._prefix,
            prefix_type=self._prefix_type,
            check_keys=self._check_keys,
            send_buffer_times=send_buffer_times,
            send_buffer_max_space=self._send_buffer_max_space,
            send_buffer_space_before_notify=(
                self._send_buffer_space_before_notify),
            send_buffer_notification_ip_address=(
                self._send_buffer_notification_ip_address),
            send_buffer_notification_port=self._send_buffer_notification_port,
            send_buffer_notification_tag=self._send_buffer_notification_tag)
        subvertex.set_no_machine_time_steps(self._no_machine_time_steps)
        subvertex.first_machine_time_step = self._first_machine_time_step
        if self._record_buffer_size > 0:
            sdram_per_ts = 0
            if self._using_auto_pause_and_resume:

                # Currently not known how much SDRAM might be used per
                # timestep by this object, so we assume a minimum value here
                sdram_per_ts = 8

            subvertex.enable_recording(
                self._record_buffering_ip_address, self._record_buffering_port,
                self._record_buffering_board_address,
                self._record_buffering_tag, self._record_buffer_size,
                self._record_buffer_size_before_receive,
                self._minimum_sdram_for_buffering, sdram_per_ts)
        self._subvertices.append((vertex_slice, subvertex))
        return subvertex
 def create_subvertex(self, vertex_slice, resources_required, label=None, constraints=None):
     send_buffer_times = self._send_buffer_times
     if self._send_buffer_times is not None and len(self._send_buffer_times) > 0:
         if hasattr(self._send_buffer_times[0], "__len__"):
             send_buffer_times = self._send_buffer_times[vertex_slice.lo_atom : vertex_slice.hi_atom + 1]
     subvertex = ReverseIPTagMulticastSourcePartitionedVertex(
         n_keys=self.n_atoms,
         resources_required=resources_required,
         machine_time_step=self._machine_time_step,
         timescale_factor=self._timescale_factor,
         label=label,
         constraints=constraints,
         board_address=self._board_address,
         receive_port=self._receive_port,
         receive_sdp_port=self._receive_sdp_port,
         receive_tag=self._receive_tag,
         virtual_key=self._virtual_key,
         prefix=self._prefix,
         prefix_type=self._prefix_type,
         check_keys=self._check_keys,
         send_buffer_times=send_buffer_times,
         send_buffer_max_space=self._send_buffer_max_space,
         send_buffer_space_before_notify=(self._send_buffer_space_before_notify),
         send_buffer_notification_ip_address=(self._send_buffer_notification_ip_address),
         send_buffer_notification_port=self._send_buffer_notification_port,
         send_buffer_notification_tag=self._send_buffer_notification_tag,
     )
     subvertex.set_no_machine_time_steps(self._no_machine_time_steps)
     subvertex.first_machine_time_step = self._first_machine_time_step
     if self._record_buffer_size > 0:
         subvertex.enable_recording(
             self._record_buffering_ip_address,
             self._record_buffering_port,
             self._record_buffering_board_address,
             self._record_buffering_tag,
             self._record_buffer_size,
             self._record_buffer_size_before_receive,
         )
     self._subvertices.append((vertex_slice, subvertex))
     return subvertex