remove flatten array tests
This commit is contained in:
parent
68d1bac572
commit
8035b26750
@ -1,12 +1,6 @@
|
|||||||
import type { NodeRegistry, NodeType } from "@nodes/types";
|
import type { NodeRegistry, NodeType } from "@nodes/types";
|
||||||
|
|
||||||
function binaryArrayToNumber(binaryArray: number[]): number {
|
import * as d from "plantarium-nodes-math";
|
||||||
let result = 0;
|
|
||||||
for (let i = 0; i < binaryArray.length; i++) {
|
|
||||||
result = (result << 1) + binaryArray[i];
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
const nodeTypes: NodeType[] = [
|
const nodeTypes: NodeType[] = [
|
||||||
{
|
{
|
||||||
@ -15,7 +9,7 @@ const nodeTypes: NodeType[] = [
|
|||||||
"value": { type: "float", value: 0.1, internal: true },
|
"value": { type: "float", value: 0.1, internal: true },
|
||||||
},
|
},
|
||||||
outputs: ["float"],
|
outputs: ["float"],
|
||||||
execute: ({ value }) => { return [0, 1, 0, value] }
|
execute: ({ value }) => { return [0, value] }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "max/plantarium/math",
|
id: "max/plantarium/math",
|
||||||
@ -26,33 +20,12 @@ const nodeTypes: NodeType[] = [
|
|||||||
},
|
},
|
||||||
outputs: ["float"],
|
outputs: ["float"],
|
||||||
execute: ({ op_type, a, b }: { op_type: number, a: number, b: number }) => {
|
execute: ({ op_type, a, b }: { op_type: number, a: number, b: number }) => {
|
||||||
|
switch (op_type) {
|
||||||
const res = [1, 3, -1, op_type, 0, 0];
|
case 0: return a + b;
|
||||||
|
case 1: return a - b;
|
||||||
const bitmask = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
|
case 2: return a * b;
|
||||||
|
case 3: return a / b;
|
||||||
console.log({ a, b });
|
|
||||||
|
|
||||||
if (Array.isArray(a)) {
|
|
||||||
res[4] = res.length;
|
|
||||||
res.push(...a);
|
|
||||||
bitmask[1] = 1;
|
|
||||||
console.log("A", res.length, a.length);
|
|
||||||
} else {
|
|
||||||
res[4] = a;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Array.isArray(b)) {
|
|
||||||
res[5] = res.length;
|
|
||||||
res.push(...b);
|
|
||||||
bitmask[2] = 1;
|
|
||||||
} else {
|
|
||||||
res[5] = b;
|
|
||||||
}
|
|
||||||
|
|
||||||
res[2] = binaryArrayToNumber(bitmask);
|
|
||||||
|
|
||||||
return res
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -1,93 +1,6 @@
|
|||||||
import type { Graph, NodeRegistry, NodeType, RuntimeExecutor } from "@nodes/types";
|
import type { Graph, NodeRegistry, NodeType, RuntimeExecutor } from "@nodes/types";
|
||||||
|
|
||||||
|
|
||||||
function numberToBinaryArray(number: number): number[] {
|
|
||||||
const binaryArray: number[] = [];
|
|
||||||
for (let i = 31; i >= 0; i--) {
|
|
||||||
const bit = (number >> i) & 1;
|
|
||||||
binaryArray.push(bit);
|
|
||||||
}
|
|
||||||
return binaryArray;
|
|
||||||
}
|
|
||||||
|
|
||||||
function evaluate_node([node_type, ...args]: number[]) {
|
|
||||||
|
|
||||||
// Float node
|
|
||||||
if (node_type === 0) {
|
|
||||||
return args[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log(args);
|
|
||||||
|
|
||||||
// Math node
|
|
||||||
if (node_type === 1) {
|
|
||||||
if (args[0] === 0) {
|
|
||||||
return args[1] + args[2];
|
|
||||||
} else if (args[0] === 1) {
|
|
||||||
return args[1] - args[2];
|
|
||||||
} else if (args[0] === 2) {
|
|
||||||
return args[1] * args[1];
|
|
||||||
} else {
|
|
||||||
return args[1] / args[2];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function read_node(index: number, params: number[], depth = 0) {
|
|
||||||
if (depth > 20) {
|
|
||||||
throw new Error("Max depth reached");
|
|
||||||
}
|
|
||||||
|
|
||||||
const node_type = params[index];
|
|
||||||
const amount_of_args = params[index + 1];
|
|
||||||
const bitmask = params[index + 2];
|
|
||||||
console.log("READ_NODE", index, { node_type, bitmask, amount_of_args });
|
|
||||||
|
|
||||||
const mask = numberToBinaryArray(bitmask);
|
|
||||||
|
|
||||||
// there are not nodes connected to this node, lets evaluate
|
|
||||||
if (bitmask === 0) {
|
|
||||||
console.log("EVALUATE", index, params);
|
|
||||||
}
|
|
||||||
|
|
||||||
const args = [];
|
|
||||||
|
|
||||||
for (let i = 0; i < amount_of_args; i++) {
|
|
||||||
const isNode = mask[i] === 1;
|
|
||||||
if (isNode) {
|
|
||||||
console.log("NODE", index + 3 + i, params.slice(index + 3 + i, index + 3 + i + 5));
|
|
||||||
args[i] = read_node(params[index + 3 + i], params, depth + 1);
|
|
||||||
} else {
|
|
||||||
args[i] = params[index + 3 + i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log({ node_type, amount_of_args, args, bitmask });
|
|
||||||
return evaluate_node([node_type, ...args]);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
function split_params(params: number[]) {
|
|
||||||
const result = [];
|
|
||||||
let index = 0;
|
|
||||||
while (index < params.length) {
|
|
||||||
const amount_of_args = params[index + 1];
|
|
||||||
const node_size = 3 + amount_of_args;
|
|
||||||
result.push(params.slice(index, index + node_size));
|
|
||||||
index += node_size;
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
function evaluate(params: number[]) {
|
|
||||||
console.log("PARAMS", split_params(params));
|
|
||||||
const node = read_node(0, params);
|
|
||||||
|
|
||||||
console.log("RESULT: ", node);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
export class MemoryRuntimeExecutor implements RuntimeExecutor {
|
export class MemoryRuntimeExecutor implements RuntimeExecutor {
|
||||||
|
|
||||||
constructor(private registry: NodeRegistry) { }
|
constructor(private registry: NodeRegistry) { }
|
||||||
@ -220,8 +133,6 @@ export class MemoryRuntimeExecutor implements RuntimeExecutor {
|
|||||||
// return the result of the parent of the output node
|
// return the result of the parent of the output node
|
||||||
const res = results[outputNode.tmp?.parents?.[0].id as number] as string
|
const res = results[outputNode.tmp?.parents?.[0].id as number] as string
|
||||||
|
|
||||||
evaluate(res);
|
|
||||||
|
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user