Is it necessary to explicitly create edges?

My script for importing a custom file format gets all the vertices and creates the appropriate faces, i.e., the vertices correctly correspond to the face loops. All vertex and face normals are correct.

I never at any point explicitly create an edge, but they do seem to get automatically created and can be manipulated in edit mode.

My question is: is it necessary to explicitly create edges if my mesh is completely closed with faces (no dangling edges)? I’m not sure if the edges that do get created automatically are fully-fledged edges or are some pseudo-connections lacking some properties.

I seldom stumble on this kind of code:

mesh.update(calc_edges=True)

so it looks like they are auto created.
Not an exhaustive answer, I guess.

I guess that’s indeed what it does do. I don’t even do an update. I just read in all the vertices, add them to the bmesh, then add the faces, and finally just bm.to_mesh(obj.data). So I’m guessing the to_mesh() is doing something similar update(). I did add in the update() method for good measure, though. Thanks.

To answer your original question: no, you don’t have to create the edges separately if they were created as part of making a face or faces.