def getProduct( n ): if isinstance( n, RPNGenerator ): return getProduct( list( n ) ) elif isinstance( n[ 0 ], ( list, RPNGenerator ) ): return [ getProduct( arg ) for arg in n ] if not n: return 0 elif len( n ) == 1: return n[ 0 ] hasUnits = False for item in n: if isinstance( item, RPNMeasurement ): hasUnits = True break if hasUnits: result = RPNMeasurement( 1, { } ) for item in n: if isinstance( item, list ): return [ getProduct( arg ) for arg in item ] result = result.multiply( item ) return result else: if not n: return 0 if isinstance( n[ 0 ], list ): return [ getProduct( item ) for item in n ] else: return fprod( n )