Might be or may be not.
I don’t know another way to do it, efficiently and without problems on your models, even large ones.
You can try it with ifcopenshell, might work, but not sure it’s stable enough to use it.
If you got other stuff, i’ll try them out to see the differences, especially on large files.
For mine, i’ve tested it out on large files, mep, mechanical, architectural, and i got no loss of geometry or data.
It’s agnostic to versions.
And i’ve developped other things aroung :
extract / delete things, types, or levels
slice by level
Compare version 1 and version 2 to retrieve the IFC model of differences only (with colour coding) -> new, modified, deleted