コード例 #1
0
 def test_is_valid_refente_for_bobines_fille__multiple_selected(self):
     bobine_0 = fake_bobine_fille(laize=150, color="Blanc", length=700, gr=30, poses=[1])
     bobine_1 = fake_bobine_fille(laize=150, color="Blanc", length=700, gr=30, poses=[1, 2, 4])
     bobine_2 = fake_bobine_fille(laize=150, color="Blanc", length=700, gr=30, poses=[1])
     bobine_3 = fake_bobine_fille(laize=150, color="Blanc", length=700, gr=30, poses=[1, 4])
     bobines_selected = [
         BobineFilleSelected(bobine=bobine_0, pose=1),
         BobineFilleSelected(bobine=bobine_1, pose=2),
     ]
     bobines = [bobine_2, bobine_3]
     refente = Refente(laize1=150, laize2=150, laize3=150, laize4=150)
     res = get_bobine_fille_combinaisons_for_refente(refente=refente,
                                                     bobines_fille=bobines,
                                                     bobines_fille_selected=bobines_selected)
     self.assertEqual(len(res), 0)
コード例 #2
0
 def add_bobine_selected(self, bobine, pose):
     from commun.model.bobine_fille_selected import BobineFilleSelected
     new_bobine = BobineFilleSelected(bobine, pose=pose)
     self.bobines_filles_selected.append(new_bobine)
     self.update_all_current_store()
     self.update_encrier()
     self.ON_CHANGED_SIGNAL.emit()
コード例 #3
0
 def test_is_valid_refente_for_bobines_fille__multi_the_same_pose_compatible(self):
     bobine_0 = fake_bobine_fille(laize=150, poses=[2], color="Blanc")
     bobines_selected = [BobineFilleSelected(bobine=bobine_0, pose=2)]
     bobine_1 = fake_bobine_fille(laize=150, poses=[1, 1, 4], color="Blanc")
     bobines = [bobine_1]
     refente = Refente(laize1=150, laize2=150, laize3=150, laize4=150)
     res = get_bobine_fille_combinaisons_for_refente(refente=refente,
                                                     bobines_fille=bobines,
                                                     bobines_fille_selected=bobines_selected)
     self.assertEqual(len(res), 1)
コード例 #4
0
def get_bobine_fille_combinaisons_for_refente(refente,
                                              bobines_fille,
                                              bobines_fille_selected=None,
                                              max_solutions=1):
    if bobines_fille_selected is None:
        bobines_fille_selected = []
    # Prépare une liste avec les solutions
    combinaisons = Combinaisons()
    # Convertit la refente en RefenteBuffer
    initial_refente_buffer = RefenteBuffer(refente.laizes)
    # Récupère toutes les combinaisons possible de refente après avoir appliqué
    # les bobines filles sélectionnées
    refentes = initial_refente_buffer.get_combinaisons(bobines_fille_selected)
    # Groupe les bobines qui fonctionnent entre elles
    clusters = _group_bobines_fille(bobines_fille, bobines_fille_selected)
    # Test chacun des groupes et refente
    for refente in refentes:
        if refente.is_full():
            continue
        for cluster in clusters:
            # Convertit les BobineFille du groupe en BobineFilleSelected
            bobines_poses = [
                bobine_fille_selected for bobine_fille in cluster
                for bobine_fille_selected in [
                    BobineFilleSelected(bobine_fille, pose)
                    for pose in bobine_fille.poses
                ]
            ]
            # Group les BobineFilleSelected par laize
            bobine_poses_by_laize = {}
            for bobine_pose in bobines_poses:
                laize = bobine_pose.laize
                if not bobine_poses_by_laize.get(laize):
                    bobine_poses_by_laize[laize] = []
                bobine_poses_by_laize[laize].append(bobine_pose)
            # Test si il existe une combinaison valid dans ce groupe
            res = _is_valid_refente_for_bobines_pose(refente,
                                                     bobine_poses_by_laize,
                                                     max_solutions)
            # Si on trouve des combinaisons, on les ajoute au tableau des solutions
            # et on s'arrete dès qu'on en a assez.
            if res:
                for combi in res:
                    if max_solutions is not None and len(
                            combinaisons.all()) >= max_solutions:
                        # print("Combinaisons: ", combinaisons.all(max_solutions))
                        return combinaisons.all(max_solutions)
                    combinaisons.add(combi)
    # Retourne toutes les combinaisons qu'on a trouvées
    # print("Combinaisons: ", combinaisons.all(max_solutions))
    return combinaisons.all(max_solutions)
コード例 #5
0
def rec_is_valid_refente_for_bobines_fille(refente, bobines_fille,
                                           bobines_fille_selected):
    if bobines_fille_selected:
        refente_with_bobines_fille_selected = get_new_refente_with_bobines_fille(
            refente, bobines_fille=bobines_fille_selected, full_complete=True)
    else:
        refente_with_bobines_fille_selected = refente
    for laize in refente_with_bobines_fille_selected.laizes:
        if not is_valid_laize_for_bobines_fille(laize, bobines_fille):
            return False
    if is_full_refente_with_bobines_fille_selected(
            refente=refente_with_bobines_fille_selected):
        return True
    for bobine in bobines_fille:
        bobine_fille_contrainte = bobines_fille_selected[
            0] if bobines_fille_selected else None
        if not is_valid_bobine_fille_for_bobine_fille(
                bobine_fille=bobine,
                bobine_fille_contrainte=bobine_fille_contrainte):
            continue
        for pose in bobine.poses:
            from commun.model.bobine_fille_selected import BobineFilleSelected
            bobine_fille_selected = BobineFilleSelected(bobine=bobine,
                                                        pose=pose)
            if not is_valid_bobine_fille_and_pose_for_bobines_fille(
                    bobine_fille_selected,
                    pose,
                    bobines_fille=bobines_fille_selected):
                continue
            elif not is_valid_bobine_fille_and_pose_for_refente(
                    bobine_fille=bobine_fille_selected,
                    pose=bobine_fille_selected.pose,
                    refente=refente_with_bobines_fille_selected,
                    bobines_fille_selected=bobines_fille_selected,
                    get_new_refente=False):
                continue
            else:
                if bobines_fille_selected:
                    new_bobines_fille_selected = bobines_fille_selected.copy()
                else:
                    new_bobines_fille_selected = []
                new_bobines_fille_selected.append(bobine_fille_selected)
                if rec_is_valid_refente_for_bobines_fille(
                        refente=refente_with_bobines_fille_selected,
                        bobines_fille=bobines_fille,
                        bobines_fille_selected=new_bobines_fille_selected):
                    return True
                new_bobines_fille_selected.pop()
    return False
コード例 #6
0
ファイル: utils.py プロジェクト: Audric-Dune/mondon-client
def get_bobines(code_bobines_filles):
    bobines = []
    code_bobines_filles_split = code_bobines_filles.split("_")
    index = 0
    while True:
        if code_bobines_filles_split[index]:
            bobine = bobine_fille_store.get_bobine(
                code_bobines_filles_split[index])
            bobine_selected = BobineFilleSelected(
                bobine=bobine,
                pose=int(code_bobines_filles_split[index + 1]),
                index=int(code_bobines_filles_split[index + 2]))
            bobines.append(bobine_selected)
            index += 3
        else:
            break
    return bobines
コード例 #7
0
def is_valid_bobine_fille_and_pose_for_refente_bobines_filles_selected_with_bobines_filles(
        refente,
        bobine_fille,
        pose,
        bobines_filles,
        bobines_fille_selected=None):
    """
    On suppose que la bobine fille est dans bobine filles selected
    """
    new_bobine_fille_selected = BobineFilleSelected(bobine=bobine_fille,
                                                    pose=pose)
    if bobines_fille_selected is None:
        bobines_fille_selected = []
    new_bobines_filles_selected = bobines_fille_selected + [
        new_bobine_fille_selected
    ]
    new_bobines_filles = remove_bobine_fille_and_pose_in_bobines_filles(
        bobine_fille=bobine_fille, pose=pose, bobines_filles=bobines_filles)
    return is_valid_refente_bobines_fille_bobines_fille_selected(
        refente=refente,
        bobines_fille=new_bobines_filles,
        bobines_fille_selected=new_bobines_filles_selected)
コード例 #8
0
 def test_is_valid_bobine_fille_for_bobines_fille__remove_pose_in_poses(self):
     bobine_0 = fake_bobine_fille(laize=150, poses=[2, 1])
     bobine_selected = BobineFilleSelected(bobine=bobine_0, pose=2)
     bobines = [bobine_selected]
     is_valid_bobine_fille_for_bobines_fille(bobine_fille=bobine_selected, bobines_fille=bobines)
     self.assertEqual(bobine_0.poses, [1])
コード例 #9
0
 def test_get_new_refente_with_bobines_fille__no_neutre_full_complete(self):
     bobine_0 = fake_bobine_fille(laize=150, color="Jaune", poses=[1])
     bobines_selected = [BobineFilleSelected(bobine=bobine_0, pose=1)]
     refente_0 = Refente(laize1=150, laize2=150, laize3=150, laize4=150)
     new_refente = get_new_refente_with_bobines_fille(refente_0, bobines_selected, full_complete=True)
     self.assertEqual(new_refente.laizes, [None, 150, 150, 150, None, None, None])