def METHOD_NAME(cls, cvss_base_vector: str) -> Optional[float]:
    """Calculate the cvss base score from a cvss base vector
    for cvss version 3.
    Arguments:
        cvss_base_vector (str) Cvss base vector v3.
    Return the calculated score, None on fail.
    """
    if not cvss_base_vector:
        return None
    try:
        (
            _ver,
            _av,
            _ac,
            _pr,
            _ui,
            _s,
            _c,
            _i,
            _a,
        ) = cls._parse_cvss_base_vector(cvss_base_vector)
    except ValueError:
        logger.warning('Invalid severity vector %s', cvss_base_vector)
        return None
    scope_changed = CVSS_V3_METRICS['S'].get(_s)
    isc_base = 1 - (
        (1 - CVSS_V3_METRICS['C'].get(_c))
        * (1 - CVSS_V3_METRICS['I'].get(_i))
        * (1 - CVSS_V3_METRICS['A'].get(_a))
    )
    if scope_changed:
        _priv_req = CVSS_V3_METRICS['PR_SC'].get(_pr)
    else:
        _priv_req = CVSS_V3_METRICS['PR_SU'].get(_pr)
    _exploitability = (
        8.22
        * CVSS_V3_METRICS['AV'].get(_av)
        * CVSS_V3_METRICS['AC'].get(_ac)
        * _priv_req
        * CVSS_V3_METRICS['UI'].get(_ui)
    )
    if scope_changed:
        _impact = 7.52 * (isc_base - 0.029) - 3.25 * pow(
            isc_base - 0.02, 15
        )
        _base_score = min(1.08 * (_impact + _exploitability), 10)
    else:
        _impact = 6.42 * isc_base
        _base_score = min(_impact + _exploitability, 10)
    if _impact > 0:
        return cls.roundup(_base_score)
    return 0