(instr)
| 1670 | return instr |
| 1671 | |
| 1672 | def _doPyDCvar(instr): |
| 1673 | for name in instr.circuit.indepVars: |
| 1674 | if 'dcvar' in list(instr.circuit.elements[name].params.keys()): |
| 1675 | value = instr.circuit.elements[name].params['dcvar'] |
| 1676 | if instr.substitute == True: |
| 1677 | value = fullSubs(value, instr.parDefs) |
| 1678 | if instr.numeric == True: |
| 1679 | value = float2rational(sp.N(value)) |
| 1680 | instr.svarTerms[name] = value |
| 1681 | instr.gainType = 'gain' |
| 1682 | instr = _makeAllMatrices(instr, inductors=True) |
| 1683 | instr.M = instr.M.xreplace({ini.laplace: 0}) |
| 1684 | den = _doPyDenom(instr).denom[0] |
| 1685 | den_sq = den**2 |
| 1686 | if instr.source != [None, None] and instr.source != None: |
| 1687 | instr = _doPyNumer(instr) |
| 1688 | num = instr.numer[-1].xreplace({ini.laplace: 0}) |
| 1689 | if num != None: |
| 1690 | sl_num_sq = num**2 |
| 1691 | instr.gainType = 'vi' |
| 1692 | instr = _makeAllMatrices(instr, reduce=False) |
| 1693 | M_var = instr.M.xreplace({ini.laplace: 0}) |
| 1694 | Iv_var = instr.Iv.xreplace({ini.laplace: 0}) |
| 1695 | Dv_var = instr.Dv |
| 1696 | ovar = 0 |
| 1697 | ivar = 0 |
| 1698 | for src in instr.svarTerms.keys(): |
| 1699 | if src not in instr.ovarTerms.keys(): |
| 1700 | instr.ovarTerms[src] = [] |
| 1701 | instr.ivarTerms[src] = [] |
| 1702 | Iv = Iv_var |
| 1703 | for el in instr.svarTerms.keys(): |
| 1704 | name = sp.Symbol(el) |
| 1705 | if el == src: |
| 1706 | Iv = Iv.xreplace({name: 1}) |
| 1707 | else: |
| 1708 | Iv = Iv.xreplace({name: 0}) |
| 1709 | # Modify source and source vector (reduce to single input) |
| 1710 | instr.Iv = Iv |
| 1711 | # Remove unused independent voltage sources |
| 1712 | #instr.M, instr.Iv, instr.Dv = _reduceCircuit(instr.M, instr.Iv, instr.Dv, [src], instr.detector, instr.references, inductors=True) |
| 1713 | instr = _doPyNumer(instr) |
| 1714 | num = instr.numer[-1] |
| 1715 | if num != None: |
| 1716 | num_sq = num**2 |
| 1717 | gain_sq = num_sq/den_sq |
| 1718 | ovarTerm = instr.svarTerms[src]*gain_sq |
| 1719 | if ini.factor: |
| 1720 | ovarTerm = sp.factor(ovarTerm) |
| 1721 | instr.ovarTerms[src].append(ovarTerm) |
| 1722 | ovar += instr.ovarTerms[src][-1] |
| 1723 | if instr.source != [None, None] and instr.source != None: |
| 1724 | ivarTerm = instr.svarTerms[src]*num_sq/sl_num_sq |
| 1725 | if ini.factor: |
| 1726 | ivarTerm = sp.factor(ivarTerm) |
| 1727 | instr.ivarTerms[src].append(ivarTerm) |
| 1728 | ivar += instr.ivarTerms[src][-1] |
| 1729 | # Restore full matrices |
no test coverage detected