# API Reference

## Symbols and Terms

### Creating Symbols and Terms
```@docs; canonical=false
SymbolicUtils.@syms
SymbolicUtils.term
```

### Metadata
```@docs
SymbolicUtils.hasmetadata
SymbolicUtils.getmetadata
SymbolicUtils.setmetadata
```

### Type Promotion
```@docs; canonical=false
SymbolicUtils.promote_symtype
```

### Array Operation Callables
```@docs
SymbolicUtils.Mapper
SymbolicUtils.Mapreducer
```

### Intermediate Representation
```@docs
SymbolicUtils.IRStructure
```

## Rewriting System

### Rule Creation
```@docs
@rule
@acrule
```

### Rewriters

Every combinator below except `FixpointNoCycle` is also public as `SymbolicUtils.X`, so
`using SymbolicUtils: Chain, Prewalk` and `using SymbolicUtils.Rewriters: Chain, Prewalk`
are both supported.

```@docs
SymbolicUtils.Rewriters
SymbolicUtils.Rewriters.Empty
SymbolicUtils.Rewriters.IfElse
SymbolicUtils.Rewriters.If
SymbolicUtils.Rewriters.Chain
SymbolicUtils.Rewriters.RestartedChain
SymbolicUtils.Rewriters.Fixpoint
SymbolicUtils.Rewriters.FixpointNoCycle
SymbolicUtils.Rewriters.Postwalk
SymbolicUtils.Rewriters.Prewalk
SymbolicUtils.Rewriters.PassThrough
```

## Simplification and Transformation

```@docs
SymbolicUtils.simplify
SymbolicUtils.expand
SymbolicUtils.substitute
```

## Polynomial Forms

```@docs
SymbolicUtils.simplify_fractions
SymbolicUtils.quick_cancel
SymbolicUtils.flatten_fractions
```

## Deprecated

These names are still exported so that existing code keeps working, but each one warns on
use and will be removed in the next breaking release. Their entries record what to write
instead.

```@docs
SymbolicUtils.istree
SymbolicUtils.RuleSet
```
