CLI Modernization & Architecture Refactor

Key Changes When Merged

  • CLI Framework: Migrated from Click to Typer with Rich console integration
  • Class Naming: GeneratorSimulator throughout codebase
  • Configuration: Enhanced parameter inheritance, runtime template expansion
  • Safety Features: Retry logic, rollback capabilities, atomic file operations
  • A CLI to combine frame files.

Breaking Changes

  • Import paths: gwsim.generator.*gwsim.simulator.*
  • Simulator base class interface updated with StateAttribute descriptors
  • CLI command structure remains same but internal implementation changed

Example Configuration File:

# Advanced Enhanced Configuration Example
# Demonstrates simple class names, third-party packages, and complex template usage

globals:
  # Base configuration
  working-directory: "/tmp/gwsim_data"
  sampling-frequency: 16384
  duration: 8
  start-time: 1234567890
  
  # Output configuration
  output-directory: "{ working-directory }/output"
  metadata-directory: "{ working-directory }/metadata"
  
  # Shared simulator parameters
  seed-base: 42
  detector: "H1"

simulators:
  # High-resolution noise with gwsim class
  noise_high_res:
    class: ColoredNoise  # Resolves to gwsim.noise.WhiteNoise
    arguments:
      psd_file: ET.txt
      seed: "{ seed-base }"
      # Override global duration for longer noise segments
      duration: 16
    output:
      file_name: "{ detector }-NOISE-{ start-time }-{ duration }.gwf"
      arguments:
        channel: "{ detector }:STRAIN"
        
  # Binary black hole merger signal using gwsim
  bbh_signal:
    class: BBHInspiral  # Resolves to gwsim.signal.BBHInspiral
    arguments:
      mass1: 35.0
      mass2: 30.0
      spin1z: 0.3
      spin2z: -0.2
      distance: 410.0  # Mpc
      inclination: 1.2
      coalescence_phase: 0.5
      seed: "{ seed-base + 1 }"  # Template arithmetic
    output:
      file_name: "{ detector }-BBH-{ start-time }-{ duration }.gwf"
      arguments:
        channel: "{ detector }:STRAIN"
        
  # Third-party noise simulator
  external_noise:
    class: scipy.stats.norm  # Third-party package - used as-is
    arguments:
      loc: 0.0
      scale: 1e-23
    output:
      file_name: "{ detector }-EXTERNAL-{ start-time }-{ duration }.gwf"
      arguments:
        channel: "{ detector }:STRAIN"

  # Detector glitch using gwsim
  glitch_blip:
    class: Blip  # Resolves to gwsim.glitch.Blip
    arguments:
      central_freq: 500.0
      bandwidth: 100.0
      amplitude: 5e-20
      duration: 0.05  # Short glitch
    output:
      file_name: "{ detector }-GLITCH-{ start-time }-{ duration }.gwf"
      arguments:
        channel: "{ detector }:STRAIN"
Edited by chun-fung.wong