{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://www.calculatorx.com/schemas/math.sin.input.json",
  "title": "Sine — input",
  "type": "object",
  "properties": {
    "mode": {
      "enum": [
        "angle",
        "ratio",
        null
      ]
    },
    "theta": {
      "oneOf": [
        {
          "type": "number"
        },
        {
          "type": "string",
          "maxLength": 512,
          "pattern": "^\\s*[+-]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?\\s*$"
        }
      ],
      "x-quantity-kind": "plane_angle",
      "x-role": "scalar",
      "x-dimension": [
        0,
        0,
        0,
        0,
        0,
        0,
        0
      ],
      "x-uuce-unit-options": {
        "deg": {
          "unit_id": "cx:deg",
          "revision": "1.0.0",
          "content_digest": "ebb31e3abee53f3bf57339c87949e1018d141739fba8a07f54c42ebfd219262b",
          "dependency_digest": "eef386126ec6524884c84bab06f2a96996df913376c0ce5ccdaca0e7faf7b9c3",
          "quantity_kind": "plane_angle",
          "dimension": [
            0,
            0,
            0,
            0,
            0,
            0,
            0
          ],
          "registry_version": "0.3.0-preview.3",
          "digest_contract": "calculatorx-unit-definition-digests-v2",
          "registry_status": "preview",
          "definition_lifecycle": "candidate",
          "role": "scalar"
        },
        "rad": {
          "unit_id": "cx:rad",
          "revision": "1.0.0",
          "content_digest": "842467a958d28ac79bf34e796043449f6af24819d77b2b67f540dbabdecc8e3e",
          "dependency_digest": "9c07023393c6212aab52719f503df1bdc9456559b5c4719ff1fec47d0623e0ad",
          "quantity_kind": "plane_angle",
          "dimension": [
            0,
            0,
            0,
            0,
            0,
            0,
            0
          ],
          "registry_version": "0.3.0-preview.3",
          "digest_contract": "calculatorx-unit-definition-digests-v2",
          "registry_status": "preview",
          "definition_lifecycle": "candidate",
          "role": "scalar"
        }
      },
      "x-unit-selector": {
        "fields": [
          "unit",
          "unitInput"
        ],
        "normalized_default": "deg",
        "applicability": "Angle mode only. Preserve the existing selector aliases, normalization and conflict checks; ratio mode has no angular input."
      }
    },
    "t": {
      "oneOf": [
        {
          "type": "number"
        },
        {
          "type": "string",
          "maxLength": 512,
          "pattern": "^\\s*[+-]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?\\s*$"
        }
      ],
      "x-quantity-kind": "plane_angle",
      "x-role": "scalar",
      "x-dimension": [
        0,
        0,
        0,
        0,
        0,
        0,
        0
      ],
      "x-uuce-unit-options": {
        "deg": {
          "unit_id": "cx:deg",
          "revision": "1.0.0",
          "content_digest": "ebb31e3abee53f3bf57339c87949e1018d141739fba8a07f54c42ebfd219262b",
          "dependency_digest": "eef386126ec6524884c84bab06f2a96996df913376c0ce5ccdaca0e7faf7b9c3",
          "quantity_kind": "plane_angle",
          "dimension": [
            0,
            0,
            0,
            0,
            0,
            0,
            0
          ],
          "registry_version": "0.3.0-preview.3",
          "digest_contract": "calculatorx-unit-definition-digests-v2",
          "registry_status": "preview",
          "definition_lifecycle": "candidate",
          "role": "scalar"
        },
        "rad": {
          "unit_id": "cx:rad",
          "revision": "1.0.0",
          "content_digest": "842467a958d28ac79bf34e796043449f6af24819d77b2b67f540dbabdecc8e3e",
          "dependency_digest": "9c07023393c6212aab52719f503df1bdc9456559b5c4719ff1fec47d0623e0ad",
          "quantity_kind": "plane_angle",
          "dimension": [
            0,
            0,
            0,
            0,
            0,
            0,
            0
          ],
          "registry_version": "0.3.0-preview.3",
          "digest_contract": "calculatorx-unit-definition-digests-v2",
          "registry_status": "preview",
          "definition_lifecycle": "candidate",
          "role": "scalar"
        }
      },
      "x-unit-selector": {
        "fields": [
          "unit",
          "unitInput"
        ],
        "normalized_default": "deg",
        "applicability": "Angle mode only. Preserve the existing selector aliases, normalization and conflict checks; ratio mode has no angular input."
      }
    },
    "angle": {
      "oneOf": [
        {
          "type": "number"
        },
        {
          "type": "string",
          "maxLength": 512,
          "pattern": "^\\s*[+-]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?\\s*$"
        }
      ],
      "x-quantity-kind": "plane_angle",
      "x-role": "scalar",
      "x-dimension": [
        0,
        0,
        0,
        0,
        0,
        0,
        0
      ],
      "x-uuce-unit-options": {
        "deg": {
          "unit_id": "cx:deg",
          "revision": "1.0.0",
          "content_digest": "ebb31e3abee53f3bf57339c87949e1018d141739fba8a07f54c42ebfd219262b",
          "dependency_digest": "eef386126ec6524884c84bab06f2a96996df913376c0ce5ccdaca0e7faf7b9c3",
          "quantity_kind": "plane_angle",
          "dimension": [
            0,
            0,
            0,
            0,
            0,
            0,
            0
          ],
          "registry_version": "0.3.0-preview.3",
          "digest_contract": "calculatorx-unit-definition-digests-v2",
          "registry_status": "preview",
          "definition_lifecycle": "candidate",
          "role": "scalar"
        },
        "rad": {
          "unit_id": "cx:rad",
          "revision": "1.0.0",
          "content_digest": "842467a958d28ac79bf34e796043449f6af24819d77b2b67f540dbabdecc8e3e",
          "dependency_digest": "9c07023393c6212aab52719f503df1bdc9456559b5c4719ff1fec47d0623e0ad",
          "quantity_kind": "plane_angle",
          "dimension": [
            0,
            0,
            0,
            0,
            0,
            0,
            0
          ],
          "registry_version": "0.3.0-preview.3",
          "digest_contract": "calculatorx-unit-definition-digests-v2",
          "registry_status": "preview",
          "definition_lifecycle": "candidate",
          "role": "scalar"
        }
      },
      "x-unit-selector": {
        "fields": [
          "unit",
          "unitInput"
        ],
        "normalized_default": "deg",
        "applicability": "Angle mode only. Preserve the existing selector aliases, normalization and conflict checks; ratio mode has no angular input."
      }
    },
    "thetaInput": {
      "oneOf": [
        {
          "type": "number"
        },
        {
          "type": "string",
          "maxLength": 512,
          "pattern": "^\\s*[+-]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?\\s*$"
        }
      ],
      "x-quantity-kind": "plane_angle",
      "x-role": "scalar",
      "x-dimension": [
        0,
        0,
        0,
        0,
        0,
        0,
        0
      ],
      "x-uuce-unit-options": {
        "deg": {
          "unit_id": "cx:deg",
          "revision": "1.0.0",
          "content_digest": "ebb31e3abee53f3bf57339c87949e1018d141739fba8a07f54c42ebfd219262b",
          "dependency_digest": "eef386126ec6524884c84bab06f2a96996df913376c0ce5ccdaca0e7faf7b9c3",
          "quantity_kind": "plane_angle",
          "dimension": [
            0,
            0,
            0,
            0,
            0,
            0,
            0
          ],
          "registry_version": "0.3.0-preview.3",
          "digest_contract": "calculatorx-unit-definition-digests-v2",
          "registry_status": "preview",
          "definition_lifecycle": "candidate",
          "role": "scalar"
        },
        "rad": {
          "unit_id": "cx:rad",
          "revision": "1.0.0",
          "content_digest": "842467a958d28ac79bf34e796043449f6af24819d77b2b67f540dbabdecc8e3e",
          "dependency_digest": "9c07023393c6212aab52719f503df1bdc9456559b5c4719ff1fec47d0623e0ad",
          "quantity_kind": "plane_angle",
          "dimension": [
            0,
            0,
            0,
            0,
            0,
            0,
            0
          ],
          "registry_version": "0.3.0-preview.3",
          "digest_contract": "calculatorx-unit-definition-digests-v2",
          "registry_status": "preview",
          "definition_lifecycle": "candidate",
          "role": "scalar"
        }
      },
      "x-unit-selector": {
        "fields": [
          "unit",
          "unitInput"
        ],
        "normalized_default": "deg",
        "applicability": "Angle mode only. Preserve the existing selector aliases, normalization and conflict checks; ratio mode has no angular input."
      }
    },
    "opposite": {
      "oneOf": [
        {
          "type": "number"
        },
        {
          "type": "string",
          "maxLength": 512,
          "pattern": "^\\s*[+-]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?\\s*$"
        }
      ]
    },
    "oppInput": {
      "oneOf": [
        {
          "type": "number"
        },
        {
          "type": "string",
          "maxLength": 512,
          "pattern": "^\\s*[+-]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?\\s*$"
        }
      ]
    },
    "hypotenuse": {
      "oneOf": [
        {
          "type": "number"
        },
        {
          "type": "string",
          "maxLength": 512,
          "pattern": "^\\s*[+-]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?\\s*$"
        }
      ]
    },
    "hypInput": {
      "oneOf": [
        {
          "type": "number"
        },
        {
          "type": "string",
          "maxLength": 512,
          "pattern": "^\\s*[+-]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?\\s*$"
        }
      ]
    },
    "unit": {
      "type": [
        "string",
        "null"
      ],
      "pattern": "^\\s*(?:[dD][eE][gG](?:[rR][eE][eE][sS]?)?|[rR][aA][dD](?:[iI][aA][nN][sS]?)?|°)?\\s*$"
    },
    "unitInput": {
      "type": [
        "string",
        "null"
      ],
      "pattern": "^\\s*(?:[dD][eE][gG](?:[rR][eE][eE][sS]?)?|[rR][aA][dD](?:[iI][aA][nN][sS]?)?|°)?\\s*$"
    }
  },
  "oneOf": [
    {
      "properties": {
        "mode": {
          "const": "ratio"
        }
      },
      "required": [
        "mode"
      ],
      "allOf": [
        {
          "anyOf": [
            {
              "required": [
                "opposite"
              ]
            },
            {
              "required": [
                "oppInput"
              ]
            }
          ]
        },
        {
          "anyOf": [
            {
              "required": [
                "hypotenuse"
              ]
            },
            {
              "required": [
                "hypInput"
              ]
            }
          ]
        }
      ],
      "not": {
        "anyOf": [
          {
            "required": [
              "theta"
            ]
          },
          {
            "required": [
              "t"
            ]
          },
          {
            "required": [
              "angle"
            ]
          },
          {
            "required": [
              "thetaInput"
            ]
          },
          {
            "required": [
              "unit"
            ]
          },
          {
            "required": [
              "unitInput"
            ]
          }
        ]
      }
    },
    {
      "properties": {
        "mode": {
          "enum": [
            "angle",
            null
          ]
        }
      },
      "anyOf": [
        {
          "required": [
            "theta"
          ]
        },
        {
          "required": [
            "t"
          ]
        },
        {
          "required": [
            "angle"
          ]
        },
        {
          "required": [
            "thetaInput"
          ]
        }
      ],
      "not": {
        "anyOf": [
          {
            "required": [
              "opposite"
            ]
          },
          {
            "required": [
              "oppInput"
            ]
          },
          {
            "required": [
              "hypotenuse"
            ]
          },
          {
            "required": [
              "hypInput"
            ]
          }
        ]
      }
    }
  ],
  "additionalProperties": false,
  "description": "sin(θ) in degrees (default) or radians, with algebraic snap for textbook angles. (calculation_version 1.1.0)",
  "x-unit-contract": {
    "protocol": "calculatorx-field-unit-contract-v1",
    "capability_id": "math.sin",
    "registry_version": "0.3.0-preview.3",
    "declaration_scope": "Field/branch declarations only; inactive fields are not asserted to exist. No conversion-engine migration or new numerical certification.",
    "path_format": "Paths relative to inputs or result_detail.value; dot separates properties, * denotes array items, $ denotes a scalar result.",
    "inputs": {
      "theta": {
        "quantity_kind": "plane_angle",
        "role": "scalar",
        "dimension": [
          0,
          0,
          0,
          0,
          0,
          0,
          0
        ],
        "selector_fields": [
          "unit",
          "unitInput"
        ],
        "normalized_default": "deg",
        "options": {
          "deg": {
            "unit_id": "cx:deg",
            "revision": "1.0.0",
            "content_digest": "ebb31e3abee53f3bf57339c87949e1018d141739fba8a07f54c42ebfd219262b",
            "dependency_digest": "eef386126ec6524884c84bab06f2a96996df913376c0ce5ccdaca0e7faf7b9c3",
            "quantity_kind": "plane_angle",
            "dimension": [
              0,
              0,
              0,
              0,
              0,
              0,
              0
            ],
            "registry_version": "0.3.0-preview.3",
            "digest_contract": "calculatorx-unit-definition-digests-v2",
            "registry_status": "preview",
            "definition_lifecycle": "candidate",
            "role": "scalar"
          },
          "rad": {
            "unit_id": "cx:rad",
            "revision": "1.0.0",
            "content_digest": "842467a958d28ac79bf34e796043449f6af24819d77b2b67f540dbabdecc8e3e",
            "dependency_digest": "9c07023393c6212aab52719f503df1bdc9456559b5c4719ff1fec47d0623e0ad",
            "quantity_kind": "plane_angle",
            "dimension": [
              0,
              0,
              0,
              0,
              0,
              0,
              0
            ],
            "registry_version": "0.3.0-preview.3",
            "digest_contract": "calculatorx-unit-definition-digests-v2",
            "registry_status": "preview",
            "definition_lifecycle": "candidate",
            "role": "scalar"
          }
        },
        "applicability": "Angle mode only. Preserve the existing selector aliases, normalization and conflict checks; ratio mode has no angular input."
      },
      "thetaInput": {
        "quantity_kind": "plane_angle",
        "role": "scalar",
        "dimension": [
          0,
          0,
          0,
          0,
          0,
          0,
          0
        ],
        "selector_fields": [
          "unit",
          "unitInput"
        ],
        "normalized_default": "deg",
        "options": {
          "deg": {
            "unit_id": "cx:deg",
            "revision": "1.0.0",
            "content_digest": "ebb31e3abee53f3bf57339c87949e1018d141739fba8a07f54c42ebfd219262b",
            "dependency_digest": "eef386126ec6524884c84bab06f2a96996df913376c0ce5ccdaca0e7faf7b9c3",
            "quantity_kind": "plane_angle",
            "dimension": [
              0,
              0,
              0,
              0,
              0,
              0,
              0
            ],
            "registry_version": "0.3.0-preview.3",
            "digest_contract": "calculatorx-unit-definition-digests-v2",
            "registry_status": "preview",
            "definition_lifecycle": "candidate",
            "role": "scalar"
          },
          "rad": {
            "unit_id": "cx:rad",
            "revision": "1.0.0",
            "content_digest": "842467a958d28ac79bf34e796043449f6af24819d77b2b67f540dbabdecc8e3e",
            "dependency_digest": "9c07023393c6212aab52719f503df1bdc9456559b5c4719ff1fec47d0623e0ad",
            "quantity_kind": "plane_angle",
            "dimension": [
              0,
              0,
              0,
              0,
              0,
              0,
              0
            ],
            "registry_version": "0.3.0-preview.3",
            "digest_contract": "calculatorx-unit-definition-digests-v2",
            "registry_status": "preview",
            "definition_lifecycle": "candidate",
            "role": "scalar"
          }
        },
        "applicability": "Angle mode only. Preserve the existing selector aliases, normalization and conflict checks; ratio mode has no angular input."
      },
      "t": {
        "quantity_kind": "plane_angle",
        "role": "scalar",
        "dimension": [
          0,
          0,
          0,
          0,
          0,
          0,
          0
        ],
        "selector_fields": [
          "unit",
          "unitInput"
        ],
        "normalized_default": "deg",
        "options": {
          "deg": {
            "unit_id": "cx:deg",
            "revision": "1.0.0",
            "content_digest": "ebb31e3abee53f3bf57339c87949e1018d141739fba8a07f54c42ebfd219262b",
            "dependency_digest": "eef386126ec6524884c84bab06f2a96996df913376c0ce5ccdaca0e7faf7b9c3",
            "quantity_kind": "plane_angle",
            "dimension": [
              0,
              0,
              0,
              0,
              0,
              0,
              0
            ],
            "registry_version": "0.3.0-preview.3",
            "digest_contract": "calculatorx-unit-definition-digests-v2",
            "registry_status": "preview",
            "definition_lifecycle": "candidate",
            "role": "scalar"
          },
          "rad": {
            "unit_id": "cx:rad",
            "revision": "1.0.0",
            "content_digest": "842467a958d28ac79bf34e796043449f6af24819d77b2b67f540dbabdecc8e3e",
            "dependency_digest": "9c07023393c6212aab52719f503df1bdc9456559b5c4719ff1fec47d0623e0ad",
            "quantity_kind": "plane_angle",
            "dimension": [
              0,
              0,
              0,
              0,
              0,
              0,
              0
            ],
            "registry_version": "0.3.0-preview.3",
            "digest_contract": "calculatorx-unit-definition-digests-v2",
            "registry_status": "preview",
            "definition_lifecycle": "candidate",
            "role": "scalar"
          }
        },
        "applicability": "Angle mode only. Preserve the existing selector aliases, normalization and conflict checks; ratio mode has no angular input."
      },
      "angle": {
        "quantity_kind": "plane_angle",
        "role": "scalar",
        "dimension": [
          0,
          0,
          0,
          0,
          0,
          0,
          0
        ],
        "selector_fields": [
          "unit",
          "unitInput"
        ],
        "normalized_default": "deg",
        "options": {
          "deg": {
            "unit_id": "cx:deg",
            "revision": "1.0.0",
            "content_digest": "ebb31e3abee53f3bf57339c87949e1018d141739fba8a07f54c42ebfd219262b",
            "dependency_digest": "eef386126ec6524884c84bab06f2a96996df913376c0ce5ccdaca0e7faf7b9c3",
            "quantity_kind": "plane_angle",
            "dimension": [
              0,
              0,
              0,
              0,
              0,
              0,
              0
            ],
            "registry_version": "0.3.0-preview.3",
            "digest_contract": "calculatorx-unit-definition-digests-v2",
            "registry_status": "preview",
            "definition_lifecycle": "candidate",
            "role": "scalar"
          },
          "rad": {
            "unit_id": "cx:rad",
            "revision": "1.0.0",
            "content_digest": "842467a958d28ac79bf34e796043449f6af24819d77b2b67f540dbabdecc8e3e",
            "dependency_digest": "9c07023393c6212aab52719f503df1bdc9456559b5c4719ff1fec47d0623e0ad",
            "quantity_kind": "plane_angle",
            "dimension": [
              0,
              0,
              0,
              0,
              0,
              0,
              0
            ],
            "registry_version": "0.3.0-preview.3",
            "digest_contract": "calculatorx-unit-definition-digests-v2",
            "registry_status": "preview",
            "definition_lifecycle": "candidate",
            "role": "scalar"
          }
        },
        "applicability": "Angle mode only. Preserve the existing selector aliases, normalization and conflict checks; ratio mode has no angular input."
      }
    },
    "outputs": {
      "$": {
        "unit": "1",
        "reference": {
          "unit_id": "cx:one",
          "revision": "1.0.0",
          "content_digest": "98cc3ffc58d8733c483b60c4d7e238fe8ad43a6aadcced9496b74f33a01ef599",
          "dependency_digest": "b1c9aa4d586949ee881925298442091ba11dda29f57de0867e43da1cd59e06e5",
          "quantity_kind": "ratio",
          "dimension": [
            0,
            0,
            0,
            0,
            0,
            0,
            0
          ],
          "registry_version": "0.3.0-preview.3",
          "digest_contract": "calculatorx-unit-definition-digests-v2",
          "registry_status": "preview",
          "definition_lifecycle": "candidate",
          "role": "scalar"
        }
      }
    }
  }
}
