     func convertLinearFromXYZ(_ color: XYZColorModel) -> Model
 }
 
-extension GammaColorSpaceProtocol {
+extension ToneResponseColorSpaceProtocol {
     
     @_inlineable
     public func convertToXYZ(_ color: Model) -> XYZColorModel {

    }
}

extension GammaColorSpaceProtocol {
    
    @_versioned
    @_inlineable
    func exteneded(_ x: Double, _ gamma: (Double) -> Double) -> Double {
        return x.sign == .plus ? gamma(x) : -gamma(-x)
    }
}


                return RGBColorModel(red: exteneded(color.red, toGamma), green: exteneded(color.green, toGamma), blue: exteneded(color.blue, toGamma))
            }
        }
        
        return sRGB()
    }
}

extension CalibratedRGBColorSpace {
    
    public static var displayP3: CalibratedRGBColorSpace {
        
        class displayP3: CalibratedRGBColorSpace {
            
            init() {
                super.init(white: XYZColorModel(luminance: 1, x: 0.3127, y: 0.3290), black: XYZColorModel(luminance: 0, x: 0.3127, y: 0.3290), red: Point(x: 0.6800, y: 0.3200), green: Point(x: 0.2650, y: 0.6900), blue: Point(x: 0.1500, y: 0.0600))
            }
            
            override func convertToLinear(_ color: RGBColorModel) -> RGBColorModel {
                
                func toLinear(_ x: Double) -> Double {
                    if x > 0.04045 {
                        return pow((x + 0.055) / 1.055, 2.4)
                    }
                    return x / 12.92
                }
                return RGBColorModel(red: exteneded(color.red, toLinear), green: exteneded(color.green, toLinear), blue: exteneded(color.blue, toLinear))
            }
            
            override func convertFromLinear(_ color: RGBColorModel) -> RGBColorModel {
                
                func toGamma(_ x: Double) -> Double {
                    if x > 0.0031308 {
                        return 1.055 * pow(x, 1 / 2.4) - 0.055
                    }
                    return 12.92 * x
                }
                return RGBColorModel(red: exteneded(color.red, toGamma), green: exteneded(color.green, toGamma), blue: exteneded(color.blue, toGamma))
            }
        }
        
        return displayP3()
    }
}

public class CalibratedGrayColorSpace : ToneResponseColorSpaceProtocol {
    
    public typealias Model = GrayColorModel
    
