Add startCoalescing/endCoalescing trampoline overrides to PyProcessGroup so the coalescing manager dispatches into a Python ProcessGroup from both frontends: the Python _start_coalescing/_end_coalescing bindings and C++ callers (e.g. functional collectives) route through the C++ virtual into the Python start_coalescing/end_coalescing overrides.
batch_isend_irecv relaxes its coalescing gate from 'type(group) is ProcessGroup' to isinstance so a Python subclass that reports supports_coalescing is routed through the coalescing manager. supports_coalescing is read with a default of False, so a Python PG that does not advertise it falls back to per-op send/recv; a Python PG that supports coalescing reports it by acting as its own backend via _get_backend, the same pattern as supports_splitting.
Review PyProcessGroup.hpp and the batch_isend_irecv dispatch in distributed_c10d.py first, then the tests.
SOCIAL SHARE CARD GENERATOR