hypercube-compute 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,321 @@
1
+ declare class TriadeMasterBuffer {
2
+ readonly buffer: ArrayBuffer;
3
+ private offset;
4
+ /**
5
+ * Alloue un unique bloc de mémoire vive (ArrayBuffer) pour l'ensemble du système.
6
+ * @param totalBytes Taille totale de la RAM allouée (par défaut 100 MB).
7
+ */
8
+ constructor(totalBytes?: number);
9
+ /**
10
+ * Alloue les octets nécessaires pour un Cube de 6 Faces en O(1) sans fragmentation.
11
+ * @param mapSize Résolution (ex: 400x400)
12
+ * @returns L'offset de départ dans l'ArrayBuffer
13
+ */
14
+ allocateCube(mapSize: number, numFaces?: number): number;
15
+ /** Retourne la quantité de RAM consommée */
16
+ getUsedMemoryInMB(): string;
17
+ }
18
+
19
+ /**
20
+ * Type alias to explicitly signal to AI that this array is a Flat Tensor (1D array simulating 2D/3D).
21
+ * @AI_RULE DO NOT iterate using functional array methods (map, forEach, reduce). DO NOT use `push` or `splice`.
22
+ */
23
+ type FlatTensorView = Float32Array;
24
+ /**
25
+ * Interface fondamentale (Le Contract) pour tout algorithme physique dans Triade Engine.
26
+ * Implémentée par les moteurs LBM, GameOfLife, SAT.
27
+ */
28
+ interface ITriadeEngine {
29
+ /**
30
+ * @description Exécute un pas de simulation mathématique à l'intérieur d'un TriadeCube.
31
+ * @param faces Les 6 (ou N) "Views" (FlatTensorView) pointant vers la VRAM continue.
32
+ * @param mapSize La dimension N (N x N) de ce chunk spatial.
33
+ *
34
+ * @AI_RULE CRITICAL_PERFORMANCE: This method runs inside a hot loop (like 60 FPS).
35
+ * @AI_RULE ZERO_ALLOCATION: DO NOT instantiate any object (`new Object()`, `[]`, `{}`) inside this scope to avoid Garbage Collection.
36
+ * @AI_RULE MEMORY_ACCESS: Use 1D sequential iterations `for (let i = 0; i < length; i++)`. Read/Write values via `faces[index][i]`. Map 2D coords using `index = y * mapSize + x`.
37
+ * @AI_RULE ERROR_HANDLING: If generating errors, be highly verbose for self-correction. Example: `throw new Error("[Triade] Out of bounds: index ${i} exceeds size ${length}")`
38
+ */
39
+ compute(faces: FlatTensorView[], mapSize: number): void;
40
+ /**
41
+ * Identifiant explicite du moteur algorithmique.
42
+ * @AI_RULE This MUST match the semantic context of the Engine (e.g., 'Navier-Stokes-LBM-D2Q9', 'Game-Of-Life').
43
+ */
44
+ get name(): string;
45
+ }
46
+
47
+ declare class TriadeCubeV2 {
48
+ readonly mapSize: number;
49
+ readonly faces: Float32Array[];
50
+ readonly offset: number;
51
+ engine: ITriadeEngine | null;
52
+ /**
53
+ * @param mapSize La résolution (N x N)
54
+ * @param masterBuffer L'allocateur de RAM central de l'Orchestrateur
55
+ */
56
+ constructor(mapSize: number, masterBuffer: TriadeMasterBuffer, numFaces?: number);
57
+ /**
58
+ * Injecte le cerveau mathématique dans ce paquet mémoire.
59
+ */
60
+ setEngine(engine: ITriadeEngine): void;
61
+ /**
62
+ * Exécute le calcul de la Frame (O1, Wavefront, Automates)
63
+ */
64
+ compute(): void;
65
+ /** Helper pour vider une face spécifique */
66
+ clearFace(faceIndex: number): void;
67
+ }
68
+
69
+ /**
70
+ * Chef d'orchestre de la V2.
71
+ * Il possède la VRAM globale partagée et gère les instanciations de Cubes sans fragmentation RAM.
72
+ */
73
+ declare class Triade {
74
+ private _masterBuffer;
75
+ cubes: Map<string, TriadeCubeV2>;
76
+ get masterBuffer(): TriadeMasterBuffer;
77
+ /**
78
+ * @param vRamAllocMegabytes Taille du ArrayBuffer en Mega-Octets (par defaut 50MB)
79
+ */
80
+ constructor(vRamAllocMegabytes?: number);
81
+ /**
82
+ * Forge un nouveau Cube (View Paging) depuis le Buffer Maître.
83
+ */
84
+ createCube(name: string, mapSize: number, engine: ITriadeEngine, numFaces?: number): TriadeCubeV2;
85
+ /**
86
+ * Accès sécurisé à un cube pour UI/Render logic.
87
+ */
88
+ getCube(id: string): TriadeCubeV2 | undefined;
89
+ }
90
+
91
+ /**
92
+ * TriadeGrid gère un assemblage N x M de TriadeCubes adjacents.
93
+ * Il assure la communication "Boundary Exchange" (Ghost Cells) entre les cubes
94
+ * à la fin de chaque étape de calcul pour unifier la simulation.
95
+ */
96
+ declare class TriadeGrid {
97
+ cubes: (TriadeCubeV2 | null)[][];
98
+ readonly cols: number;
99
+ readonly rows: number;
100
+ readonly cubeSize: number;
101
+ isPeriodic: boolean;
102
+ constructor(cols: number, rows: number, cubeSize: number, masterBuffer: TriadeMasterBuffer, engineFactory: () => ITriadeEngine, numFaces?: number, isPeriodic?: boolean);
103
+ /**
104
+ * Calcule une étape complète de la grille.
105
+ * 1. Exécute "compute()" sur chaque cube
106
+ * 2. Synchronise les bords (Boundary Exchange) sur les faces demandées
107
+ */
108
+ compute(facesToSynchronize?: number | number[]): void;
109
+ /**
110
+ * Recopie les vecteurs périphériques (1 pixel de profondeur) vers les bords des voisins.
111
+ */
112
+ private synchronizeBoundaries;
113
+ }
114
+
115
+ declare class AerodynamicsEngine implements ITriadeEngine {
116
+ dragScore: number;
117
+ private initialized;
118
+ get name(): string;
119
+ compute(faces: Float32Array[], mapSize: number): void;
120
+ }
121
+
122
+ declare class EcosystemEngineO1 implements ITriadeEngine {
123
+ get name(): string;
124
+ compute(faces: Float32Array[], mapSize: number): void;
125
+ }
126
+
127
+ declare class GameOfLifeEngine implements ITriadeEngine {
128
+ get name(): string;
129
+ compute(faces: Float32Array[], mapSize: number): void;
130
+ }
131
+
132
+ declare class HeatmapEngine implements ITriadeEngine {
133
+ readonly name = "Heatmap (O1 Spatial Convolution)";
134
+ radius: number;
135
+ weight: number;
136
+ /**
137
+ * @param radius Rayon d'influence en cellules
138
+ * @param weight Coefficient multiplicateur à l'arrivée
139
+ */
140
+ constructor(radius?: number, weight?: number);
141
+ /**
142
+ * Exécute le Summed Area Table Algorithm (Face 5) suivi
143
+ * d'un Box Filter O(1) vers la Synthèse (Face 3).
144
+ */
145
+ compute(faces: Float32Array[], mapSize: number): void;
146
+ }
147
+
148
+ declare class CanvasAdapter {
149
+ /**
150
+ * Lit un Tenseur Plat (Face de Float32Array) et le peint sur un contexte Canvas Native.
151
+ * Cette interface sépare la logique de rendu (UI) du moteur mathématique (Triade).
152
+ */
153
+ static renderFaceToCanvas(faceData: Float32Array, mapSize: number, ctx: CanvasRenderingContext2D, options?: {
154
+ colorScheme: 'heat' | 'grayscale';
155
+ normalizeMax?: number;
156
+ }): void;
157
+ }
158
+
159
+ declare class WebGLAdapter {
160
+ private gl;
161
+ private texture;
162
+ private program;
163
+ readonly mapSize: number;
164
+ constructor(canvas: HTMLCanvasElement, mapSize: number);
165
+ /**
166
+ * Propulse la Face Mémoire Triade directement dans la VRAM GPU.
167
+ * C'est l'opération la plus rapide sur navigateur (O(1) Data Upload).
168
+ */
169
+ renderFaceToWebGL(faceData: Float32Array): void;
170
+ private createProgram;
171
+ }
172
+
173
+ interface OceanEngineParams {
174
+ tau_0: number;
175
+ smagorinsky: number;
176
+ cflLimit: number;
177
+ bioDiffusion: number;
178
+ bioGrowth: number;
179
+ vortexRadius: number;
180
+ vortexStrength: number;
181
+ }
182
+ declare class OceanEngine implements ITriadeEngine {
183
+ readonly name = "OceanEngine";
184
+ private readonly w;
185
+ private readonly cx;
186
+ private readonly cy;
187
+ private readonly opp;
188
+ private feq_cache;
189
+ private pulled_f;
190
+ params: OceanEngineParams;
191
+ stats: {
192
+ maxU: number;
193
+ avgTau: number;
194
+ };
195
+ interaction: {
196
+ mouseX: number;
197
+ mouseY: number;
198
+ active: boolean;
199
+ };
200
+ constructor();
201
+ /**
202
+ * Entry point: Orchestrates LBM and Bio steps
203
+ */
204
+ compute(faces: Float32Array[], size: number): void;
205
+ private stepLBM;
206
+ private stepBio;
207
+ }
208
+
209
+ interface Boat$1 {
210
+ x: number;
211
+ y: number;
212
+ vx: number;
213
+ vy: number;
214
+ length: number;
215
+ angle: number;
216
+ }
217
+ declare class OceanSimulatorAddon {
218
+ readonly size: number;
219
+ private master;
220
+ private cube;
221
+ private engine;
222
+ boats: Boat$1[];
223
+ constructor(size?: number);
224
+ /**
225
+ * Engine parameters access
226
+ */
227
+ get params(): OceanEngineParams;
228
+ get stats(): {
229
+ maxU: number;
230
+ avgTau: number;
231
+ };
232
+ /**
233
+ * High-level Boat API
234
+ */
235
+ addBoat(x: number, y: number, length?: number): void;
236
+ /**
237
+ * Global Step: Fluid -> Bio -> Boats
238
+ */
239
+ step(): void;
240
+ /**
241
+ * Interaction bridge
242
+ */
243
+ setInteraction(x: number, y: number, active: boolean): void;
244
+ /**
245
+ * Helper to render everything to a canvas
246
+ */
247
+ render(ctx: CanvasRenderingContext2D, imageData: ImageData): void;
248
+ /** Access to raw buffers for custom rendering */
249
+ getRawFaces(): Float32Array<ArrayBufferLike>[];
250
+ }
251
+
252
+ declare class OceanWebGLRenderer {
253
+ private gl;
254
+ private program;
255
+ private indexCount;
256
+ private texRho;
257
+ private texUx;
258
+ private texUy;
259
+ private texObst;
260
+ private globalW;
261
+ private globalH;
262
+ private chunkSize;
263
+ constructor(canvas: HTMLCanvasElement, cols: number, rows: number, chunkSize: number);
264
+ private createTexture;
265
+ private bindTextureUniform;
266
+ private updateSubTexture;
267
+ render(grid: TriadeGrid): void;
268
+ private createProgram;
269
+ }
270
+
271
+ interface Boat {
272
+ x: number;
273
+ y: number;
274
+ vx: number;
275
+ vy: number;
276
+ length: number;
277
+ angle: number;
278
+ }
279
+ declare class OceanWorld {
280
+ readonly cols: number;
281
+ readonly rows: number;
282
+ readonly chunkSize: number;
283
+ readonly globalSizeW: number;
284
+ readonly globalSizeH: number;
285
+ grid: TriadeGrid;
286
+ boats: Boat[];
287
+ keys: {
288
+ up: boolean;
289
+ down: boolean;
290
+ left: boolean;
291
+ right: boolean;
292
+ };
293
+ constructor(masterBuffer: TriadeMasterBuffer, cols?: number, rows?: number, chunkSize?: number);
294
+ reset(): void;
295
+ addBoat(globalX: number, globalY: number, length?: number): void;
296
+ step(): void;
297
+ setVortexParams(strength: number, radius: number): void;
298
+ /**
299
+ * Helper to render a specific chunk to an isolated Canvas Context
300
+ */
301
+ renderChunk(chunkX: number, chunkY: number, ctx: CanvasRenderingContext2D, imageData: ImageData): void;
302
+ setInteraction(globalX: number, globalY: number, active: boolean): void;
303
+ }
304
+
305
+ /**
306
+ * @AI_BOILERPLATE This is the standard template for creating a new O(1) physics/math engine.
307
+ * Rename the class and implement the specific logic inside compute().
308
+ */
309
+ declare class BlankEngine implements ITriadeEngine {
310
+ get name(): string;
311
+ /**
312
+ * Called at every simulation tick.
313
+ * @param faces Array of Float32Array (VRAM Memory mapping of the TriadeCube)
314
+ * Face[0] is typically the main Output buffer or State A
315
+ * Face[1] is typically the Secondary buffer or State B (Wait/Swap)
316
+ * @param mapSize The N x N resolution of the chunk
317
+ */
318
+ compute(faces: FlatTensorView[], mapSize: number): void;
319
+ }
320
+
321
+ export { AerodynamicsEngine, BlankEngine, type Boat, CanvasAdapter, EcosystemEngineO1, type FlatTensorView, GameOfLifeEngine, HeatmapEngine, type ITriadeEngine, OceanEngine, type OceanEngineParams, OceanSimulatorAddon, OceanWebGLRenderer, OceanWorld, Triade, TriadeCubeV2, TriadeGrid, TriadeMasterBuffer, WebGLAdapter };