/*************************************/

        public bool SetDataTree <T>(int index, IEnumerable <IEnumerable <T> > data)
        {
            IGH_Param root;

            if (PrincipalParameterIndex != -1)
            {
                root = Inputs[PrincipalParameterIndex];
            }
            else
            {
                root = Inputs.FindAll(p => p.Access == GH_ParamAccess.tree).FirstOrDefault() ?? Inputs.First();
            }

            return(GH_Accessor.SetDataTree(index, BH.Engine.Grasshopper.Create.DataTree(data.ToList(), GH_Accessor.Iteration, root.VolatileData.Paths)));
        }
        /*************************************/

        public List <T> GetDataList <T>(int index)
        {
            if (GH_Accessor == null)
            {
                return(new List <T>());
            }

            IGH_TypeHint   hint        = null;
            Param_Variable scriptParam = Inputs[index] as Param_Variable;

            if (scriptParam != null)
            {
                hint = scriptParam.SelectedHint;
            }

            List <IGH_Goo> goo = new List <IGH_Goo>();

            GH_Accessor.GetDataList <IGH_Goo>(index, goo);
            return(goo.Select(x => Helpers.IFromGoo <T>(x, hint)).ToList());
        }
        /*************************************/
        /**** Input Getter Methods        ****/
        /*************************************/

        public T GetDataItem <T>(int index)
        {
            if (GH_Accessor == null)
            {
                return(default(T));
            }

            IGH_Goo goo = null;

            GH_Accessor.GetData(index, ref goo);

            IGH_TypeHint   hint        = null;
            Param_Variable scriptParam = Inputs[index] as Param_Variable;

            if (scriptParam != null)
            {
                hint = scriptParam.SelectedHint;
            }

            return(Helpers.IFromGoo <T>(goo, hint));
        }
        /*************************************/
        /**** Private Methods             ****/
        /*************************************/

        private List <List <T> > ConvertDataTree <T, TG>(GH_Structure <TG> structure, int index, List <List <T> > result) where TG : IGH_Goo
        {
            GH_Accessor.GetDataTree(index, out structure);
            result = structure.Branches.Select(x => x.Select(y => Helpers.IFromGoo <T>(y)).ToList()).ToList();
            return(result);
        }
        /*************************************/

        public bool SetDataList <T>(int index, IEnumerable <T> data)
        {
            return(GH_Accessor.SetDataList(index, (IEnumerable <T>)data));
        }
        /*************************************/
        /**** Output Setter Methods       ****/
        /*************************************/

        public bool SetDataItem <T>(int index, T data)
        {
            return(GH_Accessor.SetData(index, data));
        }