code: def test_csd_repr():
      """Test string representation of CrossSpectralDensity."""
      csd = _make_csd()
      assert str(csd) == (
          "<CrossSpectralDensity | n_channels=3, time=0.0 to "
          "1.0 s, frequencies=1.0, 2.0, 3.0, 4.0 Hz.>"
      )
  
      assert str(csd.mean()) == (
          "<CrossSpectralDensity | n_channels=3, "
          "time=0.0 to 1.0 s, frequencies=1.0-4.0 Hz.>"
      )
  
      csd_binned = csd.mean(fmin=[1, 3], fmax=[2, 4])
      assert str(csd_binned) == (
          "<CrossSpectralDensity | n_channels=3, "
          "time=0.0 to 1.0 s, frequencies=1.0-2.0, "
          "3.0-4.0 Hz.>"
      )
  
      csd_binned = csd.mean(fmin=[1, 2], fmax=[1, 4])
      assert str(csd_binned) == (
          "<CrossSpectralDensity | n_channels=3, "
          "time=0.0 to 1.0 s, frequencies=1.0, 2.0-4.0 "
          "Hz.>"
      )
  
      csd_no_time = csd.copy()
      csd_no_time.tmin = None
      csd_no_time.tmax = None
      assert str(csd_no_time) == (
          "<CrossSpectralDensity | n_channels=3, time=unknown, "
          "frequencies=1.0, 2.0, 3.0, 4.0 Hz.>"
      )
  
imports: import pickle
  from itertools import product
  from os import path
  import numpy
  import pytest
  from numpy.testing import assert_allclose, assert_array_equal
  from pytest import raises
  import mne
  from mne.channels import equalize_channels
  from mne.proj import Projection
  from mne.time_frequency import CrossSpectralDensity, csd_array_fourier, csd_array_morlet, csd_array_multitaper, csd_fourier, csd_morlet, csd_multitaper, csd_tfr, pick_channels_csd, read_csd, tfr_morlet
  from mne.time_frequency.csd import _sym_mat_to_vector, _vector_to_sym_mat
  from mne.utils import sum_squared
label_desc: Use image node_id 3 for calling a global function with example usage: test_csd_repr() without return types