stevensonmt

stevensonmt

When you use the :digraph module and want to get a list of all edges, one would expect to see a list of vertex pairs, ideally with the “emanate from” / “incident to” order consistent. So something like [{:a, :b}, {:b, :c}, {:c, :b}] for a graph with vertices [:a, :b, :c] where :a has an edge incident to :b and :b and :c have a bidirectional edge. Instead you might see something inscrutable like [[:"$e" | 0], [:"$e" | 1], [:"$e" | 2]]. How are you supposed to interpret that list?

Showing Posts 1 to 8

al2o3cr

al2o3cr

Definitely an odd design choice - you could get something closer to what you’re looking for by mapping :digraph.edge over the output of :digraph.edges, but that’s a lot of round-trips to ETS to get what could have been one call to :ets.select :thinking:

https://github.com/erlang/otp/blob/e78684732252a5b2b33de90adaf8f7ff80eb5a3c/lib/stdlib/src/digraph.erl#L307-L334

bjorng

bjorng

Erlang Core Team

Alternatively, you could specify you our own edge names when creating the edges. As long as there is only a single edge in each direction between each pair of vertices, the following should work:

:digraph.add_edge(g, {from, to}, from, to, [])
stevensonmt

stevensonmt OP

So that’s brilliant. I’m curious why that’s not the default behavior of add_edge/3 though? Implicitly naming an edge with {from, to} has to be more intuitive than whatever [:"$e" | N] is meant to convey.

I also think it’s difficult to understand that this is possible from the docs for add_edge/5 because the edge() type is not documented. It’s also confusing to have edge “names” differ from edge “labels” and not document the “names” anywhere.

jhogberg

jhogberg

Erlang Core Team

The default edge names aren’t meant to convey anything: not giving them a name implies that you don’t care what they’re called.

The funny-looking names were most likely chosen because they’re more compact in memory and are unlikely to clash with user-named edges.

stevensonmt

stevensonmt OP

Submitted pull request to hopefully clarify docs a bit.

bjorng

bjorng

Erlang Core Team

Using the {from, to} naming scheme will not work in general, because the :digraph module supports having any number of distinct edges between each pair of vertices.

stevensonmt

stevensonmt OP

What is the utility of that feature? Is it to allow using labels to sort of classify connections in different schemas or something? Something like a graph of cars that includes vertices

v1 = {:toyota, :yellow}
v2 = {:toyota, :red}
v3 = {:ford, :yellow}
v4 = {:also_ford, :yellow}

Could have edges {v1, v2} label: :toyota, {v1, v3} label: :yellow, {v3, v4} label: :yellow, {v3, v4} label: :ford?

bjorng

bjorng

Erlang Core Team

I don’t know the original motivation for that feature, but one algorithm that needs it is Karger’s algorithm.

— All posts loaded —

Where Next? Top

Trending in Questions Top

stjefim
Hello! Suppose you are building workflow (order / task / payment) processing system with the following requirements: Each workflow con...
New
jonnycharles
I’m in search of an Elixir library that offers PDF generation capabilities similar to Ruby’s Prawn. While there have been discussions abo...
New
Blokh
Hey guys, I’ve got a huge CSV ( around 10 GB ) that needs to be processed hourly Do you guys have any suggestions what is the best prac...
New
roeland
Kia ora, We have been using elixir-google-api to connect to Google Drive. However, with the updates to Tesla due to CVEs this is now bro...
New
kszambelanczyk
Hello! Could someone please give me a help/sample code, how to delete a file from s3 using waffle/waffle_ecto from Phoenix app. I creat...
New
subsaharancoder
I’ve followed the Phoenix LiveView file upload code here Uploads — Phoenix LiveView v1.0.0-rc.7 and so far everything works just fine wit...
New
Onor.io
I have what I’ve heard referred to as a “lookup table” in my database. This is a way of assigning codes to common values. One common lo...
New

Other Trending Topics Top

garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
mcass19
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New
netoum
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge & Solve. They are GUI (Emerge) and State management (S...
New
wintermeyer
There are three potential reasons for members of this forum to have a look at https://vutuv.de You are tired or annoyed of LinkedIn. Yo...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews