The JSX uses analytical (closed-form) small-signal formulas, not a transfer function approach. Here's what the code actually does, based on the source I extracted:
vth = vcc * r2 / (r1 + r2)
rth = (r1 * r2) / (r1 + r2)
ib = (vth - vbe) / (rth + (1 + β) * re)
ic = β * ibgm = ic / vt
rpi = β / gm
ro = VA / ic
rc_eff = rc ∥ ro
av = gm * rc_effcMiller = Cμ * (1 + gm * rc_eff) ← Miller effect on Cμ
cTotal = Cπ + cMiller
rEff = rth_rpi ∥ 10kΩ
fh = 1 / (2π * rEff * cTotal) ← single-pole -3dB estimatebw = min(fh_stage1, fh_stage2) ← dominant pole of the cascade
av = av1_loaded * av2So to directly answer your question: it is not a transfer function approach. There is no polynomial H(s), no root-finding, no Bode plot computation. Instead it uses:
f = 1/(2πRC) to estimate the −3 dB bandwidth per stage.The system bandwidth is then just the min() of the two stage bandwidths — a crude but fast approximation suitable for the A* optimizer loop, which needs thousands of fast evaluations. A proper transfer function (with all poles/zeros from Cπ, Cμ, CE bypass caps, etc.) would be far more accurate but much more expensive to compute.