class_docstr: A network address to be evaluated.
  
  1. An unbound address is created using `address = Address()`.
  2. An address should be assigned to exactly one node e.g. using
     `address.assign(node)`.
  2. Upon launching, Launchpad will call bind() for each address to assign the
     address builder, which constructs the actual string format address at
     runtime. Launchpad has access to the addressed used in a program because
     each node maintains an `addresses` list of the nodes he knows about (it can
     be the address(es) the node own, or addresses that sub-nodes own.
  3. At runtime, use `address.resolve()` to finally resolve it.
  
  Using an unbound address will trigger an error.
  
  Attributes:
    name: Name of this address.
class_docstr_tok: ["A","network","address","to","be","evaluated",".","1",".","An","unbound","address","is","created","using","`","address","=","Address","(",")","`",".","2",".","An","address","should","be","assigned","to","exactly","one","node","e.g",".","using","`","address.assign","(","node",")","`",".","2",".","Upon","launching",",","Launchpad","will","call","bind","(",")","for","each","address","to","assign","the","address","builder",",","which","constructs","the","actual","string","format","address","at","runtime",".","Launchpad","has","access","to","the","addressed","used","in","a","program","because","each","node","maintains","an","`","addresses","`","list","of","the","nodes","he","knows","about","(","it","can","be","the","address","(","es",")","the","node","own",",","or","addresses","that","sub-nodes","own",".","3",".","At","runtime",",","use","`","address.resolve","(",")","`","to","finally","resolve","it",".","Using","an","unbound","address","will","trigger","an","error",".","Attributes",":","name",":","Name","of","this","address","."]
docstr: Returns the address as a string.
docstr_tok: ["Returns","the","address","as","a","string","."]
code: def resolve(self) -> str:
      """Returns the address as a string."""
      if not self._address_builder:
          if self._owning_node is None:
              raise RuntimeError(
                  "The lp.Address hasn't been assigned to any node, "
                  "thus it cannot be resolved. Use "
                  "`address.assign(node)` to assign an address to a node"
              )
          raise RuntimeError(
              f"The lp.Address associated to the node {self._owning_node} has not "
              "been bound to any address builder. Launchpad is responsible for "
              "doing that at launch time. If you are in tests, "
              "you can use:\n\n"
              "from launchpad.launch.test_multi_threading import address_builder as test_address_builder\n"
              "...\n"
              "test_address_builder.bind_addresses([node])"
          )
  
      return self._address_builder.build()
  
file_path: launchpad/launchpad/address.py
imports: import abc
  import os
  import re
  from typing import Optional
  from absl import logging
  import portpicker
label_desc: Use image node_id 3 for calling the Address obj's underlying member method code with example usage: obj.resolve() and returns: self