//-------------------------------------------------------------------------
        public virtual void test_load_all_curves()
        {
            ListMultimap <LocalDate, RatesCurveGroup> allGroups = RatesCurvesCsvLoader.loadAllDates(ResourceLocator.of(GROUPS_1), ResourceLocator.of(SETTINGS_1), ImmutableList.of(ResourceLocator.of(CURVES_1), ResourceLocator.of(CURVES_2), ResourceLocator.of(CURVES_3)));

            assertEquals(allGroups.size(), 2);
            assertCurves(allGroups.get(CURVE_DATE));

            IList <RatesCurveGroup> curves3 = allGroups.get(CURVE_DATE_CURVES_3);

            assertEquals(curves3.Count, 1);
            RatesCurveGroup group = curves3[0];

            // All curve points are set to 0 in test data to ensure these are really different curve instances
            Curve usdDisc = group.findDiscountCurve(Currency.USD).get();
            InterpolatedNodalCurve usdDiscNodal = (InterpolatedNodalCurve)usdDisc;

            assertEquals(usdDiscNodal.Metadata.CurveName, CurveName.of("USD-Disc"));
            assertTrue(usdDiscNodal.YValues.equalZeroWithTolerance(0d));

            Curve usd3ml = group.findForwardCurve(IborIndices.USD_LIBOR_3M).get();
            InterpolatedNodalCurve usd3mlNodal = (InterpolatedNodalCurve)usd3ml;

            assertEquals(usd3mlNodal.Metadata.CurveName, CurveName.of("USD-3ML"));
            assertTrue(usd3mlNodal.YValues.equalZeroWithTolerance(0d));
        }
        //-------------------------------------------------------------------------
        /// <summary>
        /// Loads one or more CSV format curve files for a specific date.
        /// <para>
        /// Only those quotes that match the specified date will be loaded.
        /// </para>
        /// <para>
        /// If the files contain a duplicate entry an exception will be thrown.
        ///
        /// </para>
        /// </summary>
        /// <param name="marketDataDate">  the curve date to load </param>
        /// <param name="groupsResource">  the curve groups CSV resource </param>
        /// <param name="settingsResource">  the curve settings CSV resource </param>
        /// <param name="curveValueResources">  the CSV resources for curves </param>
        /// <returns> the loaded curves, mapped by an identifying key </returns>
        /// <exception cref="IllegalArgumentException"> if the files contain a duplicate entry </exception>
        public static ImmutableList <LegalEntityCurveGroup> load(LocalDate marketDataDate, ResourceLocator groupsResource, ResourceLocator settingsResource, ICollection <ResourceLocator> curveValueResources)
        {
            ICollection <CharSource> curveCharSources           = curveValueResources.Select(r => r.CharSource).ToList();
            ListMultimap <LocalDate, LegalEntityCurveGroup> map = parse(d => marketDataDate.Equals(d), groupsResource.CharSource, settingsResource.CharSource, curveCharSources);

            return(ImmutableList.copyOf(map.get(marketDataDate)));
        }
        /// <summary>
        /// Gets all rates curves.
        /// </summary>
        /// <returns> the map of all rates curves </returns>
        public virtual SortedDictionary <LocalDate, RatesCurveGroup> loadAllRatesCurves()
        {
            if (!subdirectoryExists(CURVES_DIR))
            {
                throw new System.ArgumentException("No rates curves directory found");
            }
            ResourceLocator curveGroupsResource = getResource(CURVES_DIR, CURVES_GROUPS_FILE);

            if (curveGroupsResource == null)
            {
                throw new System.ArgumentException(Messages.format("Unable to load rates curves: curve groups file not found at {}/{}", CURVES_DIR, CURVES_GROUPS_FILE));
            }
            ResourceLocator curveSettingsResource = getResource(CURVES_DIR, CURVES_SETTINGS_FILE);

            if (curveSettingsResource == null)
            {
                throw new System.ArgumentException(Messages.format("Unable to load rates curves: curve settings file not found at {}/{}", CURVES_DIR, CURVES_SETTINGS_FILE));
            }
            ListMultimap <LocalDate, RatesCurveGroup> curveGroups = RatesCurvesCsvLoader.loadAllDates(curveGroupsResource, curveSettingsResource, RatesCurvesResources);

            // There is only one curve group in the market data file so this will always succeed
            IDictionary <LocalDate, RatesCurveGroup> curveGroupMap = Maps.transformValues(curveGroups.asMap(), groups => groups.GetEnumerator().next());

            return(new SortedDictionary <>(curveGroupMap));
        }
 public MaxRunningAppsEnforcer(FairScheduler scheduler)
 {
     // Tracks the number of running applications by user.
     this.scheduler            = scheduler;
     this.usersNumRunnableApps = new Dictionary <string, int>();
     this.usersNonRunnableApps = ArrayListMultimap.Create();
 }
        // find all trade IDs by party herf id
        private ListMultimap <string, StandardId> parseAllTradeIds(XmlElement tradeHeaderEl)
        {
            // look through each partyTradeIdentifier
            ListMultimap <string, StandardId> allIds   = ArrayListMultimap.create();
            IList <XmlElement> partyTradeIdentifierEls = tradeHeaderEl.getChildren("partyTradeIdentifier");

            foreach (XmlElement partyTradeIdentifierEl in partyTradeIdentifierEls)
            {
                Optional <XmlElement> partyRefOptEl = partyTradeIdentifierEl.findChild("partyReference");
                if (partyRefOptEl.Present && partyRefOptEl.get().findAttribute(HREF).Present)
                {
                    string partyHref = partyRefOptEl.get().findAttribute(HREF).get();
                    // try to find a tradeId, either in versionedTradeId or as a direct child
                    Optional <XmlElement> vtradeIdOptEl = partyTradeIdentifierEl.findChild("versionedTradeId");
                    Optional <XmlElement> tradeIdOptEl  = vtradeIdOptEl.map(vt => vt.getChild("tradeId")).orElse(partyTradeIdentifierEl.findChild("tradeId"));
                    if (tradeIdOptEl.Present && tradeIdOptEl.get().findAttribute("tradeIdScheme").Present)
                    {
                        XmlElement tradeIdEl = tradeIdOptEl.get();
                        string     scheme    = tradeIdEl.getAttribute("tradeIdScheme");
                        // ignore if there is an empty scheme or value
                        if (scheme.Length > 0 && tradeIdEl.Content.Length > 0)
                        {
                            allIds.put(partyHref, StandardId.of(StandardId.encodeScheme(scheme), tradeIdEl.Content));
                        }
                    }
                }
            }
            return(allIds);
        }
        // creates the tasks for a single target
        private static IList <CalculationTask> createTargetTasks <T1>(CalculationTarget resolvedTarget, int rowIndex, CalculationFunction <T1> function, IList <Column> columns)
        {
            // create the cells and group them
            ListMultimap <CalculationParameters, CalculationTaskCell> grouped = ArrayListMultimap.create();

            for (int colIndex = 0; colIndex < columns.Count; colIndex++)
            {
                Column  column  = columns[colIndex];
                Measure measure = column.Measure;

                ReportingCurrency   reportingCurrency = column.ReportingCurrency.orElse(ReportingCurrency.NATURAL);
                CalculationTaskCell cell = CalculationTaskCell.of(rowIndex, colIndex, measure, reportingCurrency);
                // group to find cells that can be shared, with same mappings and params (minus reporting currency)
                CalculationParameters @params = column.Parameters.filter(resolvedTarget, measure);
                grouped.put(@params, cell);
            }

            // build tasks
            ImmutableList.Builder <CalculationTask> taskBuilder = ImmutableList.builder();
            foreach (CalculationParameters @params in grouped.Keys)
            {
                taskBuilder.add(CalculationTask.of(resolvedTarget, function, @params, grouped.get(@params)));
            }
            return(taskBuilder.build());
        }
Esempio n. 7
0
 // parse a single file
 private void parse(CharSource charSource, ListMultimap <string, CurveSensitivities> parsed, IList <FailureItem> failures)
 {
     try
     {
         using (CsvIterator csv = CsvIterator.of(charSource, true))
         {
             if (!csv.containsHeader(TENOR_HEADER) && !csv.containsHeader(DATE_HEADER))
             {
                 failures.Add(FailureItem.of(FailureReason.PARSING, "CSV file could not be parsed as sensitivities, invalid format"));
             }
             else if (csv.containsHeader(REFERENCE_HEADER) && csv.containsHeader(TYPE_HEADER) && csv.containsHeader(VALUE_HEADER))
             {
                 parseStandardFormat(csv, parsed, failures);
             }
             else if (csv.containsHeader(REFERENCE_HEADER))
             {
                 parseListFormat(csv, parsed, failures);
             }
             else
             {
                 parseGridFormat(csv, parsed, failures);
             }
         }
     }
     catch (Exception ex)
     {
         failures.Add(FailureItem.of(FailureReason.PARSING, ex, "CSV file could not be parsed: {}", ex.Message));
     }
 }
        //-------------------------------------------------------------------------
        public virtual void toListMultimap()
        {
            IDictionary <string, int>  map      = ImmutableMap.of("a", 1, "aa", 2, "b", 10, "bb", 20, "c", 1);
            ListMultimap <string, int> expected = ImmutableListMultimap.of("a", 1, "a", 2, "b", 10, "b", 20, "c", 1);
            ListMultimap <string, int> result   = MapStream.of(map).mapKeys(s => s.substring(0, 1)).toListMultimap();

            assertThat(result).isEqualTo(expected);
        }
Esempio n. 9
0
        //-------------------------------------------------------------------------
        // parses the file in grid format
        private void parseGridFormat(CsvIterator csv, ListMultimap <string, CurveSensitivities> parsed, IList <FailureItem> failures)
        {
            // find the applicable reference columns
            IDictionary <string, CurveName> references = new LinkedHashMap <string, CurveName>();

            foreach (string header in csv.headers())
            {
                string headerLowerCase = header.ToLower(Locale.ENGLISH);
                if (!REF_HEADERS.contains(headerLowerCase) && !resolver.isInfoColumn(headerLowerCase))
                {
                    references[header] = CurveName.of(header);
                }
            }

            // loop around all rows, peeking to match batches with the same identifier
            // no exception catch at this level to avoid infinite loops
            while (csv.hasNext())
            {
                CsvRow            peekedRow = csv.peek();
                PortfolioItemInfo info      = parseInfo(peekedRow);
//JAVA TO C# CONVERTER TODO TASK: Method reference arbitrary object instance method syntax is not converted by Java to C# Converter:
                string id = info.Id.map(StandardId::toString).orElse("");

                // process in batches, where the ID is the same
                CurveSensitivitiesBuilder builder   = CurveSensitivities.builder(info);
                IList <CsvRow>            batchRows = csv.nextBatch(r => matchId(r, id));
                foreach (CsvRow batchRow in batchRows)
                {
                    try
                    {
                        ParameterMetadata      metadata = parseMetadata(batchRow, true);
                        CurveSensitivitiesType type     = batchRow.findValue(TYPE_HEADER).map(str => CurveSensitivitiesType.of(str)).orElse(CurveSensitivitiesType.ZERO_RATE_DELTA);
                        foreach (KeyValuePair <string, CurveName> entry in references.SetOfKeyValuePairs())
                        {
                            CurveName reference         = entry.Value;
                            CurveName resolvedCurveName = resolver.checkCurveName(reference);
                            string    valueStr          = batchRow.getField(entry.Key);
                            Currency  currency          = parseCurrency(batchRow, reference);
                            if (valueStr.Length > 0)
                            {
                                double value = LoaderUtils.parseDouble(valueStr);
                                builder.add(type, resolvedCurveName, currency, metadata, value);
                            }
                        }
                    }
                    catch (System.ArgumentException ex)
                    {
                        failures.Add(FailureItem.of(PARSING, "CSV file could not be parsed at line {}: {}", batchRow.lineNumber(), ex.Message));
                    }
                }
                CurveSensitivities sens = builder.build();
                if (!sens.TypedSensitivities.Empty)
                {
                    parsed.put(sens.Id.map(object.toString).orElse(""), sens);
                }
            }
        }
        // parse all the root-level party elements
        private static ImmutableListMultimap <string, string> parseParties(XmlElement root)
        {
            ListMultimap <string, string> parties = ArrayListMultimap.create();

            foreach (XmlElement child in root.getChildren("party"))
            {
                parties.putAll(child.getAttribute(ID), findPartyIds(child));
            }
            return(ImmutableListMultimap.copyOf(parties));
        }
Esempio n. 11
0
        //-------------------------------------------------------------------------
        /// <summary>
        /// Parses one or more CSV format position files, returning sensitivities.
        /// <para>
        /// The standard way to write sensitivities files is for each file to contain one sensitivity instance.
        /// The file format can handle multiple instances per file, where each instance has a separate identifier.
        /// Most files will not have the identifier columns, thus the identifier will be the empty string.
        /// </para>
        /// <para>
        /// The returned multimap is keyed by identifier. The value will contain one entry for each instance.
        /// If desired, the results can be reduced using <seealso cref="CurveSensitivities#mergedWith(CurveSensitivities)"/>
        /// to merge those with the same identifier.
        /// </para>
        /// <para>
        /// CSV files sometimes contain a Unicode Byte Order Mark.
        /// Callers are responsible for handling this, such as by using <seealso cref="UnicodeBom"/>.
        ///
        /// </para>
        /// </summary>
        /// <param name="charSources">  the CSV character sources </param>
        /// <returns> the loaded sensitivities, parsing errors are captured in the result </returns>
        public ValueWithFailures <ListMultimap <string, CurveSensitivities> > parse(ICollection <CharSource> charSources)
        {
            ListMultimap <string, CurveSensitivities> parsed = ArrayListMultimap.create();
            IList <FailureItem> failures = new List <FailureItem>();

            foreach (CharSource charSource in charSources)
            {
                parse(charSource, parsed, failures);
            }
            return(ValueWithFailures.of(ImmutableListMultimap.copyOf(parsed), failures));
        }
Esempio n. 12
0
        //-------------------------------------------------------------------------
        // parses the file in standard format
        private void parseStandardFormat(CsvIterator csv, ListMultimap <string, CurveSensitivities> parsed, IList <FailureItem> failures)
        {
            // loop around all rows, peeking to match batches with the same identifier
            // no exception catch at this level to avoid infinite loops
            while (csv.hasNext())
            {
                CsvRow            peekedRow = csv.peek();
                PortfolioItemInfo info      = parseInfo(peekedRow);
//JAVA TO C# CONVERTER TODO TASK: Method reference arbitrary object instance method syntax is not converted by Java to C# Converter:
                string id = info.Id.map(StandardId::toString).orElse("");

                // process in batches, where the ID is the same
                CurveSensitivitiesBuilder builder   = CurveSensitivities.builder(info);
                IList <CsvRow>            batchRows = csv.nextBatch(r => matchId(r, id));
                foreach (CsvRow batchRow in batchRows)
                {
                    try
                    {
                        CurveName reference             = CurveName.of(batchRow.getValue(REFERENCE_HEADER));
                        CurveName resolvedCurveName     = resolver.checkCurveName(reference);
                        CurveSensitivitiesType type     = CurveSensitivitiesType.of(batchRow.getValue(TYPE_HEADER));
                        ParameterMetadata      metadata = parseMetadata(batchRow, false);
                        Currency currency = parseCurrency(batchRow, reference);
                        string   valueStr = batchRow.getField(VALUE_HEADER);
                        if (valueStr.Length > 0)
                        {
                            double value = LoaderUtils.parseDouble(valueStr);
                            builder.add(type, resolvedCurveName, currency, metadata, value);
                        }
                    }
                    catch (System.ArgumentException ex)
                    {
                        failures.Add(FailureItem.of(PARSING, "CSV file could not be parsed at line {}: {}", batchRow.lineNumber(), ex.Message));
                    }
                }
                CurveSensitivities sens = builder.build();
                if (!sens.TypedSensitivities.Empty)
                {
                    parsed.put(sens.Id.map(object.toString).orElse(""), sens);
                }
            }
        }