sublinear 0.2.0

High-performance sublinear-time solver for asymmetric diagonally dominant systems
Documentation
/**
 * MCP Tools for Temporal Lead Solver
 * Provides temporal computational lead calculations through MCP
 */
import { TemporalPredictor } from 'temporal-lead-solver';
export class TemporalTools {
    predictor;
    constructor() {
        this.predictor = new TemporalPredictor(1e-6, 1000);
    }
    /**
     * Get all temporal lead tools
     */
    getTools() {
        return [
            {
                name: 'predictWithTemporalAdvantage',
                description: 'Predict solution with temporal computational lead - solve before data arrives',
                inputSchema: {
                    type: 'object',
                    properties: {
                        matrix: {
                            type: 'object',
                            properties: {
                                rows: { type: 'number', description: 'Number of rows' },
                                cols: { type: 'number', description: 'Number of columns' },
                                data: {
                                    oneOf: [
                                        {
                                            type: 'array',
                                            items: { type: 'array', items: { type: 'number' } },
                                            description: 'Dense matrix format'
                                        },
                                        {
                                            type: 'object',
                                            properties: {
                                                values: { type: 'array', items: { type: 'number' } },
                                                rowIndices: { type: 'array', items: { type: 'number' } },
                                                colIndices: { type: 'array', items: { type: 'number' } }
                                            },
                                            description: 'COO sparse format'
                                        }
                                    ]
                                }
                            },
                            required: ['rows', 'cols', 'data'],
                            description: 'Input matrix (must be diagonally dominant)'
                        },
                        vector: {
                            type: 'array',
                            items: { type: 'number' },
                            description: 'Right-hand side vector b'
                        },
                        distanceKm: {
                            type: 'number',
                            description: 'Distance in kilometers for temporal advantage calculation',
                            default: 10900
                        }
                    },
                    required: ['matrix', 'vector']
                }
            },
            {
                name: 'validateTemporalAdvantage',
                description: 'Validate temporal computational lead for a given problem size',
                inputSchema: {
                    type: 'object',
                    properties: {
                        size: {
                            type: 'number',
                            description: 'Matrix size to test',
                            default: 1000,
                            minimum: 10,
                            maximum: 100000
                        },
                        distanceKm: {
                            type: 'number',
                            description: 'Distance in kilometers (default: Tokyo to NYC)',
                            default: 10900
                        }
                    }
                }
            },
            {
                name: 'calculateLightTravel',
                description: 'Calculate light travel time vs computation time',
                inputSchema: {
                    type: 'object',
                    properties: {
                        distanceKm: {
                            type: 'number',
                            description: 'Distance in kilometers',
                            minimum: 0
                        },
                        matrixSize: {
                            type: 'number',
                            description: 'Size of the problem',
                            default: 1000
                        }
                    },
                    required: ['distanceKm']
                }
            },
            {
                name: 'demonstrateTemporalLead',
                description: 'Demonstrate temporal lead for various scenarios',
                inputSchema: {
                    type: 'object',
                    properties: {
                        scenario: {
                            type: 'string',
                            enum: ['trading', 'satellite', 'network', 'custom'],
                            description: 'Scenario to demonstrate',
                            default: 'trading'
                        },
                        customDistance: {
                            type: 'number',
                            description: 'Custom distance in km (for custom scenario)'
                        }
                    }
                }
            }
        ];
    }
    /**
     * Handle tool calls
     */
    async handleToolCall(name, args) {
        switch (name) {
            case 'predictWithTemporalAdvantage':
                return this.predictWithTemporalAdvantage(args);
            case 'validateTemporalAdvantage':
                return this.validateTemporalAdvantage(args);
            case 'calculateLightTravel':
                return this.calculateLightTravel(args);
            case 'demonstrateTemporalLead':
                return this.demonstrateTemporalLead(args);
            default:
                throw new Error(`Unknown temporal tool: ${name}`);
        }
    }
    /**
     * Predict with temporal advantage
     */
    async predictWithTemporalAdvantage(args) {
        const { matrix, vector, distanceKm = 10900 } = args;
        // Convert matrix to dense format if needed
        const denseMatrix = this.convertToDenseMatrix(matrix);
        // Calculate temporal advantage
        const result = this.predictor.predictWithTemporalAdvantage(denseMatrix, vector, distanceKm);
        return {
            solution: result.solution,
            computeTimeMs: result.computeTimeMs,
            lightTravelTimeMs: result.lightTravelTimeMs,
            temporalAdvantageMs: result.temporalAdvantageMs,
            effectiveVelocity: `${result.effectiveVelocityRatio.toFixed(0)}× speed of light`,
            queryCount: result.queryCount,
            sublinear: result.queryCount < vector.length / 2,
            summary: `Computed solution ${result.temporalAdvantageMs.toFixed(1)}ms before light could travel ${distanceKm}km`
        };
    }
    /**
     * Validate temporal advantage
     */
    async validateTemporalAdvantage(args) {
        const { size = 1000, distanceKm = 10900 } = args;
        const validation = this.predictor.validateTemporalAdvantage(size);
        return {
            ...validation,
            interpretation: this.interpretResults(validation)
        };
    }
    /**
     * Calculate light travel comparison
     */
    async calculateLightTravel(args) {
        const { distanceKm, matrixSize = 1000 } = args;
        const SPEED_OF_LIGHT_MPS = 299792458;
        const lightTravelTimeMs = (distanceKm * 1000) / (SPEED_OF_LIGHT_MPS / 1000);
        // Estimate computation time based on matrix size
        const estimatedComputeTime = Math.log2(matrixSize) * 0.1; // Sublinear estimate
        return {
            distance: {
                km: distanceKm,
                miles: distanceKm * 0.621371
            },
            lightTravelTime: {
                ms: lightTravelTimeMs,
                seconds: lightTravelTimeMs / 1000
            },
            estimatedComputeTime: {
                ms: estimatedComputeTime,
                seconds: estimatedComputeTime / 1000
            },
            temporalAdvantage: {
                ms: lightTravelTimeMs - estimatedComputeTime,
                ratio: lightTravelTimeMs / estimatedComputeTime
            },
            feasible: estimatedComputeTime < lightTravelTimeMs,
            summary: `Light takes ${lightTravelTimeMs.toFixed(1)}ms, computation takes ${estimatedComputeTime.toFixed(3)}ms`
        };
    }
    /**
     * Demonstrate temporal lead scenarios
     */
    async demonstrateTemporalLead(args) {
        const { scenario = 'trading', customDistance } = args;
        const scenarios = {
            trading: {
                name: 'High-Frequency Trading',
                route: 'Tokyo → New York',
                distanceKm: 10900,
                context: 'Financial markets arbitrage'
            },
            satellite: {
                name: 'Satellite Communication',
                route: 'Ground → GEO Satellite',
                distanceKm: 35786,
                context: 'Geostationary orbit communication'
            },
            network: {
                name: 'Global Network Routing',
                route: 'London → Sydney',
                distanceKm: 16983,
                context: 'Internet backbone optimization'
            },
            custom: {
                name: 'Custom Scenario',
                route: 'Point A → Point B',
                distanceKm: customDistance || 1000,
                context: 'User-defined distance'
            }
        };
        const selected = scenarios[scenario];
        // Generate test problem
        const size = 1000;
        const matrix = [];
        const vector = new Array(size).fill(1);
        for (let i = 0; i < size; i++) {
            matrix[i] = new Array(size).fill(0);
            matrix[i][i] = 4;
            if (i > 0)
                matrix[i][i - 1] = -1;
            if (i < size - 1)
                matrix[i][i + 1] = -1;
        }
        const result = this.predictor.predictWithTemporalAdvantage(matrix, vector, selected.distanceKm);
        return {
            scenario: selected.name,
            route: selected.route,
            context: selected.context,
            distance: `${selected.distanceKm} km`,
            lightTravelTime: `${result.lightTravelTimeMs.toFixed(1)} ms`,
            computationTime: `${result.computeTimeMs.toFixed(3)} ms`,
            temporalAdvantage: `${result.temporalAdvantageMs.toFixed(1)} ms`,
            effectiveVelocity: `${result.effectiveVelocityRatio.toFixed(0)}× speed of light`,
            queryComplexity: `O(n) = ${result.queryCount} queries for n=${size}`,
            practicalApplication: this.getPracticalApplication(scenario, result.temporalAdvantageMs),
            scientificValidity: 'Based on sublinear-time algorithms (Kwok-Wei-Yang 2025)',
            disclaimer: 'This is computational lead via prediction, not faster-than-light communication'
        };
    }
    /**
     * Convert matrix to dense format
     */
    convertToDenseMatrix(matrix) {
        const { rows, cols, data } = matrix;
        if (Array.isArray(data)) {
            // Already dense
            return data;
        }
        // Convert from sparse (COO) to dense
        const dense = [];
        for (let i = 0; i < rows; i++) {
            dense[i] = new Array(cols).fill(0);
        }
        if (data.values && data.rowIndices && data.colIndices) {
            for (let k = 0; k < data.values.length; k++) {
                dense[data.rowIndices[k]][data.colIndices[k]] = data.values[k];
            }
        }
        return dense;
    }
    /**
     * Interpret validation results
     */
    interpretResults(validation) {
        if (validation.valid) {
            return ` Temporal advantage confirmed: ${validation.temporalAdvantageMs}ms lead achieved with ${validation.effectiveVelocity}`;
        }
        else {
            return ` No temporal advantage: computation time exceeds light travel time`;
        }
    }
    /**
     * Get practical application description
     */
    getPracticalApplication(scenario, advantageMs) {
        const applications = {
            trading: `Execute trades ${advantageMs.toFixed(0)}ms before competitors receive market data`,
            satellite: `Process satellite commands before signals reach orbit`,
            network: `Route packets optimally before congestion information arrives`,
            custom: `Complete computation ${advantageMs.toFixed(0)}ms before traditional methods`
        };
        return applications[scenario] || applications.custom;
    }
}