wangsix / vmo

Python Modules of Variable Markov Oracle
GNU General Public License v3.0
24 stars 10 forks source link

improvise_step function fails #20

Open jcelerier opened 5 years ago

jcelerier commented 5 years ago

Given

SYMBOLIC_SEQ = [0, 0, 1, 0, 2, 0, 0, 1, 0, 1, 0, 2, 0, 0, 1]
p = build_oracle(SYMBOLIC_SEQ, 'f')
print(vmo.generate.improvise(p, 5))

I get

Traceback (most recent call last):
  File "test.py", line 9, in <module>
    print(vmo.generate.improvise(p, 15))
  File "/home/jcelerier/score/base/addons/score-addon-vmo/3rdparty/vmo/vmo/generate.py", line 87, in improvise
    s.append(improvise_step(oracle, k, LRS, weight))
  File "/home/jcelerier/score/base/addons/score-addon-vmo/3rdparty/vmo/vmo/generate.py", line 47, in improvise_step
    trn_link = [s + 1 for s in oracle.latent[oracle.data[i]] if
TypeError: only integer scalar arrays can be converted to a scalar index

I changed the function to the following to make it work (just a cast to int for the oracle data sequence):

    latent = oracle.latent[int(oracle.data[i])]
    if prune:
        prune_list = range(i % prune, oracle.n_states - 1, prune)
        trn_link = [s + 1 for s in latent if
                    (oracle.lrs[s] >= lrs and
                     (s + 1) < oracle.n_states) and
                    s in prune_list]
    else:
        trn_link = [s + 1 for s in latent if
                    (oracle.lrs[s] >= lrs and (s + 1) < oracle.n_states)]
    if not trn_link:
        if i == oracle.n_states - 1:
            n = 1
        else:
            n = i + 1
    else:
        if weight == 'lrs':
            lrs_link = [oracle.lrs[s] for s in latent if
                        (oracle.lrs[s] >= lrs and (s + 1) < oracle.n_states)]
            lrs_pop = list(itertools.chain.from_iterable(itertools.chain.from_iterable(
                [[[i] * _x for (i, _x) in zip(trn_link, lrs_link)]])))
            n = np.random.choice(lrs_pop)
        else:
            n = trn_link[int(np.floor(random.random() * len(trn_link)))]
    return n
wangsix commented 5 years ago

Looks good just by a glance. Can you do a pull request?

jcelerier commented 5 years ago

yup, here it is! #22 thanks for the quick answer