Bug 1959774

Summary: python-theano fails to build with Python 3.10: TypeError: TensorType does not support iteration. Maybe you are using builtins.sum instead of theano.tensor.sum? (Maybe .max?)
Product: [Fedora] Fedora Reporter: Tomáš Hrnčiar <thrnciar>
Component: python-theanoAssignee: Jerry James <loganjerry>
Status: CLOSED WORKSFORME QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: rawhideCC: igor.raits, loganjerry, mhroncok, sergio.pasra, thrnciar
Target Milestone: ---   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2021-06-11 10:18:28 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 1890881, 1927309, 1927313, 1969092, 1969158, 1969194    

Description Tomáš Hrnčiar 2021-05-12 10:48:29 UTC
python-theano fails to build with Python 3.10.0b1.

=================================== FAILURES ===================================
_____________________________ TestRopLop.test_max ______________________________

self = Shape.0

    def __iter__(self):
        try:
            for i in range(theano.tensor.basic.get_vector_length(self)):
>               yield self[i]

theano/tensor/var.py:638: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = Shape.0, args = (0,)

    def __getitem__(self, args):
        def includes_bool(args_el):
            if isinstance(args_el, (np.bool_, bool)) or (
                hasattr(args_el, "dtype") and args_el.dtype == "bool"
            ):
                return True
            if not isinstance(args_el, theano.tensor.Variable) and isinstance(
                args_el, Iterable
            ):
                for el in args_el:
                    if includes_bool(el):
                        return True
            return False
    
        if isinstance(args, list) and any([isinstance(a, slice) for a in args]):
            pass
        elif not isinstance(args, tuple):
            args = (args,)
    
        # Count the dimensions, check for bools and find ellipses.
        ellipses = []
        index_dim_count = 0
        for i, arg in enumerate(args):
            if arg is np.newaxis:
                # no increase in index_dim_count
                pass
            elif arg is Ellipsis:
                # no increase in index_dim_count
                ellipses.append(i)
            elif (
                isinstance(arg, (np.ndarray, theano.tensor.Variable))
                and hasattr(arg, "dtype")
                and arg.dtype == "bool"
            ):
                index_dim_count += arg.ndim
            else:
                # Python arrays can contain a mixture of bools and integers,
                # which requires complex rules to handle all special cases.
                # These rules differ slightly between NumPy versions.
                # Since earlier versions of Theano did not support any boolean
                # indexing, it is safe to throw an error if we encounter
                # any of these difficult cases.
                if includes_bool(arg):
                    raise TypeError(
                        "TensorType does not support Python bools "
                        "for indexing, such as tensor[[True, False]]. "
                        "To use a boolean mask, convert the mask to "
                        "a NumPy array first, e.g., "
                        "tensor[numpy.array([True, False])]."
                    )
                index_dim_count += 1
    
        # Check if the number of dimensions isn't too large.
        if self.ndim < index_dim_count:
            raise IndexError("too many indices for array")
    
        # Convert an Ellipsis if provided into an appropriate number of
        # slice(None).
        if len(ellipses) > 1:
            raise IndexError("an index can only have a single Ellipsis (`...`)")
        elif len(ellipses) == 1:
            ellipsis_at = ellipses[0]
            args = list(args)
            args[ellipsis_at : ellipsis_at + 1] = [slice(None)] * (
                self.ndim - index_dim_count
            )
    
        def is_empty_array(val):
            return (isinstance(val, (tuple, list)) and len(val) == 0) or (
                isinstance(val, np.ndarray) and val.size == 0
            )
    
        # Force input to be int64 datatype if input is an empty list or tuple
        # Else leave it as is if it is a real number
        # Convert python literals to theano constants
        args = tuple(
>           [
                theano.tensor.subtensor.as_index_constant(
                    np.array(inp, dtype=np.int64) if is_empty_array(inp) else inp
                )
                for inp in args
            ]
        )

theano/tensor/var.py:516: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

.0 = <tuple_iterator object at 0x7f209fb80d60>

        [
>           theano.tensor.subtensor.as_index_constant(
                np.array(inp, dtype=np.int64) if is_empty_array(inp) else inp
            )
            for inp in args
        ]
    )

theano/tensor/var.py:517: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

a = 0

    def as_index_constant(a):
        """Convert Python literals to Theano constants--when possible--in Subtensor arguments.
    
        This will leave `Variable`s untouched.
        """
        if a is None:
            return a
        elif isinstance(a, slice):
            return slice(
                as_index_constant(a.start),
                as_index_constant(a.stop),
                as_index_constant(a.step),
            )
        elif isinstance(a, (int, np.integer)):
>           return scal.ScalarConstant(scal.int64, a)

theano/tensor/subtensor.py:53: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = Constant{0}, type = Scalar(int64), data = 0, name = None

    def __init__(self, type, data, name=None):
        super().__init__(type, None, None, name)
        self.data = type.filter(data)
>       add_tag_trace(self)

theano/gof/graph.py:598: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

thing = Constant{0}, user_line = 8

    def add_tag_trace(thing, user_line=None):
        """
        Add tag.trace to an node or variable.
    
        The argument is returned after being affected (inplace).
    
        Parameters
        ----------
        thing
            The object where we add .tag.trace.
        user_line
            The max number of user line to keep.
    
        Notes
        -----
        We also use config.traceback__limit for the maximum number of stack level
        we look.
    
        """
        if user_line is None:
            user_line = config.traceback__limit
    
        if user_line == -1:
            user_line = None
        skips = [
            "theano/tensor/",
            "theano\\tensor\\",
            "theano/compile/",
            "theano\\compile\\",
            "theano/gof/",
            "theano\\gof\\",
            "theano/scalar/basic.py",
            "theano\\scalar\\basic.py",
            "theano/sandbox/",
            "theano\\sandbox\\",
            "theano/scan/",
            "theano\\scan\\",
            "theano/sparse/",
            "theano\\sparse\\",
            "theano/typed_list/",
            "theano\\typed_list\\",
        ]
    
        if config.traceback__compile_limit > 0:
            skips = []
    
>       tr = simple_extract_stack(limit=user_line, skips=skips)

theano/gof/utils.py:117: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

f = <frame at 0x7f20a0566710, file '/builddir/build/BUILD/Theano-PyMC-rel-1.0.13/theano/tensor/extra_ops.py', line -1, code <genexpr>>
limit = 8
skips = ['theano/tensor/', 'theano\\tensor\\', 'theano/compile/', 'theano\\compile\\', 'theano/gof/', 'theano\\gof\\', ...]

    def simple_extract_stack(f=None, limit=None, skips=None):
        """This is traceback.extract_stack from python 2.7 with this change:
    
        - Comment the update of the cache.
        - Skip internal stack trace level.
    
        The update of the cache call os.stat to verify is the cache is up
        to date.  This take too much time on cluster.
    
        limit - The number of stack level we want to return. If None, mean
        all what we can.
    
        skips - partial path of stack level we don't want to keep and count.
            When we find one level that isn't skipped, we stop skipping.
    
        """
        if skips is None:
            skips = []
    
        if f is None:
            try:
                raise ZeroDivisionError
            except ZeroDivisionError:
                f = sys.exc_info()[2].tb_frame.f_back
        if limit is None:
            if hasattr(sys, "tracebacklimit"):
                limit = sys.tracebacklimit
        trace = []
        n = 0
        while f is not None and (limit is None or n < limit):
            lineno = f.f_lineno
            co = f.f_code
            filename = co.co_filename
            name = co.co_name
            #        linecache.checkcache(filename)
>           line = linecache.getline(filename, lineno, f.f_globals)

theano/gof/utils.py:45: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

filename = '/builddir/build/BUILD/Theano-PyMC-rel-1.0.13/theano/tensor/extra_ops.py'
lineno = None
module_globals = {'Apply': <class 'theano.gof.graph.Apply'>, 'Bartlett': <class 'theano.tensor.extra_ops.Bartlett'>, 'BroadcastTo': <class 'theano.tensor.extra_ops.BroadcastTo'>, 'Collection': <class 'collections.abc.Collection'>, ...}

    def getline(filename, lineno, module_globals=None):
        """Get a line for a Python source file from the cache.
        Update the cache if it doesn't contain an entry for this file already."""
    
        lines = getlines(filename, module_globals)
>       if 1 <= lineno <= len(lines):
E       TypeError: '<=' not supported between instances of 'int' and 'NoneType'

/usr/lib64/python3.10/linecache.py:31: TypeError

During handling of the above exception, another exception occurred:

self = <tests.test_rop.TestRopLop object at 0x7f209fb80100>

    def test_max(self):
        # If we call max directly, we will return an CAReduce object
        # which doesn't have R_op implemented!
        # self.check_mat_rop_lop(tensor.max(self.mx, axis=[0,1])[0], ())
>       self.check_mat_rop_lop(tensor.max(self.mx, axis=0), (self.mat_in_shape[1],))

tests/test_rop.py:196: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/test_rop.py:105: in check_mat_rop_lop
    yv = tensor.Rop(y, self.mx, self.mv)
theano/gradient.py:323: in Rop
    _traverse(out.owner)
theano/gradient.py:317: in _traverse
    seen_nodes[node] = op.R_op(node.inputs, same_type_eval_points)
theano/tensor/basic.py:1504: in R_op
    return [eval_points[0][max_pos, arange(eval_points[0].shape[1])], None]
theano/tensor/var.py:577: in __getitem__
    return theano.tensor.subtensor.advanced_subtensor(self, *args)
theano/gof/op.py:639: in __call__
    node = self.make_node(*inputs, **kwargs)
theano/tensor/subtensor.py:2321: in make_node
    for i in indexed_result_shape(fake_shape, bcast_index)
theano/tensor/subtensor.py:410: in indexed_result_shape
    res_shape += broadcast_shape(
theano/tensor/extra_ops.py:1456: in broadcast_shape
    return broadcast_shape_iter(arrays, **kwargs)
theano/tensor/extra_ops.py:1489: in broadcast_shape_iter
    array_shapes = [
theano/tensor/extra_ops.py:1491: in <listcomp>
    + tuple(one if bcast else sh for sh, bcast in zip(a.shape, a.broadcastable))
theano/tensor/extra_ops.py:-1: in <genexpr>
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = Shape.0

    def __iter__(self):
        try:
            for i in range(theano.tensor.basic.get_vector_length(self)):
                yield self[i]
        except TypeError:
            # This prevents accidental iteration via sum(self)
>           raise TypeError(
                "TensorType does not support iteration. "
                "Maybe you are using builtins.sum instead of "
                "theano.tensor.sum? (Maybe .max?)"
            )
E           TypeError: TensorType does not support iteration. Maybe you are using builtins.sum instead of theano.tensor.sum? (Maybe .max?)

...

=========================== short test summary info ============================
FAILED tests/test_rop.py::TestRopLop::test_max - TypeError: TensorType does n...
FAILED tests/test_rop.py::TestRopLop::test_argmax - TypeError: TensorType doe...
FAILED tests/compile/test_nanguardmode.py::test_NanGuardMode - TypeError: Ten...
FAILED tests/gof/test_opt.py::test_pre_constant_merge - TypeError: TensorType...
FAILED tests/tensor/test_basic.py::TestAlloc::test_alloc_constant_folding - T...
FAILED tests/tensor/test_extra_ops.py::test_to_one_hot - TypeError: TensorTyp...
FAILED tests/tensor/test_extra_ops.py::test_broadcast_shape - TypeError: Tens...
FAILED tests/tensor/test_mlp.py::test_mlp - TypeError: TensorType does not su...
FAILED tests/tensor/test_opt.py::TestAllocZero::test_advancedincsubtensor_allocs0
FAILED tests/tensor/test_opt.py::TestAllocZero::test_advancedincsubtensor_allocs0t
FAILED tests/tensor/test_opt.py::TestAllocZero::test_advancedincsubtensor_allocs1
FAILED tests/tensor/test_opt.py::test_local_IncSubtensor_serialize - TypeErro...
FAILED tests/tensor/test_sort.py::TestSort::test_grad_negative_axis_2d - Type...
FAILED tests/tensor/test_sort.py::TestSort::test_grad_negative_axis_3d - Type...
FAILED tests/tensor/test_sort.py::TestSort::test_grad_negative_axis_4d - Type...
FAILED tests/tensor/test_sort.py::TestSort::test_grad_nonnegative_axis_2d - T...
FAILED tests/tensor/test_sort.py::TestSort::test_grad_nonnegative_axis_3d - T...
FAILED tests/tensor/test_sort.py::TestSort::test_grad_nonnegative_axis_4d - T...
FAILED tests/tensor/test_sort.py::TestTopK::test_grad[False-1-shp1] - TypeErr...
FAILED tests/tensor/test_sort.py::TestTopK::test_grad[False-1-shp2] - TypeErr...
FAILED tests/tensor/test_sort.py::TestTopK::test_grad[False-1-shp3] - TypeErr...
FAILED tests/tensor/test_sort.py::TestTopK::test_grad[False--1-shp1] - TypeEr...
FAILED tests/tensor/test_sort.py::TestTopK::test_grad[False--1-shp2] - TypeEr...
FAILED tests/tensor/test_sort.py::TestTopK::test_grad[False--1-shp3] - TypeEr...
FAILED tests/tensor/test_sort.py::TestTopK::test_grad[False-(1+n)//2-shp1] - ...
FAILED tests/tensor/test_sort.py::TestTopK::test_grad[False-(1+n)//2-shp2] - ...
FAILED tests/tensor/test_sort.py::TestTopK::test_grad[False-(1+n)//2-shp3] - ...
FAILED tests/tensor/test_sort.py::TestTopK::test_grad[False-n-1-shp1] - TypeE...
FAILED tests/tensor/test_sort.py::TestTopK::test_grad[False-n-1-shp2] - TypeE...
FAILED tests/tensor/test_sort.py::TestTopK::test_grad[False-n-1-shp3] - TypeE...
FAILED tests/tensor/test_sort.py::TestTopK::test_grad[False--n-shp1] - TypeEr...
FAILED tests/tensor/test_sort.py::TestTopK::test_grad[False--n-shp2] - TypeEr...
FAILED tests/tensor/test_sort.py::TestTopK::test_grad[False--n-shp3] - TypeEr...
FAILED tests/tensor/test_sort.py::TestTopK::test_grad[False-1-n-shp1] - TypeE...
FAILED tests/tensor/test_sort.py::TestTopK::test_grad[False-1-n-shp2] - TypeE...
FAILED tests/tensor/test_sort.py::TestTopK::test_grad[False-1-n-shp3] - TypeE...
FAILED tests/tensor/test_subtensor.py::TestSubtensor::test_ellipsis - TypeErr...
FAILED tests/tensor/test_subtensor.py::TestSubtensor::test_boolean - TypeErro...
FAILED tests/tensor/test_subtensor.py::TestSubtensor::test_adv_constant_arg
FAILED tests/tensor/test_subtensor.py::TestAdvancedSubtensor::test_index_w_int_and_vec
FAILED tests/tensor/test_subtensor.py::TestAdvancedSubtensor::test_adv_subtensor_w_int_and_matrix
FAILED tests/tensor/test_subtensor.py::TestAdvancedSubtensor::test_adv_subtensor_w_none_and_matrix
FAILED tests/tensor/test_subtensor.py::TestAdvancedSubtensor::test_adv_subtensor_w_slice_and_matrix
FAILED tests/tensor/test_subtensor.py::TestAdvancedSubtensor::test_adv_subtensor_w_matrix_and_int
FAILED tests/tensor/test_subtensor.py::TestAdvancedSubtensor::test_adv_subtensor_w_matrix_and_none
FAILED tests/tensor/test_subtensor.py::TestAdvancedSubtensor::test_inc_adv_subtensor_w_2vec
FAILED tests/tensor/test_subtensor.py::TestAdvancedSubtensor::test_inc_adv_subtensor_with_broadcasting
FAILED tests/tensor/test_subtensor.py::TestAdvancedSubtensor::test_inc_adv_subtensor_with_index_broadcasting
FAILED tests/tensor/test_subtensor.py::TestAdvancedSubtensor::test_2d_3d_tensors
FAILED tests/tensor/test_subtensor.py::TestAdvancedSubtensor::test_adv_sub_3d
FAILED tests/tensor/test_subtensor.py::TestAdvancedSubtensor::test_adv_grouped
FAILED tests/tensor/test_subtensor.py::TestAdvancedSubtensor::test_grad - Typ...
FAILED tests/tensor/test_subtensor.py::TestInferShape::test_AdvancedIncSubtensor
FAILED tests/tensor/test_subtensor.py::TestInferShape::test_AdvancedSubtensor
FAILED tests/tensor/test_subtensor.py::TestInferShape::test_AdvancedSubtensor_bool
FAILED tests/tensor/test_subtensor.py::test_indexed_result_shape - TypeError:...
FAILED tests/tensor/test_var.py::test__getitem__AdvancedSubtensor_bool - Type...
FAILED tests/tensor/test_var.py::test__getitem__AdvancedSubtensor - TypeError...
FAILED tests/tensor/nnet/test_nnet.py::TestCrossEntropyCategorical1Hot::test_get_rid_of_advanced_indexing_version_of_xent
FAILED tests/tensor/nnet/test_nnet.py::TestCrossEntropyCategorical1Hot::test_xent_thing_int32
FAILED tests/tensor/nnet/test_nnet.py::TestCrossEntropyCategorical1Hot::test_optimize_xent_vector
FAILED tests/tensor/nnet/test_nnet.py::TestCrossEntropyCategorical1Hot::test_optimize_xent_vector2
FAILED tests/tensor/nnet/test_nnet.py::TestCrossEntropyCategorical1Hot::test_optimize_xent_vector3
FAILED tests/tensor/nnet/test_nnet.py::TestCrossEntropyCategorical1Hot::test_optimize_xent_vector4
FAILED tests/tensor/nnet/test_nnet.py::TestCrossEntropyCategorical1Hot::test_crossentropy_softmax_1hot_with_bias_dxcale_cost
FAILED tests/tensor/nnet/test_nnet.py::test_h_softmax - TypeError: TensorType...
FAILED tests/tensor/random/test_opt.py::test_Subtensor_lift[indices0-True-dist_op0-dist_params0-size0]
FAILED tests/tensor/random/test_opt.py::test_Subtensor_lift[indices1-True-dist_op1-dist_params1-size1]
FAILED tests/tensor/random/test_opt.py::test_Subtensor_lift[indices3-True-dist_op3-dist_params3-size3]
FAILED tests/tensor/random/test_opt.py::test_Subtensor_lift[indices4-True-dist_op4-dist_params4-size4]
FAILED tests/tensor/random/test_opt.py::test_Subtensor_lift[indices5-False-dist_op5-dist_params5-size5]
= 71 failed, 3895 passed, 485 skipped, 7 xfailed, 105251 warnings in 5838.05s (1:37:18) =

For the build logs, see:
https://copr-be.cloud.fedoraproject.org/results/@python/python3.10/fedora-rawhide-x86_64/02181528-python-theano/

For all our attempts to build python-theano with Python 3.10, see:
https://copr.fedorainfracloud.org/coprs/g/python/python3.10/package/python-theano/

Testing and mass rebuild of packages is happening in copr. You can follow these instructions to test locally in mock if your package builds with Python 3.10:
https://copr.fedorainfracloud.org/coprs/g/python/python3.10/

Let us know here if you have any questions.

Python 3.10 will be included in Fedora 35. To make that update smoother, we're building Fedora packages with early pre-releases of Python 3.10.
A build failure prevents us from testing all dependent packages (transitive [Build]Requires), so if this package is required a lot, it's important for us to get it fixed soon.
We'd appreciate help from the people who know this package best, but if you don't want to work on this now, let us know so we can try to work around it on our side.

Comment 1 Miro Hrončok 2021-06-04 20:13:04 UTC
This is a mass-posted update. Sorry if it is not 100% accurate to this bugzilla.


The Python 3.10 rebuild is in progress in a Koji side tag. If you manage to fix the problem, please commit the fix in the rawhide branch, but don't build the package in regular rawhide.

You can either build the package in the side tag, with:

    $ fedpkg build --target=f35-python

Or you can the build and we will eventually build it for you.

Note that the rebuild is still in progress, so not all (build) dependencies of this package might be available right away.

Thanks.

See also https://fedoraproject.org/wiki/Changes/Python3.10

If you have general questions about the rebuild, please use this mailing list thread: https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/G47SGOYIQLRDTWGOSLSWERZSSHXDEDH5/

Comment 2 Miro Hrončok 2021-06-07 22:57:58 UTC
The f35-python side tag has been merged to Rawhide. From now on, build as you would normally build.

Comment 3 Miro Hrončok 2021-06-08 11:34:50 UTC
*** Bug 1969158 has been marked as a duplicate of this bug. ***

Comment 4 Jerry James 2021-06-09 12:25:26 UTC
I found a small change in the linecache code in python 3.10 was leading to the errors reported above.  I added a patch to fix that and got a good build in mock.  Building in koji, however, failed:

tests/tensor/nnet/test_corr3d.py ...sFs..F..F..F..FFF...Fatal Python error: Segmentation fault
Current thread 0xb6fa5010 (most recent call first):
  File "/builddir/build/BUILD/Theano-PyMC-rel-1.0.13/theano/gof/opt.py", line 251 in apply
  File "/builddir/build/BUILD/Theano-PyMC-rel-1.0.13/theano/gof/opt.py", line 78 in optimize
  File "/builddir/build/BUILD/Theano-PyMC-rel-1.0.13/theano/gof/opt.py", line 87 in __call__
  File "/builddir/build/BUILD/Theano-PyMC-rel-1.0.13/theano/compile/function/types.py", line 1602 in __init__
  File "/builddir/build/BUILD/Theano-PyMC-rel-1.0.13/theano/compile/function/types.py", line 1955 in orig_function
  File "/builddir/build/BUILD/Theano-PyMC-rel-1.0.13/theano/compile/function/pfunc.py", line 524 in pfunc
  File "/builddir/build/BUILD/Theano-PyMC-rel-1.0.13/theano/compile/function/__init__.py", line 337 in function
  File "/builddir/build/BUILD/Theano-PyMC-rel-1.0.13/theano/gradient.py", line 1857 in verify_grad
  File "/builddir/build/BUILD/Theano-PyMC-rel-1.0.13/tests/unittest_tools.py", line 77 in verify_grad
  File "/builddir/build/BUILD/Theano-PyMC-rel-1.0.13/tests/tensor/nnet/test_corr3d.py", line 173 in validate
  File "/builddir/build/BUILD/Theano-PyMC-rel-1.0.13/tests/tensor/nnet/test_corr3d.py", line 302 in test_shape_Constant_tensor
  File "/usr/lib/python3.10/site-packages/_pytest/python.py", line 183 in pytest_pyfunc_call
  File "/usr/lib/python3.10/site-packages/pluggy/callers.py", line 187 in _multicall
  File "/usr/lib/python3.10/site-packages/pluggy/manager.py", line 84 in <lambda>
  File "/usr/lib/python3.10/site-packages/pluggy/manager.py", line 93 in _hookexec
  File "/usr/lib/python3.10/site-packages/pluggy/hooks.py", line 286 in __call__
  File "/usr/lib/python3.10/site-packages/_pytest/python.py", line 1641 in runtest
  File "/usr/lib/python3.10/site-packages/_pytest/runner.py", line 162 in pytest_runtest_call
  File "/usr/lib/python3.10/site-packages/pluggy/callers.py", line 187 in _multicall
  File "/usr/lib/python3.10/site-packages/pluggy/manager.py", line 84 in <lambda>
  File "/usr/lib/python3.10/site-packages/pluggy/manager.py", line 93 in _hookexec
  File "/usr/lib/python3.10/site-packages/pluggy/hooks.py", line 286 in __call__
  File "/usr/lib/python3.10/site-packages/_pytest/runner.py", line 255 in <lambda>
  File "/usr/lib/python3.10/site-packages/_pytest/runner.py", line 311 in from_call
  File "/usr/lib/python3.10/site-packages/_pytest/runner.py", line 254 in call_runtest_hook
  File "/usr/lib/python3.10/site-packages/_pytest/runner.py", line 215 in call_and_report
  File "/usr/lib/python3.10/site-packages/_pytest/runner.py", line 126 in runtestprotocol
  File "/usr/lib/python3.10/site-packages/_pytest/runner.py", line 109 in pytest_runtest_protocol
  File "/usr/lib/python3.10/site-packages/pluggy/callers.py", line 187 in _multicall
  File "/usr/lib/python3.10/site-packages/pluggy/manager.py", line 84 in <lambda>
  File "/usr/lib/python3.10/site-packages/pluggy/manager.py", line 93 in _hookexec
  File "/usr/lib/python3.10/site-packages/pluggy/hooks.py", line 286 in __call__
  File "/usr/lib/python3.10/site-packages/_pytest/main.py", line 348 in pytest_runtestloop
  File "/usr/lib/python3.10/site-packages/pluggy/callers.py", line 187 in _multicall
  File "/usr/lib/python3.10/site-packages/pluggy/manager.py", line 84 in <lambda>
  File "/usr/lib/python3.10/site-packages/pluggy/manager.py", line 93 in _hookexec
  File "/usr/lib/python3.10/site-packages/pluggy/hooks.py", line 286 in __call__
  File "/usr/lib/python3.10/site-packages/_pytest/main.py", line 323 in _main
  File "/usr/lib/python3.10/site-packages/_pytest/main.py", line 269 in wrap_session
  File "/usr/lib/python3.10/site-packages/_pytest/main.py", line 316 in pytest_cmdline_main
  File "/usr/lib/python3.10/site-packages/pluggy/callers.py", line 187 in _multicall
  File "/usr/lib/python3.10/site-packages/pluggy/manager.py", line 84 in <lambda>
  File "/usr/lib/python3.10/site-packages/pluggy/manager.py", line 93 in _hookexec
  File "/usr/lib/python3.10/site-packages/pluggy/hooks.py", line 286 in __call__
  File "/usr/lib/python3.10/site-packages/_pytest/config/__init__.py", line 162 in main
  File "/usr/lib/python3.10/site-packages/_pytest/config/__init__.py", line 185 in console_main
  File "/usr/bin/pytest", line 33 in <module>
Extension modules: numpy.core._multiarray_umath, numpy.core._multiarray_tests, numpy.linalg.lapack_lite, numpy.linalg._umath_linalg, numpy.fft._pocketfft_internal, numpy.random._common, numpy.random.bit_generator, numpy.random._bounded_integers, numpy.random._mt19937, numpy.random.mtrand, numpy.random._philox, numpy.random._pcg64, numpy.random._sfc64, numpy.random._generator, lazylinker_ext.lazylinker_ext, scipy._lib._ccallback_c, scipy.special._ufuncs_cxx, scipy.special._ufuncs, scipy.special.specfun, scipy.linalg._fblas, scipy.linalg._flapack, scipy.linalg._flinalg, scipy.linalg._solve_toeplitz, scipy.linalg._matfuncs_sqrtm_triu, scipy.linalg.cython_blas, scipy.linalg.cython_lapack, scipy.linalg._decomp_update, scipy.sparse._sparsetools, scipy.sparse._csparsetools, scipy.sparse.csgraph._tools, scipy.sparse.csgraph._shortest_path, scipy.sparse.csgraph._traversal, scipy.sparse.csgraph._min_spanning_tree, scipy.sparse.csgraph._flow, scipy.sparse.csgraph._matching, scipy.sparse.csgraph._reordering, scipy.special._comb, scipy.special._ellip_harm_2, scipy.spatial.ckdtree, scipy._lib.messagestream, scipy.spatial.qhull, scipy.spatial._voronoi, scipy.spatial._distance_wrap, scipy.spatial._hausdorff, scipy.spatial.transform.rotation, scipy.ndimage._nd_image, _ni_label, scipy.ndimage._ni_label, scipy.optimize.minpack2, scipy.sparse.linalg.isolve._iterative, scipy.sparse.linalg.dsolve._superlu, scipy.sparse.linalg.eigen.arpack._arpack, scipy.optimize._group_columns, scipy.optimize._trlib._trlib, scipy.optimize._lbfgsb, scipy.optimize.moduleTNC, scipy.optimize._cobyla, scipy.optimize._slsqp, scipy.optimize._minpack, scipy.optimize._lsq.givens_elimination, scipy.optimize._zeros, scipy.optimize.__nnls, scipy.optimize._highs.cython.src._highs_wrapper, scipy.optimize._highs._highs_wrapper, scipy.optimize._highs.cython.src._highs_constants, scipy.optimize._highs._highs_constants, scipy.linalg._interpolative, scipy.optimize._bglu_dense, scipy.optimize._lsap_module, scipy.integrate._odepack, scipy.integrate._quadpack, scipy.integrate.vode, scipy.integrate._dop, scipy.integrate.lsoda, scipy.interpolate._fitpack, scipy.interpolate.dfitpack, scipy.interpolate._bspl, scipy.interpolate._ppoly, scipy.interpolate.interpnd, scipy.special.cython_special, scipy.stats._stats, scipy.stats.statlib, scipy.stats.mvn, scipy.signal.sigtools, scipy._lib._uarray._uarray, scipy.signal._max_len_seq_inner, scipy.signal._upfirdn_apply, scipy.signal.spline, scipy.signal._sosfilt, scipy.signal._spectral, scipy.signal._peak_finding_utils, pygpu.gpuarray, pygpu._elemwise, markupsafe._speedups, pygpu.blas, tmpa4dw21x2.m30586f65c469f1ab992342f7731fb75796c381649c411ab09a01493f6ab04d51, cutils_ext.cutils_ext, tmptmpeis7k.macf077186293f8476c41b47c31add37c91891631dc83bd64091704641881999d, tmpjzvg0s_t.mc617ef147f5bab39b7d0414573bade77789fa4e34cb6c59803b6d4631856c54a, tmpthfjvmbf.m38217f6f799366415613d6b5daa2cd53ba33827c2f1c85602948b22610f93f1a, tmpe27uqvfq.m7f731f8ee89857de49ba7dae4086ef8dc810ae01a76f298a4f8589742a6f759f, ...

where "..." stands for a lot more "tmp*" modules.  I have never seen this segfault before, nor did it occur in yesterday's mock build.  On the other hand, the koji builder was a 32-bit ARM machine, where my mock build was on an x86_64 machine.  Thoughts on how to diagnose this crash are welcome.

Comment 5 Jerry James 2021-06-09 12:38:22 UTC
The current python-theano package is not the latest code.  I have held off on further updates, because backwards incompatible changes were made that broke sympy.  Also the name changed from Theano to Aesara.  However, I now see that sympy upstream is preparing to release a new version with Aesara support:

https://github.com/sympy/sympy/pull/21087

If python-lasagne and python-pymc3 can be switched to Aesara as well, then we should submit an Aesara package for review.

Whether that will fix the current batch of build issues remains to be seen, of course.

Comment 6 Jerry James 2021-06-09 12:40:15 UTC
Correction: sympy upstream *did* release a new version with Aesara support.  Version 1.8, which is already available in Rawhide, has it.

Comment 7 Sergio Pascual 2021-06-10 16:50:04 UTC
(In reply to Jerry James from comment #5)
> The current python-theano package is not the latest code.  I have held off
> on further updates, because backwards incompatible changes were made that
> broke sympy.  Also the name changed from Theano to Aesara.  However, I now
> see that sympy upstream is preparing to release a new version with Aesara
> support:
> 
> https://github.com/sympy/sympy/pull/21087
> 
> If python-lasagne and python-pymc3 can be switched to Aesara as well, then
> we should submit an Aesara package for review.
> 
> Whether that will fix the current batch of build issues remains to be seen,
> of course.

Jerry, I have started to package Aesara. I have also finished an update of theano-pymc to 1.1.2 (it's not commited yet). I imagine this is the last version theano before switching to aesara.

How I proceed? Do I create a pull request?

Comment 8 Jerry James 2021-06-10 17:03:15 UTC
A pull request is fine.  Or I can make you a comaintainer of the python-theano package, if you prefer, and then you can commit directly.  Thanks for looking into aesara.

Comment 9 Sergio Pascual 2021-06-11 10:10:46 UTC
Great, I'm already a comaintainer, I think. 

It's built in rawhide


https://koji.fedoraproject.org/koji/buildinfo?buildID=1768264

Comment 10 Miro Hrončok 2021-06-11 10:18:28 UTC
Hello,

Please note that this comment was generated automatically. If you feel that this output has mistakes, please contact me via email (mhroncok).

All subpackages of a package against which this bug was filled are now installable or removed from Fedora 35.

Thanks for taking care of it!