339 lines
12 KiB
JavaScript
339 lines
12 KiB
JavaScript
/**
|
|
* Temporal Attractor Studio Tools
|
|
* High-performance chaos analysis and Lyapunov exponent calculation
|
|
* Integrated with sublinear solver for temporal dynamics
|
|
*/
|
|
// Tool definitions for temporal attractor analysis
|
|
export const temporalAttractorTools = [
|
|
{
|
|
name: 'chaos_analyze',
|
|
description: 'Calculate Lyapunov exponent and chaos metrics from time series data using WASM-optimized algorithms',
|
|
inputSchema: {
|
|
type: 'object',
|
|
properties: {
|
|
data: {
|
|
type: 'array',
|
|
description: 'Time series data (flattened array)',
|
|
items: { type: 'number' }
|
|
},
|
|
dimensions: {
|
|
type: 'integer',
|
|
description: 'Number of dimensions per time point',
|
|
minimum: 1,
|
|
default: 3
|
|
},
|
|
dt: {
|
|
type: 'number',
|
|
description: 'Time step between measurements',
|
|
default: 0.01
|
|
},
|
|
k_fit: {
|
|
type: 'integer',
|
|
description: 'Points for linear fitting (Rosenstein algorithm)',
|
|
default: 12
|
|
},
|
|
theiler: {
|
|
type: 'integer',
|
|
description: 'Theiler window to exclude temporal neighbors',
|
|
default: 20
|
|
},
|
|
max_pairs: {
|
|
type: 'integer',
|
|
description: 'Maximum trajectory pairs to analyze',
|
|
default: 1000
|
|
}
|
|
},
|
|
required: ['data']
|
|
}
|
|
},
|
|
{
|
|
name: 'temporal_delay_embed',
|
|
description: 'Perform delay embedding for phase space reconstruction (Takens theorem)',
|
|
inputSchema: {
|
|
type: 'object',
|
|
properties: {
|
|
series: {
|
|
type: 'array',
|
|
description: 'Univariate time series',
|
|
items: { type: 'number' }
|
|
},
|
|
embedding_dim: {
|
|
type: 'integer',
|
|
description: 'Embedding dimension (typically 3-5)',
|
|
minimum: 2,
|
|
maximum: 10,
|
|
default: 3
|
|
},
|
|
tau: {
|
|
type: 'integer',
|
|
description: 'Time delay (typically 1-10)',
|
|
minimum: 1,
|
|
default: 1
|
|
}
|
|
},
|
|
required: ['series']
|
|
}
|
|
},
|
|
{
|
|
name: 'temporal_predict',
|
|
description: 'Initialize and use Echo-State Network for temporal prediction',
|
|
inputSchema: {
|
|
type: 'object',
|
|
properties: {
|
|
action: {
|
|
type: 'string',
|
|
description: 'Action to perform',
|
|
enum: ['init', 'train', 'predict', 'trajectory']
|
|
},
|
|
// For initialization
|
|
reservoir_size: {
|
|
type: 'integer',
|
|
description: 'Number of reservoir nodes (100-1000 typical)',
|
|
default: 300
|
|
},
|
|
input_dim: {
|
|
type: 'integer',
|
|
description: 'Input dimension',
|
|
minimum: 1,
|
|
default: 3
|
|
},
|
|
output_dim: {
|
|
type: 'integer',
|
|
description: 'Output dimension',
|
|
minimum: 1,
|
|
default: 3
|
|
},
|
|
spectral_radius: {
|
|
type: 'number',
|
|
description: 'Spectral radius (< 1 for stability)',
|
|
default: 0.95
|
|
},
|
|
// For training
|
|
inputs: {
|
|
type: 'array',
|
|
description: 'Training input data (flattened)',
|
|
items: { type: 'number' }
|
|
},
|
|
targets: {
|
|
type: 'array',
|
|
description: 'Training target data (flattened)',
|
|
items: { type: 'number' }
|
|
},
|
|
n_samples: {
|
|
type: 'integer',
|
|
description: 'Number of training samples',
|
|
minimum: 1
|
|
},
|
|
// For prediction
|
|
input: {
|
|
type: 'array',
|
|
description: 'Current state vector for prediction',
|
|
items: { type: 'number' }
|
|
},
|
|
n_steps: {
|
|
type: 'integer',
|
|
description: 'Number of steps to predict (for trajectory)',
|
|
default: 1
|
|
}
|
|
},
|
|
required: ['action']
|
|
}
|
|
},
|
|
{
|
|
name: 'temporal_fractal_dimension',
|
|
description: 'Estimate fractal dimension of attractor using box-counting algorithm',
|
|
inputSchema: {
|
|
type: 'object',
|
|
properties: {
|
|
data: {
|
|
type: 'array',
|
|
description: 'Time series data (flattened)',
|
|
items: { type: 'number' }
|
|
},
|
|
dimensions: {
|
|
type: 'integer',
|
|
description: 'Number of dimensions per point',
|
|
minimum: 1,
|
|
default: 3
|
|
}
|
|
},
|
|
required: ['data']
|
|
}
|
|
},
|
|
{
|
|
name: 'temporal_regime_changes',
|
|
description: 'Detect regime changes in chaotic dynamics using sliding window analysis',
|
|
inputSchema: {
|
|
type: 'object',
|
|
properties: {
|
|
data: {
|
|
type: 'array',
|
|
description: 'Time series data (flattened)',
|
|
items: { type: 'number' }
|
|
},
|
|
dimensions: {
|
|
type: 'integer',
|
|
description: 'Dimensions per point',
|
|
minimum: 1,
|
|
default: 3
|
|
},
|
|
window_size: {
|
|
type: 'integer',
|
|
description: 'Size of analysis window',
|
|
default: 50
|
|
},
|
|
stride: {
|
|
type: 'integer',
|
|
description: 'Stride between windows',
|
|
default: 10
|
|
}
|
|
},
|
|
required: ['data']
|
|
}
|
|
},
|
|
{
|
|
name: 'temporal_generate_attractor',
|
|
description: 'Generate known chaotic attractor data for testing',
|
|
inputSchema: {
|
|
type: 'object',
|
|
properties: {
|
|
system: {
|
|
type: 'string',
|
|
description: 'Attractor system to generate',
|
|
enum: ['lorenz', 'henon', 'rossler', 'chua', 'logistic']
|
|
},
|
|
n_points: {
|
|
type: 'integer',
|
|
description: 'Number of points to generate',
|
|
default: 1000
|
|
},
|
|
dt: {
|
|
type: 'number',
|
|
description: 'Time step (for continuous systems)',
|
|
default: 0.01
|
|
},
|
|
parameters: {
|
|
type: 'object',
|
|
description: 'System-specific parameters (e.g., sigma, rho, beta for Lorenz)',
|
|
additionalProperties: { type: 'number' }
|
|
}
|
|
},
|
|
required: ['system']
|
|
}
|
|
},
|
|
{
|
|
name: 'temporal_interpret_chaos',
|
|
description: 'Get human-readable interpretation of Lyapunov exponent and chaos metrics',
|
|
inputSchema: {
|
|
type: 'object',
|
|
properties: {
|
|
lambda: {
|
|
type: 'number',
|
|
description: 'Lyapunov exponent value'
|
|
},
|
|
dimension: {
|
|
type: 'number',
|
|
description: 'Fractal dimension (optional)'
|
|
},
|
|
system_name: {
|
|
type: 'string',
|
|
description: 'Name of the system being analyzed (optional)'
|
|
}
|
|
},
|
|
required: ['lambda']
|
|
}
|
|
},
|
|
{
|
|
name: 'temporal_recommend_parameters',
|
|
description: 'Get recommended analysis parameters based on data characteristics',
|
|
inputSchema: {
|
|
type: 'object',
|
|
properties: {
|
|
n_points: {
|
|
type: 'integer',
|
|
description: 'Number of data points',
|
|
minimum: 1
|
|
},
|
|
n_dims: {
|
|
type: 'integer',
|
|
description: 'Number of dimensions',
|
|
minimum: 1,
|
|
default: 3
|
|
},
|
|
sampling_rate: {
|
|
type: 'number',
|
|
description: 'Sampling rate in Hz',
|
|
default: 100
|
|
},
|
|
signal_type: {
|
|
type: 'string',
|
|
description: 'Type of signal',
|
|
enum: ['continuous', 'discrete', 'mixed'],
|
|
default: 'continuous'
|
|
}
|
|
},
|
|
required: ['n_points']
|
|
}
|
|
},
|
|
{
|
|
name: 'temporal_attractor_pullback',
|
|
description: 'Calculate pullback attractor dynamics and evolution',
|
|
inputSchema: {
|
|
type: 'object',
|
|
properties: {
|
|
initial_conditions: {
|
|
type: 'array',
|
|
description: 'Initial state vectors for ensemble',
|
|
items: {
|
|
type: 'array',
|
|
items: { type: 'number' }
|
|
}
|
|
},
|
|
ensemble_size: {
|
|
type: 'integer',
|
|
description: 'Number of trajectories in ensemble',
|
|
default: 100
|
|
},
|
|
evolution_time: {
|
|
type: 'number',
|
|
description: 'Total evolution time',
|
|
default: 10.0
|
|
},
|
|
snapshot_interval: {
|
|
type: 'number',
|
|
description: 'Time between snapshots',
|
|
default: 0.1
|
|
}
|
|
},
|
|
required: ['initial_conditions']
|
|
}
|
|
},
|
|
{
|
|
name: 'temporal_kaplan_yorke_dimension',
|
|
description: 'Calculate Kaplan-Yorke dimension from Lyapunov spectrum',
|
|
inputSchema: {
|
|
type: 'object',
|
|
properties: {
|
|
lyapunov_spectrum: {
|
|
type: 'array',
|
|
description: 'Array of Lyapunov exponents (sorted descending)',
|
|
items: { type: 'number' }
|
|
},
|
|
data: {
|
|
type: 'array',
|
|
description: 'Alternative: calculate spectrum from data',
|
|
items: { type: 'number' }
|
|
},
|
|
dimensions: {
|
|
type: 'integer',
|
|
description: 'Dimensions for data (if provided)',
|
|
default: 3
|
|
}
|
|
},
|
|
required: []
|
|
}
|
|
}
|
|
];
|
|
// Export handler functions that will call the WASM implementation
|
|
export { temporalAttractorHandlers } from './temporal-attractor-handlers.js';
|