|
1 | 1 | import os.path
|
2 | 2 |
|
| 3 | +from loda.lang import Program |
3 | 4 | from loda.oeis import ProgramCache, Sequence
|
4 | 5 | from loda.runtime import Evaluator, Interpreter
|
5 | 6 | from loda.mine import Miner
|
|
9 | 10 | class SampleLODA:
|
10 | 11 |
|
11 | 12 | def __init__(self):
|
12 |
| - # Initialize LODA programs cache using *.asm files from tests folder |
| 13 | + # Initialize LODA programs cache using *.asm files from tests folder. |
13 | 14 | programs_dir = os.path.join("tests", "programs", "oeis")
|
14 | 15 | # programs_dir = os.path.expanduser("~/loda/programs/oeis")
|
15 | 16 | self.program_cache = ProgramCache(programs_dir)
|
16 | 17 | self.interpreter = Interpreter(self.program_cache)
|
17 | 18 |
|
18 | 19 | def print_program(self):
|
19 |
| - # Load the LODA program for the prime numbers (A000040.asm) |
20 |
| - # See also the integer sequence entry at https://oeis.org/A000040 |
21 |
| - program = self.program_cache.get(40) # numeric version of A000040 |
| 20 | + # Load the LODA program for the Fibonacci numbers (A000045.asm). |
| 21 | + # See also the integer sequence entry at https://oeis.org/A000045. |
| 22 | + program = self.program_cache.get(45) # numeric version of A000045 |
22 | 23 | print(program)
|
23 | 24 |
|
24 | 25 | def eval_program_to_seq(self):
|
25 |
| - # Evaluate the program to an integer sequence |
26 |
| - program = self.program_cache.get(40) # numeric version of A000040 |
27 |
| - evaluator = Evaluator(program, self.interpreter) |
28 |
| - for _ in range(10): |
29 |
| - print(evaluator()) |
30 |
| - |
31 |
| - def mine(self): |
32 |
| - model = train_model(self.program_cache, num_programs=1000) |
33 |
| - model.save("sample_model") |
34 |
| - |
35 |
| - # Load the model back from disk. |
36 |
| - loaded = load_model("sample_model") |
37 |
| - loaded.summary() |
38 |
| - |
39 |
| - # Use the trained model to generate programs. |
40 |
| - generator = Generator(loaded, num_lanes=10) |
41 |
| - |
42 |
| - for _ in range(10): |
43 |
| - print(generator()) |
44 |
| - |
45 |
| - existing_ids = set(self.program_cache.all_ids()) |
46 |
| - seqs = Sequence.load_oeis(os.path.expanduser("~/loda/oeis")) |
47 |
| - seqs = list(filter(lambda s: |
48 |
| - len(s.terms) >= 8 and s.id not in existing_ids, seqs)) |
49 |
| - print("Loaded {} sequences".format(len(seqs))) |
50 |
| - miner = Miner(seqs, self.interpreter, generator) |
51 |
| - for i in range(20): |
52 |
| - miner() |
53 |
| - if i % 10 == 0: |
54 |
| - print(generator.get_stats_info_str()) |
| 26 | + # Evaluate the program to an integer sequence. |
| 27 | + # This time we load it from a file. |
| 28 | + with open("fibonacci.asm", "r") as file: |
| 29 | + program = Program(file.read()) |
| 30 | + evaluator = Evaluator(program, self.interpreter) |
| 31 | + for _ in range(10): |
| 32 | + print(evaluator()) |
55 | 33 |
|
56 | 34 |
|
57 | 35 | if __name__ == "__main__":
|
58 | 36 | sample = SampleLODA()
|
59 | 37 | sample.print_program()
|
60 | 38 | sample.eval_program_to_seq()
|
61 |
| - sample.mine() |
0 commit comments