def can_allocate(self, nodes, pos=None):
        # TODO: check docstring
        """Returns True if this route can allocate nodes in `nodes` list
        
        Parameters
        ----------
        nodes : type
            Desc
        pos : type, defaults to None
            Desc
            
        Returns
        -------
        bool
            True if this route can allocate nodes in `nodes` list
        """

        # clone route and nodes
        new_route = self.clone()
        new_nodes = [node.clone() for node in nodes]
        if pos is None:
            pos = len(self._nodes)
        new_route._nodes = new_route._nodes[:pos] + new_nodes + new_route._nodes[pos:]
        new_route._demand = sum([node.demand() for node in new_route._nodes])

        if new_route.tech_constraints_satisfied():
            return True

        return False