code: def test_symmetry_df_size(asymmetric, dataset_name):
      (
          pred_probs,
          labels,
      ) = _get_pred_probs_labels_from_labelerrors_datasets(dataset_name)
      joint = estimate_joint(labels=labels, pred_probs=pred_probs)
      num_classes = pred_probs.shape[1]
      df = find_overlapping_classes(
          joint=joint,
          asymmetric=asymmetric,
          class_names=eval(dataset_name),
          num_examples=len(labels),
      )
      if asymmetric:
          assert len(df) == num_classes**2 - num_classes
      else:  # symmetric
          assert len(df) == (num_classes**2 - num_classes) / 2
  
          # Second test for symmetric
          # check that the row, col value returned is actually the sum from the joint.
          sum_0_1 = joint[0, 1] + joint[1, 0]
          df_0_1 = df[
              (df["Class Index A"] == 0) & (df["Class Index B"] == 1)
          ]["Joint Probability"]
          assert sum_0_1 - df_0_1.values[0] < 1e-8
  
file_path: cleanlab/tests/test_dataset.py
imports: import requests
  import pytest
  import hypothesis.extra.numpy
  import hypothesis.strategies
  import io
  import numpy
  from hypothesis import given, settings
  from cleanlab.dataset import health_summary, find_overlapping_classes, rank_classes_by_label_quality, overall_label_health_score
  from cleanlab.count import estimate_joint, num_label_issues, compute_confident_joint
label_desc: Use image node_id 4 for calling a global function with example usage: test_symmetry_df_size(asymmetric, dataset_name) without return types