// write a single group to CSV private static void writeCurveGroup(CsvOutput csv, RatesCurveGroup group) { string groupName = group.Name.Name; IDictionary <Currency, Curve> discountingCurves = group.DiscountCurves; foreach (KeyValuePair <Currency, Curve> entry in discountingCurves.SetOfKeyValuePairs()) { IList <string> line = new List <string>(4); line.Add(groupName); line.Add(DISCOUNT); line.Add(entry.Key.ToString()); line.Add(entry.Value.Name.Name); csv.writeLine(line); } IDictionary <Index, Curve> forwardCurves = group.ForwardCurves; foreach (KeyValuePair <Index, Curve> entry in forwardCurves.SetOfKeyValuePairs()) { IList <string> line = new List <string>(4); line.Add(groupName); line.Add(FORWARD); line.Add(entry.Key.ToString()); line.Add(entry.Value.Name.Name); csv.writeLine(line); } }
/// <summary> /// Writes the curve settings in a CSV format to an appendable. /// </summary> /// <param name="underlying"> the underlying appendable destination </param> /// <param name="group"> the curve group </param> public static void writeCurveSettings(Appendable underlying, RatesCurveGroup group) { CsvOutput csv = CsvOutput.standard(underlying); // header csv.writeLine(HEADERS_SETTINGS); // rows IDictionary <Currency, Curve> discountingCurves = group.DiscountCurves; ISet <CurveName> names = new HashSet <CurveName>(); foreach (KeyValuePair <Currency, Curve> entry in discountingCurves.SetOfKeyValuePairs()) { Curve curve = entry.Value; csv.writeLine(curveSettings(curve)); names.Add(curve.Name); } IDictionary <Index, Curve> forwardCurves = group.ForwardCurves; foreach (KeyValuePair <Index, Curve> entry in forwardCurves.SetOfKeyValuePairs()) { Curve curve = entry.Value; if (!names.Contains(curve.Name)) { csv.writeLine(curveSettings(curve)); names.Add(curve.Name); } } }
/// <summary> /// Writes the curve nodes in a CSV format to an appendable. /// </summary> /// <param name="underlying"> the underlying appendable destination </param> /// <param name="valuationDate"> the valuation date </param> /// <param name="group"> the curve group </param> public static void writeCurveNodes(Appendable underlying, LocalDate valuationDate, RatesCurveGroup group) { CsvOutput csv = CsvOutput.standard(underlying); // header csv.writeLine(HEADERS_NODES); // rows string valuationDateStr = valuationDate.ToString(); IDictionary <Currency, Curve> discountingCurves = group.DiscountCurves; ISet <CurveName> names = new HashSet <CurveName>(); foreach (KeyValuePair <Currency, Curve> entry in discountingCurves.SetOfKeyValuePairs()) { Curve curve = entry.Value; nodeLines(valuationDateStr, curve, csv); names.Add(curve.Name); } IDictionary <Index, Curve> forwardCurves = group.ForwardCurves; foreach (KeyValuePair <Index, Curve> entry in forwardCurves.SetOfKeyValuePairs()) { Curve curve = entry.Value; if (!names.Contains(curve.Name)) { nodeLines(valuationDateStr, curve, csv); names.Add(curve.Name); } } }
// write a single group definition to CSV private static void writeCurveGroupDefinition(CsvOutput csv, RatesCurveGroupDefinition group) { string groupName = group.Name.Name; foreach (RatesCurveGroupEntry entry in group.Entries) { foreach (Currency currency in entry.DiscountCurrencies) { csv.writeLine(ImmutableList.of(groupName, DISCOUNT, currency.ToString(), entry.CurveName.Name)); } foreach (Index index in entry.Indices) { csv.writeLine(ImmutableList.of(groupName, FORWARD, index.ToString(), entry.CurveName.Name)); } } }
//------------------------------------------------------------------------- /// <summary> /// Write sensitivities to an appendable in the standard sensitivities format. /// <para> /// The output is written in standard format, with no identifier columns. /// The parameter metadata must contain tenors. /// /// </para> /// </summary> /// <param name="curveSens"> the curve sensitivities to write </param> /// <param name="output"> the appendable to write to </param> /// <exception cref="IllegalArgumentException"> if the metadata does not contain tenors </exception> /// <exception cref="UncheckedIOException"> if an IO error occurs </exception> public void write(CurveSensitivities curveSens, Appendable output) { CsvOutput csv = CsvOutput.standard(output, "\n"); IList <string> additionalHeaders = supplier.headers(curveSens); // check for dates if (curveSens.TypedSensitivities.values().stream().flatMap(allParamSens => allParamSens.Sensitivities.stream()).flatMap(paramSens => paramSens.ParameterMetadata.stream()).anyMatch(pmd => !(pmd is TenoredParameterMetadata))) { throw new System.ArgumentException("Parameter metadata must contain tenors"); } bool containsDates = curveSens.TypedSensitivities.values().stream().flatMap(allParamSens => allParamSens.Sensitivities.stream()).flatMap(paramSens => paramSens.ParameterMetadata.stream()).anyMatch(pmd => pmd is DatedParameterMetadata); // headers csv.writeCell(SensitivityCsvLoader.REFERENCE_HEADER); csv.writeCell(SensitivityCsvLoader.TYPE_HEADER); csv.writeCell(SensitivityCsvLoader.TENOR_HEADER); if (containsDates) { csv.writeCell(SensitivityCsvLoader.DATE_HEADER); } csv.writeCell(SensitivityCsvLoader.CURRENCY_HEADER); csv.writeCell(SensitivityCsvLoader.VALUE_HEADER); csv.writeLine(additionalHeaders); // content, grouped by reference, then type MapStream.of(curveSens.TypedSensitivities).flatMapValues(sens => sens.Sensitivities.stream()).mapKeys((type, sens) => Pair.of(sens.MarketDataName.Name, type)).sortedKeys().forEach((pair, paramSens) => write(pair.First, pair.Second, curveSens, paramSens, additionalHeaders, containsDates, csv)); }
//------------------------------------------------------------------------- /// <summary> /// Outputs the report table in CSV format. /// </summary> /// <param name="report"> the report </param> /// <param name="out"> the output stream to write to </param> //JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes: //ORIGINAL LINE: @SuppressWarnings("resource") public void writeCsv(R report, java.io.OutputStream out) public virtual void writeCsv(R report, Stream @out) { StreamWriter outputWriter = new StreamWriter(@out, Encoding.UTF8); CsvOutput csvOut = CsvOutput.safe(outputWriter); csvOut.writeLine(report.ColumnHeaders); IntStream.range(0, report.RowCount).mapToObj(rowIdx => formatRow(report, rowIdx, ReportOutputFormat.CSV)).forEach(csvOut.writeLine); Unchecked.wrap(outputWriter.flush); }
/// <summary> /// Writes the curve group in a CSV format to an appendable. /// </summary> /// <param name="underlying"> the underlying appendable destination </param> /// <param name="groups"> the curve groups </param> public static void writeCurveGroup(Appendable underlying, params RatesCurveGroup[] groups) { CsvOutput csv = CsvOutput.standard(underlying); csv.writeLine(HEADERS); foreach (RatesCurveGroup group in groups) { writeCurveGroup(csv, group); } }
// add each node to the csv file private static void nodeLines(string valuationDateStr, Curve curve, CsvOutput csv) { ArgChecker.isTrue(curve is InterpolatedNodalCurve, "interpolated"); InterpolatedNodalCurve interpolatedCurve = (InterpolatedNodalCurve)curve; int nbPoints = interpolatedCurve.XValues.size(); for (int i = 0; i < nbPoints; i++) { ArgChecker.isTrue(interpolatedCurve.getParameterMetadata(i) is DatedParameterMetadata, "Curve metadata must contain a date, but was " + interpolatedCurve.getParameterMetadata(i).GetType().Name); DatedParameterMetadata metadata = (DatedParameterMetadata)interpolatedCurve.getParameterMetadata(i); IList <string> line = new List <string>(); line.Add(valuationDateStr); line.Add(curve.Name.Name.ToString()); line.Add(metadata.Date.ToString()); line.Add(decimal.valueOf(interpolatedCurve.YValues.get(i)).toPlainString()); line.Add(metadata.Label); csv.writeLine(line); } }
// writes the rows for a single CurrencyParameterSensitivity private void write(string reference, CurveSensitivitiesType type, CurveSensitivities curveSens, CurrencyParameterSensitivity paramSens, IList <string> additionalHeaders, bool containsDates, CsvOutput csv) { IList <string> additionalCells = supplier.values(additionalHeaders, curveSens, paramSens); for (int i = 0; i < paramSens.ParameterCount; i++) { ParameterMetadata pmd = paramSens.getParameterMetadata(i); Tenor tenor = ((TenoredParameterMetadata)pmd).Tenor; double value = paramSens.Sensitivity.get(i); csv.writeCell(reference); csv.writeCell(type.Name); csv.writeCell(tenor.ToString()); if (containsDates) { csv.writeCell(pmd is DatedParameterMetadata ? ((DatedParameterMetadata)pmd).Date.ToString() : ""); } csv.writeCell(paramSens.Currency.Code); csv.writeCell(decimal.valueOf(value).toPlainString()); csv.writeLine(additionalCells); } }