Labeled Module
Labeled graph builder for constructing graphs with custom node labels.
Provides a type-safe way to build graphs using arbitrary labels (strings, custom types, etc.) instead of integer node IDs. The builder maintains an internal mapping from labels to IDs.
When to Use
- Working with domain-specific identifiers (URLs, names, UUIDs)
- Building graphs from external data with natural keys
- When node identity is meaningful outside the graph structure
- Incremental graph construction with unknown nodes
Comparison with Direct Graph Construction
Aspect |
LabeledBuilder |
Direct Graph API |
|---|---|---|
Node reference |
Labels ('L) |
Integer IDs |
Auto-create nodes |
Yes |
No |
Lookup cost |
Map lookup |
Direct |
Use case |
Domain modeling |
Algorithm implementation |
Example
1: 2: 3: 4: 5: 6: 7: 8: 9: |
|
<summary> Labeled graph builder for constructing graphs with custom node labels. Provides a type-safe way to build graphs using arbitrary labels (strings, custom types, etc.) instead of integer node IDs. The builder maintains an internal mapping from labels to IDs. ## When to Use - Working with domain-specific identifiers (URLs, names, UUIDs) - Building graphs from external data with natural keys - When node identity is meaningful outside the graph structure - Incremental graph construction with unknown nodes ## Comparison with Direct Graph Construction | Aspect | LabeledBuilder | Direct Graph API | |--------|---------------|------------------| | Node reference | Labels ('L) | Integer IDs | | Auto-create nodes | Yes | No | | Lookup cost | Map lookup | Direct | | Use case | Domain modeling | Algorithm implementation | ## Example ```fsharp open Yog.Builder // Build a social graph with string labels let socialGraph = Labeled.directed<string, int>() |> Labeled.addEdge "Alice" "Bob" 5 |> Labeled.addEdge "Bob" "Charlie" 3 |> Labeled.addEdge "Alice" "Charlie" 10 |> Labeled.toGraph ``` </summary>
<summary> Convenience: Creates a directed labeled builder. ## Example ```fsharp let builder = Labeled.directed<string, int>() ``` </summary>
val string: value: 'T -> string
--------------------
type string = System.String
val int: value: 'T -> int (requires member op_Explicit)
--------------------
type int = int32
--------------------
type int<'Measure> = int
<summary> Adds an edge between two labels. Automatically creates nodes if missing. ## Parameters - `fromLabel`: Source node label - `toLabel`: Target node label - `weight`: Edge weight/data - `builder`: The builder to modify ## Example ```fsharp let builder = Labeled.directed<string, int>() |> Labeled.addEdge "A" "B" 10 ``` </summary>
<summary> Converts the builder to a standard detached Graph. The returned graph uses internal integer IDs but preserves labels as node data. </summary>
Functions and values
| Function or value |
Description
|
||
Full Usage:
addEdge fromLabel toLabel weight builder
Parameters:
'Label
toLabel : 'Label
weight : 'E
builder : LabeledBuilder<'Label, 'E>
Returns: LabeledBuilder<'Label, 'E>
|
Adds an edge between two labels. Automatically creates nodes if missing.
Parameters
Example
val builder: obj
Multiple items
val string: value: 'T -> string -------------------- type string = System.String Multiple items
val int: value: 'T -> int (requires member op_Explicit) -------------------- type int = int32 -------------------- type int<'Measure> = int
|
||
Full Usage:
addNode label builder
Parameters:
'Label
builder : LabeledBuilder<'Label, 'E>
Returns: LabeledBuilder<'Label, 'E>
Updated builder with the node added (if new). |
Explicitly adds a node by label.
Parameters
|
||
Full Usage:
addSimpleEdge fromLabel toLabel builder
Parameters:
'Label
toLabel : 'Label
builder : LabeledBuilder<'Label, int>
Returns: LabeledBuilder<'Label, int>
|
Adds a simple edge with weight 1 (for integer weighted graphs).
Example
val builder: obj
Multiple items
val string: value: 'T -> string -------------------- type string = System.String Multiple items
val int: value: 'T -> int (requires member op_Explicit) -------------------- type int = int32 -------------------- type int<'Measure> = int
|
||
|
|||
Full Usage:
create kind
Parameters:
GraphType
Returns: LabeledBuilder<'Label, 'EdgeData>
A fresh LabeledBuilder with no nodes or edges. |
Creates a new empty labeled graph builder.
Parameters
|
||
|
Convenience: Creates a directed labeled builder.
Example
val builder: obj
Multiple items
val string: value: 'T -> string -------------------- type string = System.String Multiple items
val int: value: 'T -> int (requires member op_Explicit) -------------------- type int = int32 -------------------- type int<'Measure> = int
|
||
Full Usage:
ensureNode label builder
Parameters:
'Label
builder : LabeledBuilder<'Label, 'E>
Returns: LabeledBuilder<'Label, 'E> * NodeId
Tuple of (updated builder, node ID) |
Idempotently ensures a node exists for a label. If the label already exists, returns the existing ID. If the label is new, creates a node and assigns a new ID.
|
||
Full Usage:
fromList kind edges
Parameters:
GraphType
edges : ('L * 'L * 'E) list
Returns: LabeledBuilder<'L, 'E>
|
Creates a builder from a list of edge triples (source, target, weight).
Example
val edges: (string * string * int) list
val builder: obj
|
||
Full Usage:
getId label builder
Parameters:
'Label
builder : LabeledBuilder<'Label, 'E>
Returns: NodeId option
|
Looks up the internal node ID for a given label.
|
||
Full Usage:
predecessors label builder
Parameters:
'Label
builder : LabeledBuilder<'Label, 'E>
Returns: ('Label * 'E) list option
|
Gets predecessors using labels.
|
||
Full Usage:
successors label builder
Parameters:
'Label
builder : LabeledBuilder<'Label, 'E>
Returns: ('Label * 'E) list option
|
Gets successors using labels.
|
||
Full Usage:
toGraph builder
Parameters:
LabeledBuilder<'Label, 'E>
Returns: Graph<'Label, 'E>
|
Converts the builder to a standard detached Graph. The returned graph uses internal integer IDs but preserves labels as node data.
|
||
|
Convenience: Creates an undirected labeled builder.
Example
val builder: obj
Multiple items
val string: value: 'T -> string -------------------- type string = System.String Multiple items
val int: value: 'T -> int (requires member op_Explicit) -------------------- type int = int32 -------------------- type int<'Measure> = int
|