Documentation Développeur
Intégrez Beausoft Subspace Computing Engine dans vos applications avec nos SDK Python/TypeScript ou l'API REST.
Introduction
Qu'est-ce que Beausoft Subspace Computing Engine ?
Beausoft Subspace Computing Engine (BSCE) est un moteur de calcul haute performance pour projections de données et simulations massives.
En 3 points :
- Déclaratif : Décrivez quoi calculer en JSON, pas comment le programmer
- Rapide : Exécute des milliers de scénarios en parallèle en quelques millisecondes
- Reproductible : Même modèle + même seed = mêmes résultats
Cas d'usage principaux
- Actuariat : Projections de réserves, calculs de provisions, évaluation de régimes de retraite
- Finance : Valorisation d'options, analyse de risques
- Optimisation : Projections budgétaires, analyse de coûts
Quick Start (5 minutes)
Étape 1 : Obtenir une Clé API
- Visitez /pricing
- Choisissez un plan
- Générez votre clé API
Étape 2 : Installer un SDK
Choisissez le SDK qui correspond à votre stack technique :
Python (3.10+)
pip install beausoftsubspaceTypeScript/JavaScript (Node.js)
npm install @beausoft/subspaceÉtape 3 : Premier Appel
Choisissez votre langage :
from beausoftsubspace import BSCE
# Initialiser le client
client = BSCE(api_key="be_live_...")
# Projection simple
result = client.project({
"scenarios": 1,
"steps": 12,
"variables": [
{
"name": "capital",
"init": 1000.0,
"formula": "capital[t-1] * 1.05"
}
]
})
print(f"Capital final: {'$'}{result['final_values']['capital']:,.2f}")Résultat : Capital final: $1,795.86
SP Models
Qu'est-ce qu'un SP Model ?
Un SP Model est un format JSON déclaratif qui décrit votre projection de données. Vous décrivez quoi calculer, pas comment le calculer.
Structure de base
Un SP Model est un format JSON déclaratif qui décrit votre projection de données.
{
"scenarios": 1000,
"steps": 12,
"variables": [
{
"name": "capital",
"init": 1000.0,
"formula": "capital[t-1] * (1 + taux)"
}
]
}Structure de base
Un SP Model est un format JSON déclaratif qui décrit votre projection de données.
{
"scenarios": 1000,
"steps": 12,
"variables": [
{
"name": "capital",
"init": 1000.0,
"formula": "capital[t-1] * (1 + taux)"
}
]
}Types de variables
1. Variable Déterministe
Valeur fixe avec évolution optionnelle via une formule.
{
"name": "capital",
"init": 1000.0,
"formula": "capital[t-1] * 1.05"
}2. Variable Aléatoire
Distribution statistique avec génération aléatoire. Distributions disponibles: uniform, normal.
{
"name": "taux",
"dist": "uniform",
"params": {"min": 0.03, "max": 0.07},
"per": "scenario"
}3. Time Series
Valeurs explicites définies par période.
{
"name": "inflation",
"values": [0.02, 0.025, 0.03, 0.035, 0.04]
}Références temporelles
Dans les formules, vous pouvez référencer des valeurs à différentes périodes :
var[t]Valeur actuelle
var[t-1]Période précédente
var[0]Valeur initiale
var[start:end]Slice temporel (agrégation)
{"formula": "capital[t-1] * 1.05"}
{"formula": "capital[t] - capital[0]"}
{"formula": "sum(primes_payees[0:t+1])"}Fonctions et opérateurs
Opérateurs mathématiques
+, -, *, /, ** (puissance), % (modulo)
Fonctions mathématiques
abs(x), max(x, y), min(x, y), round(x, n), floor(x, n), ceil(x, n), truncate(x, n), sqrt(x), pow(x, y), exp(x), log(x), ln(x)
Agrégations temporelles
sum(array[start:end]), mean(array[start:end]), std(array[start:end]), var(array[start:end])
Options avancées
meta (optionnel)
Métadonnées du modèle : seed, name, description
{
"meta": {
"seed": 1234567890,
"name": "Projection Capital 2025",
"description": "Simulation avec taux variables"
}
}final_metrics (optionnel)
Métriques calculées uniquement à la fin de la simulation.
{
"final_metrics": {
"capital_final": "capital[t_final]",
"profit_total": "capital[t_final] - capital[0]",
"taux_moyen": "mean(taux[0:t_final+1])"
}
}API REST
Authentification
Base URL : https://api.subspacecomputing.com
Toutes les requêtes nécessitent une clé API dans le header X-API-Key (sauf endpoints publics).
X-API-Key: be_live_XXXXXXXX...Endpoints publics (pas besoin d'API key) : GET /health, GET /examples, POST /validate
POST /project - Projection Unique
Exécute une projection unique (1 scénario) sans statistiques. scenarios doit être exactement 1.
curl -X POST "https://api.subspacecomputing.com/project" \
-H "X-API-Key: be_live_..." \
-H "Content-Type: application/json" \
-d '{
"scenarios": 1,
"steps": 12,
"variables": [
{
"name": "capital",
"init": 1000.0,
"formula": "capital[t-1] * 1.05"
}
]
}'POST /simulate - Simulation Monte Carlo
Exécute des simulations Monte Carlo (multi-scénarios) avec statistiques complètes.
curl -X POST "https://api.subspacecomputing.com/simulate" \
-H "X-API-Key: be_live_..." \
-H "Content-Type: application/json" \
-d '{
"scenarios": 1000,
"steps": 12,
"variables": [
{
"name": "taux",
"dist": "uniform",
"params": {"min": 0.03, "max": 0.07},
"per": "scenario"
},
{
"name": "capital",
"init": 1000.0,
"formula": "capital[t-1] * (1 + taux)"
}
]
}'POST /project/batch - Projections Batch
Exécute plusieurs projections individuelles avec des paramètres variables. Disponible sur les plans Business et Unlimited uniquement.
curl -X POST "https://api.subspacecomputing.com/project/batch" \
-H "X-API-Key: be_live_..." \
-H "Content-Type: application/json" \
-d '{
"batch_params": [
{"entity_id": "emp_001", "age": 45, "salary": 60000},
{"entity_id": "emp_002", "age": 50, "salary": 80000}
],
"template": {
"scenarios": 1,
"steps": "65 - batch_params.age",
"variables": [...]
},
"aggregations": [...]
}'POST /validate - Valider un SP Model
Valide votre SP Model sans l'exécuter. Endpoint public (pas besoin d'API key).
curl -X POST "https://api.subspacecomputing.com/validate" \
-H "Content-Type: application/json" \
-d '{
"scenarios": 100,
"steps": 12,
"variables": [...]
}'Gestion des erreurs
200 : Succès
400 : Erreur de validation (SP Model invalide)
401 : Authentification requise (API key manquante ou invalide)
429 : Rate limit dépassé
500 : Erreur serveur
SDK Python
Installation
Prérequis: Python 3.10+
pip install beausoftsubspaceInitialisation
from beausoftsubspace import BSCE
# Production (par défaut)
client = BSCE(api_key="be_live_...")
# Tests locaux (optionnel)
client = BSCE(
api_key="be_live_...",
base_url="http://localhost:8000"
)project() - Projection Unique
Exécute une projection unique (1 scénario). Le paramètre scenarios doit être exactement 1.
spec = {
"scenarios": 1, # DOIT être 1
"steps": 12,
"variables": [
{
"name": "capital",
"init": 1000.0,
"formula": "capital[t-1] * 1.05"
}
]
}
result = client.project(spec)
print(result['final_values']['capital'])simulate() - Simulation Monte Carlo
Exécute des simulations Monte Carlo (multi-scénarios) avec statistiques complètes.
spec = {
"scenarios": 1000,
"steps": 12,
"variables": [
{
"name": "taux",
"dist": "uniform",
"params": {"min": 0.03, "max": 0.07},
"per": "scenario"
},
{
"name": "capital",
"init": 1000.0,
"formula": "capital[t-1] * (1 + taux)"
}
]
}
result = client.simulate(spec)
print(f"Moyenne: {result['last_mean']['capital']}")
print(f"Médiane: {result['statistics']['capital']['median']}")
print(f"P95: {result['statistics']['capital']['percentiles']['95']}")project_batch() - Batch Mode
Exécute plusieurs projections avec des paramètres variables.
template = {
"scenarios": 1,
"steps": "65 - batch_params.age",
"variables": [
{
"name": "capital_retraite",
"init": 0.0,
"formula": "capital_retraite[t-1] * 1.05 + batch_params.salary * 0.10"
}
]
}
batch_params = [
{"entity_id": "emp_001", "age": 45, "salary": 60000},
{"entity_id": "emp_002", "age": 50, "salary": 80000}
]
result = client.project_batch(
template=template,
batch_params=batch_params
)
for entity in result['entities']:
print(f"{entity['_entity_id']}: {entity['final_values'][0]['capital_retraite']}")Gestion des erreurs
from beausoftsubspace import (
BSCE,
QuotaExceededError,
RateLimitError,
AuthenticationError,
ValidationError
)
try:
result = client.simulate(spec)
except QuotaExceededError:
print("Quota mensuel dépassé")
except RateLimitError as e:
print(f"Rate limit: {e}")
except AuthenticationError:
print("Clé API invalide")
except ValidationError as e:
print(f"Erreur de validation: {e.detail}")SDK TypeScript
Installation
Prérequis: Node.js 18+
npm install @beausoft/subspacePour la version beta : npm install @beausoft/subspace@beta
Initialisation
import { BSCE } from '@beausoft/subspace';
// Production (par défaut)
const client = new BSCE('be_live_...');
// Tests locaux (optionnel)
const client = new BSCE('be_live_...', 'http://localhost:8000');project() - Projection Unique
Exécute une projection unique (1 scénario, gratuit). Le paramètre scenarios doit être exactement 1.
const spec = {
scenarios: 1, // DOIT être 1
steps: 12,
variables: [
{
name: 'capital',
init: 1000.0,
formula: 'capital[t-1] * 1.05'
}
]
};
const result = await client.project(spec);
console.log(result.final_values.capital);simulate() - Simulation Monte Carlo
Exécute des simulations Monte Carlo (multi-scénarios) avec statistiques complètes.
const spec = {
scenarios: 1000,
steps: 12,
variables: [
{
name: 'taux',
dist: 'uniform',
params: { min: 0.03, max: 0.07 },
per: 'scenario'
},
{
name: 'capital',
init: 1000.0,
formula: 'capital[t-1] * (1 + taux)'
}
]
};
const result = await client.simulate(spec);
console.log(`Moyenne: ${result.last_mean.capital}`);
console.log(`Médiane: ${result.statistics.capital.median}`);
console.log(`P95: ${result.statistics.capital.percentiles[95]}`);projectBatch() - Batch Mode
Exécute plusieurs projections avec des paramètres variables. Disponible sur les plans Business et Enterprise uniquement.
const template = {
scenarios: 1,
steps: '65 - batch_params.age',
variables: [
{
name: 'age_actuel',
init: 'batch_params.age'
},
{
name: 'salaire',
init: 'batch_params.salary',
formula: 'salaire[t-1] * 1.03'
},
{
name: 'capital_retraite',
init: 0.0,
formula: 'capital_retraite[t-1] * 1.05 + salaire[t] * 0.10'
}
]
};
const batchParams = [
{ entity_id: 'emp_001', age: 45, salary: 60000 },
{ entity_id: 'emp_002', age: 50, salary: 80000 }
];
const aggregations = [
{ name: 'capital_total', formula: 'sum(capital_retraite[t_final])' }
];
const result = await client.projectBatch(template, batchParams, aggregations);
result.entities.forEach(entity => {
console.log(`${entity._entity_id}: ${entity.final_values[0].capital_retraite}`);
});Méthodes Utilitaires
validate() - Valider un SP Model
const validation = await client.validate(spec);
if (validation.is_valid) {
console.log('✅ Valid');
} else {
console.log(`❌ Errors: ${validation.errors}`);
}getExamples() - Obtenir des exemples
Endpoint public (pas d'API key requise)
const examples = await client.getExamples();
console.log(`Available: ${examples.examples.length}`);getUsage() - Obtenir usage et quotas
const usage = await client.getUsage();
console.log(`Used: ${usage.quota.used}/${usage.quota.limit}`);
console.log(`Remaining: ${usage.quota.remaining}`);getPlans() - Obtenir les plans
Endpoint public
const plans = await client.getPlans();
plans.plans.forEach(plan => {
console.log(`${plan.name}: $${plan.price_monthly}/month`);
});CRUD Projections et Runs
Gestion des Projections
// Lister les projections
const projections = await client.listProjections(10, 0);
// Obtenir une projection
const projection = await client.getProjection('proj_123');
// Supprimer une projection
await client.deleteProjection('proj_123');Gestion des Runs
// Lister les runs (avec filtres optionnels)
const runs = await client.listRuns('proj_123', undefined, 10, 0);
// Obtenir une run
const run = await client.getRun('run_123');
// Supprimer une run
await client.deleteRun('run_123');Helpers
// Obtenir info rate limit depuis dernière réponse
await client.project(spec);
const rateLimit = client.getRateLimitInfo();
if (rateLimit) {
console.log(`Limit: ${rateLimit.remaining}/${rateLimit.limit}`);
}
// Obtenir info quota depuis dernière réponse
await client.simulate(spec);
const quota = client.getQuotaInfo();
if (quota) {
console.log(`Quota: ${quota.used}/${quota.limit}`);
}Gestion des erreurs
import {
BSCEError,
QuotaExceededError,
RateLimitError,
AuthenticationError,
ValidationError
} from '@beausoft/subspace';
try {
const result = await client.simulate(spec);
} catch (error) {
if (error instanceof QuotaExceededError) {
console.error(`Quota dépassé: ${error.message}`);
} else if (error instanceof RateLimitError) {
console.error(`Rate limit dépassé: ${error.message}`);
const retryAfter = error.response?.headers.get('Retry-After');
} else if (error instanceof AuthenticationError) {
console.error(`Clé API invalide: ${error.message}`);
} else if (error instanceof ValidationError) {
console.error(`Erreur validation: ${error.detail}`);
} else if (error instanceof BSCEError) {
console.error(`Erreur API: ${error.message}`);
}
}Besoin de plus de détails ?
Consultez la référence API complète pour tous les endpoints et paramètres.