code: def q14(lineitem, part):
      startDate = md.Timestamp("1994-03-01")
      endDate = md.Timestamp("1994-04-01")
      p_type_like = "PROMO"
      part_filtered = part.loc[:, ["P_PARTKEY", "P_TYPE"]]
      lineitem_filtered = lineitem.loc[
          :,
          ["L_EXTENDEDPRICE", "L_DISCOUNT", "L_SHIPDATE", "L_PARTKEY"],
      ]
      sel = (lineitem_filtered.L_SHIPDATE >= startDate) & (
          lineitem_filtered.L_SHIPDATE < endDate
      )
      flineitem = lineitem_filtered[sel]
      jn = flineitem.merge(
          part_filtered, left_on="L_PARTKEY", right_on="P_PARTKEY"
      )
      jn["TMP"] = jn.L_EXTENDEDPRICE * (1.0 - jn.L_DISCOUNT)
      total = (
          jn[jn.P_TYPE.str.startswith(p_type_like)].TMP.sum()
          * 100
          / jn.TMP.sum()
      )
      print(total.execute())
  
imports: import argparse
  import functools
  import time
  from typing import Callable, List, Optional, Set, Union
  import mars
  import mars.dataframe
label_desc: Use image node_id 23 for calling a global function with example usage: q14(lineitem, part) without return types