当前位置: 首页>>代码示例>>Java>>正文


Java TSProcessor.readFileColumn方法代码示例

本文整理汇总了Java中net.seninp.jmotif.sax.TSProcessor.readFileColumn方法的典型用法代码示例。如果您正苦于以下问题:Java TSProcessor.readFileColumn方法的具体用法?Java TSProcessor.readFileColumn怎么用?Java TSProcessor.readFileColumn使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在net.seninp.jmotif.sax.TSProcessor的用法示例。


在下文中一共展示了TSProcessor.readFileColumn方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。

示例1: testProperIndexing

import net.seninp.jmotif.sax.TSProcessor; //导入方法依赖的package包/类
/**
 * Test the simple SAX conversion.
 * 
 * @throws Exception if error occurs.
 */
@Test
public void testProperIndexing() throws Exception {
  double[] ts1 = TSProcessor.readFileColumn(filenameTEK14, 0, 0);
  NormalAlphabet na = new NormalAlphabet();
  SAXProcessor sp = new SAXProcessor();
  SAXRecords res = sp.ts2saxViaWindow(ts1, 400, 6, na.getCuts(3),
      NumerosityReductionStrategy.EXACT, 0.01);
  String str = res.getSAXString(" ");
  res.buildIndex();
  String str1 = "";
  for (int i = 11; i < 47; i++) {
    SAXRecord r = res.getByIndex(res.mapStringIndexToTSPosition(i));
    str1 = str1.concat(String.valueOf(r.getPayload()) + " ");
  }
  assertTrue("Asserting substring existence", str.indexOf(str1) > 0);
  assertEquals("Asserting substring the index", 11 * 6 + 11 * 1, str.indexOf(str1));
}
 
开发者ID:jMotif,项目名称:SAX,代码行数:23,代码来源:TestSAXRecords.java

示例2: main

import net.seninp.jmotif.sax.TSProcessor; //导入方法依赖的package包/类
public static void main(String[] args) throws IOException, SAXException {

    SAXProcessor sp = new SAXProcessor();

    for (String fname : filenames) {
      String inFname = pathPrefix + fname;
      String outFname = inFname + ".shingled.txt";

      double[] series = TSProcessor.readFileColumn(inFname, 0, 0);
      System.err.println("read " + inFname + ", " + series.length + " points ...");

      Map<String, Integer> shingledData = sp.ts2Shingles(series, WIN_SIZE, PAA_SIZE, A_SIZE,
          NumerosityReductionStrategy.NONE, 0.001, LEVEL);

      StringBuilder shingles = new StringBuilder(
          BitmapParameters.SHINGLE_SIZE * (shingledData.size() + 2));
      StringBuilder freqs = new StringBuilder(
          BitmapParameters.SHINGLE_SIZE * (shingledData.size() + 2));
      TreeSet<String> keys = new TreeSet<String>(shingledData.keySet());
      for (String shingle : keys) {
        shingles.append(QUOTE).append(shingle).append(QUOTE).append(COMMA);
        freqs.append(shingledData.get(shingle)).append(COMMA);
      }

      BufferedWriter bw = new BufferedWriter(new FileWriter(new File(outFname)));
      bw.write(shingles.delete(shingles.length() - 1, shingles.length()).toString());
      bw.write(CR);
      bw.write(freqs.delete(freqs.length() - 1, freqs.length()).toString());
      bw.write(CR);
      bw.close();

    }

  }
 
开发者ID:jMotif,项目名称:SAX,代码行数:35,代码来源:KalpakisConverter.java

示例3: testParallelSAXNONE

import net.seninp.jmotif.sax.TSProcessor; //导入方法依赖的package包/类
/**
 * Test parallel SAX conversion.
 *
 * @throws Exception if error occurs.
 */
@Test
public void testParallelSAXNONE() throws Exception {

  SAXProcessor sp = new SAXProcessor();
  NormalAlphabet na = new NormalAlphabet();

  double[] ts = TSProcessor.readFileColumn(TEST_DATA, 0, 0);

  // test EXACT
  //
  SAXRecords sequentialRes = sp.ts2saxViaWindow(ts, WINDOW_SIZE, PAA_SIZE,
      na.getCuts(ALPHABET_SIZE), NumerosityReductionStrategy.NONE, NORM_THRESHOLD);
  String sequentialString = sequentialRes.getSAXString(" ");

  ParallelSAXImplementation ps1 = new ParallelSAXImplementation();

  for (int threadsNum : THREADS_NUM) {
    SAXRecords parallelRes = ps1.process(ts, threadsNum, WINDOW_SIZE, PAA_SIZE, ALPHABET_SIZE,
        NumerosityReductionStrategy.NONE, NORM_THRESHOLD);
    String parallelStr = parallelRes.getSAXString(" ");

    if (sequentialString.equalsIgnoreCase(parallelStr)) {
      assertTrue("assert correctness", sequentialString.equalsIgnoreCase(parallelStr));
    }
    else {
      String[] arr1 = sequentialString.split(" ");
      String[] arr2 = parallelStr.split(" ");
      for (int i = 0; i < Math.min(arr1.length, arr2.length); i++) {
        if (!arr1[i].equalsIgnoreCase(arr2[i])) {
          System.out.println("Error in index " + i + ", string " + arr1[i] + " versus " + arr2[i]
              + ", threads: " + threadsNum);
          assertTrue("assert correctness", arr1[i].equalsIgnoreCase(arr2[i]));
        }
      }
    }
  }
}
 
开发者ID:jMotif,项目名称:SAX,代码行数:43,代码来源:TestParallelSAXImplementation.java

示例4: testParallelSAXExact

import net.seninp.jmotif.sax.TSProcessor; //导入方法依赖的package包/类
/**
 * Test parallel SAX conversion.
 *
 * @throws Exception if error occurs.
 */
@Test
public void testParallelSAXExact() throws Exception {

  SAXProcessor sp = new SAXProcessor();
  NormalAlphabet na = new NormalAlphabet();

  double[] ts = TSProcessor.readFileColumn(TEST_DATA, 0, 0);

  // test EXACT
  //
  SAXRecords sequentialRes = sp.ts2saxViaWindow(ts, WINDOW_SIZE, PAA_SIZE,
      na.getCuts(ALPHABET_SIZE), NumerosityReductionStrategy.EXACT, NORM_THRESHOLD);
  String sequentialString = sequentialRes.getSAXString(" ");

  ParallelSAXImplementation ps1 = new ParallelSAXImplementation();

  for (int threadsNum : THREADS_NUM) {
    SAXRecords parallelRes = ps1.process(ts, threadsNum, WINDOW_SIZE, PAA_SIZE, ALPHABET_SIZE,
        NumerosityReductionStrategy.EXACT, NORM_THRESHOLD);
    String parallelStr = parallelRes.getSAXString(" ");

    if (sequentialString.equalsIgnoreCase(parallelStr)) {
      assertTrue("assert correctness", sequentialString.equalsIgnoreCase(parallelStr));
    }
    else {
      String[] arr1 = sequentialString.split(" ");
      String[] arr2 = parallelStr.split(" ");
      for (int i = 0; i < Math.min(arr1.length, arr2.length); i++) {
        if (!arr1[i].equalsIgnoreCase(arr2[i])) {
          System.out.println("Error in index " + i + ", string " + arr1[i] + " versus " + arr2[i]
              + ", threads: " + threadsNum);
          assertTrue("assert correctness", arr1[i].equalsIgnoreCase(arr2[i]));
        }
      }
    }
  }
}
 
开发者ID:jMotif,项目名称:SAX,代码行数:43,代码来源:TestParallelSAXImplementation.java

示例5: testParallelSAXMINDIST

import net.seninp.jmotif.sax.TSProcessor; //导入方法依赖的package包/类
/**
 * Test parallel SAX conversion.
 * 
 * @throws Exception if error occurs.
 */
@Test
public void testParallelSAXMINDIST() throws Exception {

  SAXProcessor sp = new SAXProcessor();
  NormalAlphabet na = new NormalAlphabet();

  double[] ts = TSProcessor.readFileColumn(TEST_DATA, 0, 0);

  // test EXACT
  //
  SAXRecords sequentialRes = sp.ts2saxViaWindow(ts, WINDOW_SIZE, PAA_SIZE,
      na.getCuts(ALPHABET_SIZE), NumerosityReductionStrategy.MINDIST, NORM_THRESHOLD);
  String sequentialString = sequentialRes.getSAXString(" ");

  ParallelSAXImplementation ps1 = new ParallelSAXImplementation();

  for (int threadsNum : THREADS_NUM) {
    SAXRecords parallelRes = ps1.process(ts, threadsNum, WINDOW_SIZE, PAA_SIZE, ALPHABET_SIZE,
        NumerosityReductionStrategy.MINDIST, NORM_THRESHOLD);
    String parallelStr = parallelRes.getSAXString(" ");

    if (sequentialString.equalsIgnoreCase(parallelStr)) {
      assertTrue("assert correctness", sequentialString.equalsIgnoreCase(parallelStr));
    }
    else {
      String[] arr1 = sequentialString.split(" ");
      String[] arr2 = parallelStr.split(" ");
      for (int i = 0; i < Math.min(arr1.length, arr2.length); i++) {
        if (!arr1[i].equalsIgnoreCase(arr2[i])) {
          System.out.println("Error in index " + i + ", string " + arr1[i] + " versus " + arr2[i]
              + ", threads: " + threadsNum);
          assertTrue("assert correctness", arr1[i].equalsIgnoreCase(arr2[i]));
        }
      }
    }

  }
}
 
开发者ID:jMotif,项目名称:SAX,代码行数:44,代码来源:TestParallelSAXImplementation.java

示例6: testParallelSAXrollbac

import net.seninp.jmotif.sax.TSProcessor; //导入方法依赖的package包/类
/**
 * Test parallel SAX conversion.
 * 
 * @throws Exception if error occurs.
 */
@Test
public void testParallelSAXrollbac() throws Exception {

  SAXProcessor sp = new SAXProcessor();
  NormalAlphabet na = new NormalAlphabet();

  int threadsNum = 10;
  int slidingWindowSize = 300; // so itll be eneven...

  double[] ts = TSProcessor.readFileColumn(TEST_DATA, 0, 0);

  // test MINDIST
  //
  SAXRecords sequentialResMINDIST = sp.ts2saxViaWindow(ts, slidingWindowSize, PAA_SIZE,
      na.getCuts(ALPHABET_SIZE), NumerosityReductionStrategy.EXACT, NORM_THRESHOLD);
  String sequentialStringMINDIST = sequentialResMINDIST.getSAXString(" ");

  ParallelSAXImplementation ps1 = new ParallelSAXImplementation();
  SAXRecords parallelRes = ps1.process(ts, threadsNum, slidingWindowSize, PAA_SIZE, ALPHABET_SIZE,
      NumerosityReductionStrategy.EXACT, NORM_THRESHOLD);
  String parallelStr = parallelRes.getSAXString(" ");

  if (sequentialStringMINDIST.equalsIgnoreCase(parallelStr)) {
    assertTrue("assert correctness", sequentialStringMINDIST.equalsIgnoreCase(parallelStr));
  }
  else {
    String[] arr1 = sequentialStringMINDIST.split(" ");
    String[] arr2 = parallelStr.split(" ");
    for (int i = 0; i < Math.min(arr1.length, arr2.length); i++) {
      if (!arr1[i].equalsIgnoreCase(arr2[i])) {
        System.out.println("Error in index " + i + ", string " + arr1[i] + " versus " + arr2[i]
            + ", threads: " + threadsNum);
        assertTrue("assert correctness", arr1[i].equalsIgnoreCase(arr2[i]));
      }
    }
  }

}
 
开发者ID:jMotif,项目名称:SAX,代码行数:44,代码来源:TestParallelSAXImplementation.java

示例7: setUp

import net.seninp.jmotif.sax.TSProcessor; //导入方法依赖的package包/类
@Before
public void setUp() throws Exception {
  double[] series = TSProcessor.readFileColumn(TEST_DATA_FNAME, 0, 0);
  SAXProcessor sp = new SAXProcessor();
  saxData = sp.ts2saxViaWindow(series, WIN_SIZE, PAA_SIZE, na.getCuts(ALPHABET_SIZE), NR_STRATEGY,
      NORM_THRESHOLD);
}
 
开发者ID:jMotif,项目名称:SAX,代码行数:8,代码来源:TestPseudoMotifDiscovery.java

示例8: main

import net.seninp.jmotif.sax.TSProcessor; //导入方法依赖的package包/类
public static void main(String[] args) throws IOException, SAXException {

    double[] ts = TSProcessor.readFileColumn(INPUT_FNAME, 0, 0);

    double[] cuts = na.getCuts(SAX_A_SIZE);

    BufferedWriter bw = new BufferedWriter(new FileWriter(new File("test_sax.txt")));

    // scan across the time series extract sub sequences, and convert them to strings
    char[] previousString = null;

    for (int i = 0; i <= ts.length - SAX_WIN_SIZE; i++) {

      StringBuffer sb = new StringBuffer();
      sb.append(i).append(TAB);

      // fix the current subsection
      double[] subSection = Arrays.copyOfRange(ts, i, i + SAX_WIN_SIZE);
      sb.append(Arrays.toString(subSection).replaceAll("\\s+", "")).append(TAB);

      // Z normalize it
      subSection = tsProcessor.znorm(subSection, SAX_NORM_THRESHOLD);

      // perform PAA conversion if needed
      double[] paa = tsProcessor.paa(subSection, SAX_PAA_SIZE);
      sb.append(Arrays.toString(paa).replaceAll("\\s+", "")).append(TAB);

      // Convert the PAA to a string.
      char[] currentString = tsProcessor.ts2String(paa, cuts);
      sb.append("\"").append(currentString).append("\"").append(TAB);

      if (null != previousString) {

        if (NumerosityReductionStrategy.EXACT.equals(NR_STRATEGY)
            && Arrays.equals(previousString, currentString)) {
          // NumerosityReduction
          sb.append("skipped").append(CR);
          bw.write(sb.toString());
          continue;
        }
        else if (NumerosityReductionStrategy.MINDIST.equals(NR_STRATEGY)
            && sp.checkMinDistIsZero(previousString, currentString)) {
          continue;
        }

      }

      previousString = currentString;
      sb.append("kept").append(CR);
      bw.write(sb.toString());

    }

    bw.close();

  }
 
开发者ID:jMotif,项目名称:SAX,代码行数:57,代码来源:PrintSAXProcess.java

示例9: main

import net.seninp.jmotif.sax.TSProcessor; //导入方法依赖的package包/类
public static void main(String[] args) throws Exception {

    SAXProcessor sp = new SAXProcessor();

    // data
    //
    double[] dat = TSProcessor.readFileColumn(DAT_FNAME, 1, 0);
    // TSProcessor tp = new TSProcessor();
    // double[] dat = tp.readTS("src/resources/dataset/asys40.txt", 0);
    // double[] dat = TSProcessor.readFileColumn(filename, columnIdx,
    // sizeLimit)FileColumn(DAT_FNAME, 1, 0);
    LOGGER.info("read {} points from {}", dat.length, DAT_FNAME);

    String str = "win_width: " + cPoint + "; SAX: W " + SAX_WINDOW_SIZE + ", P " + SAX_PAA_SIZE
        + ", A " + SAX_ALPHABET_SIZE + ", STR " + SAX_NR_STRATEGY.toString();

    int frameCounter = 0;
    int startOffset = cPoint;
    while (cPoint < dat.length - startOffset - 1) {

      if (0 == cPoint % 2) {

        BufferedImage tsChart = getChart(dat, cPoint);

        // bitmap 1
        //
        double[] win1 = Arrays.copyOfRange(dat, cPoint - startOffset, cPoint);
        Map<String, Integer> shingledData1 = sp.ts2Shingles(win1, SAX_WINDOW_SIZE, SAX_PAA_SIZE,
            SAX_ALPHABET_SIZE, SAX_NR_STRATEGY, SAX_NORM_THRESHOLD, SHINGLE_SIZE);
        BufferedImage pam1 = getHeatMap(shingledData1, "pre-window");

        double[] win2 = Arrays.copyOfRange(dat, cPoint, cPoint + startOffset);
        Map<String, Integer> shingledData2 = sp.ts2Shingles(win2, SAX_WINDOW_SIZE, SAX_PAA_SIZE,
            SAX_ALPHABET_SIZE, SAX_NR_STRATEGY, SAX_NORM_THRESHOLD, SHINGLE_SIZE);
        BufferedImage pam2 = getHeatMap(shingledData2, "post-window");

        // the assemble
        //
        BufferedImage target = new BufferedImage(800, 530, BufferedImage.TYPE_INT_ARGB);
        Graphics targetGraphics = target.getGraphics();
        targetGraphics.setColor(Color.WHITE);
        targetGraphics.fillRect(0, 0, 799, 529);

        targetGraphics.drawImage(tsChart, 0, 0, null);

        targetGraphics.drawImage(pam1, 10, 410, null);// draws the first image onto it

        targetGraphics.drawImage(pam2, 120, 410, null);// draws the first image onto it

        targetGraphics.setColor(Color.RED);
        targetGraphics.setFont(new Font("monospaced", Font.PLAIN, 16));
        targetGraphics.drawString(str, 300, 420);

        targetGraphics.setColor(Color.BLUE);
        targetGraphics.setFont(new Font("monospaced", Font.PLAIN, 24));
        double dist = ed.distance(toVector(shingledData1), toVector(shingledData2));
        targetGraphics.drawString("ED=" + df.format(dist), 300, 480);

        // String fileName = new SimpleDateFormat("yyyyMMddhhmmssSS'.png'").format(new Date());
        File outputfile = new File("dframe" + String.format("%04d", frameCounter) + ".png");
        ImageIO.write(target, "png", outputfile);
        frameCounter++;
      }

      cPoint++;
    }
  }
 
开发者ID:jMotif,项目名称:SAX,代码行数:68,代码来源:MoviePrinter.java

示例10: setUp

import net.seninp.jmotif.sax.TSProcessor; //导入方法依赖的package包/类
@Before
public void setUp() throws Exception {
  series = TSProcessor.readFileColumn(TEST_DATA_FNAME, 0, 0);
  series = Arrays.copyOf(series, 800);
}
 
开发者ID:jMotif,项目名称:SAX,代码行数:6,代码来源:TestMotifDiscovery.java

示例11: setUp

import net.seninp.jmotif.sax.TSProcessor; //导入方法依赖的package包/类
@Before
public void setUp() throws Exception {
  series = TSProcessor.readFileColumn(TEST_DATA_FNAME, 0, 0);
}
 
开发者ID:jMotif,项目名称:SAX,代码行数:5,代码来源:TestDiscordDiscoveryEXACT.java

示例12: main

import net.seninp.jmotif.sax.TSProcessor; //导入方法依赖的package包/类
public static void main(String[] args) throws Exception {

    Date startTime = new Date();

    double[] ts = TSProcessor.readFileColumn(INPUT_FNAME, 0, 0);
    Date readTime = new Date();
    System.out.println(SAXProcessor.timeToString(startTime.getTime(), readTime.getTime())
        + ":\t read " + ts.length + " points from " + INPUT_FNAME);

    SAXRecords sax = sp.ts2saxViaWindow(ts, SAX_WIN_SIZE, SAX_PAA_SIZE, na.getCuts(SAX_A_SIZE),
        NumerosityReductionStrategy.NONE, SAX_NORM_THRESHOLD);
    Date saxTime = new Date();
    System.out.println(SAXProcessor.timeToString(readTime.getTime(), saxTime.getTime())
        + ":\t discretized " + ts.length + " points into " + sax.getIndexes().size() + " words.");

    String str = sax.getSAXString(" ");

    for (int i = 0; i < 20; i++) {

      System.out.println("Iteration " + i);

      // Sequitur
      // prepareCycle();
      // Date t0 = new Date();
      // SAXRule grammar = SequiturFactory.runSequitur(str);
      // GrammarRules rulesData = grammar.toGrammarRulesData();
      // System.out.println(SAXProcessor.timeToString(t0.getTime(), (new Date()).getTime())
      // + "\t inferred " + rulesData.size() + " Sequitur rules");
      // grammar = null;
      // rulesData = null;

      // New repair
      prepareCycle();
      Date t1 = new Date();
      RePairGrammar grammar1 = RePairFactory.buildGrammar(str);
      GrammarRules rulesData1 = grammar1.toGrammarRulesData();
      System.out.println(SAXProcessor.timeToString(t1.getTime(), (new Date()).getTime())
          + "\t inferred " + rulesData1.size() + " RePair rules..");
      // System.out.println(rulesData1.toString());
      grammar1 = null;

    }

  }
 
开发者ID:jMotif,项目名称:GI,代码行数:45,代码来源:AlgoSpeedTester.java

示例13: testRePairImplementation

import net.seninp.jmotif.sax.TSProcessor; //导入方法依赖的package包/类
/**
 * Test the simple SAX conversion.
 * 
 * @throws Exception if error occurs.
 */
@Test
public void testRePairImplementation() throws Exception {

  // read data
  //
  ts1 = TSProcessor.readFileColumn(TEST_DATASET_NAME, 0, 0);

  // convert to SAX
  //
  ParallelSAXImplementation ps = new ParallelSAXImplementation();
  SAXRecords saxData = ps.process(ts1, 2, WINDOW_SIZE, PAA_SIZE, ALPHABET_SIZE,
      NumerosityReductionStrategy.EXACT, 0.01);
  saxData.buildIndex();

  // build a grammar
  //
  String inputString = saxData.getSAXString(" ");
  // System.out.println("Input string:\n" + inputString);
  RePairGrammar grammar = RePairFactory.buildGrammar(saxData);
  grammar.expandRules();

  GrammarRules rulesData = grammar.toGrammarRulesData();

  assertNotNull(grammar);
  assertNotNull(rulesData);

  String recoveredInputString = rulesData.get(0).getExpandedRuleString();

  // System.out.println("RePair grammar:\n" + RePairRule.toGrammarRules());
  // System.out.println("Recovered string:\n" + recoveredString);
  assertTrue(inputString.trim().equalsIgnoreCase(recoveredInputString.trim()));

  // assert the digram use
  //
  String r0String = rulesData.get(0).getRuleString();

  HashSet<String> digrams = new HashSet<String>();
  String oldToken = "";
  StringTokenizer st = new StringTokenizer(r0String, " ");
  while (st.hasMoreTokens()) {

    String cToken = st.nextToken();
    if (oldToken.isEmpty()) {
      oldToken = cToken;
      continue;
    }

    String digram = oldToken + " " + cToken;
    if (digrams.contains(digram)) {
      fail("no digram should be repeated!");
    }
    else {
      digrams.add(digram);
    }

    oldToken = cToken;
  }

}
 
开发者ID:jMotif,项目名称:GI,代码行数:65,代码来源:TestRePairDigramUtilization.java

示例14: setUp

import net.seninp.jmotif.sax.TSProcessor; //导入方法依赖的package包/类
@Before
public void setUp() throws Exception {
  series = TSProcessor.readFileColumn(TEST_DATA_FNAME, 0, 0);
  series = Arrays.copyOf(series, 1600);
}
 
开发者ID:GrammarViz2,项目名称:grammarviz2_src,代码行数:6,代码来源:TestRRAanomaly.java

示例15: initialize

import net.seninp.jmotif.sax.TSProcessor; //导入方法依赖的package包/类
@Before
public void initialize() throws IOException, SAXException {

  double[] ts = TSProcessor.readFileColumn(INPUT_FNAME, 0, 0);

  SAXRecords sax = sp.ts2saxViaWindow(ts, SAX_WIN_SIZE, SAX_PAA_SIZE, na.getCuts(SAX_A_SIZE),
      NumerosityReductionStrategy.EXACT, SAX_NORM_THRESHOLD);

  inputSAXString = sax.getSAXString(" ");

  inputSAXString = "dacb bbbd bbcb bdbb cbbc accb ccbc dbba cbbc bbdb bcbb dbbc bbcb adcc ccbc daba cbbc bbdb bcbb dbbc bbcb adcb bdac dcbb cbbd bbcb bdbb cbbc accb cdbb dbbb cbbd bccb bdab cbbc accb cdbb dbbb cbbd bbcb bdbb cbbc accc ccbb cbbd bbcb bdbb cbbc accb";

  // System.out.println(this.inputSAXString);

}
 
开发者ID:jMotif,项目名称:GI,代码行数:16,代码来源:TestGrammarByDecompressing.java


注:本文中的net.seninp.jmotif.sax.TSProcessor.readFileColumn方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。