Given arrays of opens and closes, both in nanoseconds,
    return an array of each minute between the opens and closes.

def compute_all_minutes(opens_in_ns, closes_in_ns):
    """
    Given arrays of opens and closes, both in nanoseconds,
    return an array of each minute between the opens and closes.
    """
    deltas = closes_in_ns - opens_in_ns

    # + 1 because we want 390 mins per standard day, not 389
    daily_sizes = (deltas // NANOSECONDS_PER_MINUTE) + 1
    num_minutes = daily_sizes.sum()

    # One allocation for the entire thing. This assumes that each day
    # represents a contiguous block of minutes.
    pieces = []

    for open_, size in zip(opens_in_ns, daily_sizes):
        pieces.append(
            np.arange(open_,
                      open_ + size * NANOSECONDS_PER_MINUTE,
                      NANOSECONDS_PER_MINUTE)
        )

    out = np.concatenate(pieces).view('datetime64[ns]')
    assert len(out) == num_minutes
    return out