예제 #1
0
    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')
예제 #2
0
    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')
예제 #3
0
    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)
예제 #4
0
    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()
예제 #5
0
    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()
예제 #6
0
    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',
예제 #7
0
               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),
예제 #8
0
               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),