public object Clone()
        {
            DependencyInformation that = new DependencyInformation();

            that.dependencyTypeOf = Clone(dependencyTypeOf);
            // the OffsetInfo values inside the offsetIndexOf dictionary are not cloned.
            that.offsetIndexOf         = Clone(offsetIndexOf);
            that.IsOutput              = IsOutput;
            that.IsUniform             = IsUniform;
            that.IsFresh               = IsFresh;
            that.ParameterDependencies = Clone(ParameterDependencies);
            return(that);
        }
        public override bool Equals(object obj)
        {
            DependencyInformation di = obj as DependencyInformation;

            if (di == null)
            {
                return(false);
            }
            if (di.IsUniform != IsUniform)
            {
                return(false);
            }
            if (ParameterDependencies != di.ParameterDependencies)
            {
                return(false);
            }
            if (di.IsOutput != IsOutput)
            {
                return(false);
            }
            if (!SetsAreEqual(Dependencies, di.Dependencies))
            {
                return(false);
            }
            //  if (!SetEquals(DeclDependencies,di.DeclDependencies)) return false;
            if (!SetsAreEqual(Requirements, di.Requirements))
            {
                return(false);
            }
            //if (!SetEquals(RequiredNumberSet,di.RequiredNumberSet)) return false;
            if (!SetsAreEqual(Triggers, di.Triggers))
            {
                return(false);
            }
            if (!SetsAreEqual(FreshDependencies, di.FreshDependencies))
            {
                return(false);
            }
            if (!SetsAreEqual(Initializers, di.Initializers))
            {
                return(false);
            }
            return(true);
        }