Source code for neat.export

"""
Network export functionality for neat-python.

This module provides functions to export NEAT networks to JSON format.
The JSON format is framework-agnostic and human-readable, designed to enable
third-party tools to convert networks to various formats (ONNX, TensorFlow, PyTorch, etc.).

Example usage:
    import neat
    from neat.export import export_network_json
    
    # After training...
    winner = population.run(eval_genomes, 300)
    net = neat.nn.FeedForwardNetwork.create(winner, config)
    
    # Export to JSON string
    json_str = export_network_json(net, metadata={'fitness': winner.fitness})
    
    # Or export directly to file
    export_network_json(net, filepath='network.json', metadata={'fitness': winner.fitness})
"""

import json
from .exporters import export_feedforward, export_recurrent, export_ctrnn, export_iznn
from .json_format import validate_json


[docs] def export_network_json(network, filepath=None, metadata=None): """ Export a NEAT network to JSON format. This function supports all NEAT network types: - FeedForwardNetwork - RecurrentNetwork - CTRNN (Continuous-Time Recurrent Neural Network) - IZNN (Izhikevich Spiking Neural Network) The exported JSON format is well-documented and designed to be converted to other formats (ONNX, TensorFlow, PyTorch, etc.) by third-party tools. See docs/network-json-format.md for complete format specification. Args: network: A NEAT network instance (FeedForwardNetwork, RecurrentNetwork, CTRNN, or IZNN) filepath: Optional path to write JSON file. If None, returns JSON string. metadata: Optional dict with additional information to include in export. Common fields: 'fitness', 'generation', 'genome_id' Returns: str: JSON string representation of the network (always returned) Raises: ValueError: If network type is not supported TypeError: If network is not a valid NEAT network instance Example: >>> import neat >>> from neat.export import export_network_json >>> >>> # Create a network >>> config = neat.Config(...) >>> genome = ... >>> net = neat.nn.FeedForwardNetwork.create(genome, config) >>> >>> # Export to string >>> json_str = export_network_json(net) >>> >>> # Export to file with metadata >>> export_network_json( ... net, ... filepath='my_network.json', ... metadata={ ... 'fitness': 98.5, ... 'generation': 42, ... 'genome_id': 123 ... } ... ) """ if network is None: raise TypeError("network cannot be None") # Determine network type and call appropriate exporter network_type_name = type(network).__name__ if 'FeedForward' in network_type_name: data = export_feedforward(network, metadata) elif 'Recurrent' in network_type_name and 'CTRNN' not in network_type_name: data = export_recurrent(network, metadata) elif 'CTRNN' in network_type_name: data = export_ctrnn(network, metadata) elif 'IZNN' in network_type_name: data = export_iznn(network, metadata) else: raise ValueError( f"Unsupported network type: {network_type_name}. " f"Supported types: FeedForwardNetwork, RecurrentNetwork, CTRNN, IZNN" ) # Validate the generated JSON structure validate_json(data) # Convert to JSON string json_str = json.dumps(data, indent=2) # Write to file if filepath provided if filepath is not None: with open(filepath, 'w') as f: f.write(json_str) return json_str
# Export public API __all__ = ['export_network_json']