Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Standardize the handling of optional vertex parameters #1572

Open
szhorvat opened this issue Nov 4, 2024 · 4 comments
Open

Standardize the handling of optional vertex parameters #1572

szhorvat opened this issue Nov 4, 2024 · 4 comments

Comments

@szhorvat
Copy link
Member

szhorvat commented Nov 4, 2024

The handling, and default value, of optional vertex parameters should be standardized, and Stimulus should be updated accordingly.

There are currently two C functions which take an optional vertex parameter: igraph_random_spanning_tree() and igraph_fundamental_cycles(). Only the former is exposed at the moment. We need a decision on this issue before I expose the latter.

In C, these two functions interpret a negative vertex index as not passing a vertex.

In R, the situation is more complicated because vertices can be referred to either by a string name or by an integer index. Both must be supported.

IMO there are two reasonable options:

  1. Signal that no vertex is provided by passing a non-positive value. The default parameter value should be 0. NULL is not allowed, nor are passing multiple vertices.
  2. Signal that no vertex is provided by passing NULL. The default parameter value should be NULL. Non-positive integers are not allowed. Multiple vertices are not allowed.

We currently have (1) mostly implemented. The auto-generated code looks like this:

  if (!is.null(vid)) vid <- as_igraph_vs(graph, vid)
  if (length(vid) == 0) {
    stop("No vertex was specified")
  }

However, currently, OPTIONAL VERTEX, without an explicit default, uses NULL as the default, which triggers the "No vertex was specified" error. If we go with choice (1), Stimulus should be updated to use 0 instead of NULL as the default. If we go with choice (2), the autogen code template must be updated for this.

@krlmlr, can you make a decision on this? When that is done, can you adapt Stimulus, @Antonov548 ?

@maelle
Copy link
Contributor

maelle commented Nov 5, 2024

On the R side, having NULL as default makes sense for the interface. Now, we can internally convert it to whatever the C side needs.

https://design.tidyverse.org/defaults-short-and-sweet.html

@krlmlr
Copy link
Contributor

krlmlr commented Nov 7, 2024

I agree that the default on the interface should be NULL .

@Antonov548: Can you please help with Stimulus? Are the requirements clear?

@Antonov548
Copy link
Contributor

Antonov548 commented Nov 7, 2024

igraph_fundamental_cycles

Sorry, I'm not follow anymore. From the all pull requests and discussion I have thoughts that changes to Stimulus are not required.
Is there still anything I need to update in Stimulus?

Can you poine me please what should be updated?

@szhorvat
Copy link
Member Author

szhorvat commented Nov 7, 2024

Since we're going with option 2, I think you're right. But to be sure, it'd be great to actually implement this (by removing the default of 0 from igraph_random_spanning_tree and letting it use the OPTIONAL default of NULL) and make sure it all works.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants