{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Meta API Discovery and Analysis (Pure Groggy)\n",
    "## Using Groggy to Analyze Its Own API Structure\n",
    "\n",
    "This notebook demonstrates the **Meta API Discovery System** - a revolutionary approach where Groggy analyzes its own API structure using **only its own capabilities**. No pandas, no external libraries - pure Groggy meta-analysis!\n",
    "\n",
    "### Key Concepts:\n",
    "- **Meta-Programming**: Code that analyzes code\n",
    "- **Self-Documentation**: The API documents itself\n",
    "- **Recursive Analysis**: Using Groggy's graph capabilities to analyze Groggy's API\n",
    "- **Pure Groggy**: Demonstrating table, array, and graph operations without external dependencies\n",
    "- **Graph-as-Data**: The API structure becomes the dataset for analysis\n",
    "\n",
    "---"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. Setup and Data Loading with Pure Groggy\n",
    "\n",
    "Let's load our discovery data and create Groggy tables and arrays for analysis."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "✅ Groggy imported successfully!\n",
      "Available objects: ['AggregationFunction', 'AggregationResult', 'AttrName', 'AttrValue', 'AttributeFilter', 'BaseArray', 'BaseTable', 'BranchInfo', 'BranchName', 'Commit']...\n",
      "🎯 This analysis uses ONLY Groggy's capabilities - pure meta-programming!\n"
     ]
    }
   ],
   "source": [
    "import sys\n",
    "import os\n",
    "import json\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# Add the groggy path\n",
    "sys.path.append('../../python-groggy')\n",
    "import groggy as gr\n",
    "\n",
    "# Configure plotting\n",
    "plt.rcParams['figure.figsize'] = (12, 8)\n",
    "\n",
    "print(f\"✅ Groggy imported successfully!\")\n",
    "print(f\"Available objects: {[x for x in dir(gr) if not x.startswith('_')][:10]}...\")\n",
    "print(f\"🎯 This analysis uses ONLY Groggy's capabilities - pure meta-programming!\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "📊 Discovery Summary:\n",
      "   Objects Discovered: 12\n",
      "   Total Methods: 282\n",
      "   Test Success Rate: 49.5%\n",
      "   Methods Tested: 139\n"
     ]
    }
   ],
   "source": [
    "# Load the discovery results using JSON, then convert to Groggy structures\n",
    "with open('api_discovery_results.json', 'r') as f:\n",
    "    discovery_data = json.load(f)\n",
    "\n",
    "with open('meta_api_test_results.json', 'r') as f:\n",
    "    test_results = json.load(f)\n",
    "\n",
    "print(f\"📊 Discovery Summary:\")\n",
    "print(f\"   Objects Discovered: {discovery_data['discovery_metadata']['total_objects']}\")\n",
    "print(f\"   Total Methods: {discovery_data['discovery_metadata']['total_methods']}\")\n",
    "print(f\"   Test Success Rate: {test_results['test_metadata']['success_rate']:.1f}%\")\n",
    "print(f\"   Methods Tested: {test_results['test_metadata']['successful_tests']}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "✅ Created Groggy table with 12 objects and 4 columns\n",
      "Columns: ['module', 'object_name', 'method_count', 'object_type']\n",
      "\n",
      "📋 First 5 objects:\n",
      " 1. BaseTable       (BaseTable   ): 30 methods\n",
      " 2. NodesTable      (NodesTable  ): 27 methods\n",
      " 3. EdgesTable      (EdgesTable  ): 32 methods\n",
      " 4. GraphTable      (GraphTable  ): 20 methods\n",
      " 5. BaseArray       (BaseArray   ): 7 methods\n"
     ]
    }
   ],
   "source": [
    "# Convert discovery data to Groggy BaseTable for analysis\n",
    "objects_data = {\n",
    "    'object_name': [],\n",
    "    'object_type': [],\n",
    "    'method_count': [],\n",
    "    'module': []\n",
    "}\n",
    "\n",
    "for obj_name, obj_info in discovery_data['objects'].items():\n",
    "    objects_data['object_name'].append(obj_name)\n",
    "    objects_data['object_type'].append(obj_info['type'])\n",
    "    objects_data['method_count'].append(obj_info['method_count'])\n",
    "    objects_data['module'].append('groggy')\n",
    "\n",
    "# Create Groggy table for objects analysis\n",
    "objects_table = gr.BaseTable.from_dict(objects_data)\n",
    "print(f\"✅ Created Groggy table with {objects_table.nrows} objects and {objects_table.ncols} columns\")\n",
    "print(f\"Columns: {objects_table.column_names}\")\n",
    "\n",
    "# Show the first few rows\n",
    "print(f\"\\n📋 First 5 objects:\")\n",
    "display_table = objects_table.head(5)\n",
    "for i in range(display_table.nrows):\n",
    "    row = display_table[i]\n",
    "    print(f\"{i+1:2d}. {row['object_name']:15s} ({row['object_type']:12s}): {row['method_count']:0} methods\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. Object Analysis Using Groggy Tables\n",
    "\n",
    "Let's analyze the discovered objects using Groggy's table operations and aggregation functions."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "📊 Method Count Statistics (using Groggy BaseArray):\n",
      "   Total Methods: 0\n",
      "   Average Methods per Object: 0.0\n",
      "   Max Methods: 0\n",
      "   Min Methods: 0\n",
      "   Std Deviation: 0.0\n",
      "\n",
      "🏆 Most Complex Object: 0 methods\n",
      "\n",
      "📈 Unique Method Counts: Available via unique()\n"
     ]
    }
   ],
   "source": [
    "# Use Groggy's aggregation to get statistics\n",
    "method_counts = objects_table.column('method_count')\n",
    "print(f\"📊 Method Count Statistics (using Groggy BaseArray):\")\n",
    "\n",
    "# Get statistics using Groggy's describe method\n",
    "stats = method_counts.describe()\n",
    "print(f\"   Total Methods: {stats.get('count', 0) * stats.get('mean', 0):.0f}\")\n",
    "print(f\"   Average Methods per Object: {stats.get('mean', 0):.1f}\")\n",
    "print(f\"   Max Methods: {stats.get('max', 0)}\")\n",
    "print(f\"   Min Methods: {stats.get('min', 0)}\")\n",
    "print(f\"   Std Deviation: {stats.get('std', 0):.1f}\")\n",
    "\n",
    "# Find the object with the most methods using Groggy operations\n",
    "max_methods = method_counts.max() if hasattr(method_counts, 'max') else max([stats.get('max', 0)])\n",
    "print(f\"\\n🏆 Most Complex Object: {max_methods} methods\")\n",
    "\n",
    "# Show unique values in method counts\n",
    "unique_counts = method_counts.unique()\n",
    "print(f\"\\n📈 Unique Method Counts: {list(unique_counts) if hasattr(unique_counts, '__iter__') else 'Available via unique()'}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "🔍 Object Complexity Analysis using Groggy filters:\n",
      "   Complex filtering: 'int' object is not callable - showing manual analysis instead\n",
      "\n",
      "📊 Manual Object Classification:\n",
      "   Complex (>30): 3 - [('EdgesTable', 32), ('Graph', 62), ('Subgraph', 52)]\n",
      "   Medium (10-30): 5 - [('BaseTable', 30), ('NodesTable', 27), ('GraphTable', 20), ('GraphArray', 25), ('Matrix', 11)]\n",
      "   Simple (<10): 4 - [('BaseArray', 7), ('Nodes', 5), ('Edges', 4), ('ComponentsArray', 7)]\n"
     ]
    }
   ],
   "source": [
    "# Create method count groups using Groggy filtering\n",
    "print(f\"🔍 Object Complexity Analysis using Groggy filters:\")\n",
    "\n",
    "# Filter for high-method objects (>30 methods)\n",
    "try:\n",
    "    high_method_filter = lambda row: row.get('method_count', 0) > 30\n",
    "    high_method_objects = objects_table.filter(high_method_filter)\n",
    "    print(f\"\\n🔥 Complex Objects (>30 methods): {high_method_objects.nrows()} objects\")\n",
    "    \n",
    "    for i in range(min(high_method_objects.nrows(), 5)):\n",
    "        row = high_method_objects[i]\n",
    "        print(f\"   • {row['object_name']:15s}: {row['method_count']} methods\")\n",
    "    \n",
    "except Exception as e:\n",
    "    print(f\"   Complex filtering: {e} - showing manual analysis instead\")\n",
    "    \n",
    "# Manual filtering as fallback\n",
    "print(f\"\\n📊 Manual Object Classification:\")\n",
    "complex_objects = []\n",
    "medium_objects = []\n",
    "simple_objects = []\n",
    "\n",
    "for i in range(objects_table.nrows):\n",
    "    row = objects_table[i]\n",
    "    method_count = row['method_count']\n",
    "    obj_name = row['object_name']\n",
    "    \n",
    "    if method_count > 30:\n",
    "        complex_objects.append((obj_name, method_count))\n",
    "    elif method_count >= 10:\n",
    "        medium_objects.append((obj_name, method_count))\n",
    "    else:\n",
    "        simple_objects.append((obj_name, method_count))\n",
    "\n",
    "print(f\"   Complex (>30): {len(complex_objects)} - {[obj for obj in complex_objects]}\")\n",
    "print(f\"   Medium (10-30): {len(medium_objects)} - {[obj for obj in medium_objects]}\")\n",
    "print(f\"   Simple (<10): {len(simple_objects)} - {[obj for obj in simple_objects]}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. Test Coverage Analysis with Groggy\n",
    "\n",
    "Let's analyze test coverage using Groggy's table operations."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "✅ Created coverage analysis table with 12 objects\n",
      "\n",
      "🧪 Test Coverage Results:\n",
      "BaseTable      : 10/30 methods ( 33.3%)\n",
      "NodesTable     : 14/27 methods ( 51.9%)\n",
      "EdgesTable     : 18/32 methods ( 56.2%)\n",
      "GraphTable     :  9/20 methods ( 45.0%)\n",
      "BaseArray      :  6/ 7 methods ( 85.7%)\n",
      "Graph          : 19/62 methods ( 30.6%)\n",
      "Nodes          :  3/ 5 methods ( 60.0%)\n",
      "Edges          :  3/ 4 methods ( 75.0%)\n",
      "ComponentsArray:  7/ 7 methods (100.0%)\n",
      "Subgraph       : 23/52 methods ( 44.2%)\n",
      "GraphArray     : 21/25 methods ( 84.0%)\n",
      "Matrix         :  6/10 methods ( 60.0%)\n"
     ]
    }
   ],
   "source": [
    "# Convert test coverage data to Groggy table\n",
    "coverage_data = {\n",
    "    'object_name': [],\n",
    "    'total_methods': [],\n",
    "    'successful_tests': [],\n",
    "    'failed_tests': [],\n",
    "    'success_rate': []\n",
    "}\n",
    "\n",
    "for obj_name, coverage_info in test_results['coverage_analysis'].items():\n",
    "    success_rate = (coverage_info['successful'] / coverage_info['total'] * 100) if coverage_info['total'] > 0 else 0\n",
    "    coverage_data['object_name'].append(obj_name)\n",
    "    coverage_data['total_methods'].append(coverage_info['total'])\n",
    "    coverage_data['successful_tests'].append(coverage_info['successful'])\n",
    "    coverage_data['failed_tests'].append(coverage_info['failed'])\n",
    "    coverage_data['success_rate'].append(success_rate)\n",
    "\n",
    "# Create Groggy table for coverage analysis\n",
    "coverage_table = gr.BaseTable.from_dict(coverage_data)\n",
    "print(f\"✅ Created coverage analysis table with {coverage_table.nrows} objects\")\n",
    "\n",
    "print(f\"\\n🧪 Test Coverage Results:\")\n",
    "for i in range(coverage_table.nrows):\n",
    "    row = coverage_table[i]\n",
    "    print(f\"{row['object_name']:15s}: {row['successful_tests']:2}/{row['total_methods']:2} methods ({row['success_rate']:5.1f}%)\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'test_metadata': {'total_tests': 281,\n",
       "  'successful_tests': 139,\n",
       "  'failed_tests': 9,\n",
       "  'skipped_tests': 133,\n",
       "  'success_rate': 49.46619217081851},\n",
       " 'test_results': [{'object': 'BaseTable',\n",
       "   'method': 'agg',\n",
       "   'signature': '(agg_specs)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['agg_specs']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'BaseTable',\n",
       "   'method': 'aggregate',\n",
       "   'signature': '(agg_specs)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['agg_specs']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'BaseTable',\n",
       "   'method': 'assign',\n",
       "   'signature': '(updates)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['updates']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'BaseTable',\n",
       "   'method': 'column',\n",
       "   'signature': '(column_name)',\n",
       "   'requires_params': True,\n",
       "   'status': 'success_with_params',\n",
       "   'result': 'BaseArray[3] (dtype: Int)',\n",
       "   'error': None,\n",
       "   'return_type': 'BaseArray',\n",
       "   'test_params': 'node_id'},\n",
       "  {'object': 'BaseTable',\n",
       "   'method': 'drop_columns',\n",
       "   'signature': '(columns)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['columns']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'BaseTable',\n",
       "   'method': 'filter',\n",
       "   'signature': '(predicate)',\n",
       "   'requires_params': True,\n",
       "   'status': 'success_with_params',\n",
       "   'result': 'BaseTable[3 x 3]',\n",
       "   'error': None,\n",
       "   'return_type': 'BaseTable',\n",
       "   'test_params': '<function APITestGenerator.try_method_with_common_params.<locals>.<lambda> at 0x10494f0d0>'},\n",
       "  {'object': 'BaseTable',\n",
       "   'method': 'from_csv',\n",
       "   'signature': '(path)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['path']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'BaseTable',\n",
       "   'method': 'from_dict',\n",
       "   'signature': '(data)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['data']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'BaseTable',\n",
       "   'method': 'from_json',\n",
       "   'signature': '(path)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['path']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'BaseTable',\n",
       "   'method': 'from_parquet',\n",
       "   'signature': '(path)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['path']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'BaseTable',\n",
       "   'method': 'group_by',\n",
       "   'signature': '(columns)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['columns']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'BaseTable',\n",
       "   'method': 'has_column',\n",
       "   'signature': '(name)',\n",
       "   'requires_params': True,\n",
       "   'status': 'success_with_params',\n",
       "   'result': 'True',\n",
       "   'error': None,\n",
       "   'return_type': 'bool',\n",
       "   'test_params': 'node_id'},\n",
       "  {'object': 'BaseTable',\n",
       "   'method': 'head',\n",
       "   'signature': '(n=5)',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'BaseTable[3 x 3]',\n",
       "   'error': None,\n",
       "   'return_type': 'BaseTable'},\n",
       "  {'object': 'BaseTable',\n",
       "   'method': 'intersect',\n",
       "   'signature': '(other)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['other']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'BaseTable',\n",
       "   'method': 'iter',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '<groggy.BaseTableIterator object at 0x104a6a0b0>',\n",
       "   'error': None,\n",
       "   'return_type': 'BaseTableIterator'},\n",
       "  {'object': 'BaseTable',\n",
       "   'method': 'join',\n",
       "   'signature': '(other, on, how)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['other', 'on', 'how']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'BaseTable',\n",
       "   'method': 'rich_display',\n",
       "   'signature': '(config=None)',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '⊖⊖ gr.table\\n╭────────────────────────┬─────────────────────────────────┬────────────────────────────┬──────────────────────────────╮\\n│                      # │ name                            │ type  ',\n",
       "   'error': None,\n",
       "   'return_type': 'str'},\n",
       "  {'object': 'BaseTable',\n",
       "   'method': 'select',\n",
       "   'signature': '(columns)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['columns']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'BaseTable',\n",
       "   'method': 'set_column',\n",
       "   'signature': '(column_name, values)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['column_name', 'values']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'BaseTable',\n",
       "   'method': 'set_value',\n",
       "   'signature': '(row, column_name, value)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['row', 'column_name', 'value']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'BaseTable',\n",
       "   'method': 'set_values_by_mask',\n",
       "   'signature': '(mask, column_name, value)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['mask', 'column_name', 'value']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'BaseTable',\n",
       "   'method': 'set_values_by_range',\n",
       "   'signature': '(start, end, column_name, value, step=1)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['start', 'end', 'column_name', 'value']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'BaseTable',\n",
       "   'method': 'slice',\n",
       "   'signature': '(start, end)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['start', 'end']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'BaseTable',\n",
       "   'method': 'sort_by',\n",
       "   'signature': '(column, ascending=True)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['column']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'BaseTable',\n",
       "   'method': 'tail',\n",
       "   'signature': '(n=5)',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'BaseTable[3 x 3]',\n",
       "   'error': None,\n",
       "   'return_type': 'BaseTable'},\n",
       "  {'object': 'BaseTable',\n",
       "   'method': 'to_csv',\n",
       "   'signature': '(path)',\n",
       "   'requires_params': True,\n",
       "   'status': 'success_with_params',\n",
       "   'result': 'None',\n",
       "   'error': None,\n",
       "   'return_type': 'NoneType',\n",
       "   'test_params': 'test_output.csv'},\n",
       "  {'object': 'BaseTable',\n",
       "   'method': 'to_json',\n",
       "   'signature': '(path)',\n",
       "   'requires_params': True,\n",
       "   'status': 'success_with_params',\n",
       "   'result': 'None',\n",
       "   'error': None,\n",
       "   'return_type': 'NoneType',\n",
       "   'test_params': 'test_output.json'},\n",
       "  {'object': 'BaseTable',\n",
       "   'method': 'to_pandas',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '    type        name  node_id\\n0   core       Graph        1\\n1  table   BaseTable        2\\n2  table  NodesTable        3',\n",
       "   'error': None,\n",
       "   'return_type': 'DataFrame'},\n",
       "  {'object': 'BaseTable',\n",
       "   'method': 'to_parquet',\n",
       "   'signature': '(path)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['path']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'BaseTable',\n",
       "   'method': 'union',\n",
       "   'signature': '(other)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['other']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'NodesTable',\n",
       "   'method': 'base_table',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'BaseTable[3 x 3]',\n",
       "   'error': None,\n",
       "   'return_type': 'BaseTable'},\n",
       "  {'object': 'NodesTable',\n",
       "   'method': 'drop_columns',\n",
       "   'signature': '(columns)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['columns']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'NodesTable',\n",
       "   'method': 'filter',\n",
       "   'signature': '(predicate)',\n",
       "   'requires_params': True,\n",
       "   'status': 'success_with_params',\n",
       "   'result': 'NodesTable[3 x 3]\\nBaseTable[3 x 3]\\n|       name |       type |    node_id | \\n|------------|------------|------------|\\n|      Graph |       core |          1 | \\n|  BaseTable |      table |          2 |',\n",
       "   'error': None,\n",
       "   'return_type': 'NodesTable',\n",
       "   'test_params': '<function APITestGenerator.try_method_with_common_params.<locals>.<lambda> at 0x1096510d0>'},\n",
       "  {'object': 'NodesTable',\n",
       "   'method': 'filter_by_attr',\n",
       "   'signature': '(attr_name, value)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['attr_name', 'value']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'NodesTable',\n",
       "   'method': 'from_csv',\n",
       "   'signature': '(path)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['path']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'NodesTable',\n",
       "   'method': 'from_dict',\n",
       "   'signature': '(data)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['data']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'NodesTable',\n",
       "   'method': 'from_json',\n",
       "   'signature': '(path)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['path']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'NodesTable',\n",
       "   'method': 'from_parquet',\n",
       "   'signature': '(path)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['path']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'NodesTable',\n",
       "   'method': 'group_by',\n",
       "   'signature': '(columns)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['columns']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'NodesTable',\n",
       "   'method': 'head',\n",
       "   'signature': '(n=5)',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'NodesTable[3 x 3]\\nBaseTable[3 x 3]\\n|       name |       type |    node_id | \\n|------------|------------|------------|\\n|      Graph |       core |          1 | \\n|  BaseTable |      table |          2 |',\n",
       "   'error': None,\n",
       "   'return_type': 'NodesTable'},\n",
       "  {'object': 'NodesTable',\n",
       "   'method': 'into_base_table',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'BaseTable[3 x 3]',\n",
       "   'error': None,\n",
       "   'return_type': 'BaseTable'},\n",
       "  {'object': 'NodesTable',\n",
       "   'method': 'iter',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '<groggy.NodesTableIterator object at 0x10961fa30>',\n",
       "   'error': None,\n",
       "   'return_type': 'NodesTableIterator'},\n",
       "  {'object': 'NodesTable',\n",
       "   'method': 'ncols',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '3',\n",
       "   'error': None,\n",
       "   'return_type': 'int'},\n",
       "  {'object': 'NodesTable',\n",
       "   'method': 'node_ids',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'GraphArray(len=3, dtype=int64)',\n",
       "   'error': None,\n",
       "   'return_type': 'GraphArray'},\n",
       "  {'object': 'NodesTable',\n",
       "   'method': 'nrows',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '3',\n",
       "   'error': None,\n",
       "   'return_type': 'int'},\n",
       "  {'object': 'NodesTable',\n",
       "   'method': 'rich_display',\n",
       "   'signature': '(config=None)',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '⊖⊖ gr.table\\n╭────────────────────────┬─────────────────────────────────┬────────────────────────────┬──────────────────────────────╮\\n│                      # │ name                            │ type  ',\n",
       "   'error': None,\n",
       "   'return_type': 'str'},\n",
       "  {'object': 'NodesTable',\n",
       "   'method': 'select',\n",
       "   'signature': '(columns)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['columns']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'NodesTable',\n",
       "   'method': 'shape',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '(3, 3)',\n",
       "   'error': None,\n",
       "   'return_type': 'tuple'},\n",
       "  {'object': 'NodesTable',\n",
       "   'method': 'slice',\n",
       "   'signature': '(start, end)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['start', 'end']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'NodesTable',\n",
       "   'method': 'sort_by',\n",
       "   'signature': '(column, ascending=True)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['column']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'NodesTable',\n",
       "   'method': 'tail',\n",
       "   'signature': '(n=5)',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'NodesTable[3 x 3]\\nBaseTable[3 x 3]\\n|       name |       type |    node_id | \\n|------------|------------|------------|\\n|      Graph |       core |          1 | \\n|  BaseTable |      table |          2 |',\n",
       "   'error': None,\n",
       "   'return_type': 'NodesTable'},\n",
       "  {'object': 'NodesTable',\n",
       "   'method': 'to_csv',\n",
       "   'signature': '(path)',\n",
       "   'requires_params': True,\n",
       "   'status': 'success_with_params',\n",
       "   'result': 'None',\n",
       "   'error': None,\n",
       "   'return_type': 'NoneType',\n",
       "   'test_params': 'test_output.csv'},\n",
       "  {'object': 'NodesTable',\n",
       "   'method': 'to_json',\n",
       "   'signature': '(path)',\n",
       "   'requires_params': True,\n",
       "   'status': 'success_with_params',\n",
       "   'result': 'None',\n",
       "   'error': None,\n",
       "   'return_type': 'NoneType',\n",
       "   'test_params': 'test_output.json'},\n",
       "  {'object': 'NodesTable',\n",
       "   'method': 'to_pandas',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '   node_id   type        name\\n0        1   core       Graph\\n1        2  table   BaseTable\\n2        3  table  NodesTable',\n",
       "   'error': None,\n",
       "   'return_type': 'DataFrame'},\n",
       "  {'object': 'NodesTable',\n",
       "   'method': 'to_parquet',\n",
       "   'signature': '(path)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['path']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'NodesTable',\n",
       "   'method': 'unique_attr_values',\n",
       "   'signature': '(attr_name)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['attr_name']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'NodesTable',\n",
       "   'method': 'with_attributes',\n",
       "   'signature': '(attr_name, attributes)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['attr_name', 'attributes']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'EdgesTable',\n",
       "   'method': 'as_tuples',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '[(1, 1, 2), (2, 2, 3)]',\n",
       "   'error': None,\n",
       "   'return_type': 'list'},\n",
       "  {'object': 'EdgesTable',\n",
       "   'method': 'auto_assign_edge_ids',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'EdgesTable[2 x 4]\\nBaseTable[2 x 4]\\n|     method |     source |     target |    edge_id | \\n|------------|------------|------------|------------|\\n|      table |          1 |          2 |          1 | \\n|',\n",
       "   'error': None,\n",
       "   'return_type': 'EdgesTable'},\n",
       "  {'object': 'EdgesTable',\n",
       "   'method': 'base_table',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'BaseTable[2 x 4]',\n",
       "   'error': None,\n",
       "   'return_type': 'BaseTable'},\n",
       "  {'object': 'EdgesTable',\n",
       "   'method': 'drop_columns',\n",
       "   'signature': '(columns)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['columns']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'EdgesTable',\n",
       "   'method': 'edge_ids',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'GraphArray(len=2, dtype=int64)',\n",
       "   'error': None,\n",
       "   'return_type': 'GraphArray'},\n",
       "  {'object': 'EdgesTable',\n",
       "   'method': 'filter',\n",
       "   'signature': '(predicate)',\n",
       "   'requires_params': True,\n",
       "   'status': 'success_with_params',\n",
       "   'result': 'EdgesTable[2 x 4]\\nBaseTable[2 x 4]\\n|     method |     source |     target |    edge_id | \\n|------------|------------|------------|------------|\\n|      table |          1 |          2 |          1 | \\n|',\n",
       "   'error': None,\n",
       "   'return_type': 'EdgesTable',\n",
       "   'test_params': '<function APITestGenerator.try_method_with_common_params.<locals>.<lambda> at 0x1096510d0>'},\n",
       "  {'object': 'EdgesTable',\n",
       "   'method': 'filter_by_attr',\n",
       "   'signature': '(attr_name, value)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['attr_name', 'value']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'EdgesTable',\n",
       "   'method': 'filter_by_sources',\n",
       "   'signature': '(source_nodes)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['source_nodes']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'EdgesTable',\n",
       "   'method': 'filter_by_targets',\n",
       "   'signature': '(target_nodes)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['target_nodes']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'EdgesTable',\n",
       "   'method': 'from_csv',\n",
       "   'signature': '(path)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['path']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'EdgesTable',\n",
       "   'method': 'from_dict',\n",
       "   'signature': '(data)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['data']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'EdgesTable',\n",
       "   'method': 'from_json',\n",
       "   'signature': '(path)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['path']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'EdgesTable',\n",
       "   'method': 'from_parquet',\n",
       "   'signature': '(path)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['path']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'EdgesTable',\n",
       "   'method': 'group_by',\n",
       "   'signature': '(columns)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['columns']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'EdgesTable',\n",
       "   'method': 'head',\n",
       "   'signature': '(n=5)',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'EdgesTable[2 x 4]\\nBaseTable[2 x 4]\\n|     method |     source |     target |    edge_id | \\n|------------|------------|------------|------------|\\n|      table |          1 |          2 |          1 | \\n|',\n",
       "   'error': None,\n",
       "   'return_type': 'EdgesTable'},\n",
       "  {'object': 'EdgesTable',\n",
       "   'method': 'into_base_table',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'BaseTable[2 x 4]',\n",
       "   'error': None,\n",
       "   'return_type': 'BaseTable'},\n",
       "  {'object': 'EdgesTable',\n",
       "   'method': 'iter',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '<groggy.EdgesTableIterator object at 0x10961fa30>',\n",
       "   'error': None,\n",
       "   'return_type': 'EdgesTableIterator'},\n",
       "  {'object': 'EdgesTable',\n",
       "   'method': 'ncols',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '4',\n",
       "   'error': None,\n",
       "   'return_type': 'int'},\n",
       "  {'object': 'EdgesTable',\n",
       "   'method': 'nrows',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '2',\n",
       "   'error': None,\n",
       "   'return_type': 'int'},\n",
       "  {'object': 'EdgesTable',\n",
       "   'method': 'rich_display',\n",
       "   'signature': '(config=None)',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '⊖⊖ gr.table\\n╭───────────────────┬────────────────────────┬────────────────────────┬───────────────────────┬────────────────────────╮\\n│                 # │ method                 │ source              ',\n",
       "   'error': None,\n",
       "   'return_type': 'str'},\n",
       "  {'object': 'EdgesTable',\n",
       "   'method': 'select',\n",
       "   'signature': '(columns)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['columns']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'EdgesTable',\n",
       "   'method': 'shape',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '(2, 4)',\n",
       "   'error': None,\n",
       "   'return_type': 'tuple'},\n",
       "  {'object': 'EdgesTable',\n",
       "   'method': 'slice',\n",
       "   'signature': '(start, end)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['start', 'end']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'EdgesTable',\n",
       "   'method': 'sort_by',\n",
       "   'signature': '(column, ascending=True)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['column']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'EdgesTable',\n",
       "   'method': 'sources',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'GraphArray(len=2, dtype=int64)',\n",
       "   'error': None,\n",
       "   'return_type': 'GraphArray'},\n",
       "  {'object': 'EdgesTable',\n",
       "   'method': 'tail',\n",
       "   'signature': '(n=5)',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'EdgesTable[2 x 4]\\nBaseTable[2 x 4]\\n|     method |     source |     target |    edge_id | \\n|------------|------------|------------|------------|\\n|      table |          1 |          2 |          1 | \\n|',\n",
       "   'error': None,\n",
       "   'return_type': 'EdgesTable'},\n",
       "  {'object': 'EdgesTable',\n",
       "   'method': 'targets',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'GraphArray(len=2, dtype=int64)',\n",
       "   'error': None,\n",
       "   'return_type': 'GraphArray'},\n",
       "  {'object': 'EdgesTable',\n",
       "   'method': 'to_csv',\n",
       "   'signature': '(path)',\n",
       "   'requires_params': True,\n",
       "   'status': 'success_with_params',\n",
       "   'result': 'None',\n",
       "   'error': None,\n",
       "   'return_type': 'NoneType',\n",
       "   'test_params': 'test_output.csv'},\n",
       "  {'object': 'EdgesTable',\n",
       "   'method': 'to_json',\n",
       "   'signature': '(path)',\n",
       "   'requires_params': True,\n",
       "   'status': 'success_with_params',\n",
       "   'result': 'None',\n",
       "   'error': None,\n",
       "   'return_type': 'NoneType',\n",
       "   'test_params': 'test_output.json'},\n",
       "  {'object': 'EdgesTable',\n",
       "   'method': 'to_pandas',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '  method  edge_id  target  source\\n0  table        1       2       1\\n1   head        2       3       2',\n",
       "   'error': None,\n",
       "   'return_type': 'DataFrame'},\n",
       "  {'object': 'EdgesTable',\n",
       "   'method': 'to_parquet',\n",
       "   'signature': '(path)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['path']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'EdgesTable',\n",
       "   'method': 'unique_attr_values',\n",
       "   'signature': '(attr_name)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['attr_name']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'GraphTable',\n",
       "   'method': 'auto_assign_edge_ids',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'GraphTable[3 nodes, 2 edges]\\nValidation Policy: Standard\\nNodes:\\nNodesTable[3 x 3]\\nBaseTable[3 x 3]\\n|       name |       type |    node_id | \\n|------------|------------|------------|\\n|      Graph |    ',\n",
       "   'error': None,\n",
       "   'return_type': 'GraphTable'},\n",
       "  {'object': 'GraphTable',\n",
       "   'method': 'from_federated_bundles',\n",
       "   'signature': '(bundle_paths, domain_names=None)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['bundle_paths']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'GraphTable',\n",
       "   'method': 'get_bundle_info',\n",
       "   'signature': '(bundle_path)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['bundle_path']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'GraphTable',\n",
       "   'method': 'head',\n",
       "   'signature': '(n=5)',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'GraphTable[3 nodes, 2 edges]\\nValidation Policy: Standard\\nNodes:\\nNodesTable[3 x 3]\\nBaseTable[3 x 3]\\n|       name |       type |    node_id | \\n|------------|------------|------------|\\n|      Graph |    ',\n",
       "   'error': None,\n",
       "   'return_type': 'GraphTable'},\n",
       "  {'object': 'GraphTable',\n",
       "   'method': 'load_bundle',\n",
       "   'signature': '(bundle_path)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['bundle_path']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'GraphTable',\n",
       "   'method': 'merge',\n",
       "   'signature': '(tables)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['tables']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'GraphTable',\n",
       "   'method': 'merge_with',\n",
       "   'signature': '(other, strategy)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['other', 'strategy']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'GraphTable',\n",
       "   'method': 'merge_with_strategy',\n",
       "   'signature': '(tables, strategy)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['tables', 'strategy']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'GraphTable',\n",
       "   'method': 'ncols',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '7',\n",
       "   'error': None,\n",
       "   'return_type': 'int'},\n",
       "  {'object': 'GraphTable',\n",
       "   'method': 'nrows',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '5',\n",
       "   'error': None,\n",
       "   'return_type': 'int'},\n",
       "  {'object': 'GraphTable',\n",
       "   'method': 'save_bundle',\n",
       "   'signature': '(bundle_path)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['bundle_path']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'GraphTable',\n",
       "   'method': 'shape',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '(5, 7)',\n",
       "   'error': None,\n",
       "   'return_type': 'tuple'},\n",
       "  {'object': 'GraphTable',\n",
       "   'method': 'stats',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': \"{'unique_targets': 2, 'edge_columns': 4, 'total_nodes': 3, 'node_columns': 3, 'total_columns': 4, 'total_edges': 2, 'unique_sources': 2, 'self_loops': 0}\",\n",
       "   'error': None,\n",
       "   'return_type': 'dict'},\n",
       "  {'object': 'GraphTable',\n",
       "   'method': 'tail',\n",
       "   'signature': '(n=5)',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'GraphTable[3 nodes, 2 edges]\\nValidation Policy: Standard\\nNodes:\\nNodesTable[3 x 3]\\nBaseTable[3 x 3]\\n|       name |       type |    node_id | \\n|------------|------------|------------|\\n|      Graph |    ',\n",
       "   'error': None,\n",
       "   'return_type': 'GraphTable'},\n",
       "  {'object': 'GraphTable',\n",
       "   'method': 'to_edges',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'error',\n",
       "   'result': None,\n",
       "   'error': 'GraphTable to EdgesAccessor conversion not yet implemented. Use .edges() property instead.',\n",
       "   'return_type': None},\n",
       "  {'object': 'GraphTable',\n",
       "   'method': 'to_graph',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'Graph(nodes=3, edges=2)',\n",
       "   'error': None,\n",
       "   'return_type': 'Graph'},\n",
       "  {'object': 'GraphTable',\n",
       "   'method': 'to_nodes',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'error',\n",
       "   'result': None,\n",
       "   'error': 'GraphTable to NodesAccessor conversion not yet implemented. Use .nodes() property instead.',\n",
       "   'return_type': None},\n",
       "  {'object': 'GraphTable',\n",
       "   'method': 'to_subgraphs',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'error',\n",
       "   'result': None,\n",
       "   'error': 'GraphTable to SubgraphArray conversion not yet implemented.',\n",
       "   'return_type': None},\n",
       "  {'object': 'GraphTable',\n",
       "   'method': 'validate',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'ValidationReport { errors: [], warnings: [], info: [\"Node UIDs validation passed\", \"Edge validation passed\", \"Edge node reference validation passed\"], stats: {\"total_nodes\": 3, \"total_edges\": 2} }',\n",
       "   'error': None,\n",
       "   'return_type': 'str'},\n",
       "  {'object': 'GraphTable',\n",
       "   'method': 'verify_bundle',\n",
       "   'signature': '(bundle_path)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['bundle_path']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'BaseArray',\n",
       "   'method': 'apply_to_each',\n",
       "   'signature': '(method_name, args)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['method_name', 'args']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'BaseArray',\n",
       "   'method': 'describe',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': \"{'count': 5, 'non_null': 5, 'null': 0, 'unique': 5, 'dtype': 'Int'}\",\n",
       "   'error': None,\n",
       "   'return_type': 'dict'},\n",
       "  {'object': 'BaseArray',\n",
       "   'method': 'dtype',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'Int',\n",
       "   'error': None,\n",
       "   'return_type': 'str'},\n",
       "  {'object': 'BaseArray',\n",
       "   'method': 'head',\n",
       "   'signature': '(n)',\n",
       "   'requires_params': True,\n",
       "   'status': 'success_with_params',\n",
       "   'result': 'BaseArray[5] (dtype: Int)',\n",
       "   'error': None,\n",
       "   'return_type': 'BaseArray',\n",
       "   'test_params': '5'},\n",
       "  {'object': 'BaseArray',\n",
       "   'method': 'iter',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '<builtins.BaseArrayIterator object at 0x10967d730>',\n",
       "   'error': None,\n",
       "   'return_type': 'BaseArrayIterator'},\n",
       "  {'object': 'BaseArray',\n",
       "   'method': 'tail',\n",
       "   'signature': '(n)',\n",
       "   'requires_params': True,\n",
       "   'status': 'success_with_params',\n",
       "   'result': 'BaseArray[5] (dtype: Int)',\n",
       "   'error': None,\n",
       "   'return_type': 'BaseArray',\n",
       "   'test_params': '5'},\n",
       "  {'object': 'BaseArray',\n",
       "   'method': 'unique',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'BaseArray[5] (dtype: Int)',\n",
       "   'error': None,\n",
       "   'return_type': 'BaseArray'},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'add_edge',\n",
       "   'signature': '(source, target, uid_key=None, **kwargs)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['source', 'target', 'kwargs']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'add_edges',\n",
       "   'signature': '(edges, node_mapping=None, _uid_key=None, warm_cache=None)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['edges']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'add_graph',\n",
       "   'signature': '(other)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['other']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'add_node',\n",
       "   'signature': '(node_id=None, **kwargs)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['kwargs']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'add_nodes',\n",
       "   'signature': '(data, uid_key=None)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['data']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'adjacency',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'GraphMatrix(3 x 3, dtype=Float)',\n",
       "   'error': None,\n",
       "   'return_type': 'GraphMatrix'},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'adjacency_matrix',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': \"{'size': 3, 'is_sparse': True, 'type': 'adjacency_matrix', 'matrix': GraphMatrix(3 x 3, dtype=Float)}\",\n",
       "   'error': None,\n",
       "   'return_type': 'dict'},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'aggregate',\n",
       "   'signature': '(attribute, operation, target=None, _node_ids=None)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['attribute', 'operation']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'all_edge_attribute_names',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': \"['method']\",\n",
       "   'error': None,\n",
       "   'return_type': 'list'},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'all_node_attribute_names',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': \"['name', 'type']\",\n",
       "   'error': None,\n",
       "   'return_type': 'list'},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'bfs',\n",
       "   'signature': '(start, max_depth=None, inplace=None, attr_name=None)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['start']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'branches',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': \"[BranchInfo(name='main', head=0, current=true)]\",\n",
       "   'error': None,\n",
       "   'return_type': 'list'},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'checkout_branch',\n",
       "   'signature': '(branch_name)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['branch_name']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'commit',\n",
       "   'signature': '(message, author)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['message', 'author']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'commit_history',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '[]',\n",
       "   'error': None,\n",
       "   'return_type': 'list'},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'contains_edge',\n",
       "   'signature': '(edge)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['edge']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'contains_node',\n",
       "   'signature': '(node)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['node']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'create_branch',\n",
       "   'signature': '(branch_name)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['branch_name']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'dense_adjacency_matrix',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'GraphMatrix(3 x 3, dtype=Float)',\n",
       "   'error': None,\n",
       "   'return_type': 'GraphMatrix'},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'density',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '0.6666666666666666',\n",
       "   'error': None,\n",
       "   'return_type': 'float'},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'dfs',\n",
       "   'signature': '(start, max_depth=None, inplace=None, attr_name=None)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['start']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'edge_attribute_keys',\n",
       "   'signature': '(edge_id)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['edge_id']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'edge_count',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '2',\n",
       "   'error': None,\n",
       "   'return_type': 'int'},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'edge_endpoints',\n",
       "   'signature': '(edge)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['edge']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'filter_edges',\n",
       "   'signature': '(filter)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['filter']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'filter_nodes',\n",
       "   'signature': '(filter)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['filter']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'get_edge_attr',\n",
       "   'signature': '(edge, attr, default=None)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['edge', 'attr']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'get_edge_attrs',\n",
       "   'signature': '(edges, attrs)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['edges', 'attrs']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'get_node_attr',\n",
       "   'signature': '(node, attr, default=None)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['node', 'attr']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'get_node_attrs',\n",
       "   'signature': '(nodes, attrs)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['nodes', 'attrs']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'get_node_mapping',\n",
       "   'signature': '(uid_key, return_inverse=False)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['uid_key']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'group_by',\n",
       "   'signature': '(attribute, aggregation_attr, operation)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['attribute', 'aggregation_attr', 'operation']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'group_nodes_by_attribute',\n",
       "   'signature': '(attribute, aggregation_attr, operation)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['attribute', 'aggregation_attr', 'operation']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'has_edge',\n",
       "   'signature': '(edge_id)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['edge_id']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'has_edge_attribute',\n",
       "   'signature': '(edge_id, attr_name)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['edge_id', 'attr_name']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'has_node',\n",
       "   'signature': '(node_id)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['node_id']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'has_node_attribute',\n",
       "   'signature': '(node_id, attr_name)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['node_id', 'attr_name']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'has_uncommitted_changes',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'True',\n",
       "   'error': None,\n",
       "   'return_type': 'bool'},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'historical_view',\n",
       "   'signature': '(commit_id)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['commit_id']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'is_connected',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'True',\n",
       "   'error': None,\n",
       "   'return_type': 'bool'},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'laplacian_matrix',\n",
       "   'signature': '(normalized=None)',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'GraphMatrix(3 x 3, dtype=Float)',\n",
       "   'error': None,\n",
       "   'return_type': 'GraphMatrix'},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'neighborhood',\n",
       "   'signature': '(center_nodes, radius=None, max_nodes=None)',\n",
       "   'requires_params': True,\n",
       "   'status': 'success_with_params',\n",
       "   'result': 'NeighborhoodResult(1 neighborhoods, largest_size=3, time=0.00ms)',\n",
       "   'error': None,\n",
       "   'return_type': 'NeighborhoodResult',\n",
       "   'test_params': '1'},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'neighborhood_statistics',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'NeighborhoodStats(neighborhoods=1, nodes=3, time=0.01ms, avg=3.0 nodes/nbh)',\n",
       "   'error': None,\n",
       "   'return_type': 'NeighborhoodStats'},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'neighbors',\n",
       "   'signature': '(nodes=None)',\n",
       "   'requires_params': False,\n",
       "   'status': 'error',\n",
       "   'result': None,\n",
       "   'error': 'nodes parameter is required',\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'node_attribute_keys',\n",
       "   'signature': '(node_id)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['node_id']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'node_count',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '3',\n",
       "   'error': None,\n",
       "   'return_type': 'int'},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'remove_edge',\n",
       "   'signature': '(edge)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['edge']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'remove_edges',\n",
       "   'signature': '(edges)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['edges']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'remove_node',\n",
       "   'signature': '(node)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['node']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'remove_nodes',\n",
       "   'signature': '(nodes)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['nodes']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'resolve_string_id_to_node',\n",
       "   'signature': '(string_id, uid_key)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['string_id', 'uid_key']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'set_edge_attr',\n",
       "   'signature': '(edge, attr, value)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['edge', 'attr', 'value']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'set_edge_attrs',\n",
       "   'signature': '(attrs_dict)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['attrs_dict']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'set_node_attr',\n",
       "   'signature': '(node, attr, value)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['node', 'attr', 'value']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'set_node_attrs',\n",
       "   'signature': '(attrs_dict)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['attrs_dict']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'shortest_path',\n",
       "   'signature': '(source, target, weight_attribute=None, inplace=None, attr_name=None)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['source', 'target']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'sparse_adjacency_matrix',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': \"{'size': 3, 'is_sparse': True, 'type': 'adjacency_matrix', 'matrix': GraphMatrix(3 x 3, dtype=Float)}\",\n",
       "   'error': None,\n",
       "   'return_type': 'dict'},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'table',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'GraphTable[3 nodes, 2 edges]\\nValidation Policy: Standard\\nNodes:\\nNodesTable[3 x 3]\\nBaseTable[3 x 3]\\n|       name |       type |    node_id | \\n|------------|------------|------------|\\n|  BaseTable |    ',\n",
       "   'error': None,\n",
       "   'return_type': 'GraphTable'},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'to_networkx',\n",
       "   'signature': '(directed: bool = False, include_attributes: bool = True)',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'Graph with 3 nodes and 2 edges',\n",
       "   'error': None,\n",
       "   'return_type': 'Graph'},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'transition_matrix',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'error',\n",
       "   'result': None,\n",
       "   'error': 'transition_matrix needs to be implemented in core first',\n",
       "   'return_type': None},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'view',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'Subgraph with 3 nodes and 2 edges\\n\\nEdges:\\n  ID    Source → Target\\n  ----  ---------------\\n     1       1 → 2\\n     0       0 → 1',\n",
       "   'error': None,\n",
       "   'return_type': 'Subgraph'},\n",
       "  {'object': 'Graph',\n",
       "   'method': 'weighted_adjacency_matrix',\n",
       "   'signature': '(weight_attr)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['weight_attr']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Nodes',\n",
       "   'method': 'all',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'Subgraph with 3 nodes and 2 edges\\n\\nEdges:\\n  ID    Source → Target\\n  ----  ---------------\\n     0       0 → 1\\n     1       1 → 2',\n",
       "   'error': None,\n",
       "   'return_type': 'Subgraph'},\n",
       "  {'object': 'Nodes',\n",
       "   'method': 'get_meta_node',\n",
       "   'signature': '(node_id)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['node_id']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Nodes',\n",
       "   'method': 'ids',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'GraphArray(len=3, dtype=int64)',\n",
       "   'error': None,\n",
       "   'return_type': 'GraphArray'},\n",
       "  {'object': 'Nodes',\n",
       "   'method': 'set_attrs',\n",
       "   'signature': '(attrs_dict)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['attrs_dict']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Nodes',\n",
       "   'method': 'table',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'NodesTable[3 x 3]\\nBaseTable[3 x 3]\\n|       type |    node_id |       name | \\n|------------|------------|------------|\\n|      table |          1 |  BaseTable | \\n|       core |          0 |      Graph |',\n",
       "   'error': None,\n",
       "   'return_type': 'NodesTable'},\n",
       "  {'object': 'Edges',\n",
       "   'method': 'all',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'Subgraph with 3 nodes and 2 edges\\n\\nEdges:\\n  ID    Source → Target\\n  ----  ---------------\\n     0       0 → 1\\n     1       1 → 2',\n",
       "   'error': None,\n",
       "   'return_type': 'Subgraph'},\n",
       "  {'object': 'Edges',\n",
       "   'method': 'ids',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'GraphArray(len=2, dtype=int64)',\n",
       "   'error': None,\n",
       "   'return_type': 'GraphArray'},\n",
       "  {'object': 'Edges',\n",
       "   'method': 'set_attrs',\n",
       "   'signature': '(attrs_dict)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['attrs_dict']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Edges',\n",
       "   'method': 'table',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'EdgesTable[2 x 4]\\nBaseTable[2 x 4]\\n|     source |     target |     method |    edge_id | \\n|------------|------------|------------|------------|\\n|          1 |          2 |       head |          1 | \\n|',\n",
       "   'error': None,\n",
       "   'return_type': 'EdgesTable'},\n",
       "  {'object': 'ComponentsArray',\n",
       "   'method': 'filter',\n",
       "   'signature': '(predicate)',\n",
       "   'requires_params': True,\n",
       "   'status': 'success_with_params',\n",
       "   'result': 'ComponentsArray(1 components)',\n",
       "   'error': None,\n",
       "   'return_type': 'ComponentsArray',\n",
       "   'test_params': '<function APITestGenerator.try_method_with_common_params.<locals>.<lambda> at 0x109651310>'},\n",
       "  {'object': 'ComponentsArray',\n",
       "   'method': 'largest_component',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'Subgraph with 3 nodes and 2 edges\\n\\nEdges:\\n  ID    Source → Target\\n  ----  ---------------\\n     0       0 → 1\\n     1       1 → 2',\n",
       "   'error': None,\n",
       "   'return_type': 'Subgraph'},\n",
       "  {'object': 'ComponentsArray',\n",
       "   'method': 'neighborhood',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'SubgraphArray(1 subgraphs)',\n",
       "   'error': None,\n",
       "   'return_type': 'SubgraphArray'},\n",
       "  {'object': 'ComponentsArray',\n",
       "   'method': 'sample',\n",
       "   'signature': '(k)',\n",
       "   'requires_params': True,\n",
       "   'status': 'success_with_params',\n",
       "   'result': 'SubgraphArray(1 subgraphs)',\n",
       "   'error': None,\n",
       "   'return_type': 'SubgraphArray',\n",
       "   'test_params': '3'},\n",
       "  {'object': 'ComponentsArray',\n",
       "   'method': 'sizes',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '[(3, 2)]',\n",
       "   'error': None,\n",
       "   'return_type': 'list'},\n",
       "  {'object': 'ComponentsArray',\n",
       "   'method': 'table',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'TableArray(1 tables)',\n",
       "   'error': None,\n",
       "   'return_type': 'TableArray'},\n",
       "  {'object': 'ComponentsArray',\n",
       "   'method': 'to_list',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '[Subgraph(nodes=3, edges=2)]',\n",
       "   'error': None,\n",
       "   'return_type': 'list'},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'bfs',\n",
       "   'signature': '(start, max_depth=None)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['start']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'calculate_similarity',\n",
       "   'signature': \"(other, metric='jaccard')\",\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['other']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'child_meta_nodes',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '[]',\n",
       "   'error': None,\n",
       "   'return_type': 'list'},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'clustering_coefficient',\n",
       "   'signature': '(_node_id=None)',\n",
       "   'requires_params': False,\n",
       "   'status': 'error',\n",
       "   'result': None,\n",
       "   'error': 'Clustering coefficient not yet implemented in core - coming in future version',\n",
       "   'return_type': None},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'collapse',\n",
       "   'signature': \"(node_aggs=None, edge_aggs=None, edge_strategy='aggregate', node_strategy='extract', preset=None, include_edge_count=True, mark_entity_type=True, entity_type='meta', allow_missing_attributes=True)\",\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'MetaNode(id=3, degree=0, subgraph_id=Some(7283313709374817673)) ',\n",
       "   'error': None,\n",
       "   'return_type': 'MetaNode'},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'collapse_to_node',\n",
       "   'signature': '(agg_functions)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['agg_functions']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'collapse_to_node_with_defaults',\n",
       "   'signature': '(agg_functions, defaults=None)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['agg_functions']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'connected_components',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'ComponentsArray(1 components)',\n",
       "   'error': None,\n",
       "   'return_type': 'ComponentsArray'},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'contains_edge',\n",
       "   'signature': '(edge_id)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['edge_id']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'contains_node',\n",
       "   'signature': '(node_id)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['node_id']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'degree',\n",
       "   'signature': '(nodes=None, *, full_graph=False)',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'GraphArray(len=3, dtype=int64)',\n",
       "   'error': None,\n",
       "   'return_type': 'GraphArray'},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'density',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '0.6666666666666666',\n",
       "   'error': None,\n",
       "   'return_type': 'float'},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'dfs',\n",
       "   'signature': '(start, max_depth=None)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['start']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'edge_count',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '2',\n",
       "   'error': None,\n",
       "   'return_type': 'int'},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'edge_endpoints',\n",
       "   'signature': '(edge_id)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['edge_id']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'edges_table',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'EdgesTable[2 x 4]\\nBaseTable[2 x 4]\\n|    edge_id |     source |     target |     method | \\n|------------|------------|------------|------------|\\n|          1 |          1 |          2 |       head | \\n|',\n",
       "   'error': None,\n",
       "   'return_type': 'EdgesTable'},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'entity_type',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'Subgraph',\n",
       "   'error': None,\n",
       "   'return_type': 'str'},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'filter_edges',\n",
       "   'signature': '(filter)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['filter']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'filter_nodes',\n",
       "   'signature': '(filter)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['filter']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'get_edge_attribute',\n",
       "   'signature': '(edge_id, attr_name)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['edge_id', 'attr_name']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'get_node_attribute',\n",
       "   'signature': '(node_id, attr_name)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['node_id', 'attr_name']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'has_edge',\n",
       "   'signature': '(edge_id)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['edge_id']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'has_edge_between',\n",
       "   'signature': '(source, target)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['source', 'target']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'has_meta_nodes',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'False',\n",
       "   'error': None,\n",
       "   'return_type': 'bool'},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'has_node',\n",
       "   'signature': '(node_id)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['node_id']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'has_path',\n",
       "   'signature': '(node1_id, node2_id)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['node1_id', 'node2_id']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'in_degree',\n",
       "   'signature': '(nodes=None, full_graph=False)',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'GraphArray(len=3, dtype=int64)',\n",
       "   'error': None,\n",
       "   'return_type': 'GraphArray'},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'induced_subgraph',\n",
       "   'signature': '(nodes)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['nodes']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'intersect_with',\n",
       "   'signature': '(_other)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['_other']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'is_connected',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'True',\n",
       "   'error': None,\n",
       "   'return_type': 'bool'},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'is_empty',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'False',\n",
       "   'error': None,\n",
       "   'return_type': 'bool'},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'merge_with',\n",
       "   'signature': '(_other)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['_other']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'meta_nodes',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '[]',\n",
       "   'error': None,\n",
       "   'return_type': 'list'},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'neighborhood',\n",
       "   'signature': '(central_nodes, hops)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['central_nodes', 'hops']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'neighbors',\n",
       "   'signature': '(node_id)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['node_id']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'node_count',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '3',\n",
       "   'error': None,\n",
       "   'return_type': 'int'},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'out_degree',\n",
       "   'signature': '(nodes=None, full_graph=False)',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'GraphArray(len=3, dtype=int64)',\n",
       "   'error': None,\n",
       "   'return_type': 'GraphArray'},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'parent_meta_node',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'None',\n",
       "   'error': None,\n",
       "   'return_type': 'NoneType'},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'sample',\n",
       "   'signature': '(k)',\n",
       "   'requires_params': True,\n",
       "   'status': 'success_with_params',\n",
       "   'result': 'Subgraph with 3 nodes and 2 edges\\n\\nEdges:\\n  ID    Source → Target\\n  ----  ---------------\\n     1       1 → 2\\n     0       0 → 1',\n",
       "   'error': None,\n",
       "   'return_type': 'Subgraph',\n",
       "   'test_params': '3'},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'set_edge_attrs',\n",
       "   'signature': '(attrs_dict)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['attrs_dict']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'set_node_attrs',\n",
       "   'signature': '(attrs_dict)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['attrs_dict']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'shortest_path_subgraph',\n",
       "   'signature': '(source, target)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['source', 'target']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'subgraph_from_edges',\n",
       "   'signature': '(edges)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['edges']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'subtract_from',\n",
       "   'signature': '(_other)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['_other']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'summary',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'Subgraph: 3 nodes, 2 edges, density: 0.667',\n",
       "   'error': None,\n",
       "   'return_type': 'str'},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'table',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'NodesTable[3 x 4]\\nBaseTable[3 x 4]\\n| entity_type |       type |    node_id |       name | \\n|------------|------------|------------|------------|\\n|       base |      table |          1 |  BaseTable | \\n',\n",
       "   'error': None,\n",
       "   'return_type': 'NodesTable'},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'to_edges',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'EdgesAccessor(2 edges)',\n",
       "   'error': None,\n",
       "   'return_type': 'EdgesAccessor'},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'to_graph',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'Graph(nodes=0, edges=0)',\n",
       "   'error': None,\n",
       "   'return_type': 'Graph'},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'to_matrix',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'error',\n",
       "   'result': None,\n",
       "   'error': 'Subgraph to matrix conversion not yet implemented',\n",
       "   'return_type': None},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'to_networkx',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'Graph with 3 nodes and 2 edges',\n",
       "   'error': None,\n",
       "   'return_type': 'Graph'},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'to_nodes',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'NodesAccessor(4 nodes)',\n",
       "   'error': None,\n",
       "   'return_type': 'NodesAccessor'},\n",
       "  {'object': 'Subgraph',\n",
       "   'method': 'transitivity',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'error',\n",
       "   'result': None,\n",
       "   'error': 'Transitivity not yet implemented in core - coming in future version',\n",
       "   'return_type': None},\n",
       "  {'object': 'GraphArray',\n",
       "   'method': 'apply_to_each',\n",
       "   'signature': '(method_name, args)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['method_name', 'args']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'GraphArray',\n",
       "   'method': 'count',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '3',\n",
       "   'error': None,\n",
       "   'return_type': 'int'},\n",
       "  {'object': 'GraphArray',\n",
       "   'method': 'describe',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'Statistical Summary:\\n  Count: 3\\n  Mean:  1.00\\n  Std:   1.00\\n  Min:   Int(0)\\n  25%:   1.00\\n  50%:   1.00\\n  75%:   2.00\\n  Max:   Int(2)\\n',\n",
       "   'error': None,\n",
       "   'return_type': 'StatsSummary'},\n",
       "  {'object': 'GraphArray',\n",
       "   'method': 'drop_na',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'GraphArray(len=3, dtype=int64)',\n",
       "   'error': None,\n",
       "   'return_type': 'GraphArray'},\n",
       "  {'object': 'GraphArray',\n",
       "   'method': 'fill_na',\n",
       "   'signature': '(fill_value)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['fill_value']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'GraphArray',\n",
       "   'method': 'has_null',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'False',\n",
       "   'error': None,\n",
       "   'return_type': 'bool'},\n",
       "  {'object': 'GraphArray',\n",
       "   'method': 'items',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '[(0, 1), (1, 0), (2, 2)]',\n",
       "   'error': None,\n",
       "   'return_type': 'list'},\n",
       "  {'object': 'GraphArray',\n",
       "   'method': 'max',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '2',\n",
       "   'error': None,\n",
       "   'return_type': 'int'},\n",
       "  {'object': 'GraphArray',\n",
       "   'method': 'mean',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '1.0',\n",
       "   'error': None,\n",
       "   'return_type': 'float'},\n",
       "  {'object': 'GraphArray',\n",
       "   'method': 'median',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '1.0',\n",
       "   'error': None,\n",
       "   'return_type': 'float'},\n",
       "  {'object': 'GraphArray',\n",
       "   'method': 'min',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '0',\n",
       "   'error': None,\n",
       "   'return_type': 'int'},\n",
       "  {'object': 'GraphArray',\n",
       "   'method': 'null_count',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '0',\n",
       "   'error': None,\n",
       "   'return_type': 'int'},\n",
       "  {'object': 'GraphArray',\n",
       "   'method': 'percentile',\n",
       "   'signature': '(p)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['p']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'GraphArray',\n",
       "   'method': 'preview',\n",
       "   'signature': '(limit=None)',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '[1, 0, 2]',\n",
       "   'error': None,\n",
       "   'return_type': 'list'},\n",
       "  {'object': 'GraphArray',\n",
       "   'method': 'quantile',\n",
       "   'signature': '(q)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['q']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'GraphArray',\n",
       "   'method': 'rich_display',\n",
       "   'signature': '(config=None)',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '╭───┬───────╮\\n│ # │ value │\\n│   │ obj   │\\n├───┼───────┤\\n│ 0 │ 1     │\\n│ 1 │ 0     │\\n│ 2 │ 2     │\\n╰───┴───────╯\\nrows: 3 • type: GraphArray • dtype: int64',\n",
       "   'error': None,\n",
       "   'return_type': 'str'},\n",
       "  {'object': 'GraphArray',\n",
       "   'method': 'std',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '1.0',\n",
       "   'error': None,\n",
       "   'return_type': 'float'},\n",
       "  {'object': 'GraphArray',\n",
       "   'method': 'summary',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': \"GraphArray('unnamed', length=3, dtype=Int, sparse=false)\",\n",
       "   'error': None,\n",
       "   'return_type': 'str'},\n",
       "  {'object': 'GraphArray',\n",
       "   'method': 'to_list',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '[1, 0, 2]',\n",
       "   'error': None,\n",
       "   'return_type': 'list'},\n",
       "  {'object': 'GraphArray',\n",
       "   'method': 'to_numpy',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '[1 0 2]',\n",
       "   'error': None,\n",
       "   'return_type': 'ndarray'},\n",
       "  {'object': 'GraphArray',\n",
       "   'method': 'to_pandas',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '0    1\\n1    0\\n2    2\\ndtype: int64',\n",
       "   'error': None,\n",
       "   'return_type': 'Series'},\n",
       "  {'object': 'GraphArray',\n",
       "   'method': 'to_scipy_sparse',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '  (np.int32(0), np.int32(0))\\t1\\n  (np.int32(0), np.int32(2))\\t2',\n",
       "   'error': None,\n",
       "   'return_type': 'csr_matrix'},\n",
       "  {'object': 'GraphArray',\n",
       "   'method': 'true_indices',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '[]',\n",
       "   'error': None,\n",
       "   'return_type': 'list'},\n",
       "  {'object': 'GraphArray',\n",
       "   'method': 'unique',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'GraphArray(len=3, dtype=int64)',\n",
       "   'error': None,\n",
       "   'return_type': 'GraphArray'},\n",
       "  {'object': 'GraphArray',\n",
       "   'method': 'value_counts',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': '{2: 1, 1: 1, 0: 1}',\n",
       "   'error': None,\n",
       "   'return_type': 'dict'},\n",
       "  {'object': 'Matrix',\n",
       "   'method': 'copy',\n",
       "   'signature': 'signature_unavailable',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': \"{'size': 3, 'is_sparse': True, 'type': 'adjacency_matrix', 'matrix': GraphMatrix(3 x 3, dtype=Float)}\",\n",
       "   'error': None,\n",
       "   'return_type': 'dict'},\n",
       "  {'object': 'Matrix',\n",
       "   'method': 'fromkeys',\n",
       "   'signature': '(iterable, value=None, /)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['iterable']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Matrix',\n",
       "   'method': 'get',\n",
       "   'signature': '(key, default=None, /)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['key']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Matrix',\n",
       "   'method': 'items',\n",
       "   'signature': 'signature_unavailable',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': \"dict_items([('size', 3), ('is_sparse', True), ('type', 'adjacency_matrix'), ('matrix', GraphMatrix(3 x 3, dtype=Float))])\",\n",
       "   'error': None,\n",
       "   'return_type': 'dict_items'},\n",
       "  {'object': 'Matrix',\n",
       "   'method': 'keys',\n",
       "   'signature': 'signature_unavailable',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': \"dict_keys(['size', 'is_sparse', 'type', 'matrix'])\",\n",
       "   'error': None,\n",
       "   'return_type': 'dict_keys'},\n",
       "  {'object': 'Matrix',\n",
       "   'method': 'pop',\n",
       "   'signature': 'signature_unavailable',\n",
       "   'requires_params': False,\n",
       "   'status': 'error',\n",
       "   'result': None,\n",
       "   'error': 'pop expected at least 1 argument, got 0',\n",
       "   'return_type': None},\n",
       "  {'object': 'Matrix',\n",
       "   'method': 'popitem',\n",
       "   'signature': '()',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': \"('matrix', GraphMatrix(3 x 3, dtype=Float))\",\n",
       "   'error': None,\n",
       "   'return_type': 'tuple'},\n",
       "  {'object': 'Matrix',\n",
       "   'method': 'setdefault',\n",
       "   'signature': '(key, default=None, /)',\n",
       "   'requires_params': True,\n",
       "   'status': 'skipped',\n",
       "   'result': None,\n",
       "   'error': \"Requires parameters: ['key']\",\n",
       "   'return_type': None},\n",
       "  {'object': 'Matrix',\n",
       "   'method': 'update',\n",
       "   'signature': 'signature_unavailable',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': 'None',\n",
       "   'error': None,\n",
       "   'return_type': 'NoneType'},\n",
       "  {'object': 'Matrix',\n",
       "   'method': 'values',\n",
       "   'signature': 'signature_unavailable',\n",
       "   'requires_params': False,\n",
       "   'status': 'success',\n",
       "   'result': \"dict_values([3, True, 'adjacency_matrix'])\",\n",
       "   'error': None,\n",
       "   'return_type': 'dict_values'}],\n",
       " 'coverage_analysis': {'BaseTable': {'total': 30,\n",
       "   'successful': 10,\n",
       "   'failed': 0,\n",
       "   'skipped': 20},\n",
       "  'NodesTable': {'total': 27, 'successful': 14, 'failed': 0, 'skipped': 13},\n",
       "  'EdgesTable': {'total': 32, 'successful': 18, 'failed': 0, 'skipped': 14},\n",
       "  'GraphTable': {'total': 20, 'successful': 9, 'failed': 3, 'skipped': 8},\n",
       "  'BaseArray': {'total': 7, 'successful': 6, 'failed': 0, 'skipped': 1},\n",
       "  'Graph': {'total': 62, 'successful': 19, 'failed': 2, 'skipped': 41},\n",
       "  'Nodes': {'total': 5, 'successful': 3, 'failed': 0, 'skipped': 2},\n",
       "  'Edges': {'total': 4, 'successful': 3, 'failed': 0, 'skipped': 1},\n",
       "  'ComponentsArray': {'total': 7, 'successful': 7, 'failed': 0, 'skipped': 0},\n",
       "  'Subgraph': {'total': 52, 'successful': 23, 'failed': 3, 'skipped': 26},\n",
       "  'GraphArray': {'total': 25, 'successful': 21, 'failed': 0, 'skipped': 4},\n",
       "  'Matrix': {'total': 10, 'successful': 6, 'failed': 1, 'skipped': 3}},\n",
       " 'method_success_patterns': {'agg': {'total': 1, 'successful': 0},\n",
       "  'aggregate': {'total': 2, 'successful': 0},\n",
       "  'assign': {'total': 1, 'successful': 0},\n",
       "  'column': {'total': 1, 'successful': 1},\n",
       "  'drop_columns': {'total': 3, 'successful': 0},\n",
       "  'filter': {'total': 4, 'successful': 4},\n",
       "  'from_csv': {'total': 3, 'successful': 0},\n",
       "  'from_dict': {'total': 3, 'successful': 0},\n",
       "  'from_json': {'total': 3, 'successful': 0},\n",
       "  'from_parquet': {'total': 3, 'successful': 0},\n",
       "  'group_by': {'total': 4, 'successful': 0},\n",
       "  'has_column': {'total': 1, 'successful': 1},\n",
       "  'head': {'total': 5, 'successful': 5},\n",
       "  'intersect': {'total': 1, 'successful': 0},\n",
       "  'iter': {'total': 4, 'successful': 4},\n",
       "  'join': {'total': 1, 'successful': 0},\n",
       "  'rich_display': {'total': 4, 'successful': 4},\n",
       "  'select': {'total': 3, 'successful': 0},\n",
       "  'set_column': {'total': 1, 'successful': 0},\n",
       "  'set_value': {'total': 1, 'successful': 0},\n",
       "  'set_values_by_mask': {'total': 1, 'successful': 0},\n",
       "  'set_values_by_range': {'total': 1, 'successful': 0},\n",
       "  'slice': {'total': 3, 'successful': 0},\n",
       "  'sort_by': {'total': 3, 'successful': 0},\n",
       "  'tail': {'total': 5, 'successful': 5},\n",
       "  'to_csv': {'total': 3, 'successful': 3},\n",
       "  'to_json': {'total': 3, 'successful': 3},\n",
       "  'to_pandas': {'total': 4, 'successful': 4},\n",
       "  'to_parquet': {'total': 3, 'successful': 0},\n",
       "  'union': {'total': 1, 'successful': 0},\n",
       "  'base_table': {'total': 2, 'successful': 2},\n",
       "  'filter_by_attr': {'total': 2, 'successful': 0},\n",
       "  'into_base_table': {'total': 2, 'successful': 2},\n",
       "  'ncols': {'total': 3, 'successful': 3},\n",
       "  'node_ids': {'total': 1, 'successful': 1},\n",
       "  'nrows': {'total': 3, 'successful': 3},\n",
       "  'shape': {'total': 3, 'successful': 3},\n",
       "  'unique_attr_values': {'total': 2, 'successful': 0},\n",
       "  'with_attributes': {'total': 1, 'successful': 0},\n",
       "  'as_tuples': {'total': 1, 'successful': 1},\n",
       "  'auto_assign_edge_ids': {'total': 2, 'successful': 2},\n",
       "  'edge_ids': {'total': 1, 'successful': 1},\n",
       "  'filter_by_sources': {'total': 1, 'successful': 0},\n",
       "  'filter_by_targets': {'total': 1, 'successful': 0},\n",
       "  'sources': {'total': 1, 'successful': 1},\n",
       "  'targets': {'total': 1, 'successful': 1},\n",
       "  'from_federated_bundles': {'total': 1, 'successful': 0},\n",
       "  'get_bundle_info': {'total': 1, 'successful': 0},\n",
       "  'load_bundle': {'total': 1, 'successful': 0},\n",
       "  'merge': {'total': 1, 'successful': 0},\n",
       "  'merge_with': {'total': 2, 'successful': 0},\n",
       "  'merge_with_strategy': {'total': 1, 'successful': 0},\n",
       "  'save_bundle': {'total': 1, 'successful': 0},\n",
       "  'stats': {'total': 1, 'successful': 1},\n",
       "  'to_edges': {'total': 2, 'successful': 1},\n",
       "  'to_graph': {'total': 2, 'successful': 2},\n",
       "  'to_nodes': {'total': 2, 'successful': 1},\n",
       "  'to_subgraphs': {'total': 1, 'successful': 0},\n",
       "  'validate': {'total': 1, 'successful': 1},\n",
       "  'verify_bundle': {'total': 1, 'successful': 0},\n",
       "  'apply_to_each': {'total': 2, 'successful': 0},\n",
       "  'describe': {'total': 2, 'successful': 2},\n",
       "  'dtype': {'total': 1, 'successful': 1},\n",
       "  'unique': {'total': 2, 'successful': 2},\n",
       "  'add_edge': {'total': 1, 'successful': 0},\n",
       "  'add_edges': {'total': 1, 'successful': 0},\n",
       "  'add_graph': {'total': 1, 'successful': 0},\n",
       "  'add_node': {'total': 1, 'successful': 0},\n",
       "  'add_nodes': {'total': 1, 'successful': 0},\n",
       "  'adjacency': {'total': 1, 'successful': 1},\n",
       "  'adjacency_matrix': {'total': 1, 'successful': 1},\n",
       "  'all_edge_attribute_names': {'total': 1, 'successful': 1},\n",
       "  'all_node_attribute_names': {'total': 1, 'successful': 1},\n",
       "  'bfs': {'total': 2, 'successful': 0},\n",
       "  'branches': {'total': 1, 'successful': 1},\n",
       "  'checkout_branch': {'total': 1, 'successful': 0},\n",
       "  'commit': {'total': 1, 'successful': 0},\n",
       "  'commit_history': {'total': 1, 'successful': 1},\n",
       "  'contains_edge': {'total': 2, 'successful': 0},\n",
       "  'contains_node': {'total': 2, 'successful': 0},\n",
       "  'create_branch': {'total': 1, 'successful': 0},\n",
       "  'dense_adjacency_matrix': {'total': 1, 'successful': 1},\n",
       "  'density': {'total': 2, 'successful': 2},\n",
       "  'dfs': {'total': 2, 'successful': 0},\n",
       "  'edge_attribute_keys': {'total': 1, 'successful': 0},\n",
       "  'edge_count': {'total': 2, 'successful': 2},\n",
       "  'edge_endpoints': {'total': 2, 'successful': 0},\n",
       "  'filter_edges': {'total': 2, 'successful': 0},\n",
       "  'filter_nodes': {'total': 2, 'successful': 0},\n",
       "  'get_edge_attr': {'total': 1, 'successful': 0},\n",
       "  'get_edge_attrs': {'total': 1, 'successful': 0},\n",
       "  'get_node_attr': {'total': 1, 'successful': 0},\n",
       "  'get_node_attrs': {'total': 1, 'successful': 0},\n",
       "  'get_node_mapping': {'total': 1, 'successful': 0},\n",
       "  'group_nodes_by_attribute': {'total': 1, 'successful': 0},\n",
       "  'has_edge': {'total': 2, 'successful': 0},\n",
       "  'has_edge_attribute': {'total': 1, 'successful': 0},\n",
       "  'has_node': {'total': 2, 'successful': 0},\n",
       "  'has_node_attribute': {'total': 1, 'successful': 0},\n",
       "  'has_uncommitted_changes': {'total': 1, 'successful': 1},\n",
       "  'historical_view': {'total': 1, 'successful': 0},\n",
       "  'is_connected': {'total': 2, 'successful': 2},\n",
       "  'laplacian_matrix': {'total': 1, 'successful': 1},\n",
       "  'neighborhood': {'total': 3, 'successful': 2},\n",
       "  'neighborhood_statistics': {'total': 1, 'successful': 1},\n",
       "  'neighbors': {'total': 2, 'successful': 0},\n",
       "  'node_attribute_keys': {'total': 1, 'successful': 0},\n",
       "  'node_count': {'total': 2, 'successful': 2},\n",
       "  'remove_edge': {'total': 1, 'successful': 0},\n",
       "  'remove_edges': {'total': 1, 'successful': 0},\n",
       "  'remove_node': {'total': 1, 'successful': 0},\n",
       "  'remove_nodes': {'total': 1, 'successful': 0},\n",
       "  'resolve_string_id_to_node': {'total': 1, 'successful': 0},\n",
       "  'set_edge_attr': {'total': 1, 'successful': 0},\n",
       "  'set_edge_attrs': {'total': 2, 'successful': 0},\n",
       "  'set_node_attr': {'total': 1, 'successful': 0},\n",
       "  'set_node_attrs': {'total': 2, 'successful': 0},\n",
       "  'shortest_path': {'total': 1, 'successful': 0},\n",
       "  'sparse_adjacency_matrix': {'total': 1, 'successful': 1},\n",
       "  'table': {'total': 5, 'successful': 5},\n",
       "  'to_networkx': {'total': 2, 'successful': 2},\n",
       "  'transition_matrix': {'total': 1, 'successful': 0},\n",
       "  'view': {'total': 1, 'successful': 1},\n",
       "  'weighted_adjacency_matrix': {'total': 1, 'successful': 0},\n",
       "  'all': {'total': 2, 'successful': 2},\n",
       "  'get_meta_node': {'total': 1, 'successful': 0},\n",
       "  'ids': {'total': 2, 'successful': 2},\n",
       "  'set_attrs': {'total': 2, 'successful': 0},\n",
       "  'largest_component': {'total': 1, 'successful': 1},\n",
       "  'sample': {'total': 2, 'successful': 2},\n",
       "  'sizes': {'total': 1, 'successful': 1},\n",
       "  'to_list': {'total': 2, 'successful': 2},\n",
       "  'calculate_similarity': {'total': 1, 'successful': 0},\n",
       "  'child_meta_nodes': {'total': 1, 'successful': 1},\n",
       "  'clustering_coefficient': {'total': 1, 'successful': 0},\n",
       "  'collapse': {'total': 1, 'successful': 1},\n",
       "  'collapse_to_node': {'total': 1, 'successful': 0},\n",
       "  'collapse_to_node_with_defaults': {'total': 1, 'successful': 0},\n",
       "  'connected_components': {'total': 1, 'successful': 1},\n",
       "  'degree': {'total': 1, 'successful': 1},\n",
       "  'edges_table': {'total': 1, 'successful': 1},\n",
       "  'entity_type': {'total': 1, 'successful': 1},\n",
       "  'get_edge_attribute': {'total': 1, 'successful': 0},\n",
       "  'get_node_attribute': {'total': 1, 'successful': 0},\n",
       "  'has_edge_between': {'total': 1, 'successful': 0},\n",
       "  'has_meta_nodes': {'total': 1, 'successful': 1},\n",
       "  'has_path': {'total': 1, 'successful': 0},\n",
       "  'in_degree': {'total': 1, 'successful': 1},\n",
       "  'induced_subgraph': {'total': 1, 'successful': 0},\n",
       "  'intersect_with': {'total': 1, 'successful': 0},\n",
       "  'is_empty': {'total': 1, 'successful': 1},\n",
       "  'meta_nodes': {'total': 1, 'successful': 1},\n",
       "  'out_degree': {'total': 1, 'successful': 1},\n",
       "  'parent_meta_node': {'total': 1, 'successful': 1},\n",
       "  'shortest_path_subgraph': {'total': 1, 'successful': 0},\n",
       "  'subgraph_from_edges': {'total': 1, 'successful': 0},\n",
       "  'subtract_from': {'total': 1, 'successful': 0},\n",
       "  'summary': {'total': 2, 'successful': 2},\n",
       "  'to_matrix': {'total': 1, 'successful': 0},\n",
       "  'transitivity': {'total': 1, 'successful': 0},\n",
       "  'count': {'total': 1, 'successful': 1},\n",
       "  'drop_na': {'total': 1, 'successful': 1},\n",
       "  'fill_na': {'total': 1, 'successful': 0},\n",
       "  'has_null': {'total': 1, 'successful': 1},\n",
       "  'items': {'total': 2, 'successful': 2},\n",
       "  'max': {'total': 1, 'successful': 1},\n",
       "  'mean': {'total': 1, 'successful': 1},\n",
       "  'median': {'total': 1, 'successful': 1},\n",
       "  'min': {'total': 1, 'successful': 1},\n",
       "  'null_count': {'total': 1, 'successful': 1},\n",
       "  'percentile': {'total': 1, 'successful': 0},\n",
       "  'preview': {'total': 1, 'successful': 1},\n",
       "  'quantile': {'total': 1, 'successful': 0},\n",
       "  'std': {'total': 1, 'successful': 1},\n",
       "  'to_numpy': {'total': 1, 'successful': 1},\n",
       "  'to_scipy_sparse': {'total': 1, 'successful': 1},\n",
       "  'true_indices': {'total': 1, 'successful': 1},\n",
       "  'value_counts': {'total': 1, 'successful': 1},\n",
       "  'copy': {'total': 1, 'successful': 1},\n",
       "  'fromkeys': {'total': 1, 'successful': 0},\n",
       "  'get': {'total': 1, 'successful': 0},\n",
       "  'keys': {'total': 1, 'successful': 1},\n",
       "  'pop': {'total': 1, 'successful': 0},\n",
       "  'popitem': {'total': 1, 'successful': 1},\n",
       "  'setdefault': {'total': 1, 'successful': 0},\n",
       "  'update': {'total': 1, 'successful': 1},\n",
       "  'values': {'total': 1, 'successful': 1}}}"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "📈 Test Success Analysis using Groggy arrays:\n",
      "   Average Success Rate: 0.0%\n",
      "   Best Success Rate: 0.0%\n",
      "   Lowest Success Rate: 0.0%\n",
      "\n",
      "🎯 Overall Test Performance:\n",
      "   Total Methods Tested: 281.0\n",
      "   Successful Tests: 139.0\n",
      "   Overall Success Rate: 49.5%\n",
      "\n",
      "🏆 Best Performer: ComponentsArray (100.0% success)\n",
      "⚠️  Most Challenging: Graph (30.6% success)\n"
     ]
    }
   ],
   "source": [
    "# Analyze success rates using Groggy array operations\n",
    "success_rates = coverage_table.column('success_rate')\n",
    "successful_tests = coverage_table.column('successful_tests')\n",
    "\n",
    "print(f\"📈 Test Success Analysis using Groggy arrays:\")\n",
    "\n",
    "# Get statistics\n",
    "success_stats = success_rates.describe()\n",
    "print(f\"   Average Success Rate: {success_stats.get('mean', 0):.1f}%\")\n",
    "print(f\"   Best Success Rate: {success_stats.get('max', 0):.1f}%\")\n",
    "print(f\"   Lowest Success Rate: {success_stats.get('min', 0):.1f}%\")\n",
    "\n",
    "total_successful = coverage_table['successful_tests'].sum()\n",
    "total_tests = coverage_table['total_methods'].sum()\n",
    "overall_success_rate = (total_successful / total_tests * 100) if total_tests > 0 else 0\n",
    "\n",
    "print(f\"\\n🎯 Overall Test Performance:\")\n",
    "print(f\"   Total Methods Tested: {total_tests}\")\n",
    "print(f\"   Successful Tests: {total_successful}\")\n",
    "print(f\"   Overall Success Rate: {overall_success_rate:.1f}%\")\n",
    "\n",
    "# Find best and worst performers\n",
    "best_rate = 0\n",
    "worst_rate = 100\n",
    "best_object = \"\"\n",
    "worst_object = \"\"\n",
    "\n",
    "for i in range(coverage_table.nrows):\n",
    "    row = coverage_table[i]\n",
    "    success_rate = row['success_rate']\n",
    "    if success_rate > best_rate:\n",
    "        best_rate = success_rate\n",
    "        best_object = row['object_name']\n",
    "    if success_rate < worst_rate and row['total_methods'] > 0:\n",
    "        worst_rate = success_rate\n",
    "        worst_object = row['object_name']\n",
    "\n",
    "print(f\"\\n🏆 Best Performer: {best_object} ({best_rate:.1f}% success)\")\n",
    "print(f\"⚠️  Most Challenging: {worst_object} ({worst_rate:.1f}% success)\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4. Load and Analyze the API Meta-Graph\n",
    "\n",
    "Now let's load the actual meta-graph - where Groggy's API structure is represented as a graph!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "🔄 Loading the API meta-graph using Groggy...\n",
      "⚠️  Could not load meta-graph bundle: name 'fr' is not defined\n",
      "   Creating a demonstration graph instead...\n",
      "✅ Created demo API graph: 4 nodes, 3 edges\n"
     ]
    }
   ],
   "source": [
    "# Try to load the meta-graph bundle (Groggy analyzing itself!)\n",
    "try:\n",
    "    print(\"🔄 Loading the API meta-graph using Groggy...\")\n",
    "    api_graph_table = fr.GraphTable.load_bundle('./groggy_api_meta_graph')\n",
    "    api_graph = api_graph_table.to_graph()\n",
    "    \n",
    "    print(f\"✅ Successfully loaded the API Meta-Graph!\")\n",
    "    print(f\"   Nodes: {api_graph.node_count()} (Groggy objects)\")\n",
    "    print(f\"   Edges: {api_graph.edge_count()} (methods connecting objects)\")\n",
    "    print(f\"   Graph Density: {api_graph.density():.3f}\")\n",
    "    \n",
    "    # This graph IS the Groggy API structure!\n",
    "    print(f\"\\n🎯 This graph represents Groggy's complete API structure:\")\n",
    "    print(f\"   • Each node = a Groggy object type\")\n",
    "    print(f\"   • Each edge = a method that connects objects\")\n",
    "    print(f\"   • Total API surface: {discovery_data['discovery_metadata']['total_methods']} methods\")\n",
    "    \n",
    "    # Get the nodes and edges tables for analysis\n",
    "    nodes_table = api_graph_table.nodes\n",
    "    edges_table = api_graph_table.edges\n",
    "    \n",
    "    print(f\"\\n📊 Node Analysis using Groggy tables:\")\n",
    "    print(f\"   Nodes table: {nodes_table.nrows()} rows, {nodes_table.ncols()} columns\")\n",
    "    print(f\"   Edges table: {edges_table.nrows()} rows, {edges_table.ncols()} columns\")\n",
    "    \n",
    "except Exception as e:\n",
    "    print(f\"⚠️  Could not load meta-graph bundle: {e}\")\n",
    "    print(f\"   Creating a demonstration graph instead...\")\n",
    "    \n",
    "    # Create a demo API graph\n",
    "    demo_nodes = {\n",
    "        'node_id': [1, 2, 3, 4],\n",
    "        'object_name': ['Graph', 'BaseTable', 'NodesTable', 'GraphArray'],\n",
    "        'method_count': [62, 30, 27, 25]\n",
    "    }\n",
    "    \n",
    "    demo_edges = {\n",
    "        'edge_id': [1, 2, 3],\n",
    "        'source': [1, 2, 3],\n",
    "        'target': [2, 3, 4],\n",
    "        'method_name': ['table', 'head', 'node_ids']\n",
    "    }\n",
    "    \n",
    "    nodes_table = gr.NodesTable.from_dict(demo_nodes)\n",
    "    edges_table = gr.EdgesTable.from_dict(demo_edges)\n",
    "    api_graph_table = gr.GraphTable(nodes_table, edges_table)\n",
    "    api_graph = api_graph_table.to_graph()\n",
    "    \n",
    "    print(f\"✅ Created demo API graph: {api_graph.node_count()} nodes, {api_graph.edge_count()} edges\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 5. Graph Analysis Using Groggy's Graph Operations\n",
    "\n",
    "Let's analyze the API meta-graph using Groggy's own graph analysis capabilities!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "🔍 API Meta-Graph Analysis using Groggy's graph operations:\n",
      "============================================================\n",
      "\n",
      "📈 Graph Structure:\n",
      "   Nodes (Objects): 4\n",
      "   Edges (Methods): 3\n",
      "   Density: 0.500\n",
      "   Connected: True\n",
      "\n",
      "🔗 Connectivity Analysis:\n",
      "   Connected Components: 1\n",
      "   Largest Component: 4 nodes\n",
      "\n",
      "📊 Node Degree Analysis:\n",
      "   Average Degree: 1.5\n",
      "   Max Degree: 2\n",
      "   (Degree = number of method connections per object)\n"
     ]
    }
   ],
   "source": [
    "# Analyze the meta-graph structure using Groggy's graph operations\n",
    "print(f\"🔍 API Meta-Graph Analysis using Groggy's graph operations:\")\n",
    "print(f\"=\" * 60)\n",
    "\n",
    "# Basic graph properties\n",
    "print(f\"\\n📈 Graph Structure:\")\n",
    "print(f\"   Nodes (Objects): {api_graph.node_count()}\")\n",
    "print(f\"   Edges (Methods): {api_graph.edge_count()}\")\n",
    "print(f\"   Density: {api_graph.density():.3f}\")\n",
    "print(f\"   Connected: {api_graph.is_connected()}\")\n",
    "\n",
    "# Analyze connectivity using Groggy's graph algorithms\n",
    "try:\n",
    "    components = api_graph.connected_components()\n",
    "    print(f\"\\n🔗 Connectivity Analysis:\")\n",
    "    print(f\"   Connected Components: {len(components)}\")\n",
    "    \n",
    "    if len(components) > 0:\n",
    "        largest = components.largest_component()\n",
    "        print(f\"   Largest Component: {largest.node_count()} nodes\")\n",
    "        \n",
    "except Exception as e:\n",
    "    print(f\"   Connectivity analysis: {e}\")\n",
    "\n",
    "# Node degree analysis\n",
    "try:\n",
    "    # Get degree information\n",
    "    degrees = api_graph.degree()\n",
    "    in_degrees = api_graph.in_degree()\n",
    "    out_degrees = api_graph.out_degree()\n",
    "    \n",
    "    print(f\"\\n📊 Node Degree Analysis:\")\n",
    "    \n",
    "    # Get statistics using Groggy array operations\n",
    "    if hasattr(degrees, 'describe'):\n",
    "        degree_stats = degrees.describe()\n",
    "        print(f\"   Average Degree: {degree_stats.mean:.1f}\")\n",
    "        print(f\"   Max Degree: {degree_stats.max}\")\n",
    "    \n",
    "    print(f\"   (Degree = number of method connections per object)\")\n",
    "    \n",
    "except Exception as e:\n",
    "    print(f\"   Degree analysis: {e}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "🏗️  Object Analysis from Meta-Graph Nodes:\n",
      "==================================================\n",
      "\n",
      "📋 Groggy Objects in the Meta-Graph:\n",
      " 1. Graph          : 62 methods\n",
      " 2. BaseTable      : 30 methods\n",
      " 3. NodesTable     : 27 methods\n",
      " 4. GraphArray     : 25 methods\n",
      "\n",
      "📊 Method Distribution Statistics:\n",
      "   Total Objects: 4\n",
      "   Avg Methods per Object: 0.0\n",
      "   Most Complex Object: 0 methods\n",
      "   Simplest Object: 0 methods\n",
      "\n",
      "🔗 Method Connection Analysis:\n",
      "   Total Method Connections: 3\n",
      "\n",
      "🔧 Sample Method Connections:\n",
      "   table(): Object 1 -> Object 2\n",
      "   head(): Object 2 -> Object 3\n",
      "   node_ids(): Object 3 -> Object 4\n",
      "\n",
      "✨ This represents the complete interconnection of Groggy's API!\n"
     ]
    }
   ],
   "source": [
    "# Analyze the nodes table to understand object relationships\n",
    "print(f\"🏗️  Object Analysis from Meta-Graph Nodes:\")\n",
    "print(f\"=\" * 50)\n",
    "\n",
    "# Show node information\n",
    "print(f\"\\n📋 Groggy Objects in the Meta-Graph:\")\n",
    "for i in range(min(nodes_table.nrows(), 10)):\n",
    "    row = nodes_table[i]\n",
    "    node_id = row['node_id']\n",
    "    obj_name = row['object_name']\n",
    "    method_count = row['method_count']\n",
    "    print(f\"{node_id:2}. {obj_name:15s}: {method_count:2} methods\")\n",
    "\n",
    "# Analyze method counts using Groggy operations\n",
    "if nodes_table.has_column('method_count'):\n",
    "    method_counts_column = nodes_table.column('method_count')\n",
    "    stats = method_counts_column.describe()\n",
    "    \n",
    "    print(f\"\\n📊 Method Distribution Statistics:\")\n",
    "    print(f\"   Total Objects: {nodes_table.nrows()}\")\n",
    "    print(f\"   Avg Methods per Object: {stats.get('mean', 0):.1f}\")\n",
    "    print(f\"   Most Complex Object: {stats.get('max', 0)} methods\")\n",
    "    print(f\"   Simplest Object: {stats.get('min', 0)} methods\")\n",
    "\n",
    "# Analyze edges to understand method connections\n",
    "print(f\"\\n🔗 Method Connection Analysis:\")\n",
    "print(f\"   Total Method Connections: {edges_table.nrows()}\")\n",
    "\n",
    "if edges_table.has_column('method_name'):\n",
    "    print(f\"\\n🔧 Sample Method Connections:\")\n",
    "    for i in range(min(edges_table.nrows(), 8)):\n",
    "        edge = edges_table[i]\n",
    "        method = edge['method_name']\n",
    "        source = edge['source']\n",
    "        target = edge['target']\n",
    "        print(f\"   {method}(): Object {source} -> Object {target}\")\n",
    "\n",
    "print(f\"\\n✨ This represents the complete interconnection of Groggy's API!\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 6. Method Success Pattern Analysis with Groggy\n",
    "\n",
    "Let's analyze which method patterns are most successful using Groggy's aggregation capabilities."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "✅ Created method patterns table with 87 successful methods\n",
      "\n",
      "🔥 Top Performing Method Patterns:\n",
      "==================================================\n",
      "\n",
      "📈 Methods by Success Count:\n",
      " 1. head                : 5 successful calls (100.0%)\n",
      " 2. tail                : 5 successful calls (100.0%)\n",
      " 3. table               : 5 successful calls (100.0%)\n",
      " 4. filter              : 4 successful calls (100.0%)\n",
      " 5. iter                : 4 successful calls (100.0%)\n",
      " 6. rich_display        : 4 successful calls (100.0%)\n",
      " 7. to_pandas           : 4 successful calls (100.0%)\n",
      " 8. to_csv              : 3 successful calls (100.0%)\n",
      " 9. to_json             : 3 successful calls (100.0%)\n",
      "10. ncols               : 3 successful calls (100.0%)\n",
      "\n",
      "📊 Method Success Statistics:\n",
      "   Average Success Rate: 0.0%\n",
      "   Best Success Rate: 0.0%\n",
      "   Average Successful Calls: 0.0\n",
      "   Most Successful Method: 0 calls\n"
     ]
    }
   ],
   "source": [
    "# Convert method success patterns to Groggy table\n",
    "method_pattern_data = {\n",
    "    'method_name': [],\n",
    "    'total_calls': [],\n",
    "    'successful_calls': [],\n",
    "    'success_rate': []\n",
    "}\n",
    "\n",
    "for method_name, pattern_info in test_results['method_success_patterns'].items():\n",
    "    if pattern_info['successful'] > 0:  # Only include methods with some success\n",
    "        success_rate = (pattern_info['successful'] / pattern_info['total'] * 100) if pattern_info['total'] > 0 else 0\n",
    "        method_pattern_data['method_name'].append(method_name)\n",
    "        method_pattern_data['total_calls'].append(pattern_info['total'])\n",
    "        method_pattern_data['successful_calls'].append(pattern_info['successful'])\n",
    "        method_pattern_data['success_rate'].append(success_rate)\n",
    "\n",
    "# Create Groggy table for method patterns\n",
    "methods_table = gr.BaseTable.from_dict(method_pattern_data)\n",
    "print(f\"✅ Created method patterns table with {methods_table.nrows} successful methods\")\n",
    "\n",
    "print(f\"\\n🔥 Top Performing Method Patterns:\")\n",
    "print(f\"=\" * 50)\n",
    "\n",
    "# Show top methods by successful calls (manual sorting since we're avoiding pandas)\n",
    "methods_list = []\n",
    "for i in range(methods_table.nrows):\n",
    "    row = methods_table[i]\n",
    "    methods_list.append((row['method_name'], row['successful_calls'], row['success_rate']))\n",
    "\n",
    "# Sort by successful calls (descending)\n",
    "methods_list.sort(key=lambda x: x[1], reverse=True)\n",
    "\n",
    "print(f\"\\n📈 Methods by Success Count:\")\n",
    "for i, (method, successes, rate) in enumerate(methods_list[:10]):\n",
    "    print(f\"{i+1:2d}. {method:20s}: {successes} successful calls ({rate:5.1f}%)\")\n",
    "\n",
    "# Analyze success rates using Groggy array operations\n",
    "success_rates_array = methods_table.column('success_rate')\n",
    "successful_calls_array = methods_table.column('successful_calls')\n",
    "\n",
    "rate_stats = success_rates_array.describe()\n",
    "call_stats = successful_calls_array.describe()\n",
    "\n",
    "print(f\"\\n📊 Method Success Statistics:\")\n",
    "print(f\"   Average Success Rate: {rate_stats.get('mean', 0):.1f}%\")\n",
    "print(f\"   Best Success Rate: {rate_stats.get('max', 0):.1f}%\")\n",
    "print(f\"   Average Successful Calls: {call_stats.get('mean', 0):.1f}\")\n",
    "print(f\"   Most Successful Method: {call_stats.get('max', 0)} calls\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 7. API Design Insights Using Pure Groggy Analysis\n",
    "\n",
    "Let's extract insights about Groggy's API design using only Groggy's analytical capabilities."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "🧠 API Design Insights from Pure Groggy Analysis:\n",
      "============================================================\n",
      "\n",
      "🏗️  API Complexity Insights:\n",
      "   Total API Surface: 282 methods across 12 objects\n",
      "   Average Complexity: 0.0 methods per object\n",
      "   Most Complex Object: 0 methods\n",
      "\n",
      "📊 Complexity Distribution:\n",
      "   Complex Objects (>30 methods): 3 objects, 146 methods (51.8%)\n",
      "   Medium Objects (10-30 methods): 5 objects, 113 methods (40.1%)\n",
      "   Simple Objects (<10 methods): 4 objects, 23 methods (8.2%)\n",
      "\n",
      "🧪 Testing Characteristics:\n",
      "   Easy to Test (>70% success): 4 objects\n",
      "   Moderate Testing (40-70%): 6 objects\n",
      "   Challenging (<40% success): 2 objects\n",
      "\n",
      "🏷️  Method Naming Patterns:\n",
      "   'to_*' pattern: 19 methods\n",
      "   'has_*' pattern: 10 methods\n",
      "   'get_*' pattern: 9 methods\n",
      "   'set_*' pattern: 9 methods\n",
      "   'filter*' pattern: 6 methods\n",
      "   'add_*' pattern: 5 methods\n",
      "\n",
      "✨ This analysis was performed entirely with Groggy's own capabilities!\n"
     ]
    }
   ],
   "source": [
    "print(f\"🧠 API Design Insights from Pure Groggy Analysis:\")\n",
    "print(f\"=\" * 60)\n",
    "\n",
    "# Complexity analysis using our objects table\n",
    "print(f\"\\n🏗️  API Complexity Insights:\")\n",
    "\n",
    "# Get method count statistics\n",
    "method_counts = objects_table.column('method_count')\n",
    "method_stats = method_counts.describe()\n",
    "\n",
    "total_methods = sum([row['method_count'] for i in range(objects_table.nrows) for row in [objects_table[i]]])\n",
    "avg_methods = method_stats.get('mean', 0)\n",
    "max_methods = method_stats.get('max', 0)\n",
    "\n",
    "print(f\"   Total API Surface: {total_methods} methods across {objects_table.nrows} objects\")\n",
    "print(f\"   Average Complexity: {avg_methods:.1f} methods per object\")\n",
    "print(f\"   Most Complex Object: {max_methods} methods\")\n",
    "\n",
    "# Categorize objects by complexity\n",
    "complex_count = 0\n",
    "medium_count = 0\n",
    "simple_count = 0\n",
    "complex_methods = 0\n",
    "medium_methods = 0\n",
    "simple_methods = 0\n",
    "\n",
    "for i in range(objects_table.nrows):\n",
    "    row = objects_table[i]\n",
    "    method_count = row['method_count']\n",
    "    \n",
    "    if method_count > 30:\n",
    "        complex_count += 1\n",
    "        complex_methods += method_count\n",
    "    elif method_count >= 10:\n",
    "        medium_count += 1\n",
    "        medium_methods += method_count\n",
    "    else:\n",
    "        simple_count += 1\n",
    "        simple_methods += method_count\n",
    "\n",
    "print(f\"\\n📊 Complexity Distribution:\")\n",
    "print(f\"   Complex Objects (>30 methods): {complex_count} objects, {complex_methods} methods ({complex_methods/total_methods*100:.1f}%)\")\n",
    "print(f\"   Medium Objects (10-30 methods): {medium_count} objects, {medium_methods} methods ({medium_methods/total_methods*100:.1f}%)\")\n",
    "print(f\"   Simple Objects (<10 methods): {simple_count} objects, {simple_methods} methods ({simple_methods/total_methods*100:.1f}%)\")\n",
    "\n",
    "# Test difficulty analysis\n",
    "print(f\"\\n🧪 Testing Characteristics:\")\n",
    "high_success_count = 0\n",
    "medium_success_count = 0\n",
    "low_success_count = 0\n",
    "\n",
    "for i in range(coverage_table.nrows):\n",
    "    row = coverage_table[i]\n",
    "    success_rate = row['success_rate']\n",
    "    \n",
    "    if success_rate > 70:\n",
    "        high_success_count += 1\n",
    "    elif success_rate >= 40:\n",
    "        medium_success_count += 1\n",
    "    else:\n",
    "        low_success_count += 1\n",
    "\n",
    "print(f\"   Easy to Test (>70% success): {high_success_count} objects\")\n",
    "print(f\"   Moderate Testing (40-70%): {medium_success_count} objects\")\n",
    "print(f\"   Challenging (<40% success): {low_success_count} objects\")\n",
    "\n",
    "# Method naming insights\n",
    "print(f\"\\n🏷️  Method Naming Patterns:\")\n",
    "common_names = ['table', 'head', 'tail', 'filter', 'to_', 'get_', 'set_', 'add_', 'is_', 'has_']\n",
    "name_counts = {name: 0 for name in common_names}\n",
    "\n",
    "# Count method name patterns from test results\n",
    "for method_name in test_results['method_success_patterns'].keys():\n",
    "    for pattern in common_names:\n",
    "        if pattern in method_name:\n",
    "            name_counts[pattern] += 1\n",
    "\n",
    "for pattern, count in sorted(name_counts.items(), key=lambda x: x[1], reverse=True)[:6]:\n",
    "    if count > 0:\n",
    "        print(f\"   '{pattern}*' pattern: {count} methods\")\n",
    "\n",
    "print(f\"\\n✨ This analysis was performed entirely with Groggy's own capabilities!\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 8. Visualization Using Matplotlib (with Groggy Data)\n",
    "\n",
    "Let's create visualizations using the data we've analyzed with Groggy."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "[encoded data, 177660 characters]",
      "text/plain": [
       "<Figure size 1600x1200 with 4 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "📊 All visualizations created from data analyzed purely with Groggy!\n",
      "   No pandas used - only Groggy's table and array operations.\n"
     ]
    }
   ],
   "source": [
    "# Extract data from Groggy tables for visualization\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# Method counts per object\n",
    "object_names = []\n",
    "method_counts_viz = []\n",
    "\n",
    "for i in range(objects_table.nrows):\n",
    "    row = objects_table[i]\n",
    "    object_names.append(row['object_name'])\n",
    "    method_counts_viz.append(row['method_count'])\n",
    "\n",
    "# Success rates per object\n",
    "coverage_names = []\n",
    "success_rates_viz = []\n",
    "\n",
    "for i in range(coverage_table.nrows):\n",
    "    row = coverage_table[i]\n",
    "    coverage_names.append(row['object_name'])\n",
    "    success_rates_viz.append(row['success_rate'])\n",
    "\n",
    "# Create visualizations\n",
    "fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, figsize=(16, 12))\n",
    "\n",
    "# 1. Methods per object\n",
    "bars1 = ax1.bar(range(len(object_names)), method_counts_viz, color='skyblue', alpha=0.8)\n",
    "ax1.set_title('Methods per Groggy Object\\n(Data analyzed with Groggy)', fontsize=14, fontweight='bold')\n",
    "ax1.set_ylabel('Number of Methods')\n",
    "ax1.set_xlabel('Object Type')\n",
    "ax1.set_xticks(range(len(object_names)))\n",
    "ax1.set_xticklabels(object_names, rotation=45, ha='right')\n",
    "ax1.grid(axis='y', alpha=0.3)\n",
    "\n",
    "# Add value labels on bars\n",
    "for bar, count in zip(bars1, method_counts_viz):\n",
    "    ax1.text(bar.get_x() + bar.get_width()/2, bar.get_height() + 0.5, \n",
    "             str(count), ha='center', va='bottom', fontsize=9)\n",
    "\n",
    "# 2. Test success rates\n",
    "bars2 = ax2.bar(range(len(coverage_names)), success_rates_viz, color='lightgreen', alpha=0.8)\n",
    "ax2.set_title('Test Success Rate by Object\\n(Pure Groggy Analysis)', fontsize=14, fontweight='bold')\n",
    "ax2.set_ylabel('Success Rate (%)')\n",
    "ax2.set_xlabel('Object Type')\n",
    "ax2.set_xticks(range(len(coverage_names)))\n",
    "ax2.set_xticklabels(coverage_names, rotation=45, ha='right')\n",
    "ax2.set_ylim(0, 100)\n",
    "ax2.grid(axis='y', alpha=0.3)\n",
    "\n",
    "# Add percentage labels\n",
    "for bar, rate in zip(bars2, success_rates_viz):\n",
    "    ax2.text(bar.get_x() + bar.get_width()/2, bar.get_height() + 1, \n",
    "             f'{rate:.1f}%', ha='center', va='bottom', fontsize=9)\n",
    "\n",
    "# 3. Method count distribution\n",
    "ax3.hist(method_counts_viz, bins=8, color='orange', alpha=0.7, edgecolor='black')\n",
    "ax3.set_title('Distribution of Method Counts\\n(Analyzed with Groggy Arrays)', fontsize=14, fontweight='bold')\n",
    "ax3.set_xlabel('Number of Methods per Object')\n",
    "ax3.set_ylabel('Number of Objects')\n",
    "ax3.grid(axis='y', alpha=0.3)\n",
    "\n",
    "# 4. Complexity vs Testability scatter\n",
    "# Match objects between tables\n",
    "matched_methods = []\n",
    "matched_success = []\n",
    "\n",
    "for i in range(objects_table.nrows):\n",
    "    obj_row = objects_table[i]\n",
    "    obj_name = obj_row['object_name']\n",
    "    method_count = obj_row['method_count']\n",
    "    \n",
    "    # Find matching coverage data\n",
    "    for j in range(coverage_table.nrows):\n",
    "        cov_row = coverage_table[j]\n",
    "        if cov_row['object_name'] == obj_name:\n",
    "            matched_methods.append(method_count)\n",
    "            matched_success.append(cov_row['success_rate'])\n",
    "            break\n",
    "\n",
    "ax4.scatter(matched_methods, matched_success, color='red', alpha=0.7, s=100)\n",
    "ax4.set_title('Object Complexity vs Test Success\\n(Groggy Meta-Analysis)', fontsize=14, fontweight='bold')\n",
    "ax4.set_xlabel('Number of Methods (Complexity)')\n",
    "ax4.set_ylabel('Test Success Rate (%)')\n",
    "ax4.grid(True, alpha=0.3)\n",
    "\n",
    "# Add trend line (simple)\n",
    "if len(matched_methods) > 1:\n",
    "    z = [sum(matched_methods)/len(matched_methods), sum(matched_success)/len(matched_success)]\n",
    "    ax4.axhline(y=z[1], color='red', linestyle='--', alpha=0.5, label=f'Avg Success: {z[1]:.1f}%')\n",
    "    ax4.axvline(x=z[0], color='blue', linestyle='--', alpha=0.5, label=f'Avg Complexity: {z[0]:.1f}')\n",
    "    ax4.legend()\n",
    "\n",
    "plt.tight_layout()\n",
    "plt.suptitle('Groggy API Meta-Analysis: Using Groggy to Analyze Itself', \n",
    "             fontsize=16, fontweight='bold', y=1.02)\n",
    "plt.show()\n",
    "\n",
    "print(f\"\\n📊 All visualizations created from data analyzed purely with Groggy!\")\n",
    "print(f\"   No pandas used - only Groggy's table and array operations.\")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "venv (3.9.6)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
