def test_unvested(self): g = Grant(name='test', vehicle='iso', strike_usd=4, start='1/2/20', n_periods=12, n_shares=12, period_months=1) assert 12-0 == g.unvested('1/30/10') assert 12-0 == g.unvested('1/30/20') assert 12-0 == g.unvested('2/1/20') assert 12-1 == g.unvested('2/2/20') assert 12-2 == g.unvested('3/2/20') assert 12-12 == g.unvested('1/2/21') assert 12-12 == g.unvested('1/2/22') g = Grant(name='test', vehicle='iso', strike_usd=4, start='1/1/20', n_periods=4, n_shares=12, period_months=3) assert 12-0 == g.unvested('1/30/20') assert 12-0 == g.unvested('2/1/20') assert 12-3 == g.unvested('4/1/20')
def test_vested_outstanding_cost(self): g = Grant(name='test', vehicle='iso', strike_usd=4, start='1/2/20', exercised=6, n_periods=12, n_shares=12, period_months=1) assert 6*4 == g.vested_outstanding_cost('1/2/21')
def test_strike(self): with pytest.raises(ValueError): g = Grant(name='test', vehicle='rsu', strike_usd=4, start='1/2/20', exercised=6, n_periods=12, n_shares=12, period_months=1) with pytest.raises(ValueError): g = Grant(name='test', vehicle='iso', strike_usd=0, start='1/2/20', exercised=6, n_periods=12, n_shares=12, period_months=1) g = Grant(name='test', vehicle='rsu', strike_usd=0, start='1/2/20', exercised=6, n_periods=12, n_shares=12, period_months=1) g = Grant(name='test', vehicle='iso', strike_usd=5, start='1/2/20', exercised=6, n_periods=12, n_shares=12, period_months=1)
def test_outstanding(self): g = Grant(name='test', vehicle='iso', strike_usd=4, start='1/2/20', n_periods=12, n_shares=12, period_months=1) assert 12 == g.outstanding() g = Grant(name='test', vehicle='iso', strike_usd=4, start='1/1/20', n_periods=4, exercised=6, sold=6, n_shares=12, period_months=1) assert 6 == g.outstanding()
def test_held(self): g = Grant(name='test', vehicle='iso', strike_usd=4, start='1/1/20', n_periods=4, exercised=6, sold=6, n_shares=12, period_months=1) assert 0 == g.held() g = Grant(name='test', vehicle='iso', strike_usd=4, start='1/1/20', n_periods=4, exercised=6, sold=3, n_shares=12, period_months=1) assert 3 == g.held()
assert 12 == mon_diff(start, parse_date('1/2/21')) assert 11 == mon_diff(start, parse_date('1/1/21')) import position as anAwkward # iso, nso, rsu # not exercised, partially exercised, fully exercised # not sold, partially sold, fully sold # strike above, strike below # partially vested, fully vested # quarterly, monthly GRANTS = [ Grant(name='rsu', vehicle='rsu', strike_usd=4, start='1/1/20', n_periods=12, n_shares=1<<0, period_months=1), Grant(name='nso', vehicle='nso', strike_usd=4, start='1/1/20', n_periods=12, n_shares=1<<1, exercised=0, sold=0, period_months=1), Grant(name='iso',
first_date='1/1/19', first_val=1500, second_date='2/1/19', second_val=2000, last_date='1/1/23', last_val=500, n_shares=96000, exercised=0, sold=0), # Sometimes, they do grants as bonuses Grant(name='BonusTigers', vehicle='nso', strike_usd=2, start='1/1/10', n_periods=1, n_shares=10000, exercised=500, sold=250, period_months=1), # If you want to manually specify Grant(name='javax.swing', vehicle='iso', strike_usd=4, start='1/1/15', n_periods=48, n_shares=250000, exercised=0, sold=0, period_months=3),
first_val=1210, second_date='02/05/56', second_val=1657, last_date='11/05/59', last_val=447, n_shares=26512, exercised=0, sold=0, strike_usd=1.75), # Sometimes, they do grants as bonuses Grant(name='BonusTigers', vehicle='nso', strike_usd=2, start='1/1/20', n_periods=1, n_shares=0xdeadbeef, exercised=0, sold=0, period_months=1), # If you want to manually specify Grant(name='javax.swing', vehicle='iso', strike_usd=4, start='1/1/20', n_periods=12, n_shares=0xcafebabe, exercised=0, sold=0, period_months=1),