code: def trigger(cls, streams):
          
          # Union of stream contents
          items = [stream.contents.items() for stream in set(streams)]
          union = [kv for kvs in items for kv in kvs]
          klist = [k for k, _ in union]
          key_clashes = set([k for k in klist if klist.count(k) > 1])
          if key_clashes:
              clashes = []
              dicts = [dict(kvs) for kvs in items]
              for clash in key_clashes:
                  values = set(d[clash] for d in dicts if clash in d)
                  if len(values) > 1:
                      clashes.append((clash, values))
              if clashes:
                  msg = ', '.join(['%r has values %r' % (k, v) for k, v in clashes])
                  print('Parameter value clashes where %s' % msg)
  
          # Group subscribers by precedence while keeping the ordering
          # within each group
          subscriber_precedence = defaultdict(list)
          for stream in streams:
              stream._on_trigger()
              for precedence, subscriber in stream._subscribers:
                  subscriber_precedence[precedence].append(subscriber)
          sorted_subscribers = sorted(subscriber_precedence.items(), key=lambda x: x[0])
          subscribers = util.unique_iterator([s for _, subscribers in sorted_subscribers
                                              for s in subscribers])
  
          with triggering_streams(streams):
              for subscriber in subscribers:
                  subscriber(**dict(union))
  
          for stream in streams:
              with util.disable_constant(stream):
                  if stream.transient:
                      stream.reset()
docs: Given a list of streams, collect all the stream parameters into
          a dictionary and pass it to the union set of subscribers.
  
          Passing multiple streams at once to trigger can be useful when a
          subscriber may be set multiple times across streams but only
          needs to be called once.