public static void AddSingleFold <TUnitActivationImpl>(GenericNetworkBuilderState <TUnit, TConnection, TUnitActivation> builderState)
            where TUnitActivationImpl : TUnitActivation, IUnitActivationSingleFold <TUnit>, new()
        {
            var newLayer = SetupLayerTemplate(builderState);

            newLayer.CreateUnitActivation = () => new TUnitActivationImpl();
        }
        public static void AddMultiFold <TUnitActivationImpl>(GenericNetworkBuilderState <TUnit, TConnection, TUnitActivation> builderState)
            where TUnitActivationImpl : TUnitActivation, IUnitActivationMultiFold <TUnit, TConnection, TUnitActivation>, new()
        {
            var newLayer = SetupLayerTemplate(builderState);

            newLayer.CreateUnitActivation = () =>
            {
                var unitActivation = new TUnitActivationImpl
                {
                    Network = builderState.Network
                };
                return(unitActivation);
            };
        }
        private static LayerCreationTemplate <TUnit, TConnection, TUnitActivation> SetupLayerTemplate(GenericNetworkBuilderState <TUnit, TConnection, TUnitActivation> builderState)
        {
            var numberOfUnits = builderState.NumberOfUnitsNextLayer;
            var newLayer      = new LayerCreationTemplate <TUnit, TConnection, TUnitActivation>(numberOfUnits);

            builderState.Layers.Add(newLayer);
            return(newLayer);
        }