<commit_before><?php

/**
 * Model for Configuration
 *
 */
class Configuration extends BaseConfiguration {

    const DEFAULT_KEY = 'DEFAUT';
    const DEFAULT_DENSITE = "1.3";

    protected $identifyLibelleProduct = array();
    protected $identifyCodeDouaneProduct = array();

    public function constructId() {
        $this->set('_id', "CONFIGURATION");
    }

    public function getLabels($interpro = null) {

        return $this->_get('labels');
    }

    public function getProduit($hash) {

        return $this->get($hash);
    }

    public function getProduits() {

        return $this->declaration->getProduits();
    }

    public function formatProduits($date = null, $format = "%format_libelle% (%code_produit%)", $attributes = array()) {

        return $this->declaration->formatProduits($date, null, null, $format, $attributes);
    }

    public function getCepagesAutorises($date = null, $attributes = array()) {
    	$cepages = array();
    	foreach($this->declaration->getProduits($date, "INTERPRO-declaration", null, $attributes) as $produit) {
    		$cepages_autorises = $produit->cepages_autorises->toArray();
    		foreach ($cepages_autorises as $ca) {
    			$cepages[$ca] = $ca;
    		}
    	}
    	return $cepages;
    }

    public function identifyProductByLibelle($libelle) {
        if(!$libelle) {
            return;
        }
        if(array_key_exists($libelle, $this->identifyLibelleProduct)) {

            return $this->identifyLibelleProduct[$libelle];
        }
        $libelleEndWithDot = (substr($libelle, -1) === ".");
        $libelleSlugify = KeyInflector::slugify(preg_replace("/[ ]+/", " ", trim($libelle)));
        $possibilities = array();
        foreach($this->getProduits() as $produit) {
            $libelleProduitSlugify = KeyInflector::slugify(preg_replace("/[ ]+/", " ", trim($produit->getLibelleFormat())));
            //echo $libelleSlugify."/".$libelleProduitSlugify."\n";
            if($libelleSlugify == $libelleProduitSlugify) {
                $this->identifyLibelleProduct[$libelle] = $produit;

                return $produit;
            }
            if($libelleSlugify && preg_match("|^".$libelleSlugify."|", $libelleProduitSlugify)) {
                $possibilities[] = $produit;
            }
            if($libelleEndWithDot && preg_match("|^".$libelleSlugify."*|", $libelleProduitSlugify)){

                return $produit;
            }
        }

        if(count($possibilities) == 1) {

            return $possibilities[0];
        }

        return false;<commit_msg>pouvoir exclure des produits via leur hash dans la reconnaissance par libelle<commit_after><?php

/**
 * Model for Configuration
 *
 */
class Configuration extends BaseConfiguration {

    const DEFAULT_KEY = 'DEFAUT';
    const DEFAULT_DENSITE = "1.3";

    protected $identifyLibelleProduct = array();
    protected $identifyCodeDouaneProduct = array();

    public function constructId() {
        $this->set('_id', "CONFIGURATION");
    }

    public function getLabels($interpro = null) {

        return $this->_get('labels');
    }

    public function getProduit($hash) {

        return $this->get($hash);
    }

    public function getProduits() {

        return $this->declaration->getProduits();
    }

    public function formatProduits($date = null, $format = "%format_libelle% (%code_produit%)", $attributes = array()) {

        return $this->declaration->formatProduits($date, null, null, $format, $attributes);
    }

    public function getCepagesAutorises($date = null, $attributes = array()) {
    	$cepages = array();
    	foreach($this->declaration->getProduits($date, "INTERPRO-declaration", null, $attributes) as $produit) {
    		$cepages_autorises = $produit->cepages_autorises->toArray();
    		foreach ($cepages_autorises as $ca) {
    			$cepages[$ca] = $ca;
    		}
    	}
    	return $cepages;
    }

    public function identifyProductByLibelle($libelle, $exceptions = array()) {
        if(!$libelle) {
            return;
        }
        if(!$exceptions && array_key_exists($libelle, $this->identifyLibelleProduct)) {

            return $this->identifyLibelleProduct[$libelle];
        }
        $libelleEndWithDot = (substr($libelle, -1) === ".");
        $libelleSlugify = KeyInflector::slugify(preg_replace("/[ ]+/", " ", trim($libelle)));
        $possibilities = array();
        foreach($this->getProduits() as $produit) {
            if (in_array($produit->getHash(), $exceptions)) {
              continue;
            }
            $libelleProduitSlugify = KeyInflector::slugify(preg_replace("/[ ]+/", " ", trim($produit->getLibelleFormat())));
            //echo $libelleSlugify."/".$libelleProduitSlugify."\n";
            if($libelleSlugify == $libelleProduitSlugify) {
                $this->identifyLibelleProduct[$libelle] = $produit;

                return $produit;
            }
            if($libelleSlugify && preg_match("|^".$libelleSlugify."|", $libelleProduitSlugify)) {
                $possibilities[] = $produit;
            }
            if($libelleEndWithDot && preg_match("|^".$libelleSlugify."*|", $libelleProduitSlugify)){

                return $produit;
            }
        }

        if(count($possibilities) == 1) {

            return $possibilities[0];
        }

        return false;
{'fraction_non_alphanumeric': 0.15106023644210922, 'fraction_numerical': 0.0018765246762994933, 'mean_word_length': 2.6607142857142856, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 36, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4049170', 'n_tokens_mistral': 1650, 'n_tokens_neox': 1635, 'n_words': 271}