class_docstr: Generic Adder which writes to Reverb using Reverb's `StructuredWriter`.
  
  The StructuredAdder is a thin wrapper around Reverb's `StructuredWriter` and
  its behaviour is determined by the configs to __init__. Much of the behaviour
  provided by other Adders can be replicated using `StructuredAdder` but there
  are a few noteworthy differences:
  
   * The behaviour of `StructuredAdder` can be thought of as the union of all
     its configs. This means that a single adder is capable of inserting items
     of different structures into any number of tables WITHOUT any data
     duplication. Other adders are only capable of writing items of the same
     structure into multiple tables.
   * The complete structure of the step must be known at construction time when
     using the StructuredAdder. This is not the case for other Adders as they
     allow the structure of the step to become expanded over time.
   * The `StructuredAdder` assigns all items the same priority (1.0) as it does
     not currently support custom priority computations.
   * The StructuredAdder is completely generic and thus does not perform any
     preprocessing on the data (e.g. cumulative rewards as done by the
     NStepTransitionAdder) before writing it to Reverb. The user is instead
     expected to perform preprocessing in the dataset pipeline on the learner.
class_docstr_tok: ["Generic","Adder","which","writes","to","Reverb","using","Reverb","'s","`","StructuredWriter","`",".","The","StructuredAdder","is","a","thin","wrapper","around","Reverb","'s","`","StructuredWriter","`","and","its","behaviour","is","determined","by","the","configs","to","__init__",".","Much","of","the","behaviour","provided","by","other","Adders","can","be","replicated","using","`","StructuredAdder","`","but","there","are","a","few","noteworthy","differences",":","*","The","behaviour","of","`","StructuredAdder","`","can","be","thought","of","as","the","union","of","all","its","configs",".","This","means","that","a","single","adder","is","capable","of","inserting","items","of","different","structures","into","any","number","of","tables","WITHOUT","any","data","duplication",".","Other","adders","are","only","capable","of","writing","items","of","the","same","structure","into","multiple","tables",".","*","The","complete","structure","of","the","step","must","be","known","at","construction","time","when","using","the","StructuredAdder",".","This","is","not","the","case","for","other","Adders","as","they","allow","the","structure","of","the","step","to","become","expanded","over","time",".","*","The","`","StructuredAdder","`","assigns","all","items","the","same","priority","(","1.0",")","as","it","does","not","currently","support","custom","priority","computations",".","*","The","StructuredAdder","is","completely","generic","and","thus","does","not","perform","any","preprocessing","on","the","data","(","e.g",".","cumulative","rewards","as","done","by","the","NStepTransitionAdder",")","before","writing","it","to","Reverb",".","The","user","is","instead","expected","to","perform","preprocessing","in","the","dataset","pipeline","on","the","learner","."]
code: def configs(self):
      return self._configs
  
imports: import itertools
  import time
  from typing import Callable, List, Optional, Sequence, Sized
  from absl import logging
  from acme import specs
  from acme import types
  from acme.adders import base
  from acme.adders.reverb import base
  from acme.adders.reverb import sequence
  from acme.utils import tree_utils
  import dm_env
  import numpy
  import reverb
  from reverb import structured_writer
  import tensorflow
  import tree
label_desc: Use image node_id 4 for calling the StructuredAdder obj's underlying member method code with example usage: obj.configs() and returns: self