def concatenate(values, axis=0): """Concatenate a sequence of tensors along the specified axis. .. warning:: Tensors that are incompatible (such as Torch and TensorFlow tensors) cannot both be present. Args: values (Sequence[tensor_like]): Sequence of tensor-like objects to concatenate. The objects must have the same shape, except in the dimension corresponding to axis (the first, by default). axis (int): The axis along which the input tensors are concatenated. If axis is None, tensors are flattened before use. Default is 0. Returns: tensor_like: The concatenated tensor. **Example** >>> x = tf.constant([0.6, 0.1, 0.6]) >>> y = tf.Variable([0.1, 0.2, 0.3]) >>> z = np.array([5., 8., 101.]) >>> concatenate([x, y, z]) <tf.Tensor: shape=(3, 3), dtype=float32, numpy= array([6.00e-01, 1.00e-01, 6.00e-01, 1.00e-01, 2.00e-01, 3.00e-01, 5.00e+00, 8.00e+00, 1.01e+02], dtype=float32)> """ interface = _multi_dispatch(values) if interface == "torch": import torch if axis is None: # flatten and then concatenate zero'th dimension # to reproduce numpy's behaviour values = [np.flatten(torch.as_tensor(t)) for t in values] axis = 0 else: values = [torch.as_tensor(t) for t in values] if interface == "tensorflow" and axis is None: # flatten and then concatenate zero'th dimension # to reproduce numpy's behaviour values = [np.flatten(np.array(t)) for t in values] axis = 0 return np.concatenate(values, axis=axis, like=interface)
def order_matrix(original, sortd, sigma=0.1): """Apply a simple RBF kernel to the difference between original and sortd, with the kernel width set by sigma. Normalise each row to sum to 1.0.""" diff = (np.array(original).reshape(-1, 1) - sortd)**2 rbf = np.exp(-(diff) / (2 * sigma**2)) return (rbf.T / np.sum(rbf, axis=1)).T
import numpy as onp import pytest from autoray import numpy as anp from pennylane import numpy as np from pennylane import math as fn tf = pytest.importorskip("tensorflow", minversion="2.1") torch = pytest.importorskip("torch") jax = pytest.importorskip("jax") test_multi_dispatch_stack_data = [ [[1.0, 0.0], [2.0, 3.0]], ([1.0, 0.0], [2.0, 3.0]), onp.array([[1.0, 0.0], [2.0, 3.0]]), anp.array([[1.0, 0.0], [2.0, 3.0]]), np.array([[1.0, 0.0], [2.0, 3.0]]), jax.numpy.array([[1.0, 0.0], [2.0, 3.0]]), tf.constant([[1.0, 0.0], [2.0, 3.0]]), ] @pytest.mark.parametrize("x", test_multi_dispatch_stack_data) def test_multi_dispatch_stack(x): """Test that the decorated autoray function stack can handle all inputs""" stack = fn.multi_dispatch(argnum=0, tensor_list=0)(autoray.numpy.stack) res = stack(x) assert fn.allequal(res, [[1.0, 0.0], [2.0, 3.0]]) @pytest.mark.parametrize("x", test_multi_dispatch_stack_data)