code: def insert_chain(cur, chain, encoded_data=None):
      
      if encoded_data is None:
          encoded_data = {}
  
      if 'nodes' not in encoded_data:
          encoded_data['nodes'] = json.dumps(sorted(chain), separators=(',', ':'))
      if 'chain_length' not in encoded_data:
          encoded_data['chain_length'] = len(chain)
  
      insert = "INSERT OR IGNORE INTO chain(chain_length, nodes) VALUES (:chain_length, :nodes);"
  
      cur.execute(insert, encoded_data)
docs: Insert a chain into the cache.
  
      Args:
          cur (:class:`sqlite3.Cursor`):
              An sqlite3 cursor. This function is meant to be run within a :obj:`with` statement.
  
          chain (iterable):
              A collection of nodes. Chains in embedding act as one node.
  
          encoded_data (dict, optional):
              If a dictionary is provided, it will be populated with the serialized data. This is
              useful for preventing encoding the same information many times.
  
      Notes:
          This function assumes that the nodes in chain are index-labeled.