Ejemplo n.º 1
0
def test_write_json_file_multiple_comps(
    filename,
    input_dict_strs,
):
    orig_results = {}

    # Get python script from file and execute
    filename = f'{os.path.dirname(__file__)}/{filename}'
    with open(filename, 'r') as orig_file:
        exec(orig_file.read())

        for composition_name in input_dict_strs:
            exec(
                f'{composition_name}.run(inputs={input_dict_strs[composition_name]})'
            )
            orig_results[composition_name] = eval(
                f'{composition_name}.results')

    # reset random seed
    pnl.core.globals.utilities.set_global_seed(0)

    # Save json_summary of Composition to file and read back in.
    json_filename = filename.replace('.py', '.json')

    exec(f'pnl.write_json_file([{",".join(input_dict_strs)}], json_filename)')
    exec(pnl.generate_script_from_json(json_filename))

    for composition_name in input_dict_strs:
        exec(
            f'{composition_name}.run(inputs={input_dict_strs[composition_name]})'
        )
        final_results = eval(f'{composition_name}.results')
        assert orig_results[
            composition_name] == final_results, f'{composition_name}:'
Ejemplo n.º 2
0
def main():
    reconstructed_identifer = "reconstructed"

    for example in glob.glob(os.path.join(os.path.dirname(__file__), "*.py")):
        if reconstructed_identifer in example or example == __file__:
            continue

        pnl.clear_registry()
        border = "=" * len(example)
        print(f"{border}\n{example}\n{border}")
        base_fname = example.replace(".py", "")
        script_globals = runpy.run_path(example)

        compositions = list(
            filter(lambda v: isinstance(v, pnl.Composition),
                   script_globals.values()))
        nonnested_comps = []

        for x in compositions:
            for y in compositions:
                if x in y.nodes:
                    break
            else:
                nonnested_comps.append(x)

        try:
            comp = nonnested_comps[0]
        except IndexError:
            continue

        json_summary = pnl.generate_json(comp)

        with open(f"{base_fname}.json", "w") as outfi:
            outfi.write(json_summary)
            outfi.write("\n")

        reconstructed_fname = f"{base_fname}.{reconstructed_identifer}.py"
        with open(reconstructed_fname, "w") as outfi:
            outfi.write(pnl.generate_script_from_json(json_summary))
            outfi.write("\n")
        subprocess.run(["black", reconstructed_fname])
        subprocess.run(["python", reconstructed_fname])
Ejemplo n.º 3
0
def test_json_results_equivalence(
    filename,
    composition_name,
    input_dict_str,
):
    # Get python script from file and execute
    filename = f'{os.path.dirname(__file__)}/{filename}'
    with open(filename, 'r') as orig_file:
        exec(orig_file.read())
        exec(f'{composition_name}.run(inputs={input_dict_str})')
        orig_results = eval(f'{composition_name}.results')

    # reset random seed
    pnl.core.globals.utilities.set_global_seed(0)

    # Generate python script from JSON summary of composition and execute
    json_summary = eval(f'{composition_name}.json_summary')
    exec(pnl.generate_script_from_json(json_summary))
    exec(f'{composition_name}.run(inputs={input_dict_str})')
    new_results = eval(f'{composition_name}.results')
    assert orig_results == new_results
Ejemplo n.º 4
0
def test_write_json_file(
    filename,
    composition_name,
    input_dict_str,
):
    # Get python script from file and execute
    filename = f'{os.path.dirname(__file__)}/{filename}'
    with open(filename, 'r') as orig_file:
        exec(orig_file.read())
        exec(f'{composition_name}.run(inputs={input_dict_str})')
        orig_results = eval(f'{composition_name}.results')

    # reset random seed
    pnl.core.globals.utilities.set_global_seed(0)

    # Save json_summary of Composition to file and read back in.
    json_filename = filename.replace('.py', '.json')
    exec(f'pnl.write_json_file({composition_name}, json_filename)')
    exec(pnl.generate_script_from_json(json_filename))
    # exec(f'{composition_name}.run(inputs={input_dict_str})')
    exec(f'pnl.get_compositions()[0].run(inputs={input_dict_str})')
    final_results = eval(f'{composition_name}.results')
    assert orig_results == final_results
Ejemplo n.º 5
0
def test_json_results_equivalence(
    filename,
    composition_name,
    input_dict_str,
):
    filename = f'{os.path.dirname(__file__)}/{filename}'
    with open(filename, 'r') as orig_file:
        exec(orig_file.read())
        exec(f'{composition_name}.run(inputs={input_dict_str})')
        orig_results = eval(f'{composition_name}.results')

    # reset random seed
    seed = 0
    random.seed(seed)
    np.random.seed(seed)
    pnl.core.globals.utilities.set_global_seed(seed)

    exec(
        pnl.generate_script_from_json(
            eval(f'{composition_name}.json_summary')))
    exec(f'{composition_name}.run(inputs={input_dict_str})')
    new_results = eval(f'{composition_name}.results')

    assert orig_results == new_results
Ejemplo n.º 6
0
    ),  # default, "Never" for early termination - ends when all trials finished
    pnl.TimeScale.TRIAL: pnl.AfterNCalls(fn, int(simtime / dt))
}

print('Running the SimpleFN model...')

comp.run(inputs={fn: 0}, log=True)

print('Finished running the SimpleFN model')

base_fname = __file__.replace('.py', '')
with open(f'{base_fname}.json', 'w') as outfi:
    outfi.write(comp.json_summary)

with open(f'{base_fname}.converted.py', 'w') as outfi:
    outfi.write(pnl.generate_script_from_json(comp.json_summary))
    outfi.write('\ncomp.show_graph()\n')

for node in comp.nodes:
    print(f'=== {node} {node.name}: {node.parameters.value.get(comp)}')


def generate_time_array(node, context='comp', param='value'):
    return [
        entry.time.pass_
        for entry in getattr(node.parameters, param).log[context]
    ]


def generate_value_array(node, index, context='comp', param='value'):
    print(node, index, param, context)
Ejemplo n.º 7
0
# Generated by NeuroMLlite v0.2.1

import psyneulink as pnl

conv_json_filename = 'FN.bids-mdf.json'
with open(conv_json_filename, 'r') as infile:
    json = infile.read()

load_model = 'load_FN_bids_mdf'
py_filename = load_model + '.py'
with open(py_filename, 'w') as outfi:
    outfi.write(pnl.generate_script_from_json(json))

exec('from %s import FN' % load_model)

print('Ready to run network: FN imported using %s' % py_filename)

dt = 0.05
simtime = 100.0

time_step_size = dt
num_trials = int(simtime / dt)

FN.run(inputs={}, log=True, num_trials=num_trials)
print('Finished simulation run of %s ms' % simtime)


def generate_time_array(node, context='FN', param='value'):
    return [
        entry.time.trial
        for entry in getattr(node.parameters, param).log[context]
Ejemplo n.º 8
0
for name, projection in lems_json["projections"].items():
    # unsure of any edge parameters in the original json
    for proj in parse_projection(projection):
        proj_name = proj['name']
        composition['edges'][proj_name] = proj

converted_json = json.dumps(
    converted_json,
    cls=pnl.PNLJSONEncoder,
    indent=4,
)

print(converted_json)

with open(filename_to_samedir_filename(converted_json_fname), 'w') as outfi:
    outfi.write(converted_json)

with open(filename_to_samedir_filename(converted_pnl_script_fname),
          'w') as outfi:
    outfi.write(pnl.generate_script_from_json(converted_json))
    outfi.write('\ncomposition.show_graph()')

# make output py script easier to read using black
line_length = 80
subprocess.Popen([
    'black', '-l',
    str(line_length),
    filename_to_samedir_filename(converted_pnl_script_fname)
])