I guess I answered my own question:

The forecast function definition has changed in gnuradio 3.10 and it is now
defined in such a way that the second argument is only the number of input
ports.
So a correct forecast looks like this.

    def forecast(self, noutput_items, ninputs):
        ninput_items_required = [0] * ninputs
        for i in range(ninputs):
            ninput_items_required[i] = noutput_items * self.sps
        return ninput_items_required

Achilleas

On Fri, Nov 1, 2024 at 1:36 PM Achilleas Anastasopoulos <anas...@umich.edu>
wrote:

> Hi everyone,
>
> I am running a simple flowgraph where I use an embedded python block.
>
> I have rewritten a forecast function.
>
> When I run the code I get:
> ============
> Executing: /usr/bin/python3 -u top_block.py
>
> thread_body_wrapper :error: ERROR thread[thread-per-block[15]: <block MF
> sampler and diff decoder(7)>]: TypeError: 'int' object does not support
> item assignment
>
> At:
>   /n/higgins/z/anastas/GNURADIO_LAB/Final Draft Lab
> 8/top_block_epy_block_0.py(39): forecast
>   /usr/lib/python3/dist-packages/gnuradio/gr/gateway.py(149):
> handle_forecast
> ===============
>
> It thinks that the second argument in forecast is an "int" instead of a
> list to be populated
> by the function.
>
> What am I missing? (I am using gnuradio 3.10.1.1 (Python 3.10.12))
> Also, where can i find the exact Python bindings for each of these
> functions?
>
> thanks
> Achilleas
>
> Here is the relevant code:
> =====================================
> class blk(gr.basic_block):  # other base classes are basic_block,
> decim_block, interp_block
>     """Embedded Python Block example"""
>
>     def __init__(self, datalength=10, sps = 8):
>         """arguments to this function show up as parameters in GRC"""
>         gr.basic_block.__init__(
>             self,
>             name='MF sampler and diff decoder',
>             in_sig=[np.int8, np.complex64],
>             out_sig=[np.int8]
>         )
>         self.datalength = datalength
>         self.sps = sps
>         self.set_output_multiple(self.datalength)
>         self.state=1
>
>     def forecast(self, noutput_items, ninput_items_required):
>         ninput_items_required[0] = noutput_items*self.sps
>         ninput_items_required[1] = noutput_items*self.sps
>
>

Reply via email to