repr(sharded_device_array) should print ShardedDeviceArray
Just noticed that we had a trivial regression in how repr(sharded_device_array) works:

```python
In [1]: from jax.api import device_put_sharded, devices

In [2]: device_put_sharded([1], devices())
Out[2]: DeviceArray([1], dtype=int32)
```

We use repr(x) to show the type of x, e.g. in demos, so we probably want to put this back.
diff --git a/jax/interpreters/xla.py b/jax/interpreters/xla.py
index 6a8cba5c8..4be8b3c22 100644
--- a/jax/interpreters/xla.py
+++ b/jax/interpreters/xla.py
@@ -1167,8 +1167,7 @@ for device_array in [_DeviceArray, _CppDeviceArray]:
 
   def __repr__(self):
     line_width = np.get_printoptions()["linewidth"]
-    # TODO(jblespia): Should we put back self.__class__.__name__ ?
-    prefix = '{}('.format("DeviceArray")
+    prefix = '{}('.format(self.__class__.__name__.lstrip('_'))
     s = np.array2string(self._value, prefix=prefix, suffix=',',
                         separator=', ', max_line_width=line_width)
     dtype_str = 'dtype={})'.format(self.dtype.name)
diff --git a/tests/pmap_test.py b/tests/pmap_test.py
index 4315ad106..c1880fdce 100644
--- a/tests/pmap_test.py
+++ b/tests/pmap_test.py
@@ -2091,6 +2091,10 @@ class ShardedDeviceArrayTest(jtu.JaxTestCase):
     self.assertTrue(all(b.device() == d for b, d in zip(y2.device_buffers, devices)))
     self.assertArraysEqual(y2, np.stack([xs['b'] for _ in devices]))
 
+  def test_repr(self):
+    x = jax.device_put_replicated(1, jax.devices())
+    self.assertStartsWith(repr(x), 'ShardedDeviceArray')
+
 
 class SpecToIndicesTest(jtu.JaxTestCase):
 
['jax/interpreters/xla.py', 'tests/pmap_test.py']