File size: 1,225 Bytes
c475135
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
from __future__ import annotations

import os

from subsystems.htm import HTMLayer, _resolve_use_gpu


def _bare_layer(*, learn=True, training=True, learn_every=1):
    layer = HTMLayer.__new__(HTMLayer)
    layer.learn = learn
    layer.learning_enabled = True
    layer._learn_every = learn_every
    layer._forward_counter = 0
    layer.training = training
    return layer


def test_htm_learn_flag_requires_training_and_learning_enabled():
    layer = _bare_layer(training=True)
    assert layer._next_learn_flag() is True

    layer.training = False
    assert layer._next_learn_flag() is False

    layer.training = True
    layer.learning_enabled = False
    assert layer._next_learn_flag() is False


def test_htm_forward_async_uses_same_learn_gate_as_forward():
    layer = _bare_layer(training=True, learn_every=3)

    assert layer._next_learn_flag() is False
    assert layer._next_learn_flag() is False
    assert layer._next_learn_flag() is True

    layer.training = False
    assert layer._next_learn_flag() is False


def test_htm_use_gpu_env_can_force_cpu_even_if_cuda_available(monkeypatch):
    monkeypatch.setenv("HYDRA_HTM_USE_GPU", "0")
    assert _resolve_use_gpu(True, cuda_available=True) is False