## distributions.CombinationDistribution


Combination distribution implementation.


Usage

``` python
distributions.CombinationDistribution(
    *args,
    dists=None,
)
```


A distribution that combines (sums) samples from multiple underlying distributions. Useful for modeling compound effects or building complex distributions from simpler ones.

This class conforms to the Distribution protocol and provides methods to sample a combination of values from multiple distributions.


## Methods

| Name | Description |
|----|----|
| [__init__()](#__init__) | Initialise a combination distribution. |
| [sample()](#sample) | Generate random samples from the combination distribution. |

------------------------------------------------------------------------


#### \_\_init\_\_()


Initialise a combination distribution.


Usage

``` python
__init__(*args, dists=None)
```


Distributions can be passed either as positional arguments or via the `dists` keyword argument, but not both. The keyword form is required when creating instances through the [DistributionRegistry](time_dependent.DistributionRegistry.md#sim_tools.time_dependent.DistributionRegistry) class, which passes parameters by name.


##### Parameters


`*args: Distribution`  
Distribution objects to combine, passed as positional arguments. E.g. `CombinationDistribution(d1, d2)`. Cannot be used together with `dists`.

`dists: Sequence[Distribution] = None`  
Distribution objects to combine, passed as a keyword argument. E.g. `CombinationDistribution(dists=[d1, d2])`. Cannot be used together with `*args`.


------------------------------------------------------------------------


#### sample()


Generate random samples from the combination distribution.


Usage

``` python
sample(size=None)
```


For each sample drawn, the result is the sum of samples from each of the underlying distributions.


##### Parameters


`size: Optional[Union[int, Tuple[int, …]]] = None`  
The number/shape of samples to generate:

- If None: returns a single combined sample as a float
- If int: returns a 1-D array with that many combined samples
- If tuple of ints: returns an array with that shape of combined samples


##### Returns


`Union[float, NDArray[np.float64]]`  
Random samples from the combination distribution:

- A single float (sum of component samples) when size is None
- A numpy array of combined samples with shape determined by size parameter
