def __init__(
        self, topo_node_to_qubit_func: Callable[[Any], cirq.Qid] = default_topo_node_to_qubit
    ):
        """A placement strategy that randomly places circuits onto devices.

        Args:
            topo_node_to_qubit_func: A function that maps from `cirq.NamedTopology` nodes
                to `cirq.Qid`. There is a correspondence between nodes and the "abstract" Qids
                used to construct the un-placed circuit. `cirq.get_placements` returns a dictionary
                mapping from node to Qid. We use this function to transform it into a mapping
                from "abstract" Qid to device Qid. By default: nodes which are tuples correspond
                to `cirq.GridQubit`s; otherwise `cirq.LineQubit`.

        Note:
            The attribute `topo_node_to_qubit_func` is not preserved in JSON serialization. This
            bit of plumbing does not affect the placement behavior.
        """
        self.topo_node_to_qubit_func = topo_node_to_qubit_func
A placement strategy that randomly places circuits onto devices.

        Args:
            topo_node_to_qubit_func: A function that maps from `cirq.NamedTopology` nodes
                to `cirq.Qid`. There is a correspondence between nodes and the "abstract" Qids
                used to construct the un-placed circuit. `cirq.get_placements` returns a dictionary
                mapping from node to Qid. We use this function to transform it into a mapping
                from "abstract" Qid to device Qid. By default: nodes which are tuples correspond
                to `cirq.GridQubit`s; otherwise `cirq.LineQubit`.

        Note:
            The attribute `topo_node_to_qubit_func` is not preserved in JSON serialization. This
            bit of plumbing does not affect the placement behavior.
        
cirq-google/cirq_google/workflow/qubit_placement.py