HEX
Server: LiteSpeed
System: Linux houston.panomity.com 6.8.0-100-generic #100-Ubuntu SMP PREEMPT_DYNAMIC Tue Jan 13 16:40:06 UTC 2026 x86_64
User: nudepix (1011)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //opt/moodle-mlbackend-python/test/testdata.py
import random
from math import pi, cos, sin
import json
import csv

import numpy as np
from io import StringIO

class MoodleMLError(Exception):
    pass

MODEL_DTYPE='float32'


def discrete_dataset(n_inputs, n_outputs, n_samples, function):
    if n_outputs != 1:
        raise NotImplementedError("go ahead! implement n_outputs > 1!")
    n_classes = n_outputs + 1
    header = {
        'nfeatures': n_inputs,
        'nclasses': n_classes,
        'targettype': 'discrete',
        'targetclasses': '[0,1]'
    }

    colids = ['f%d' % i for i in range(n_inputs)]
    colids += ['t%d' % i for i in range(n_outputs)]

    dataset = function(n_inputs, n_outputs, n_samples)
    return (header, dataset, colids)


def cos_gt_sin(n_inputs, n_outputs, n_samples):
    assert n_inputs == 2 and n_outputs == 1
    rows = []
    for i in range(n_samples):
        a = random.uniform(-pi, pi)
        b = random.uniform(-pi, pi)
        c = float(cos(a) > sin(b))
        rows.append([a, b, c])
    return rows


def fake_dataset_cos_gt_sin(n_samples, train):

    data = discrete_dataset(2, 1,
                            n_samples=n_samples,
                            function=cos_gt_sin)

    if train:
        return bytesify_training(*data)
    else:
        return bytesify_prediction(*data)


def _prepare_headers(header):
    hk = []
    hv = []
    for k, v in header.items():
        hk.append(k)
        if isinstance(v, int):
            v = str(v)
        elif k == 'targetclasses':
            v = f'"{v}"'

        hv.append(v)
    return hk, hv

def bytesify_training(header, dataset, colids):
    hk, hv = _prepare_headers(header)
    out = [','.join(x) for x in (hk, hv, colids)]
    out.extend(','.join(str(x) for x in row) for row in dataset)
    return '\n'.join(out).encode('utf-8')


def bytesify_prediction(header, dataset, colids):
    # Here we return the query, then as a python list, the answers!
    hk, hv = _prepare_headers(header)
    colids = ['sampleid'] + colids
    out = [','.join(x) for x in (hk, hv, colids)]
    answers = []
    for i, row in enumerate(dataset):
        row = [f'r{i}'] + row
        answers.append(row.pop())
        out.append(','.join(str(x) for x in row))
    return ('\n'.join(out).encode('utf-8'), answers)