class_docstr: This defines an abstract base class for joinable classes.
  
  A joinable class
  (inheriting from :class:`Joinable`) should implement :meth:`join_hook`,
  which returns a :class:`JoinHook` instance, in addition to
  :meth:`join_device` and :meth:`join_process_group` that return device and
  process group information, respectively.
class_docstr_tok: ["This","defines","an","abstract","base","class","for","joinable","classes",".","A","joinable","class","(","inheriting","from",":","class",":","`","Joinable","`",")","should","implement",":","meth",":","`","join_hook","`",",","which","returns","a",":","class",":","`","JoinHook","`","instance",",","in","addition","to",":","meth",":","`","join_device","`","and",":","meth",":","`","join_process_group","`","that","return","device","and","process","group","information",",","respectively","."]
docstr: Return the device from which to perform collective communications needed by the join context manager.
docstr_tok: ["Return","the","device","from","which","to","perform","collective","communications","needed","by","the","join","context","manager","."]
code: def join_device(self) -> torch.device:
      r"""Return the device from which to perform collective communications needed by the join context manager."""
      ...
  
imports: import warnings
  from abc import ABC, abstractmethod
  from types import TracebackType
  from typing import Any, List, NamedTuple, Optional, Type
  import torch
  import torch.distributed
label_desc: Use image node_id 3 for calling the Joinable obj's underlying member method code with example usage: obj.join_device() without return types