code: def test_valid_dt_with_missing_values(self):
      # GH 8689
      ser = Series(date_range("20130101", periods=5, freq="D"))
      ser.iloc[2] = pd.NaT
  
      for attr in [
          "microsecond",
          "nanosecond",
          "second",
          "minute",
          "hour",
          "day",
      ]:
          expected = getattr(ser.dt, attr).copy()
          expected.iloc[2] = np.nan
          result = getattr(ser.dt, attr)
          tm.assert_series_equal(result, expected)
  
      result = ser.dt.date
      expected = Series(
          [
              date(2013, 1, 1),
              date(2013, 1, 2),
              pd.NaT,
              date(2013, 1, 4),
              date(2013, 1, 5),
          ],
          dtype="object",
      )
      tm.assert_series_equal(result, expected)
  
      result = ser.dt.time
      expected = Series(
          [time(0), time(0), pd.NaT, time(0), time(0)], dtype="object"
      )
      tm.assert_series_equal(result, expected)
  
imports: import calendar
  from datetime import date, datetime, time
  import locale
  import unicodedata
  import numpy
  import pytest
  import pytz
  from pandas._libs.tslibs.timezones import maybe_get_tz
  from pandas.errors import SettingWithCopyError
  from pandas.core.dtypes.common import is_integer_dtype, is_list_like
  import pandas
  from pandas import DataFrame, DatetimeIndex, Index, Period, PeriodIndex, Series, TimedeltaIndex, date_range, period_range, timedelta_range
  import pandas._testing
  from pandas.core.arrays import DatetimeArray, PeriodArray, TimedeltaArray
label_desc: Use image node_id 29 for calling the TestSeriesDatetimeValues obj's underlying member method code with example usage: obj.test_valid_dt_with_missing_values() without return types