I'm trying to understand the ArcGIS "Intersect" method so I can replicate it with an algorithm using Python and Shapely. 

I do not want the cumulative intersection of all features where all of them intersect at the same time (ABC):

[![enter image description here][1]][1]
(Image is from another SO post)

Instead, I want each sub intersection that intersects at least once, repeated how many times it occurs. So in the example image I want ABC returned three times, and AB, AC, and BC returned twice. 

This is a pretty standard GIS method also available in QGIS, so what is the accepted set theoretic way of achieving this? 

I've tried just looping and intersecting each geometry with all other geometries, but this only considers one and one intersection at a time, it seems the intersection results also have to be intersected with all other geometries, their intersection results, and so on. This is where I get confused and where it will possibly become too slow to be useful. 

Hopefully there is a simple logic that im just not realizing, maybe through a combination of intersections and differences, or recursive functions. 


  [1]: https://i.sstatic.net/uasAL.gif