public static PositionsWithHistory FromEPDOrPGNFile(string fileName)
        {
            PositionsWithHistory source = new PositionsWithHistory();

            source.LoadOpenings(fileName);
            return(source);
        }
        /// <summary>
        /// Returns a position source that returns positions from one or more MoveSequences.
        /// </summary>
        /// <param name="fen"></param>
        /// <returns></returns>
        public static PositionsWithHistory FromMoveSequencess(params PositionWithHistory[] moveSequences)
        {
            PositionsWithHistory source = new PositionsWithHistory();

            source.moveSequences = new List <PositionWithHistory>();
            foreach (PositionWithHistory moveSequence in moveSequences)
            {
                source.moveSequences.Add(moveSequence);
            }
            return(source);
        }
        /// <summary>
        /// Returns a position source that returns positions from one or more FENs.
        /// </summary>
        /// <param name="fen"></param>
        /// <returns></returns>
        public static PositionsWithHistory FromFENs(params string[] fens)
        {
            PositionsWithHistory source = new PositionsWithHistory();

            source.fensAndMoves = new List <string>();
            foreach (string fen in fens)
            {
                source.fensAndMoves.Add(fen);
            }
            return(source);
        }
        /// <summary>
        /// Returns a position source that returns a single starting position (possibly multiple times).
        /// </summary>
        /// <param name="fen"></param>
        /// <returns></returns>
        public static PositionsWithHistory FromFEN(string fen, int repeatCount)
        {
            if (repeatCount > 1_000_000)
            {
                throw new ArgumentOutOfRangeException(nameof(repeatCount), "is too large, maximum 1_000_000");
            }

            PositionsWithHistory source = new PositionsWithHistory();

            source.fensAndMoves = new List <string>();
            for (int i = 0; i < repeatCount; i++)
            {
                source.fensAndMoves.Add(fen);
            }
            return(source);
        }