code: function DependentArraysObserver(callbacks, cp, instanceMeta, context, propertyName, sugarMeta) {
        // user specified callbacks for `addedItem` and `removedItem`
        this.callbacks = callbacks;
  
        // the computed property: remember these are shared across instances
        this.cp = cp;
  
        // the ReduceComputedPropertyInstanceMeta this DependentArraysObserver is
        // associated with
        this.instanceMeta = instanceMeta;
  
        // A map of array guids to dependentKeys, for the given context.  We track
        // this because we want to set up the computed property potentially before the
        // dependent array even exists, but when the array observer fires, we lack
        // enough context to know what to update: we can recover that context by
        // getting the dependentKey.
        this.dependentKeysByGuid = {};
  
        // a map of dependent array guids -> TrackedArray instances.  We use
        // this to lazily recompute indexes for item property observers.
        this.trackedArraysByGuid = {};
  
        // We suspend observers to ignore replacements from `reset` when totally
        // recomputing.  Unfortunately we cannot properly suspend the observers
        // because we only have the key; instead we make the observers no-ops
        this.suspended = false;
  
        // This is used to coalesce item changes from property observers within a
        // single item.
        this.changedItems = {};
        // This is used to coalesce item changes for multiple items that depend on
        // some shared state.
        this.changedItemCount = 0;
      }
docs: /*
  Tracks changes to dependent arrays, as well as to properties of items in
  dependent arrays.
  
  @class DependentArraysObserver