code: def estimate_gas_for_function(
          address,
          web3,
          fn_identifier=None,
          transaction=None,
          contract_abi=None,
          fn_abi=None,
          *args,
          **kwargs):
      
      estimate_transaction = prepare_transaction(
          address,
          web3,
          fn_identifier=fn_identifier,
          contract_abi=contract_abi,
          fn_abi=fn_abi,
          transaction=transaction,
          fn_args=args,
          fn_kwargs=kwargs,
      )
  
      gas_estimate = web3.eth.estimateGas(estimate_transaction)
      return gas_estimate
docs: Estimates gas cost a function call would take.
  
      Don't call this directly, instead use :meth:`Contract.estimateGas`
      on your contract instance.