pytest fails for 0.23.4: `Shape of passed values is (2, 3), indices imply (2, 4)` in `TestDataFrameAnalytics.test_matmul`
# Test output
```
=================================== FAILURES ===================================
______________________ TestDataFrameAnalytics.test_matmul ______________________

blocks = [array([[ 0.82824335,  0.9711043 , -0.43859174],
       [ 0.48922558,  0.25556855, -2.00621065]])]
axes = [Index(['one', 'two'], dtype='object'), Index(['p', 'q', 'r', 's'], dtype='object')]

    def create_block_manager_from_blocks(blocks, axes):
        try:
            if len(blocks) == 1 and not isinstance(blocks[0], Block):
                # if blocks[0] is of length 0, return empty blocks
                if not len(blocks[0]):
                    blocks = []
                else:
                    # It's OK if a single block is passed as values, its placement
                    # is basically "all items", but if there're many, don't bother
                    # converting, it's an error anyway.
                    blocks = [make_block(values=blocks[0],
                                         placement=slice(0, len(axes[0])))]

>           mgr = BlockManager(blocks, axes)

/nix/store/plkd9gch9jhcrchnmb27ncxk163hx0r6-python3.7-pandas-0.23.4/lib/python3.7/site-packages/pandas/core/internals.py:4859:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = BlockManager
Items: Index(['one', 'two'], dtype='object')
Axis 1: Index(['p', 'q', 'r', 's'], dtype='object')
FloatBlock: slice(0, 2, 1), 2 x 3, dtype: float64
blocks = [FloatBlock: slice(0, 2, 1), 2 x 3, dtype: float64]
axes = [Index(['one', 'two'], dtype='object'), Index(['p', 'q', 'r', 's'], dtype='object')]
do_integrity_check = True

    def __init__(self, blocks, axes, do_integrity_check=True):
        self.axes = [_ensure_index(ax) for ax in axes]
        self.blocks = tuple(blocks)

        for block in blocks:
            if block.is_sparse:
                if len(block.mgr_locs) != 1:
                    raise AssertionError("Sparse block refers to multiple "
                                         "items")
            else:
                if self.ndim != block.ndim:
                    raise AssertionError(
                        'Number of Block dimensions ({block}) must equal '
                        'number of axes ({self})'.format(block=block.ndim,
                                                         self=self.ndim))

        if do_integrity_check:
>           self._verify_integrity()

/nix/store/plkd9gch9jhcrchnmb27ncxk163hx0r6-python3.7-pandas-0.23.4/lib/python3.7/site-packages/pandas/core/internals.py:3282:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = BlockManager
Items: Index(['one', 'two'], dtype='object')
Axis 1: Index(['p', 'q', 'r', 's'], dtype='object')
FloatBlock: slice(0, 2, 1), 2 x 3, dtype: float64

    def _verify_integrity(self):
        mgr_shape = self.shape
        tot_items = sum(len(x.mgr_locs) for x in self.blocks)
        for block in self.blocks:
            if block._verify_integrity and block.shape[1:] != mgr_shape[1:]:
>               construction_error(tot_items, block.shape[1:], self.axes)

/nix/store/plkd9gch9jhcrchnmb27ncxk163hx0r6-python3.7-pandas-0.23.4/lib/python3.7/site-packages/pandas/core/internals.py:3493:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

tot_items = 2, block_shape = (3,)
axes = [Index(['one', 'two'], dtype='object'), Index(['p', 'q', 'r', 's'], dtype='object')]
e = None

    def construction_error(tot_items, block_shape, axes, e=None):
        """ raise a helpful message about our construction """
        passed = tuple(map(int, [tot_items] + list(block_shape)))
        implied = tuple(map(int, [len(ax) for ax in axes]))
        if passed == implied and e is not None:
            raise e
        if block_shape[0] == 0:
            raise ValueError("Empty data passed with indices specified.")
        raise ValueError("Shape of passed values is {0}, indices imply {1}".format(
>           passed, implied))
E       ValueError: Shape of passed values is (2, 3), indices imply (2, 4)

/nix/store/plkd9gch9jhcrchnmb27ncxk163hx0r6-python3.7-pandas-0.23.4/lib/python3.7/site-packages/pandas/core/internals.py:4843: ValueError

During handling of the above exception, another exception occurred:

self = <pandas.tests.frame.test_analytics.TestDataFrameAnalytics object at 0x7fff8822c978>

    @pytest.mark.skipif(not PY35,
                        reason='matmul supported for Python>=3.5')
    @pytest.mark.xfail(
        _np_version_under1p12,
        reason="unpredictable return types under numpy < 1.12")
    def test_matmul(self):
        # matmul test is for GH #10259
        a = DataFrame(np.random.randn(3, 4), index=['a', 'b', 'c'],
                      columns=['p', 'q', 'r', 's'])
        b = DataFrame(np.random.randn(4, 2), index=['p', 'q', 'r', 's'],
                      columns=['one', 'two'])

        # DataFrame @ DataFrame
        result = operator.matmul(a, b)
        expected = DataFrame(np.dot(a.values, b.values),
                             index=['a', 'b', 'c'],
                             columns=['one', 'two'])
        tm.assert_frame_equal(result, expected)

        # DataFrame @ Series
        result = operator.matmul(a, b.one)
        expected = Series(np.dot(a.values, b.one.values),
                          index=['a', 'b', 'c'])
        tm.assert_series_equal(result, expected)

        # np.array @ DataFrame
>       result = operator.matmul(a.values, b)

/nix/store/plkd9gch9jhcrchnmb27ncxk163hx0r6-python3.7-pandas-0.23.4/lib/python3.7/site-packages/pandas/tests/frame/test_analytics.py:2294:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/nix/store/plkd9gch9jhcrchnmb27ncxk163hx0r6-python3.7-pandas-0.23.4/lib/python3.7/site-packages/pandas/core/generic.py:1610: in __array_wrap__
    return self._constructor(result, **d).__finalize__(self)
/nix/store/plkd9gch9jhcrchnmb27ncxk163hx0r6-python3.7-pandas-0.23.4/lib/python3.7/site-packages/pandas/core/frame.py:379: in __init__
    copy=copy)
/nix/store/plkd9gch9jhcrchnmb27ncxk163hx0r6-python3.7-pandas-0.23.4/lib/python3.7/site-packages/pandas/core/frame.py:536: in _init_ndarray
    return create_block_manager_from_blocks([values], [columns, index])
/nix/store/plkd9gch9jhcrchnmb27ncxk163hx0r6-python3.7-pandas-0.23.4/lib/python3.7/site-packages/pandas/core/internals.py:4866: in create_block_manager_from_blocks
    construction_error(tot_items, blocks[0].shape[1:], axes, e)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

tot_items = 2, block_shape = (3,)
axes = [Index(['one', 'two'], dtype='object'), Index(['p', 'q', 'r', 's'], dtype='object')]
e = ValueError('Shape of passed values is (2, 3), indices imply (2, 4)')

    def construction_error(tot_items, block_shape, axes, e=None):
        """ raise a helpful message about our construction """
        passed = tuple(map(int, [tot_items] + list(block_shape)))
        implied = tuple(map(int, [len(ax) for ax in axes]))
        if passed == implied and e is not None:
            raise e
        if block_shape[0] == 0:
            raise ValueError("Empty data passed with indices specified.")
        raise ValueError("Shape of passed values is {0}, indices imply {1}".format(
>           passed, implied))
E       ValueError: Shape of passed values is (2, 3), indices imply (2, 4)

/nix/store/plkd9gch9jhcrchnmb27ncxk163hx0r6-python3.7-pandas-0.23.4/lib/python3.7/site-packages/pandas/core/internals.py:4843: ValueError
```