Невозможно создать матрицу в incanter 1.4.0

Я играю с incanter, когда изучаю clojure, и я продолжаю получать сообщение об ошибке, когда пытаюсь создать матрицу в REPL под lein:

user=> (use 'incanter.io)
nil
user=> (use 'incanter.core)
nil
user=> (def A (matrix [[1 2 3] [4 5 6] [7 8 9]])) 
NoSuchMethodError edu.emory.mathcs.utils.ConcurrencyUtils.getThreads
BeginN_2D()Icern.colt.matrix.tdouble.impl.DenseColumnDoubleMatrix2D.assign (DenseColumnDoubleMatrix2D.java:661)

Это похоже на проблему с зависимостями, но пока не уверен, как это решить.


person Marshall Shen    schedule 30.12.2012    source источник
comment
Какую версию инкантера используете? Это отлично работает с 1.3.0, но не с 1.4.0.   -  person Diego Basch    schedule 30.12.2012
comment
Ах, я использую 1.4.0, я проверю, работает ли он на 1.3.0, и отправлю вопрос на Github, если это так.   -  person Marshall Shen    schedule 30.12.2012
comment
@DiegoBasch Ты прав.   -  person Marshall Shen    schedule 30.12.2012
comment
Очень странно, я не могу воспроизвести эту проблему с 1.4.0. Можешь показать свой project.clj?   -  person Alex Ott    schedule 30.12.2012
comment
(defproject имя_проекта 0.1.0-SNAPSHOT :description FIXME: написать описание :url example.com/FIXME :license { :name Публичная лицензия Eclipse :url eclipse.org/legal/epl-v10.html} :dependencies [[org.clojure/clojure 1.4.0] [incanter 1.4.0] [clj-http 0.6.2] [yfinance 0.2.0] [clj-time 0.4.4] ])   -  person Marshall Shen    schedule 31.12.2012


Ответы (1)


Решите ту же проблему, используя [org.clojure/clojure "1.4.0"] и [incanter "1.4.1"]. У Def было ощущение затенения пути к классам.

Сделал следующее в ответ, чтобы выяснить, из какой банки исходил ConcurrencyUtils:

(.getResource edu.emory.mathcs.utils.ConcurrencyUtils
    "/edu/emory/mathcs/utils/ConcurrencyUtils.class")

Это указывало на jplasma. Конечно же, у jplasma есть собственная копия этого класса, в которой отсутствуют различные методы, в том числе getThreadsBeginN_2D.

Глядя на deps («lein pom», за которым следует «mvn dependency:tree»), мы увидели, что это зависимость, вытащенная incanter 1.4.1:

[INFO] |  +- incanter:incanter-core:jar:1.4.1:compile
[INFO] |  |  +- org.clojure:math.combinatorics:jar:0.0.3:compile
[INFO] |  |  \- net.sourceforge.parallelcolt:parallelcolt:jar:0.10.0:compile
[INFO] |  |     +- net.sourceforge.jplasma:jplasma:jar:1.2.0:compile

Изменена запись для incanter в project.clj, чтобы исключить jplasma:

[incanter "1.4.1"
    :exclusions [net.sourceforge.jplasma/jplasma]]

Это получает ConcurrencyUtils от jtransforms (следовательно, все еще не от parallelcolt), но, по крайней мере, устраняет проблему с матрицей:

=> (matrix [[1 2 3] [4 5 6] [7 8 9]])
[1.0000 2.0000 3.0000
4.0000 5.0000 6.0000
7.0000 8.0000 9.0000]

Не уверен, каково влияние исключения. Существует более старая версия jplasma на clojars, которая не нарушает матрицу, вы можете попробовать добавить ее в свой проект.clj:

[incanter/jplasma "0.9.4"]

Тем не менее, эти deps явно нуждаются в правильной сортировке кем-то, кто их понимает.

person u-phoria    schedule 02.01.2013