code: def dt64arr_to_periodarr(
      data, freq, tz=None
  ) -> tuple[npt.NDArray[np.int64], BaseOffset]:
      """
      Convert an datetime-like array to values Period ordinals.
  
      Parameters
      ----------
      data : Union[Series[datetime64[ns]], DatetimeIndex, ndarray[datetime64ns]]
      freq : Optional[Union[str, Tick]]
          Must match the `freq` on the `data` if `data` is a DatetimeIndex
          or Series.
      tz : Optional[tzinfo]
  
      Returns
      -------
      ordinals : ndarray[int64]
      freq : Tick
          The frequency extracted from the Series or DatetimeIndex if that's
          used.
  
      """
      if not isinstance(data.dtype, np.dtype) or data.dtype.kind != "M":
          raise ValueError(f"Wrong dtype: {data.dtype}")
  
      if freq is None:
          if isinstance(data, ABCIndex):
              data, freq = data._values, data.freq
          elif isinstance(data, ABCSeries):
              data, freq = data._values, data.dt.freq
  
      elif isinstance(data, (ABCIndex, ABCSeries)):
          data = data._values
  
      reso = get_unit_from_dtype(data.dtype)
      freq = Period._maybe_convert_freq(freq)
      try:
          base = freq._period_dtype_code
      except (AttributeError, TypeError):
          # AttributeError: _period_dtype_code might not exist
          # TypeError: _period_dtype_code might intentionally raise
          raise TypeError(
              f"{freq.name} is not supported as period frequency"
          )
      return (
          c_dt64arr_to_periodarr(data.view("i8"), base, tz, reso=reso),
          freq,
      )
  
imports: from __future__ import annotations
  from datetime import timedelta
  import operator
  from typing import TYPE_CHECKING, Any, Callable, Literal, TypeVar, cast, overload
  import warnings
  import numpy
  from pandas._libs import algos, lib
  from pandas._libs.arrays import NDArrayBacked
  from pandas._libs.tslibs import BaseOffset, NaT, NaTType, Timedelta, add_overflowsafe, astype_overflowsafe, dt64arr_to_periodarr, get_unit_from_dtype, iNaT, parsing, period, to_offset
  from pandas._libs.tslibs.dtypes import FreqGroup, PeriodDtypeBase, freq_to_period_freqstr
  from pandas._libs.tslibs.fields import isleapyear_arr
  from pandas._libs.tslibs.offsets import Tick, delta_to_tick
  from pandas._libs.tslibs.period import DIFFERENT_FREQ, IncompatibleFrequency, Period, get_period_field_arr, period_asfreq_arr
  from pandas.util._decorators import cache_readonly, doc
  from pandas.util._exceptions import find_stack_level
  from pandas.core.dtypes.common import ensure_object, pandas_dtype
  from pandas.core.dtypes.dtypes import DatetimeTZDtype, PeriodDtype
  from pandas.core.dtypes.generic import ABCIndex, ABCPeriodIndex, ABCSeries, ABCTimedeltaArray
  from pandas.core.dtypes.missing import isna
  from pandas.core.arrays import datetimelike
  import pandas.core.common
label_desc: Use image node_id 7 for calling a global function with example usage: dt64arr_to_periodarr(data, freq, tz) and returns: c_dt64arr_to_periodarr,  freq