code: def test__parse_gufunc_signature():
      assert_equal(_parse_gufunc_signature("(x)->()"), ([("x",)], ()))
      assert_equal(
          _parse_gufunc_signature("(x,y)->()"), ([("x", "y")], ())
      )
      # whitespace
      assert_equal(
          _parse_gufunc_signature("  (x, y) ->()"), ([("x", "y")], ())
      )
      assert_equal(
          _parse_gufunc_signature("(x),(y)->()"), ([("x",), ("y",)], ())
      )
      assert_equal(
          _parse_gufunc_signature("(x)->(y)"), ([("x",)], ("y",))
      )
      assert_equal(
          _parse_gufunc_signature("(x)->(y),()"),
          ([("x",)], [("y",), ()]),
      )
      assert_equal(
          _parse_gufunc_signature("(),(a,b,c),(d)->(d,e)"),
          ([(), ("a", "b", "c"), ("d",)], ("d", "e")),
      )
      with pytest.raises(ValueError):
          _parse_gufunc_signature("(x)(y)->()")
      with pytest.raises(ValueError):
          _parse_gufunc_signature("(x),(y)->")
      with pytest.raises(ValueError):
          _parse_gufunc_signature("((x))->(x)")
      with pytest.raises(ValueError):
          _parse_gufunc_signature("(x)->(x),")
  
imports: from __future__ import annotations
  import numpy
  import pytest
  from numpy.testing import assert_equal
  import dask.array
  from dask.array.core import Array
  from dask.array.gufunc import _parse_gufunc_signature, _validate_normalize_axes, apply_gufunc, as_gufunc, gufunc
  from dask.array.utils import assert_eq
label_desc: Use image node_id 1 for calling a global function with example usage: test__parse_gufunc_signature() without return types