def getNearbyPairs()

in data/question-gen/house_parse.py [0:0]


    def getNearbyPairs(self,
                             availableEnts,
                             hthreshold=0.005,
                             vthreshold=0.005):
        assert len(availableEnts) != 0

        nearbyPairs = {'on': [], 'next_to': []}

        for i in range(len(availableEnts) - 1):
            for j in range(i + 1, len(availableEnts)):
                if availableEnts[i].name != availableEnts[j].name:
                    # next to
                    dist = self.getClosestDistance(
                        availableEnts[i].meta,
                        availableEnts[j].meta,
                        axes=[0, 2])
                    if dist < hthreshold and (self.isContained(
                            availableEnts[i].meta,
                            availableEnts[j].meta,
                            axis=0) & self.isContained(
                                availableEnts[i].meta,
                                availableEnts[j].meta,
                                axis=2)) == False:
                        if availableEnts[i].type == 'room' and availableEnts[j].type == 'room':
                            nearbyPairs['next_to'].append(
                                (availableEnts[i], availableEnts[j], dist))
                        elif self.isContained(
                            availableEnts[i].meta,
                            availableEnts[j].meta,
                            axis=1) == True:
                            nearbyPairs['next_to'].append(
                                (availableEnts[i], availableEnts[j], dist))

                    # on / below
                    if availableEnts[i].type == 'object' and availableEnts[j].type == 'object':
                        dist = self.getClosestDistance(
                            availableEnts[i].meta,
                            availableEnts[j].meta,
                            axes=[1])
                        if dist < vthreshold and (self.isContained(
                                availableEnts[i].meta,
                                availableEnts[j].meta,
                                axis=0) & self.isContained(
                                    availableEnts[i].meta,
                                    availableEnts[j].meta,
                                    axis=2)) == True and self.isContained(
                                        availableEnts[i].meta,
                                        availableEnts[j].meta,
                                        axis=1) == False:

                            # higher first
                            if self.isHigher(
                                    availableEnts[i].meta,
                                    availableEnts[j].meta,
                                    axis=1):
                                nearbyPairs['on'].append(
                                    (availableEnts[i], availableEnts[j], dist))
                            elif self.isHigher(
                                    availableEnts[i].meta,
                                    availableEnts[j].meta,
                                    axis=1):
                                nearbyObjectPairs['on'].append(
                                    (availableEnts[j], availableEnts[i], dist))

        return nearbyPairs