class_docstr: Class implementing database connection.
  
  Example
  -------
  >>> AMPLIGRAPH_DATA_HOME='/your/path/to/datasets/'
  >>> # Initialize GraphDataLoader from .csv file
  >>> data = GraphDataLoader("data.csv", backend=SQLiteAdapter)
  >>> # Initialize GraphDataLoader from .txt file using indexer
  >>> # to map entities to integers
  >>> data = GraphDataLoader(AMPLIGRAPH_DATA_HOME + "fb15k/test.txt",
  >>>                        backend=SQLiteAdapter("database.db",
  >>>                        use_indexer=True))
  >>> for elem in data:
  >>>     print(elem)
  >>>     break
  [(1, 1, 2)]
  >>> # Populate the database with raw triples for training
  >>> with SQLiteAdapter("database.db") as backend:
  >>>     backend.populate(AMPLIGRAPH_DATA_HOME + "fb15k/train.txt",
  >>>                      dataset_type="train")
  >>> # Populate the database with indexed triples for training
  >>> with SQLiteAdapter("database.db", use_indexer=True) as backend:
  >>>     backend.populate(AMPLIGRAPH_DATA_HOME + "fb15k/train.txt",
  >>>                      dataset_type="train")
docstr: For a given triple retrieve all triples with same subjects
  and predicates.
  
     Parameters
     ----------
     triples: list or array
          List or array with Nx3 elements (subject, predicate, object).
  
     Returns
     -------
     objects : list
          Result of a query, list of objects.
docstr_tok: ["For","a","given","triple","retrieve","all","triples","with","same","subjects","and","predicates",".","Parameters","--","--","--","--","--","triples",":","list","or","array","List","or","array","with","Nx3","elements","(","subject",",","predicate",",","object",")",".","Returns","--","--","--","-","objects",":","list","Result","of","a","query",",","list","of","objects","."]
code: def _get_complementary_objects(self, triples, use_filter=None):
      """For a given triple retrieve all triples with same subjects
      and predicates.
  
         Parameters
         ----------
         triples: list or array
              List or array with Nx3 elements (subject, predicate, object).
  
         Returns
         -------
         objects : list
              Result of a query, list of objects.
  
      """
      results = []
      if self.use_filter is False or self.use_filter is None:
          self.use_filter = {"train": self.data}
      filtered = []
      valid_filters = [
          x[0]
          for x in self._execute_query(
              "SELECT DISTINCT\
                  dataset_type FROM triples_table"
          )
      ]
      for filter_name, filter_source in self.use_filter.items():
          if filter_name in valid_filters:
              tmp_filter = []
              for triple in triples:
                  query = 'select distinct object from triples_table\
                              INDEXED BY triples_table_sp_idx where subject in \
                              ({}) and predicate in ({})  and dataset_type ="{}"'
  
                  query = query.format(
                      triple[0], triple[1], filter_name
                  )
                  q = self._execute_query(query)
                  tmp = list(set([y for x in q for y in x]))
                  tmp_filter.append(tmp)
              filtered.append(tmp_filter)
      # Unpack data into one list per triple no matter what filter
      # it comes from
      unpacked = list(zip(*filtered))
      for k in unpacked:
          lst = [j for i in k for j in i]
          results.append(lst)
  
      return results
  
imports: import logging
  import os
  import sqlite3
  import tempfile
  from sqlite3 import Error
  from urllib.request import pathname2url
  import numpy
  import pandas
  import tensorflow
  from ampligraph.utils.profiling import get_human_readable_size
  from .data_indexer import DataIndexer
label_desc: Use image node_id 23 for calling the SQLiteAdapter obj's underlying member method code with example usage: obj._get_complementary_objects(triples, use_filter) and returns: results