tomoto 0.3.0 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -0
- data/README.md +2 -0
- data/ext/tomoto/extconf.rb +11 -3
- data/ext/tomoto/lda.cpp +2 -2
- data/lib/tomoto/version.rb +1 -1
- data/vendor/EigenRand/EigenRand/Core.h +2 -2
- data/vendor/EigenRand/EigenRand/Dists/Basic.h +66 -4
- data/vendor/EigenRand/EigenRand/Dists/Discrete.h +3 -3
- data/vendor/EigenRand/EigenRand/Dists/GammaPoisson.h +2 -2
- data/vendor/EigenRand/EigenRand/Dists/NormalExp.h +2 -2
- data/vendor/EigenRand/EigenRand/EigenRand +2 -2
- data/vendor/EigenRand/EigenRand/Macro.h +3 -3
- data/vendor/EigenRand/EigenRand/MorePacketMath.h +2 -2
- data/vendor/EigenRand/EigenRand/MvDists/Multinomial.h +2 -2
- data/vendor/EigenRand/EigenRand/MvDists/MvNormal.h +2 -2
- data/vendor/EigenRand/EigenRand/PacketFilter.h +2 -2
- data/vendor/EigenRand/EigenRand/PacketRandomEngine.h +23 -8
- data/vendor/EigenRand/EigenRand/RandUtils.h +4 -4
- data/vendor/EigenRand/EigenRand/arch/AVX/MorePacketMath.h +2 -2
- data/vendor/EigenRand/EigenRand/arch/AVX/PacketFilter.h +2 -2
- data/vendor/EigenRand/EigenRand/arch/AVX/RandUtils.h +3 -3
- data/vendor/EigenRand/EigenRand/arch/NEON/MorePacketMath.h +2 -2
- data/vendor/EigenRand/EigenRand/arch/NEON/PacketFilter.h +2 -2
- data/vendor/EigenRand/EigenRand/arch/NEON/RandUtils.h +3 -3
- data/vendor/EigenRand/EigenRand/arch/SSE/MorePacketMath.h +2 -2
- data/vendor/EigenRand/EigenRand/arch/SSE/PacketFilter.h +2 -2
- data/vendor/EigenRand/EigenRand/arch/SSE/RandUtils.h +3 -3
- data/vendor/EigenRand/README.md +4 -0
- data/vendor/tomotopy/README.kr.rst +7 -0
- data/vendor/tomotopy/README.rst +22 -0
- data/vendor/tomotopy/src/Utils/EigenAddonOps.hpp +1 -1
- data/vendor/tomotopy/src/Utils/neon_gamma.h +51 -0
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cbe3d5af04af38307a6bb5cf2db40fbc6df243bfaa34a3e53cd3360a2eed809d
|
4
|
+
data.tar.gz: 88cab90fd0a3ab1e1554ee9561eda4a23761703171b3262e36f564b6ebec5d8e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9dc6d9734f06988259b1c2c45e63549713f4d8071c1b81ffda4a43573b908a0e601b79f5cf23e1ecd94c880dbde16d50a297c6d109a878e2c45c5a3b0edf2158
|
7
|
+
data.tar.gz: 47a95868b9d750de9aba52ccc11849ee50968c4dc988d670df0d13d62ec14f0dcd49c5709b0b54f8bd66972cd9d2243eedf73632fe61221bfea23b60dfa4e573
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
data/ext/tomoto/extconf.rb
CHANGED
@@ -3,9 +3,17 @@ require "mkmf-rice"
|
|
3
3
|
$CXXFLAGS += " -std=c++17 $(optflags) -DEIGEN_MPL2_ONLY"
|
4
4
|
|
5
5
|
unless ENV["RUBY_CC_VERSION"]
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
default_optflags =
|
7
|
+
if RbConfig::CONFIG["host_os"] =~ /darwin/i && RbConfig::CONFIG["host_cpu"] =~ /arm|aarch64/i
|
8
|
+
# -march=native not supported with Mac ARM
|
9
|
+
""
|
10
|
+
else
|
11
|
+
# AVX-512F not supported yet
|
12
|
+
# https://github.com/bab2min/tomotopy/issues/188
|
13
|
+
"-march=native -mno-avx512f"
|
14
|
+
end
|
15
|
+
|
16
|
+
$CXXFLAGS << " " << with_config("optflags", default_optflags)
|
9
17
|
end
|
10
18
|
|
11
19
|
apple_clang = RbConfig::CONFIG["CC_VERSION_MESSAGE"] =~ /apple clang/i
|
data/ext/tomoto/lda.cpp
CHANGED
@@ -49,12 +49,12 @@ void init_lda(Rice::Module& m) {
|
|
49
49
|
})
|
50
50
|
.define_method(
|
51
51
|
"_make_doc",
|
52
|
-
|
52
|
+
[](tomoto::ILDAModel& self, std::vector<std::string> words) {
|
53
53
|
return DocumentObject(self.makeDoc(buildDoc(words)).release(), &self);
|
54
54
|
})
|
55
55
|
.define_method(
|
56
56
|
"_infer",
|
57
|
-
|
57
|
+
[](tomoto::ILDAModel& self, DocumentObject& doc_object, size_t iteration, float tolerance, size_t workers, size_t ps, size_t together) {
|
58
58
|
std::vector<tomoto::DocumentBase*> docs;
|
59
59
|
auto doc = doc_object.doc;
|
60
60
|
docs.emplace_back(const_cast<tomoto::DocumentBase*>(doc));
|
data/lib/tomoto/version.rb
CHANGED
@@ -2,8 +2,8 @@
|
|
2
2
|
* @file Basic.h
|
3
3
|
* @author bab2min (bab2min@gmail.com)
|
4
4
|
* @brief
|
5
|
-
* @version 0.
|
6
|
-
* @date
|
5
|
+
* @version 0.4.1
|
6
|
+
* @date 2022-08-13
|
7
7
|
*
|
8
8
|
* @copyright Copyright (c) 2020-2021
|
9
9
|
*
|
@@ -360,6 +360,31 @@ namespace Eigen
|
|
360
360
|
}
|
361
361
|
};
|
362
362
|
|
363
|
+
namespace detail
|
364
|
+
{
|
365
|
+
template<size_t v>
|
366
|
+
struct BitWidth
|
367
|
+
{
|
368
|
+
static constexpr size_t value = BitWidth<v / 2>::value + 1;
|
369
|
+
};
|
370
|
+
|
371
|
+
template<>
|
372
|
+
struct BitWidth<0>
|
373
|
+
{
|
374
|
+
static constexpr size_t value = 0;
|
375
|
+
};
|
376
|
+
|
377
|
+
template<class Rng>
|
378
|
+
struct RngBitSize
|
379
|
+
{
|
380
|
+
static constexpr size_t _min = Rng::min();
|
381
|
+
static constexpr size_t _max = Rng::max();
|
382
|
+
|
383
|
+
static constexpr bool _fullbit_rng = _min == 0 && (_max & (_max + 1)) == 0;
|
384
|
+
static constexpr size_t value = IsPacketRandomEngine<Rng>::value ? sizeof(typename Rng::result_type) * 8 : (_fullbit_rng ? BitWidth<_max>::value : 0);
|
385
|
+
};
|
386
|
+
}
|
387
|
+
|
363
388
|
/**
|
364
389
|
* @brief Generator of reals in a range `[0, 1)`
|
365
390
|
*
|
@@ -373,20 +398,57 @@ namespace Eigen
|
|
373
398
|
public:
|
374
399
|
using Scalar = _Scalar;
|
375
400
|
|
376
|
-
template<typename Rng
|
401
|
+
template<typename Rng,
|
402
|
+
typename std::enable_if<sizeof(Scalar) * 8 <= detail::RngBitSize<typename std::remove_const<typename std::remove_reference<Rng>::type>::type>::value, int>::type = 0
|
403
|
+
>
|
377
404
|
EIGEN_STRONG_INLINE const _Scalar operator() (Rng&& rng)
|
378
405
|
{
|
379
406
|
using namespace Eigen::internal;
|
380
407
|
return BitScalar<_Scalar>{}.to_ur(ExtractFirstUint<_Scalar>{}(std::forward<Rng>(rng)()));
|
381
408
|
}
|
382
409
|
|
383
|
-
template<typename Rng
|
410
|
+
template<typename Rng,
|
411
|
+
typename std::enable_if<detail::RngBitSize<typename std::remove_const<typename std::remove_reference<Rng>::type>::type>::value < sizeof(Scalar) * 8, int>::type = 0
|
412
|
+
>
|
413
|
+
EIGEN_STRONG_INLINE const _Scalar operator() (Rng&& rng)
|
414
|
+
{
|
415
|
+
using RRng = typename std::remove_const<typename std::remove_reference<Rng>::type>::type;
|
416
|
+
static_assert(detail::RngBitSize<RRng>::value > 0,
|
417
|
+
"BaseRng must be a kind of mersenne_twister_engine.");
|
418
|
+
using ResultType = typename std::conditional<detail::RngBitSize<RRng>::value == 32, uint32_t, uint64_t>::type;
|
419
|
+
using namespace Eigen::internal;
|
420
|
+
ResultType arr[sizeof(Scalar) / sizeof(ResultType)];
|
421
|
+
for (size_t i = 0; i < sizeof(Scalar) / sizeof(ResultType); ++i)
|
422
|
+
{
|
423
|
+
arr[i] = rng();
|
424
|
+
}
|
425
|
+
return BitScalar<_Scalar>{}.to_ur(*(uint64_t*)arr);
|
426
|
+
}
|
427
|
+
|
428
|
+
template<typename Rng,
|
429
|
+
typename std::enable_if<sizeof(Scalar) <= sizeof(typename std::remove_const<typename std::remove_reference<Rng>::type>::type::result_type), int>::type = 0
|
430
|
+
>
|
384
431
|
EIGEN_STRONG_INLINE const _Scalar nzur_scalar(Rng&& rng)
|
385
432
|
{
|
386
433
|
using namespace Eigen::internal;
|
387
434
|
return BitScalar<_Scalar>{}.to_nzur(ExtractFirstUint<_Scalar>{}(std::forward<Rng>(rng)()));
|
388
435
|
}
|
389
436
|
|
437
|
+
template<typename Rng,
|
438
|
+
typename std::enable_if<sizeof(typename std::remove_const<typename std::remove_reference<Rng>::type>::type::result_type) < sizeof(Scalar), int > ::type = 0
|
439
|
+
>
|
440
|
+
EIGEN_STRONG_INLINE const _Scalar nzur_scalar(Rng&& rng)
|
441
|
+
{
|
442
|
+
using namespace Eigen::internal;
|
443
|
+
using RngResult = typename std::remove_const<typename std::remove_reference<Rng>::type>::type::result_type;
|
444
|
+
RngResult arr[sizeof(Scalar) / sizeof(RngResult)];
|
445
|
+
for (size_t i = 0; i < sizeof(Scalar) / sizeof(RngResult); ++i)
|
446
|
+
{
|
447
|
+
arr[i] = rng();
|
448
|
+
}
|
449
|
+
return BitScalar<_Scalar>{}.to_nzur(*(Scalar*)arr);
|
450
|
+
}
|
451
|
+
|
390
452
|
template<typename Packet, typename Rng>
|
391
453
|
EIGEN_STRONG_INLINE const Packet packetOp(Rng&& rng)
|
392
454
|
{
|
@@ -2,8 +2,8 @@
|
|
2
2
|
* @file Discrete.h
|
3
3
|
* @author bab2min (bab2min@gmail.com)
|
4
4
|
* @brief
|
5
|
-
* @version 0.
|
6
|
-
* @date
|
5
|
+
* @version 0.4.1
|
6
|
+
* @date 2022-08-13
|
7
7
|
*
|
8
8
|
* @copyright Copyright (c) 2020-2021
|
9
9
|
*
|
@@ -264,7 +264,7 @@ namespace Eigen
|
|
264
264
|
{
|
265
265
|
EIGENRAND_CHECK_INFINITY_LOOP();
|
266
266
|
_Scalar cands = (_Scalar)(rx & bitmask);
|
267
|
-
if (cands <= pdiff) return cands;
|
267
|
+
if (cands <= pdiff) return cands + pmin;
|
268
268
|
if (bitcnt + bitsize < 32)
|
269
269
|
{
|
270
270
|
rx >>= bitsize;
|
@@ -2,8 +2,8 @@
|
|
2
2
|
* @file Macro.h
|
3
3
|
* @author bab2min (bab2min@gmail.com)
|
4
4
|
* @brief
|
5
|
-
* @version 0.4.
|
6
|
-
* @date
|
5
|
+
* @version 0.4.1
|
6
|
+
* @date 2022-08-13
|
7
7
|
*
|
8
8
|
* @copyright Copyright (c) 2020-2021
|
9
9
|
*
|
@@ -14,7 +14,7 @@
|
|
14
14
|
|
15
15
|
#define EIGENRAND_WORLD_VERSION 0
|
16
16
|
#define EIGENRAND_MAJOR_VERSION 4
|
17
|
-
#define EIGENRAND_MINOR_VERSION
|
17
|
+
#define EIGENRAND_MINOR_VERSION 1
|
18
18
|
|
19
19
|
#if EIGEN_VERSION_AT_LEAST(3,3,10)
|
20
20
|
#define EIGENRAND_EIGEN_34_MODE
|
@@ -2,8 +2,8 @@
|
|
2
2
|
* @file PacketRandomEngine.h
|
3
3
|
* @author bab2min (bab2min@gmail.com)
|
4
4
|
* @brief
|
5
|
-
* @version 0.
|
6
|
-
* @date
|
5
|
+
* @version 0.4.1
|
6
|
+
* @date 2022-08-13
|
7
7
|
*
|
8
8
|
* @copyright Copyright (c) 2020-2021
|
9
9
|
*
|
@@ -25,11 +25,17 @@ namespace Eigen
|
|
25
25
|
namespace detail
|
26
26
|
{
|
27
27
|
template<typename T>
|
28
|
-
auto test_integral_result_type(int)->std::integral_constant<bool, std::is_integral<typename T::result_type>::value>;
|
28
|
+
auto test_integral_result_type(int)->std::integral_constant<bool, std::is_integral<typename T::result_type>::value && !(T::min() == 0 && (T::max() & T::max() + 1) == 0)>;
|
29
29
|
|
30
30
|
template<typename T>
|
31
31
|
auto test_integral_result_type(...)->std::false_type;
|
32
32
|
|
33
|
+
template<typename T>
|
34
|
+
auto test_integral_fullbit_result_type(int)->std::integral_constant<bool, std::is_integral<typename T::result_type>::value&& T::min() == 0 && (T::max() & T::max() + 1) == 0>;
|
35
|
+
|
36
|
+
template<typename T>
|
37
|
+
auto test_integral_fullbit_result_type(...)->std::false_type;
|
38
|
+
|
33
39
|
template<typename T>
|
34
40
|
auto test_intpacket_result_type(int)->std::integral_constant<bool, internal::IsIntPacket<typename T::result_type>::value>;
|
35
41
|
|
@@ -42,6 +48,11 @@ namespace Eigen
|
|
42
48
|
{
|
43
49
|
};
|
44
50
|
|
51
|
+
template<typename Ty>
|
52
|
+
struct IsScalarFullBitRandomEngine : decltype(detail::test_integral_fullbit_result_type<Ty>(0))
|
53
|
+
{
|
54
|
+
};
|
55
|
+
|
45
56
|
template<typename Ty>
|
46
57
|
struct IsPacketRandomEngine : decltype(detail::test_intpacket_result_type<Ty>(0))
|
47
58
|
{
|
@@ -49,14 +60,15 @@ namespace Eigen
|
|
49
60
|
|
50
61
|
enum class RandomEngineType
|
51
62
|
{
|
52
|
-
none, scalar, packet
|
63
|
+
none, scalar, scalar_fullbit, packet
|
53
64
|
};
|
54
65
|
|
55
66
|
template<typename Ty>
|
56
67
|
struct GetRandomEngineType : std::integral_constant <
|
57
68
|
RandomEngineType,
|
58
69
|
IsPacketRandomEngine<Ty>::value ? RandomEngineType::packet :
|
59
|
-
|
70
|
+
IsScalarFullBitRandomEngine<Ty>::value ? RandomEngineType::scalar_fullbit :
|
71
|
+
IsScalarRandomEngine<Ty>::value ? RandomEngineType::scalar : RandomEngineType::none
|
60
72
|
>
|
61
73
|
{
|
62
74
|
};
|
@@ -257,7 +269,7 @@ namespace Eigen
|
|
257
269
|
*
|
258
270
|
* @return uint64_t
|
259
271
|
*/
|
260
|
-
uint64_t min()
|
272
|
+
static constexpr uint64_t min()
|
261
273
|
{
|
262
274
|
return 0;
|
263
275
|
}
|
@@ -267,7 +279,7 @@ namespace Eigen
|
|
267
279
|
*
|
268
280
|
* @return uint64_t
|
269
281
|
*/
|
270
|
-
uint64_t max()
|
282
|
+
static constexpr uint64_t max()
|
271
283
|
{
|
272
284
|
return _wMask;
|
273
285
|
}
|
@@ -418,6 +430,7 @@ namespace Eigen
|
|
418
430
|
class ParallelRandomEngineAdaptor
|
419
431
|
{
|
420
432
|
static_assert(GetRandomEngineType<BaseRng>::value != RandomEngineType::none, "BaseRng must be a kind of Random Engine.");
|
433
|
+
static_assert(GetRandomEngineType<BaseRng>::value != RandomEngineType::scalar, "BaseRng must be a kind of mersenne_twister_engine.");
|
421
434
|
public:
|
422
435
|
using result_type = UIntType;
|
423
436
|
|
@@ -547,7 +560,7 @@ namespace Eigen
|
|
547
560
|
IsPacketRandomEngine<typename std::remove_reference<Rng>::type>::value,
|
548
561
|
PacketRandomEngineAdaptor<UIntType, typename std::remove_reference<Rng>::type>,
|
549
562
|
typename std::conditional<
|
550
|
-
|
563
|
+
IsScalarFullBitRandomEngine<typename std::remove_reference<Rng>::type>::value,
|
551
564
|
RandomEngineWrapper<typename std::remove_reference<Rng>::type>,
|
552
565
|
void
|
553
566
|
>::type
|
@@ -564,6 +577,8 @@ namespace Eigen
|
|
564
577
|
template<typename UIntType, typename Rng>
|
565
578
|
UniversalRandomEngine<UIntType, Rng> makeUniversalRng(Rng&& rng)
|
566
579
|
{
|
580
|
+
static_assert(IsPacketRandomEngine<typename std::remove_reference<Rng>::type>::value || IsScalarFullBitRandomEngine<typename std::remove_reference<Rng>::type>::value,
|
581
|
+
"`Rng` must be a kind of RandomPacketEngine like std::mersenne_twister_engine");
|
567
582
|
return { std::forward<Rng>(rng) };
|
568
583
|
}
|
569
584
|
|
@@ -2,8 +2,8 @@
|
|
2
2
|
* @file RandUtils.h
|
3
3
|
* @author bab2min (bab2min@gmail.com)
|
4
4
|
* @brief
|
5
|
-
* @version 0.
|
6
|
-
* @date
|
5
|
+
* @version 0.4.1
|
6
|
+
* @date 2022-08-13
|
7
7
|
*
|
8
8
|
* @copyright Copyright (c) 2020-2021
|
9
9
|
*
|
@@ -55,7 +55,7 @@ namespace Eigen
|
|
55
55
|
struct scalar_rng_adaptor
|
56
56
|
{
|
57
57
|
static_assert(
|
58
|
-
Rand::
|
58
|
+
Rand::IsScalarFullBitRandomEngine<
|
59
59
|
typename std::remove_reference<Rng>::type
|
60
60
|
>::value ||
|
61
61
|
Rand::IsPacketRandomEngine<
|
@@ -95,7 +95,7 @@ namespace Eigen
|
|
95
95
|
struct scalar_rng_adaptor<Gen, _Scalar, Rng, true>
|
96
96
|
{
|
97
97
|
static_assert(
|
98
|
-
Rand::
|
98
|
+
Rand::IsScalarFullBitRandomEngine<
|
99
99
|
typename std::remove_reference<Rng>::type
|
100
100
|
>::value ||
|
101
101
|
Rand::IsPacketRandomEngine<
|
@@ -2,8 +2,8 @@
|
|
2
2
|
* @file RandUtils.h
|
3
3
|
* @author bab2min (bab2min@gmail.com)
|
4
4
|
* @brief
|
5
|
-
* @version 0.4.
|
6
|
-
* @date
|
5
|
+
* @version 0.4.1
|
6
|
+
* @date 2022-08-13
|
7
7
|
*
|
8
8
|
* @copyright Copyright (c) 2020-2021
|
9
9
|
*
|
@@ -57,7 +57,7 @@ namespace Eigen
|
|
57
57
|
};
|
58
58
|
|
59
59
|
template<typename Rng, typename RngResult>
|
60
|
-
struct RawbitsMaker<Packet8i, Rng, RngResult, Rand::RandomEngineType::
|
60
|
+
struct RawbitsMaker<Packet8i, Rng, RngResult, Rand::RandomEngineType::scalar_fullbit>
|
61
61
|
{
|
62
62
|
EIGEN_STRONG_INLINE Packet8i rawbits(Rng& rng)
|
63
63
|
{
|
@@ -2,8 +2,8 @@
|
|
2
2
|
* @file RandUtils.h
|
3
3
|
* @author bab2min (bab2min@gmail.com)
|
4
4
|
* @brief
|
5
|
-
* @version 0.4.
|
6
|
-
* @date
|
5
|
+
* @version 0.4.1
|
6
|
+
* @date 2022-08-13
|
7
7
|
*
|
8
8
|
* @copyright Copyright (c) 2020-2021
|
9
9
|
*
|
@@ -19,7 +19,7 @@ namespace Eigen
|
|
19
19
|
namespace internal
|
20
20
|
{
|
21
21
|
template<typename Rng, typename RngResult>
|
22
|
-
struct RawbitsMaker<Packet4i, Rng, RngResult, Rand::RandomEngineType::
|
22
|
+
struct RawbitsMaker<Packet4i, Rng, RngResult, Rand::RandomEngineType::scalar_fullbit>
|
23
23
|
{
|
24
24
|
EIGEN_STRONG_INLINE Packet4i rawbits(Rng& rng)
|
25
25
|
{
|
@@ -2,8 +2,8 @@
|
|
2
2
|
* @file RandUtils.h
|
3
3
|
* @author bab2min (bab2min@gmail.com)
|
4
4
|
* @brief
|
5
|
-
* @version 0.4.
|
6
|
-
* @date
|
5
|
+
* @version 0.4.1
|
6
|
+
* @date 2022-08-13
|
7
7
|
*
|
8
8
|
* @copyright Copyright (c) 2020-2021
|
9
9
|
*
|
@@ -19,7 +19,7 @@ namespace Eigen
|
|
19
19
|
namespace internal
|
20
20
|
{
|
21
21
|
template<typename Rng, typename RngResult>
|
22
|
-
struct RawbitsMaker<Packet4i, Rng, RngResult, Rand::RandomEngineType::
|
22
|
+
struct RawbitsMaker<Packet4i, Rng, RngResult, Rand::RandomEngineType::scalar_fullbit>
|
23
23
|
{
|
24
24
|
EIGEN_STRONG_INLINE Packet4i rawbits(Rng& rng)
|
25
25
|
{
|
data/vendor/EigenRand/README.md
CHANGED
@@ -385,6 +385,10 @@ MIT License
|
|
385
385
|
|
386
386
|
## History
|
387
387
|
|
388
|
+
### 0.4.1 (2022-08-13)
|
389
|
+
* Fixed a bug where double-type generation with std::mt19937 fails compilation.
|
390
|
+
* Fixed a bug where `UniformIntGen` in scalar mode generates numbers in the wrong range.
|
391
|
+
|
388
392
|
### 0.4.0 alpha (2021-09-28)
|
389
393
|
* Now EigenRand supports ARM & ARM64 NEON architecture experimentally. Please report issues about ARM & ARM64 NEON.
|
390
394
|
* Now EigenRand has compatibility to `Eigen 3.4.0`.
|
@@ -305,6 +305,13 @@ tomotopy의 Python3 예제 코드는 https://github.com/bab2min/tomotopy/blob/ma
|
|
305
305
|
|
306
306
|
역사
|
307
307
|
-------
|
308
|
+
* 0.12.4 (2023-01-22)
|
309
|
+
* New features
|
310
|
+
* macOS ARM64 아키텍처에 대한 지원을 추가했습니다.
|
311
|
+
* Bug fixes
|
312
|
+
* `tomotopy.Document.get_sub_topic_dist()`가 bad argument 예외를 발생시키는 문제를 해결했습니다.
|
313
|
+
* 예외 발생이 종종 크래시를 발생시키는 문제를 해결했습니다.
|
314
|
+
|
308
315
|
* 0.12.3 (2022-07-19)
|
309
316
|
* 기능 개선
|
310
317
|
* 이제 `tomotopy.LDAModel.add_doc()`로 빈 문서를 삽입할 경우 예외를 발생시키는 대신 그냥 무시합니다. 새로 추가된 인자인 `ignore_empty_words`를 False로 설정할 경우 이전처럼 예외를 발생시킵니다.
|
data/vendor/tomotopy/README.rst
CHANGED
@@ -309,6 +309,13 @@ meaning you can use it for any reasonable purpose and remain in complete ownersh
|
|
309
309
|
|
310
310
|
History
|
311
311
|
-------
|
312
|
+
* 0.12.4 (2023-01-22)
|
313
|
+
* New features
|
314
|
+
* Added support for macOS ARM64 architecture.
|
315
|
+
* Bug fixes
|
316
|
+
* Fixed an issue where `tomotopy.Document.get_sub_topic_dist()` raises a bad argument exception.
|
317
|
+
* Fixed an issue where exception raising sometimes causes crashes.
|
318
|
+
|
312
319
|
* 0.12.3 (2022-07-19)
|
313
320
|
* New features
|
314
321
|
* Now, inserting an empty document using `tomotopy.LDAModel.add_doc()` just ignores it instead of raising an exception. If the newly added argument `ignore_empty_words` is set to False, an exception is raised as before.
|
@@ -514,3 +521,18 @@ Bundled Libraries and Their License
|
|
514
521
|
|
515
522
|
* Mapbox Variant: `BSD License
|
516
523
|
<licenses_bundled/MapboxVariant>`_
|
524
|
+
|
525
|
+
Citation
|
526
|
+
---------
|
527
|
+
::
|
528
|
+
|
529
|
+
@software{minchul_lee_2022_6868418,
|
530
|
+
author = {Minchul Lee},
|
531
|
+
title = {bab2min/tomotopy: 0.12.3},
|
532
|
+
month = jul,
|
533
|
+
year = 2022,
|
534
|
+
publisher = {Zenodo},
|
535
|
+
version = {v0.12.3},
|
536
|
+
doi = {10.5281/zenodo.6868418},
|
537
|
+
url = {https://doi.org/10.5281/zenodo.6868418}
|
538
|
+
}
|
@@ -0,0 +1,51 @@
|
|
1
|
+
#pragma once
|
2
|
+
|
3
|
+
inline float32x4_t accurate_rcp(float32x4_t x)
|
4
|
+
{
|
5
|
+
float32x4_t r = vrecpeq_f32(x);
|
6
|
+
return vmulq_f32(vrecpsq_f32(x, r), r);
|
7
|
+
}
|
8
|
+
|
9
|
+
// approximation : lgamma(z) ~= (z+2.5)ln(z+3) - z - 3 + 0.5 ln (2pi) + 1/12/(z + 3) - ln (z(z+1)(z+2))
|
10
|
+
inline float32x4_t lgamma_ps(float32x4_t x)
|
11
|
+
{
|
12
|
+
float32x4_t x_3 = vaddq_f32(x, vmovq_n_f32(3));
|
13
|
+
float32x4_t ret = vmulq_f32(vaddq_f32(x_3, vmovq_n_f32(-0.5f)), Eigen::internal::plog(x_3));
|
14
|
+
ret = vsubq_f32(ret, x_3);
|
15
|
+
ret = vaddq_f32(ret, vmovq_n_f32(0.91893853f));
|
16
|
+
ret = vaddq_f32(ret, vdivq_f32(vmovq_n_f32(1 / 12.f), x_3));
|
17
|
+
ret = vsubq_f32(ret, Eigen::internal::plog(vmulq_f32(
|
18
|
+
vmulq_f32(vsubq_f32(x_3, vmovq_n_f32(1)), vsubq_f32(x_3, vmovq_n_f32(2))), x)));
|
19
|
+
return ret;
|
20
|
+
}
|
21
|
+
|
22
|
+
// approximation : lgamma(z + a) - lgamma(z) = (z + a + 1.5) * log(z + a + 2) - (z + 1.5) * log(z + 2) - a + (1. / (z + a + 2) - 1. / (z + 2)) / 12. - log(((z + a) * (z + a + 1)) / (z * (z + 1)))
|
23
|
+
inline float32x4_t lgamma_subt(float32x4_t z, float32x4_t a)
|
24
|
+
{
|
25
|
+
float32x4_t _1p5 = vmovq_n_f32(1.5);
|
26
|
+
float32x4_t _2 = vmovq_n_f32(2);
|
27
|
+
float32x4_t za = vaddq_f32(z, a);
|
28
|
+
float32x4_t ret = vmulq_f32(vaddq_f32(za, _1p5), Eigen::internal::plog(vaddq_f32(za, _2)));
|
29
|
+
ret = vsubq_f32(ret, vmulq_f32(vaddq_f32(z, _1p5), Eigen::internal::plog(vaddq_f32(z, _2))));
|
30
|
+
ret = vsubq_f32(ret, a);
|
31
|
+
float32x4_t _1 = vmovq_n_f32(1);
|
32
|
+
float32x4_t _1_12 = vmovq_n_f32(1 / 12.f);
|
33
|
+
ret = vaddq_f32(ret, vsubq_f32(vdivq_f32(_1_12, vaddq_f32(za, _2)), vdivq_f32(_1_12, vaddq_f32(z, _2))));
|
34
|
+
ret = vsubq_f32(ret, Eigen::internal::plog(vdivq_f32(vdivq_f32(vmulq_f32(za, vaddq_f32(za, _1)), z), vaddq_f32(z, _1))));
|
35
|
+
return ret;
|
36
|
+
}
|
37
|
+
|
38
|
+
|
39
|
+
// approximation : digamma(z) ~= ln(z+4) - 1/2/(z+4) - 1/12/(z+4)^2 - 1/z - 1/(z+1) - 1/(z+2) - 1/(z+3)
|
40
|
+
inline float32x4_t digamma_ps(float32x4_t x)
|
41
|
+
{
|
42
|
+
float32x4_t x_4 = vaddq_f32(x, vmovq_n_f32(4));
|
43
|
+
float32x4_t ret = Eigen::internal::plog(x_4);
|
44
|
+
ret = vsubq_f32(ret, vdivq_f32(vmovq_n_f32(1 / 2.f), x_4));
|
45
|
+
ret = vsubq_f32(ret, vdivq_f32(vdivq_f32(vmovq_n_f32(1 / 12.f), x_4), x_4));
|
46
|
+
ret = vsubq_f32(ret, accurate_rcp(vsubq_f32(x_4, vmovq_n_f32(1))));
|
47
|
+
ret = vsubq_f32(ret, accurate_rcp(vsubq_f32(x_4, vmovq_n_f32(2))));
|
48
|
+
ret = vsubq_f32(ret, accurate_rcp(vsubq_f32(x_4, vmovq_n_f32(3))));
|
49
|
+
ret = vsubq_f32(ret, accurate_rcp(vsubq_f32(x_4, vmovq_n_f32(4))));
|
50
|
+
return ret;
|
51
|
+
}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tomoto
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Kane
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-01-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rice
|
@@ -518,6 +518,7 @@ files:
|
|
518
518
|
- vendor/tomotopy/src/Utils/avx_mathfun.h
|
519
519
|
- vendor/tomotopy/src/Utils/exception.h
|
520
520
|
- vendor/tomotopy/src/Utils/math.h
|
521
|
+
- vendor/tomotopy/src/Utils/neon_gamma.h
|
521
522
|
- vendor/tomotopy/src/Utils/rtnorm.hpp
|
522
523
|
- vendor/tomotopy/src/Utils/sample.hpp
|
523
524
|
- vendor/tomotopy/src/Utils/serializer.hpp
|
@@ -552,7 +553,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
552
553
|
- !ruby/object:Gem::Version
|
553
554
|
version: '0'
|
554
555
|
requirements: []
|
555
|
-
rubygems_version: 3.
|
556
|
+
rubygems_version: 3.4.1
|
556
557
|
signing_key:
|
557
558
|
specification_version: 4
|
558
559
|
summary: High performance topic modeling for Ruby
|