sphgeom.Region doesn't have intersection and union operators because:
a) the spherical geometry math to perform those operations directly is really hairy
b) it doesn't have concrete Region subclasses that could be used to represent the results of cross-class intersections or even single-class unions.
It'd be nice to have those operations available for the Butler query system, however, and a relative easy solution is to create a new Region subclass that just holds a bunch of other Regions in an intersection-union expression tree, and performs all other operations by delegating to that with the right reductions, e.g. "contains point" -> "all(intersected regions contain point)" and "any(unioned regions contain point)". I've started to actually do something like that in Python in daf_butler on
DM-31725, but it'd be much more natural (and possibly a lot faster) to do it in C++ and allow the new class to be a Region itself.