# solution

MacSyFinder find lot of potential systems for the same model, all these systems are saved in “all_systems.xxx” files. This module allow to explore among of all systems which combination seems to be more probable.

## solution API reference

## Solution

class `macsypy.solution.``Solution`(systems)

  Handle Solution, a solution is a set of compatible Systems

  when compare solutions we check the following criteria

  > 1. The number of hits

  > 2. The number of systems

  > 3. The average of wholeness

  > 4. The hits position (is used ti give predictable output for unit tests)

  `__eq__`(other)

    Return self==value.

  `__gt__`(other)

    Return self>value.

  `__init__`(systems)

    Initialize self. See help(type(self)) for accurate signature.

  `__iter__`()

    Solution allow to iterate over the systems

    Returns

      generator

  `__lt__`(other)

    Return self<value.

  `__weakref__`

    list of weak references to the object (if defined)

  `_sorted_systems`(systems)

    sort the systems following the positions of th hits that composed the systems

    Parameters

      systems (list of `mcsypy.system.System` objects) – the systems to sort

    Returns

      a sorted copy of the systems

    Return type

      list of `mcsypy.system.System` objects

  property `average_wholeness`

    The average of the systems wholeness

  property `hits_number`

    The sum of the hits of each systems in this solution

  property `hits_positions`

    The list of position of all hits of the solution

  property `score`

    The score of this solution

  property `systems`

    “a sorted list of the systems that composed the solution

## combine_clusters

`macsypy.solution.``combine_clusters`(clusters, true_loners, multi_loci=False)

  generate the combinations of clusters, with loners and multi systems

  Parameters

    - clusters (list of `macsypy.cluster.Cluster` object) – the clusters to combines

    - true_loners (dict the name of the function code by hit gene_ref.alternate_of as key and 1 `macsypy.cluster.Cluster` with the best a `macsypy.hit.Loner` or `macsypy.hit.LonerMultiSystem` hit as value) – the multi-systems hits

    - multi_loci (bool) – True if the model is multi_loci false otherwise

  Returns

    all available combination of clusters

  Return type

    List of combination. a combination is a tuple of `macsypy.cluster.Cluster` objects

## combine_multisystems

`macsypy.solution.``combine_multisystems`(rejected_candidates, multi_systems)
  Parameters

    - rejected_candidates –

    - multi_systems – sequence of `macsypy.cluster.Cluster` each cluster must be composed of only one `macsypy.hit.MultiSystem` object

  Returns

    list of cluster combination with teh multisystem

  Return type

    [(`macsypy.cluster.Cluster` cluster1, cluster2, …), (`macsypy.cluster.Cluster` cluster3, cluster4, …)]

## find_best_solutions

`macsypy.solution.``find_best_solutions`(systems)

  Among the systems choose the combination of systems which does not share `macsypy.hit.CoreHit` and maximize the sum of systems scores

  Parameters

    systems (list of `macsypy.system.System` object) – the systems to analyse

  Returns

    the list of list of systems which represent one best solution and the it’s score

  Return type

    tuple of 2 elements the best solution and it’s score ([[`macsypy.system.System`, …], [`macsypy.system.System`, …]], float score) The inner list represent a best solution