security_analytics.calculate_price_or_yield
*******************************************

spice.security_analytics.calculate_price_or_yield(calculate_requests: list[dict]) -> dict[str, dict]

   Calculate security prices and yields for multiple securities in
   batch.

   For each request, calculates price if query_yield is provided, or
   yield (YTM) if query_price is provided.

   Parameters:
      **calculate_requests** (*list**[**dict**]*) -- List of
      calculation requests. Each dict contains: - isin (str): ISIN of
      the security (e.g., "INE040A08AK2") - settlement_date (str):
      Settlement date in YYYY-MM-DD format (e.g., "2024-01-15") -
      query_price (float, optional): Security price to calculate yield
      (YTM) from (e.g., 98.5) - query_yield (float, optional): Yield
      to calculate price from (e.g., 0.075 for 7.5%)

   Returns:
      Dictionary mapping ISIN to result dict. Each result contains:
         * settlement_date (str): Settlement date from request

         * yield (float): Calculated or provided yield

         * unit_clean_price (float): Calculated or provided clean
           price

         * unit_accrued_interest (float): Accrued interest of one unit

         * unit_dirty_price (float): Dirty price (clean_price +
           accrued_interest)

         If calculation fails, result contains: - error (str): Error
         message

   Return type:
      dict[str, dict]

   Note:

     * Each request must provide exactly one of query_price or
       query_yield

     * All monetary values are in the security's currency units

   -[ Example ]-

   >>> import spice.security_analytics as sa
   >>> requests = [
   ...     {"isin": "INE001A08AA1", "settlement_date": "2024-01-15", "query_yield": 0.075},
   ...     {"isin": "INE040A08AK2", "settlement_date": "2024-01-20", "query_price": 98.5}
   ... ]
   >>> results = sa.calculate_price_or_yield(requests)
   >>> print(results["INE001A08AA1"]["unit_clean_price"])
   98.45
   >>> print(results["INE040A08AK2"]["yield"])
   0.078
