code: def test_per_contract_no_minimum(self):
      # Note that the exchange fee is a one-time cost that is only applied to
      # the first fill of an order.
      #
      # The commission on the first fill is (230 * 0.01) + 0.3 = 2.6
      # The commission on the second fill is 170 * 0.01 = 1.7
      # The total after the second fill is 2.6 + 1.7 = 4.3
      # The commission on the third fill is 100 * 0.01 = 1.0
      # The total after the third fill is 5.3
      model = PerContract(
          cost=0.01, exchange_fee=0.3, min_trade_cost=None
      )
      self.verify_per_unit_commissions(
          model=model,
          commission_totals=[2.6, 4.3, 5.3],
          sid=1000,
          order_amount=500,
          fill_amounts=[230, 170, 100],
      )
  
      # Test using custom costs and fees.
      model = PerContract(
          cost={"CL": 0.01, "FV": 0.0075},
          exchange_fee={"CL": 0.3, "FV": 0.5},
          min_trade_cost=None,
      )
      self.verify_per_unit_commissions(model, [2.6, 4.3, 5.3], sid=1000)
      self.verify_per_unit_commissions(
          model, [2.225, 3.5, 4.25], sid=1001
      )
  
imports: from textwrap import dedent
  from nose_parameterized import parameterized
  from pandas import DataFrame
  from zipline.assets import Equity, Future
  from zipline.errors import IncompatibleCommissionModel
  from zipline.finance.commission import CommissionModel, EquityCommissionModel, FutureCommissionModel, PerContract, PerDollar, PerFutureTrade, PerShare, PerTrade
  from zipline.finance.order import Order
  from zipline.finance.transaction import Transaction
  from zipline.testing import ZiplineTestCase
  from zipline.testing.fixtures import WithAssetFinder, WithMakeAlgo
label_desc: Use image node_id 9 for calling the CommissionUnitTests obj's underlying member method code with example usage: obj.test_per_contract_no_minimum() without return types