def put(self, lowstrike, highstrike, expiry):
assert lowstrike < highstrike<EOL>_rows = {}<EOL>_prices = {}<EOL>_opttype = '<STR_LIT>'<EOL>for _strike in (lowstrike, highstrike):<EOL><INDENT>_rows[_strike] = _relevant_rows(self.data, (_strike, expiry, _opttype,),<EOL>"<STR_LIT>".format(expiry, _strike, _opttype))<EOL>_prices[_strike] = _getprice(_rows[_strike])<EOL><DEDENT>_eq = _rows[lowstrike].loc[:, '<STR_LIT>'].values[<NUM_LIT:0>]<EOL>_qt = _rows[lowstrike].loc[:, '<STR_LIT>'].values[<NUM_LIT:0>]<EOL>_debit = _prices[highstrike] - _prices[lowstrike]<EOL>_breakeven = highstrike - _debit<EOL>_maxprof = highstrike - lowstrike -_debit<EOL>if _breakeven < lowstrike:<EOL><INDENT>_breakeven = np.nan<EOL><DEDENT>_index = ['<STR_LIT>', '<STR_LIT>', '<STR_LIT>',  '<STR_LIT>',<EOL>'<STR_LIT>', '<STR_LIT>', '<STR_LIT>']<EOL>_vals = np.array([_prices[lowstrike], _prices[highstrike], _debit,<EOL>_breakeven, _maxprof, _eq, _qt])<EOL>return pd.DataFrame(_vals, index=_index, columns=['<STR_LIT>'])<EOL>
Metrics for evaluating a bear put spread.

The metrics returned can easily be translated into bull
spread metrics. The difference is only whether one buys
the put at the lower strike and sells at the higher
(bear put spread) or sells at the lower while buying
at the higher (bull put spread). The metrics
dataframe shows values for a bear put spread, where
the transaction is a debit. A bull put spread
is created by *selling* a bear put spread, so the transaction
amount is the same, but it
is a credit rather than a debit.

Parameters
------------
lowstrike : numeric
    Lower strike price.
highstrike : numeric
    Higher strike sprice.
expiry : date or date str (e.g. '2015-01-01')
    Expiration date.

Returns
------------
metrics : DataFrame

Notes
-----
Cf. Lawrence McMillan, Options as a Strategic Investment, 5th ed., pp. 316ff.

See Also
--------
:meth:`call`