docstr: Returns the state of the job
  State of finished jobs are cached (use watcher.clear() to remove all cache)
  
  Parameters
  ----------
  job_id: int
      id of the job on the cluster
  mode: str
      one of "force" (forces a call), "standard" (calls regularly) or "cache" (does not call)
docstr_tok: ["Returns","the","state","of","the","job","State","of","finished","jobs","are","cached","(","use","watcher.clear","(",")","to","remove","all","cache",")","Parameters","--","--","--","--","--","job_id",":","int","id","of","the","job","on","the","cluster","mode",":","str","one","of","``","force","''","(","forces","a","call",")",",","``","standard","''","(","calls","regularly",")","or","``","cache","''","(","does","not","call",")"]
code: def get_state(self, job_id: str, mode: str = "standard") -> str:
      """Returns the state of the job
      State of finished jobs are cached (use watcher.clear() to remove all cache)
  
      Parameters
      ----------
      job_id: int
          id of the job on the cluster
      mode: str
          one of "force" (forces a call), "standard" (calls regularly) or "cache" (does not call)
      """
      info = self.get_info(job_id, mode=mode)
      return info.get("State") or "UNKNOWN"
  
imports: import functools
  import inspect
  import os
  import re
  import shlex
  import shutil
  import subprocess
  import sys
  import typing
  import uuid
  import warnings
  from pathlib import Path
  from ..core import core, job_environment, logger, utils
label_desc: Use image node_id 2 for calling the SlurmInfoWatcher obj's underlying member method code with example usage: obj.get_state(job_id, mode) and returns: unknown