class_docstr: Object for working with Protein Databank structure files.
  
  Attributes
  ----------
  df : dict
      Dictionary storing pandas DataFrames for PDB record sections.
      The dictionary keys are {'ATOM', 'HETATM', 'ANISOU', 'OTHERS'}
      where 'OTHERS' contains all entries that are not parsed as
      'ATOM', 'HETATM', or 'ANISOU'.
  
  pdb_text : str
      PDB file contents in raw text format.
  
  pdb_path : Union[str, os.PathLike]
      Location of the PDB file that was read in via `read_pdb`
      or URL of the page where the PDB content was fetched from
      if `fetch_pdb` was called.
  
  header : str
      PDB file description.
  
  code : str
      PDB code
class_docstr_tok: ["Object","for","working","with","Protein","Databank","structure","files",".","Attributes","--","--","--","--","--","df",":","dict","Dictionary","storing","pandas","DataFrames","for","PDB","record","sections",".","The","dictionary","keys","are","{","'ATOM","'",",","'HETATM","'",",","'ANISOU","'",",","'OTHERS","'","}","where","'OTHERS","'","contains","all","entries","that","are","not","parsed","as","'ATOM","'",",","'HETATM","'",",","or","'ANISOU","'",".","pdb_text",":","str","PDB","file","contents","in","raw","text","format",".","pdb_path",":","Union","[","str",",","os.PathLike","]","Location","of","the","PDB","file","that","was","read","in","via","`","read_pdb","`","or","URL","of","the","page","where","the","PDB","content","was","fetched","from","if","`","fetch_pdb","`","was","called",".","header",":","str","PDB","file","description",".","code",":","str","PDB","code"]
docstr: Compute the Root Mean Square Deviation between molecules.
  
  Parameters
  ----------
  df1 : pandas.DataFrame
      DataFrame with HETATM, ATOM, and/or ANISOU entries.
  
  df2 : pandas.DataFrame
      Second DataFrame for RMSD computation against df1. Must have the
      same number of entries as df1.
  
  s : {'main chain', 'hydrogen', 'c-alpha', 'heavy', 'carbon'} or None,
      default: None
      String to specify which entries to consider. If None, considers
      all atoms for comparison.
  
  invert : bool, default: False
      Inverts the string query if true. For example, the setting
      `s='hydrogen', invert=True` computes the RMSD based on all
      but hydrogen atoms.
  
  decimals : int, default: 4
      Specifies the number of decimal places to round the final value to.
  
  Returns
  ---------
  rmsd : float
      Root Mean Square Deviation between df1 and df2
docstr_tok: ["Compute","the","Root","Mean","Square","Deviation","between","molecules",".","Parameters","--","--","--","--","--","df1",":","pandas.DataFrame","DataFrame","with","HETATM",",","ATOM",",","and\/or","ANISOU","entries",".","df2",":","pandas.DataFrame","Second","DataFrame","for","RMSD","computation","against","df1",".","Must","have","the","same","number","of","entries","as","df1",".","s",":","{","'main","chain","'",",","'hydrogen","'",",","'","c-alpha","'",",","'heavy","'",",","'carbon","'","}","or","None",",","default",":","None","String","to","specify","which","entries","to","consider",".","If","None",",","considers","all","atoms","for","comparison",".","invert",":","bool",",","default",":","False","Inverts","the","string","query","if","true",".","For","example",",","the","setting","`","s='hydrogen","'",",","invert=True","`","computes","the","RMSD","based","on","all","but","hydrogen","atoms",".","decimals",":","int",",","default",":","4","Specifies","the","number","of","decimal","places","to","round","the","final","value","to",".","Returns","--","--","--","--","-","rmsd",":","float","Root","Mean","Square","Deviation","between","df1","and","df2"]
code: def rmsd(df1, df2, s=None, invert=False, decimals=4):
      """Compute the Root Mean Square Deviation between molecules.
  
      Parameters
      ----------
      df1 : pandas.DataFrame
          DataFrame with HETATM, ATOM, and/or ANISOU entries.
  
      df2 : pandas.DataFrame
          Second DataFrame for RMSD computation against df1. Must have the
          same number of entries as df1.
  
      s : {'main chain', 'hydrogen', 'c-alpha', 'heavy', 'carbon'} or None,
          default: None
          String to specify which entries to consider. If None, considers
          all atoms for comparison.
  
      invert : bool, default: False
          Inverts the string query if true. For example, the setting
          `s='hydrogen', invert=True` computes the RMSD based on all
          but hydrogen atoms.
  
      decimals : int, default: 4
          Specifies the number of decimal places to round the final value to.
  
      Returns
      ---------
      rmsd : float
          Root Mean Square Deviation between df1 and df2
  
      """
      if df1.shape[0] != df2.shape[0]:
          raise AttributeError("DataFrames have unequal lengths")
      get_dict = PandasPdb._init_get_dict()
      if s:
          if s not in get_dict.keys():
              raise AttributeError(
                  f"s must be in {get_dict.keys()} or None"
              )
          df1 = get_dict[s](df1, invert=invert)
          df2 = get_dict[s](df2, invert=invert)
  
      total = (
          (df1["x_coord"].values - df2["x_coord"].values) ** 2
          + (df1["y_coord"].values - df2["y_coord"].values) ** 2
          + (df1["z_coord"].values - df2["z_coord"].values) ** 2
      )
      return round((total.sum() / df1.shape[0]) ** 0.5, decimals)
  
imports: from __future__ import annotations
  import gzip
  import sys
  import warnings
  import textwrap
  from copy import deepcopy
  from io import StringIO
  from typing import List, Optional
  from urllib.error import HTTPError, URLError
  from urllib.request import urlopen
  from warnings import warn
  import numpy
  import pandas
  from looseversion import LooseVersion
  from .engines import amino3to1dict, pdb_df_columns, pdb_records
  from biopandas.constants import ATOMIC_MASSES
label_desc: Use image node_id 10 for calling the PandasPdb obj's underlying member method code with example usage: obj.rmsd(df1, df2, s, invert, decimals) and returns: round