There are infinitely many graphs with n edges (just keep throwing in
more isolated vertices)
That is, you basically  need to restrict to connected ones only (as a
variation, only ones without isolated vertices).

    sage: graphs.nauty_geng?

will tell you

   The possible options, obtained as output of "geng --help":

           n       : the number of vertices
      mine:maxe    : <int>:<int> a range for the number of edges
                      <int>:0 means '<int> or more' except in the case 0:0

that 2nd positional parameter to pass can be used to say how many
edges you need. E.g.


sage: [list(graphs.nauty_geng(str(n)+" 5:5 -c")) for n in range(4,7)]
[[Graph on 4 vertices],
 [Graph on 5 vertices,
  Graph on 5 vertices,
  Graph on 5 vertices,
  Graph on 5 vertices,
  Graph on 5 vertices],
 [Graph on 6 vertices,
  Graph on 6 vertices,
  Graph on 6 vertices,
  Graph on 6 vertices,
  Graph on 6 vertices,
  Graph on 6 vertices]]

lists all connected graphs with exactly 5 edges.

HTH
Dima

On Tue, Jan 31, 2023 at 1:52 PM Shiyue Li <shiyue...@brown.edu> wrote:
>
> Thank you.  Do you know what is an efficient way of getting these 
> non-isomorphic graphs with n edges?
>
> Using your answer. I can use nauty_geng(2 * n), and then filter out all the 
> graphs with n edges. But even going through nauty_geng(2*n) is more memory 
> and spaces needed.
>
>
> On Tuesday, January 31, 2023 at 6:49:03 AM UTC-5 dim...@gmail.com wrote:
> On Tue, Jan 31, 2023 at 2:38 AM Shiyue Li <shiy...@brown.edu> wrote:
> >
> > Hi all,
> >
> > I am hoping to generate a list of all graph isomorphism classes of a given 
> > size. The current code that I have first generate all the graphs on 2n, and 
> > then take all the isomorphism class representatives of size n. But the 
> > first step of generating all graphs on 2n vertices can take a really long 
> > time and huge amount of memory (run 10 days on my university's research 
> > computing cloud) and crashes.
> >
> > See the following for my code:
> >
> > def iso_graphs(n):
> > '''returns all isomorphism classes of simple graphs on n edges on 2*n 
> > vertices'''
> > L = list(graphs(2 * n, loops=False, size=n)) print("Do we ever reach this 
> > point?")
> > L = [G.canonical_label().copy(immutable=True) for G in L if G.size() == n]
> > return L
> >
> > I wonder if what is a correct and efficient way of doing it.
>
> We have a function to do this job very efficently:
>
> graphs.nauty_geng()
>
> it generates non-isomorphic graphs. E.g. list(graphs.nauty_geng("3
> -c")) gives you the complete list
> (of lengh 2) of all non-isomrphic connected graphs on 3 vertices
> (remove "-c" there if you want all graphs,
> not only connected)
>
> HTH
> Dima
>
> >
> > Thanks!
> >
> > --
> > You received this message because you are subscribed to the Google Groups 
> > "sage-support" group.
> > To unsubscribe from this group and stop receiving emails from it, send an 
> > email to sage-support...@googlegroups.com.
> > To view this discussion on the web visit 
> > https://groups.google.com/d/msgid/sage-support/0acb6537-3fe9-42dc-ab1b-c5c79dd5fb5cn%40googlegroups.com.

-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-devel+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sage-devel/CAAWYfq03MFopCBPxWD0ZJQ%2BD5sU6WYmvNhCu4qK2YiXu2deayQ%40mail.gmail.com.

Reply via email to