Skip to content

Language Bindings

Helios Network is built around a native graph core, so the same data model can be used from JavaScript/WASM, Python, and C. The JavaScript examples elsewhere in this section focus on the browser and Node wrapper. This page shows equivalent data-first workflows in Python and native C.

Python Usage

Python code is useful for batch import, analysis, notebooks, and data pipelines that produce files later consumed by Helios Web.

from helios_network import AttributeScope, AttributeType, Network, read_zxnet

network = Network(directed=True, node_capacity=5, edge_capacity=5)
nodes = network.add_nodes(5)
edges = network.add_edges([
    (nodes[0], nodes[1]),
    (nodes[1], nodes[2]),
    (nodes[2], nodes[3]),
    (nodes[3], nodes[4]),
])

network.define_attribute(AttributeScope.Node, "score", AttributeType.Double, 1)
network.nodes["score"] = [0.1, 0.4, 0.8, 0.7, 0.2]
network.nodes[[nodes[2], nodes[3]]]["label"] = ["hub", "bridge"]
network.edges["weight"] = [0.9, 0.4, 0.6, 0.3]

selected = network.select_nodes("score >= 0.7")
print(selected.ids)

network.save_zxnet("example.zxnet")
restored = read_zxnet("example.zxnet")
print(restored.node_count(), restored.edge_count())

Native C Usage

Native C access is the lowest-level API. It is appropriate for embedding the graph core in native applications, building language bindings, or writing performance-critical import/export code.

#include <helios/CXNetwork.h>
#include <helios/CXNetworkBXNet.h>

int main(void) {
    CXNetwork *network = CXNewNetworkWithCapacity(CXTrue, 5, 5);
    CXIndex nodes[5];
    CXNetworkAddNodes(network, 5, nodes);

    CXEdge pairs[4] = {
        {nodes[0], nodes[1]},
        {nodes[1], nodes[2]},
        {nodes[2], nodes[3]},
        {nodes[3], nodes[4]},
    };
    CXIndex edges[4];
    CXNetworkAddEdges(network, pairs, 4, edges);

    CXNetworkDefineNodeAttribute(network, "score", CXDoubleAttributeType, 1);
    double *score = (double *)CXNetworkGetNodeAttributeBuffer(network, "score");
    score[nodes[0]] = 0.1;
    score[nodes[1]] = 0.4;
    score[nodes[2]] = 0.8;
    score[nodes[3]] = 0.7;
    score[nodes[4]] = 0.2;

    CXNodeSelector *selected = CXNodeSelectorCreate(0);
    CXNetworkSelectNodesByQuery(network, "score >= 0.7", selected);

    CXNetworkWriteBXNet(network, "example.bxnet");
    CXNodeSelectorDestroy(selected);
    CXFreeNetwork(network);
    return 0;
}