code: def merge_ownership_periods(mappings):
      
      return valmap(
          lambda v: tuple(
              OwnershipPeriod(
                  a.start,
                  b.start,
                  a.sid,
                  a.value,
              ) for a, b in sliding_window(
                  2,
                  concatv(
                      sorted(v),
                      # concat with a fake ownership object to make the last
                      # end date be max timestamp
                      [OwnershipPeriod(
                          pd.Timestamp.max.tz_localize('utc'),
                          None,
                          None,
                          None,
                      )],
                  ),
              )
          ),
          mappings,
      )
docs: Given a dict of mappings where the values are lists of
      OwnershipPeriod objects, returns a dict with the same structure with
      new OwnershipPeriod objects adjusted so that the periods have no
      gaps.
  
      Orders the periods chronologically, and pushes forward the end date
      of each period to match the start date of the following period. The
      end date of the last period pushed forward to the max Timestamp.