code: def get_shares_full(self, start=None, end=None, proxy=None):
      logger = utils.get_yf_logger()
  
      # Process dates
      tz = self._get_ticker_tz(proxy=proxy, timeout=10)
      dt_now = pd.Timestamp.utcnow().tz_convert(tz)
      if start is not None:
          start_ts = utils._parse_user_dt(start, tz)
          start = (
              pd.Timestamp.fromtimestamp(start_ts)
              .tz_localize("UTC")
              .tz_convert(tz)
          )
      if end is not None:
          end_ts = utils._parse_user_dt(end, tz)
          end = (
              pd.Timestamp.fromtimestamp(end_ts)
              .tz_localize("UTC")
              .tz_convert(tz)
          )
      if end is None:
          end = dt_now
      if start is None:
          start = end - pd.Timedelta(days=548)  # 18 months
      if start >= end:
          logger.error("Start date must be before end")
          return None
      start = start.floor("D")
      end = end.ceil("D")
  
      # Fetch
      ts_url_base = f"https://query2.finance.yahoo.com/ws/fundamentals-timeseries/v1/finance/timeseries/{self.ticker}?symbol={self.ticker}"
      shares_url = f"{ts_url_base}&period1={int(start.timestamp())}&period2={int(end.timestamp())}"
      try:
          json_data = self._data.cache_get(url=shares_url, proxy=proxy)
          json_data = json_data.json()
      except (
          _json.JSONDecodeError,
          requests.exceptions.RequestException,
      ):
          logger.error(
              f"{self.ticker}: Yahoo web request for share count failed"
          )
          return None
      try:
          fail = json_data["finance"]["error"]["code"] == "Bad Request"
      except KeyError:
          fail = False
      if fail:
          logger.error(
              f"{self.ticker}: Yahoo web request for share count failed"
          )
          return None
  
      shares_data = json_data["timeseries"]["result"]
      if "shares_out" not in shares_data[0]:
          return None
      try:
          df = pd.Series(
              shares_data[0]["shares_out"],
              index=pd.to_datetime(
                  shares_data[0]["timestamp"], unit="s"
              ),
          )
      except Exception as e:
          logger.error(
              f"{self.ticker}: Failed to parse shares count data: {e}"
          )
          return None
  
      df.index = df.index.tz_localize(tz)
      df = df.sort_index()
      return df
  
imports: from __future__ import print_function
  import datetime
  from io import StringIO
  import json
  import logging
  import time
  import warnings
  from typing import Optional
  from urllib.parse import quote
  import dateutil
  import numpy
  import pandas
  import requests
  from .None import shared, utils, cache
  from .data import YfData
  from .scrapers.analysis import Analysis
  from .scrapers.fundamentals import Fundamentals
  from .scrapers.holders import Holders
  from .scrapers.quote import Quote, FastInfo
  from .const import _BASE_URL_, _ROOT_URL_
label_desc: Use image node_id 45 for calling the TickerBase obj's underlying member method code with example usage: obj.get_shares_full(start, end, proxy) and returns: df, None, None, None, None, None