"""Явные гипотезы продолжения B(H), НЕ дополнительные измерения стали."""
import math
MU0=4e-7*math.pi

def variant(points,mode):
    original=[list(p) for p in points]
    if mode=='native':return original
    if mode not in ('tail-saturated','weak-linear-tail','weak-quadratic-tail'):raise ValueError('Неизвестная гипотеза B(H)')
    result=original[:]
    if mode.startswith('weak-'):
        b0,h0=original[0];power=2 if mode=='weak-quadratic-tail' else 1
        result=[[b0*k/40,h0*(k/40)**power] for k in range(40)]+result
    # B = mu0*(H+M_last), fixed M at the last supplied point.
    # The interval and sampling density are numerical controls, not steel properties.
    blast,hlast=original[-1]
    for k in range(1,81):
        b=blast+(6.0-blast)*k/80
        result.append([b,hlast+(b-blast)/MU0])
    return result

def analytic_tail_H(points,b):
    last=points[-1]
    if b<last[0]:raise ValueError('Точка не в продолжении')
    return last[1]+(b-last[0])/MU0
