Skip to content

Commit 9f5de76

Browse files
committed
add BrownianGenerator
1 parent 16ea116 commit 9f5de76

File tree

8 files changed

+78
-0
lines changed

8 files changed

+78
-0
lines changed

quantlib/models/marketmodels/__init__.py

Whitespace-only changes.
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
from libcpp.vector cimport vector
2+
from quantlib.types cimport Real, Size
3+
from quantlib.handle cimport shared_ptr
4+
5+
cdef extern from 'ql/models/marketmodels/browniangenerator.hpp' namespace 'QuantLib' nogil:
6+
cdef cppclass BrownianGenerator:
7+
Real nextStep(vector[Real]&) except +
8+
Real nextPath()
9+
10+
Size numberOfFactors() const
11+
Size numberOfSteps() const
12+
13+
cdef cppclass BrownianGeneratorFactory:
14+
shared_ptr[BrownianGenerator] create(Size factor, Size steps) const
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from quantlib.handle cimport shared_ptr
2+
from . cimport _brownian_generator as _bg
3+
4+
cdef class BrownianGenerator:
5+
cdef shared_ptr[_bg.BrownianGenerator] gen
6+
7+
cdef class BrownianGeneratorFactory:
8+
cdef _bg.BrownianGeneratorFactory* factory
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
from libcpp.vector cimport vector
2+
from quantlib.types cimport Real, Size
3+
4+
cdef class BrownianGenerator:
5+
def next_step(self, vector[Real] v):
6+
""" len(v) needs to be equal to number of factors """
7+
return self.gen.get().nextStep(v)
8+
9+
def next_path(self):
10+
return self.gen.get().nextPath()
11+
12+
@property
13+
def number_of_factors(self):
14+
return self.gen.get().numberOfFactors()
15+
16+
@property
17+
def number_of_steps(self):
18+
return self.gen.get().numberOfSteps()
19+
20+
cdef class BrownianGeneratorFactory:
21+
def create(self, Size factors, Size steps):
22+
cdef BrownianGenerator r = BrownianGenerator.__new__(BrownianGenerator)
23+
r.gen = self.factory.create(factors, steps)
24+
return r

quantlib/models/marketmodels/browniangenerators/__init__.py

Whitespace-only changes.
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
from quantlib.types cimport Size
2+
from quantlib.types cimport Real, Size
3+
from quantlib.handle cimport shared_ptr
4+
from .._brownian_generator cimport BrownianGenerator, BrownianGeneratorFactory
5+
6+
cdef extern from 'ql/models/marketmodels/browniangenerators/mtbrowniangenerator.hpp' namespace 'QuantLib' nogil:
7+
cdef cppclass MTBrownianGenerator(BrownianGenerator):
8+
MTBrownianGenerator(Size factors,
9+
Size steps,
10+
unsigned long seed) # = 0
11+
12+
cdef cppclass MTBrownianGeneratorFactory(BrownianGeneratorFactory):
13+
MTBrownianGeneratorFactory(unsigned long seed) # = 0
14+
shared_ptr[BrownianGenerator] create(Size factor, Size steps) const
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from ..brownian_generator cimport BrownianGenerator, BrownianGeneratorFactory
2+
3+
cdef class MTBrownianGenerator(BrownianGenerator):
4+
pass
5+
6+
cdef class MTBrownianGeneratorFactory(BrownianGeneratorFactory):
7+
pass
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
from quantlib.types cimport Size
2+
from . cimport _mt_brownian_generator as _mtbg
3+
4+
cdef class MTBrownianGenerator(BrownianGenerator):
5+
def __init__(self, Size factors, Size steps, unsigned long seed=0):
6+
self.gen.reset(new _mtbg.MTBrownianGenerator(factors, steps, seed))
7+
8+
9+
cdef class MTBrownianGeneratorFactory(BrownianGeneratorFactory):
10+
def __init__(self, unsigned long seed=0):
11+
self.factory = new _mtbg.MTBrownianGeneratorFactory(seed)

0 commit comments

Comments
 (0)