|
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