class_docstr: Build Trunk Blocks for Efficient/Mobile Networks
  
  This ended up being somewhat of a cross between
  https://github.com/tensorflow/tpu/blob/master/models/official/mnasnet/mnasnet_models.py
  and
  https://github.com/facebookresearch/maskrcnn-benchmark/blob/master/maskrcnn_benchmark/modeling/backbone/fbnet_builder.py
class_docstr_tok: ["Build","Trunk","Blocks","for","Efficient\/Mobile","Networks","This","ended","up","being","somewhat","of","a","cross","between","https",":","\/\/github.com\/tensorflow\/tpu\/blob\/master\/models\/official\/mnasnet\/mnasnet_models.py","and","https",":","\/\/github.com\/facebookresearch\/maskrcnn-benchmark\/blob\/master\/maskrcnn_benchmark\/modeling\/backbone\/fbnet_builder.py"]
code: def _make_block(self, ba):
      bt = ba.pop("block_type")
      ba["in_chs"] = self.in_chs
      ba["out_chs"] = self._round_channels(ba["out_chs"])
      if "fake_in_chs" in ba and ba["fake_in_chs"]:
          # FIXME this is a hack to work around mismatch in origin impl input filters for EdgeTPU
          ba["fake_in_chs"] = self._round_channels(ba["fake_in_chs"])
      ba["norm_layer"] = self.norm_layer
      ba["norm_kwargs"] = self.norm_kwargs
      ba["pad_type"] = self.pad_type
      # block act fn overrides the model default
      ba["act_layer"] = (
          ba["act_layer"]
          if ba["act_layer"] is not None
          else self.act_layer
      )
      assert ba["act_layer"] is not None
      if bt == "ir":
          ba["drop_connect_rate"] = (
              self.drop_connect_rate * self.block_idx / self.block_count
          )
          ba["se_kwargs"] = self.se_kwargs
          if ba.get("num_experts", 0) > 0:
              block = CondConvResidual(**ba)
          else:
              block = InvertedResidual(**ba)
      elif bt == "ds" or bt == "dsa":
          ba["drop_connect_rate"] = (
              self.drop_connect_rate * self.block_idx / self.block_count
          )
          ba["se_kwargs"] = self.se_kwargs
          block = DepthwiseSeparableConv(**ba)
      elif bt == "er":
          ba["drop_connect_rate"] = (
              self.drop_connect_rate * self.block_idx / self.block_count
          )
          ba["se_kwargs"] = self.se_kwargs
          block = EdgeResidual(**ba)
      elif bt == "cn":
          block = ConvBnAct(**ba)
      else:
          assert False, (
              "Uknkown block type (%s) while building model." % bt
          )
      self.in_chs = ba["out_chs"]  # update in_chs for arg of next block
      return block
  
imports: import re
  from copy import deepcopy
  from .conv2d_layers import *
  from geffnet.activations import *
label_desc: Use image node_id 3 for calling the EfficientNetBuilder obj's underlying member method code with example usage: obj._make_block(ba) and returns: block