/** * Writes the curve group in a CSV format to a file. * * @param file the file * @param groups the curve groups */ public static void writeCurveGroup(File file, RatesCurveGroup... groups) { try (Writer writer = new OutputStreamWriter(new FileOutputStream(file), StandardCharsets.UTF_8)) { writeCurveGroup(writer, groups); } catch (IOException ex) { throw new UncheckedIOException(ex); } }
/** * Writes the curve groups definition in a CSV format to a file. * * @param file the destination for the CSV, such as a file * @param groups the curve groups */ public static void writeCurveGroupDefinition(File file, RatesCurveGroupDefinition... groups) { try (Writer writer = new OutputStreamWriter(new FileOutputStream(file), StandardCharsets.UTF_8)) { writeCurveGroupDefinition(writer, groups); } catch (IOException ex) { throw new UncheckedIOException(ex); } }
/** * Loads the curve groups definition CSV file. * <p> * The list of {@link NodalCurveDefinition} will be empty in the resulting definition. * * @param groupsResource the curve groups CSV resource * @return the list of definitions */ public static List<RatesCurveGroupDefinition> loadCurveGroupDefinitions(ResourceLocator groupsResource) { return parseCurveGroupDefinitions(groupsResource.getCharSource()); }
public void test_test_writeCurveGroupDefinition_roundtrip() throws Exception { List<RatesCurveGroupDefinition> defn = RatesCurveGroupDefinitionCsvLoader.loadCurveGroupDefinitions(ResourceLocator.of(GROUPS_1)); File tempFile = File.createTempFile("TestCurveGroupLoading", "csv"); tempFile.deleteOnExit(); RatesCurveGroupDefinitionCsvLoader.writeCurveGroupDefinition(tempFile, defn.get(0)); assertEquals(RatesCurveGroupDefinitionCsvLoader.loadCurveGroupDefinitions(ResourceLocator.ofFile(tempFile)), defn); }
/** * Parses the curve groups definition CSV file. * <p> * The list of {@link NodalCurveDefinition} will be empty in the resulting definition. * * @param groupsCharSource the curve groups CSV character source * @return the list of definitions */ public static List<RatesCurveGroupDefinition> parseCurveGroupDefinitions(CharSource groupsCharSource) { Map<CurveName, Set<GroupAndReference>> curveGroups = new LinkedHashMap<>(); CsvFile csv = CsvFile.of(groupsCharSource, true); for (CsvRow row : 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); }
/** * Builds a list of curve group definitions from the map of curves and their keys. * <p> * The keys specify which curve groups each curve belongs to and how it is used in the group, for example * as a discount curve for a particular currency or as a forward curve for an index. * * @param garMap the map of name to keys * @return a map of curve group name to curve group definition built from the curves */ private static ImmutableList<RatesCurveGroupDefinition> buildCurveGroups( Map<CurveName, Set<GroupAndReference>> garMap) { Multimap<CurveGroupName, RatesCurveGroupEntry> groups = LinkedHashMultimap.create(); for (Map.Entry<CurveName, Set<GroupAndReference>> entry : garMap.entrySet()) { CurveName curveName = entry.getKey(); Set<GroupAndReference> curveIds = entry.getValue(); Map<CurveGroupName, List<GroupAndReference>> idsByGroup = curveIds.stream().collect(groupingBy(p -> p.groupName)); for (Map.Entry<CurveGroupName, List<GroupAndReference>> groupEntry : idsByGroup.entrySet()) { CurveGroupName groupName = groupEntry.getKey(); List<GroupAndReference> gars = groupEntry.getValue(); groups.put(groupName, curveGroupEntry(curveName, gars)); } } return MapStream.of(groups.asMap()) .map((name, entry) -> RatesCurveGroupDefinition.of(name, entry, ImmutableList.of())) .collect(toImmutableList()); }
public void test_loadCurveGroupDefinition() { List<RatesCurveGroupDefinition> defns = RatesCurveGroupDefinitionCsvLoader.loadCurveGroupDefinitions(ResourceLocator.of(GROUPS_1)); assertEquals(defns.size(), 1); RatesCurveGroupDefinition defn = defns.get(0); assertEquals(defn.getEntries().get(0), RatesCurveGroupEntry.builder() .curveName(CurveName.of("USD-Disc")) .discountCurrencies(USD) .build()); assertEquals(defn.getEntries().get(1), RatesCurveGroupEntry.builder() .curveName(CurveName.of("USD-3ML")) .indices(USD_LIBOR_3M) .build()); }
public void test_writeCurveGroupDefinition() { RatesCurveGroupDefinition defn = RatesCurveGroupDefinitionCsvLoader.loadCurveGroupDefinitions(ResourceLocator.of(GROUPS_1)).get(0); Appendable underlying = new StringBuilder(); RatesCurveGroupDefinitionCsvLoader.writeCurveGroupDefinition(underlying, defn); String created = underlying.toString(); String expected = "Group Name,Curve Type,Reference,Curve Name" + System.lineSeparator() + "Default,discount,USD,USD-Disc" + System.lineSeparator() + "Default,forward,USD-LIBOR-3M,USD-3ML" + System.lineSeparator() + "Default,forward,US-CPI-U,USD-CPI" + System.lineSeparator(); assertEquals(created, expected); }
/** * Writes the curve group in a CSV format to an appendable. * * @param underlying the underlying appendable destination * @param groups the curve groups */ public static void writeCurveGroup(Appendable underlying, RatesCurveGroup... groups) { CsvOutput csv = CsvOutput.standard(underlying); csv.writeLine(HEADERS); for (RatesCurveGroup group : groups) { writeCurveGroup(csv, group); } }
/** * Writes the curve groups definition in a CSV format to an appendable. * * @param underlying the underlying appendable destination * @param groups the curve groups */ public static void writeCurveGroupDefinition(Appendable underlying, RatesCurveGroupDefinition... groups) { CsvOutput csv = CsvOutput.standard(underlying); csv.writeLine(HEADERS); for (RatesCurveGroupDefinition group : groups) { writeCurveGroupDefinition(csv, group); } }
private static ImmutableMap<CurveGroupName, RatesCurveGroupDefinition> parse0( CharSource groupsCharSource, CharSource settingsCharSource, Map<CurveName, SeasonalityDefinition> seasonality, Collection<CharSource> curveNodeCharSources) { // load curve groups and settings List<RatesCurveGroupDefinition> curveGroups = RatesCurveGroupDefinitionCsvLoader.parseCurveGroupDefinitions(groupsCharSource); Map<CurveName, LoadedCurveSettings> settingsMap = RatesCurvesCsvLoader.parseCurveSettings(settingsCharSource); // load curve definitions List<CurveDefinition> curveDefinitions = curveNodeCharSources.stream() .flatMap(res -> parseSingle(res, settingsMap).stream()) .collect(toImmutableList()); // Add the curve definitions to the curve group definitions return curveGroups.stream() .map(groupDefinition -> groupDefinition.withCurveDefinitions(curveDefinitions).withSeasonalityDefinitions(seasonality)) .collect(toImmutableMap(groupDefinition -> groupDefinition.getName())); }
public void test_writeCurveGroup() { List<RatesCurveGroup> curveGroups = RatesCurvesCsvLoader.load( CURVE_DATE, ResourceLocator.of(GROUPS_1), ResourceLocator.of(SETTINGS_1), ImmutableList.of(ResourceLocator.of(CURVES_1), ResourceLocator.of(CURVES_2))); Appendable underlying = new StringBuilder(); RatesCurveGroupDefinitionCsvLoader.writeCurveGroup(underlying, curveGroups.get(0)); String created = underlying.toString(); String expected = "Group Name,Curve Type,Reference,Curve Name" + System.lineSeparator() + "Default,discount,USD,USD-Disc" + System.lineSeparator() + "Default,forward,USD-LIBOR-3M,USD-3ML" + System.lineSeparator(); assertEquals(created, expected); }
Collection<CharSource> curveValueCharSources) { List<RatesCurveGroupDefinition> curveGroups = RatesCurveGroupDefinitionCsvLoader.parseCurveGroupDefinitions(groupsCharSource); Map<LocalDate, Map<CurveName, Curve>> curves = parseCurves(datePredicate, settingsCharSource, curveValueCharSources);