//-------------------------------------------------------------------------
        /// <summary>
        /// Parses the curve groups definition CSV file.
        /// <para>
        /// The list of <seealso cref="NodalCurveDefinition"/> will be empty in the resulting definition.
        ///
        /// </para>
        /// </summary>
        /// <param name="groupsCharSource">  the curve groups CSV character source </param>
        /// <returns> the list of definitions </returns>
        public static IList <RatesCurveGroupDefinition> parseCurveGroupDefinitions(CharSource groupsCharSource)
        {
            IDictionary <CurveName, ISet <GroupAndReference> > curveGroups = new LinkedHashMap <CurveName, ISet <GroupAndReference> >();
            CsvFile csv = CsvFile.of(groupsCharSource, true);

            foreach (CsvRow row in csv.rows())
            {
                string curveGroupStr = row.getField(GROUPS_NAME);
                string curveTypeStr  = row.getField(GROUPS_CURVE_TYPE);
                string referenceStr  = row.getField(GROUPS_REFERENCE);
                string curveNameStr  = row.getField(GROUPS_CURVE_NAME);

                GroupAndReference gar       = createKey(CurveGroupName.of(curveGroupStr), curveTypeStr, referenceStr);
                CurveName         curveName = CurveName.of(curveNameStr);
                curveGroups.computeIfAbsent(curveName, k => new LinkedHashSet <>()).add(gar);
            }
            return(buildCurveGroups(curveGroups));
        }