def _non_dominated_front_arr(iterable, key=(lambda x: x), allowequality=True):
 items = list(iterable)
 fits = list(map(key, items))
 l = len(items)
 x = array(fits)
 a = tile(x, (l, 1, 1))
 b = a.transpose((1, 0, 2))
 if allowequality:
  ndom = sum((a <= b), axis=2)
 else:
  ndom = sum((a < b), axis=2)
 ndom = array(ndom, dtype=bool)
 res = set()
 for ii in range(l):
  res.add(ii)
  for ij in list(res):
   if (ii == ij):
    continue
   if (not ndom[(ij, ii)]):
    res.remove(ii)
    break
   elif (not ndom[(ii, ij)]):
    res.remove(ij)
 return set([items[i] for i in res])

def _non_dominated_front_arr ( iterable , key = ( lambda x : x ) , allowequality = True ) : items = list ( iterable ) fits = list ( map ( key , items ) ) l = len ( items ) x = array ( fits ) a = tile ( x , ( l , 1 , 1 ) ) b = a . transpose ( ( 1 , 0 , 2 ) ) if allowequality : ndom = sum ( ( a <= b ) , axis = 2 ) else : ndom = sum ( ( a < b ) , axis = 2 ) ndom = array ( ndom , dtype = bool ) res = set ( ) for ii in range ( l ) : res . add ( ii ) for ij in list ( res ) : if ( ii == ij ) : continue if ( not ndom [ ( ij , ii ) ] ) : res . remove ( ii ) break elif ( not ndom [ ( ii , ij ) ] ) : res . remove ( ij ) return set ( [ items [ i ] for i in res ] )
return a subset of items from iterable which are not dominated by any other item in iterable .