fungeom 0.1.0__py3-none-any.whl

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.
Files changed (470) hide show
  1. fungeom/__init__.py +215 -0
  2. fungeom/core/__init__.py +22 -0
  3. fungeom/core/arrays.py +25 -0
  4. fungeom/core/resolvability.py +74 -0
  5. fungeom/core/resolver.py +85 -0
  6. fungeom/primitives/__init__.py +164 -0
  7. fungeom/primitives/boolean/__init__.py +8 -0
  8. fungeom/primitives/boolean/decidability.py +14 -0
  9. fungeom/primitives/boolean/resolvers/__init__.py +0 -0
  10. fungeom/primitives/boolean/resolvers/base.py +88 -0
  11. fungeom/primitives/boolean/resolvers/comparison.py +54 -0
  12. fungeom/primitives/boolean/resolvers/conjunction.py +27 -0
  13. fungeom/primitives/boolean/resolvers/disjunction.py +27 -0
  14. fungeom/primitives/boolean/resolvers/literal.py +23 -0
  15. fungeom/primitives/boolean/resolvers/negation.py +22 -0
  16. fungeom/primitives/boolean/value.py +15 -0
  17. fungeom/primitives/bundle/__init__.py +23 -0
  18. fungeom/primitives/bundle/decidability.py +15 -0
  19. fungeom/primitives/bundle/resolvers/__init__.py +1 -0
  20. fungeom/primitives/bundle/resolvers/base.py +305 -0
  21. fungeom/primitives/bundle/resolvers/boolean.py +213 -0
  22. fungeom/primitives/bundle/resolvers/direction3.py +139 -0
  23. fungeom/primitives/bundle/resolvers/fit.py +115 -0
  24. fungeom/primitives/bundle/resolvers/plane_ops.py +52 -0
  25. fungeom/primitives/bundle/resolvers/point2.py +313 -0
  26. fungeom/primitives/bundle/resolvers/point3.py +419 -0
  27. fungeom/primitives/bundle/resolvers/scalar.py +276 -0
  28. fungeom/primitives/bundle/resolvers/transform.py +108 -0
  29. fungeom/primitives/bundle/resolvers/vec3.py +205 -0
  30. fungeom/primitives/bundle/value.py +55 -0
  31. fungeom/primitives/coverage/__init__.py +10 -0
  32. fungeom/primitives/coverage/decidability.py +15 -0
  33. fungeom/primitives/coverage/resolvers/__init__.py +1 -0
  34. fungeom/primitives/coverage/resolvers/base.py +92 -0
  35. fungeom/primitives/coverage/resolvers/contains.py +33 -0
  36. fungeom/primitives/coverage/resolvers/difference.py +28 -0
  37. fungeom/primitives/coverage/resolvers/gaps.py +25 -0
  38. fungeom/primitives/coverage/resolvers/hull.py +36 -0
  39. fungeom/primitives/coverage/resolvers/intersection.py +28 -0
  40. fungeom/primitives/coverage/resolvers/literal.py +28 -0
  41. fungeom/primitives/coverage/resolvers/total_duration.py +30 -0
  42. fungeom/primitives/coverage/resolvers/union.py +28 -0
  43. fungeom/primitives/coverage/value.py +103 -0
  44. fungeom/primitives/direction2/__init__.py +6 -0
  45. fungeom/primitives/direction2/decidability.py +15 -0
  46. fungeom/primitives/direction2/resolvers/__init__.py +1 -0
  47. fungeom/primitives/direction2/resolvers/angle.py +25 -0
  48. fungeom/primitives/direction2/resolvers/angle_to.py +28 -0
  49. fungeom/primitives/direction2/resolvers/base.py +105 -0
  50. fungeom/primitives/direction2/resolvers/dot.py +30 -0
  51. fungeom/primitives/direction2/resolvers/literal.py +20 -0
  52. fungeom/primitives/direction2/resolvers/normalized.py +33 -0
  53. fungeom/primitives/direction2/resolvers/perpendicular.py +24 -0
  54. fungeom/primitives/direction2/resolvers/reversed.py +24 -0
  55. fungeom/primitives/direction2/resolvers/signed_angle.py +36 -0
  56. fungeom/primitives/direction2/resolvers/slerp.py +45 -0
  57. fungeom/primitives/direction2/resolvers/vector.py +25 -0
  58. fungeom/primitives/direction2/value.py +74 -0
  59. fungeom/primitives/direction3/__init__.py +4 -0
  60. fungeom/primitives/direction3/decidability.py +15 -0
  61. fungeom/primitives/direction3/resolvers/__init__.py +1 -0
  62. fungeom/primitives/direction3/resolvers/angle.py +28 -0
  63. fungeom/primitives/direction3/resolvers/any_perpendicular.py +34 -0
  64. fungeom/primitives/direction3/resolvers/base.py +110 -0
  65. fungeom/primitives/direction3/resolvers/cross.py +37 -0
  66. fungeom/primitives/direction3/resolvers/dot.py +34 -0
  67. fungeom/primitives/direction3/resolvers/literal.py +20 -0
  68. fungeom/primitives/direction3/resolvers/normalized.py +37 -0
  69. fungeom/primitives/direction3/resolvers/reversed.py +22 -0
  70. fungeom/primitives/direction3/resolvers/signed_angle.py +44 -0
  71. fungeom/primitives/direction3/resolvers/slerp.py +48 -0
  72. fungeom/primitives/direction3/resolvers/vector.py +28 -0
  73. fungeom/primitives/direction3/value.py +58 -0
  74. fungeom/primitives/duration/__init__.py +7 -0
  75. fungeom/primitives/duration/decidability.py +14 -0
  76. fungeom/primitives/duration/resolvers/__init__.py +1 -0
  77. fungeom/primitives/duration/resolvers/absolute.py +22 -0
  78. fungeom/primitives/duration/resolvers/base.py +164 -0
  79. fungeom/primitives/duration/resolvers/clamp.py +31 -0
  80. fungeom/primitives/duration/resolvers/literal.py +38 -0
  81. fungeom/primitives/duration/resolvers/maximum.py +31 -0
  82. fungeom/primitives/duration/resolvers/minimum.py +31 -0
  83. fungeom/primitives/duration/resolvers/ratio.py +39 -0
  84. fungeom/primitives/duration/resolvers/scaled.py +32 -0
  85. fungeom/primitives/duration/resolvers/sum.py +31 -0
  86. fungeom/primitives/duration/value.py +16 -0
  87. fungeom/primitives/face/__init__.py +6 -0
  88. fungeom/primitives/face/decidability.py +15 -0
  89. fungeom/primitives/face/resolvers/__init__.py +1 -0
  90. fungeom/primitives/face/resolvers/base.py +83 -0
  91. fungeom/primitives/face/resolvers/clearance.py +35 -0
  92. fungeom/primitives/face/resolvers/closest_point.py +32 -0
  93. fungeom/primitives/face/resolvers/contains.py +32 -0
  94. fungeom/primitives/face/resolvers/on.py +34 -0
  95. fungeom/primitives/face/resolvers/parts.py +42 -0
  96. fungeom/primitives/face/value.py +57 -0
  97. fungeom/primitives/frame/__init__.py +8 -0
  98. fungeom/primitives/frame/decidability.py +21 -0
  99. fungeom/primitives/frame/resolvers/__init__.py +1 -0
  100. fungeom/primitives/frame/resolvers/attached.py +33 -0
  101. fungeom/primitives/frame/resolvers/base.py +59 -0
  102. fungeom/primitives/frame/resolvers/known.py +30 -0
  103. fungeom/primitives/frame/resolvers/relative.py +32 -0
  104. fungeom/primitives/frame/value.py +90 -0
  105. fungeom/primitives/frame2/__init__.py +10 -0
  106. fungeom/primitives/frame2/decidability.py +15 -0
  107. fungeom/primitives/frame2/resolvers/__init__.py +1 -0
  108. fungeom/primitives/frame2/resolvers/attached.py +29 -0
  109. fungeom/primitives/frame2/resolvers/base.py +55 -0
  110. fungeom/primitives/frame2/resolvers/known.py +30 -0
  111. fungeom/primitives/frame2/resolvers/relative.py +31 -0
  112. fungeom/primitives/frame2/value.py +80 -0
  113. fungeom/primitives/instant/__init__.py +7 -0
  114. fungeom/primitives/instant/decidability.py +14 -0
  115. fungeom/primitives/instant/resolvers/__init__.py +1 -0
  116. fungeom/primitives/instant/resolvers/affine.py +52 -0
  117. fungeom/primitives/instant/resolvers/base.py +142 -0
  118. fungeom/primitives/instant/resolvers/centroid.py +29 -0
  119. fungeom/primitives/instant/resolvers/difference.py +38 -0
  120. fungeom/primitives/instant/resolvers/lerp.py +31 -0
  121. fungeom/primitives/instant/resolvers/literal.py +34 -0
  122. fungeom/primitives/instant/resolvers/maximum.py +31 -0
  123. fungeom/primitives/instant/resolvers/minimum.py +31 -0
  124. fungeom/primitives/instant/resolvers/shifted.py +28 -0
  125. fungeom/primitives/instant/value.py +18 -0
  126. fungeom/primitives/interval/__init__.py +6 -0
  127. fungeom/primitives/interval/decidability.py +15 -0
  128. fungeom/primitives/interval/resolvers/__init__.py +1 -0
  129. fungeom/primitives/interval/resolvers/base.py +148 -0
  130. fungeom/primitives/interval/resolvers/between.py +35 -0
  131. fungeom/primitives/interval/resolvers/clamp.py +28 -0
  132. fungeom/primitives/interval/resolvers/contains.py +35 -0
  133. fungeom/primitives/interval/resolvers/endpoint.py +46 -0
  134. fungeom/primitives/interval/resolvers/hull.py +28 -0
  135. fungeom/primitives/interval/resolvers/intersection.py +37 -0
  136. fungeom/primitives/interval/resolvers/overlaps.py +33 -0
  137. fungeom/primitives/interval/value.py +35 -0
  138. fungeom/primitives/line/__init__.py +6 -0
  139. fungeom/primitives/line/decidability.py +15 -0
  140. fungeom/primitives/line/resolvers/__init__.py +1 -0
  141. fungeom/primitives/line/resolvers/base.py +99 -0
  142. fungeom/primitives/line/resolvers/direction.py +26 -0
  143. fungeom/primitives/line/resolvers/direction_along.py +46 -0
  144. fungeom/primitives/line/resolvers/distance_to.py +29 -0
  145. fungeom/primitives/line/resolvers/origin.py +27 -0
  146. fungeom/primitives/line/resolvers/point_at.py +28 -0
  147. fungeom/primitives/line/resolvers/project.py +30 -0
  148. fungeom/primitives/line/resolvers/through.py +30 -0
  149. fungeom/primitives/line/resolvers/through_points.py +31 -0
  150. fungeom/primitives/line/value.py +73 -0
  151. fungeom/primitives/line2/__init__.py +6 -0
  152. fungeom/primitives/line2/decidability.py +15 -0
  153. fungeom/primitives/line2/resolvers/__init__.py +1 -0
  154. fungeom/primitives/line2/resolvers/base.py +99 -0
  155. fungeom/primitives/line2/resolvers/direction.py +26 -0
  156. fungeom/primitives/line2/resolvers/distance_to.py +29 -0
  157. fungeom/primitives/line2/resolvers/intersect.py +46 -0
  158. fungeom/primitives/line2/resolvers/normal.py +26 -0
  159. fungeom/primitives/line2/resolvers/origin.py +27 -0
  160. fungeom/primitives/line2/resolvers/point_at.py +28 -0
  161. fungeom/primitives/line2/resolvers/project.py +30 -0
  162. fungeom/primitives/line2/resolvers/signed_distance.py +29 -0
  163. fungeom/primitives/line2/resolvers/through.py +30 -0
  164. fungeom/primitives/line2/resolvers/through_points.py +31 -0
  165. fungeom/primitives/line2/value.py +80 -0
  166. fungeom/primitives/plane/__init__.py +6 -0
  167. fungeom/primitives/plane/decidability.py +15 -0
  168. fungeom/primitives/plane/resolvers/__init__.py +1 -0
  169. fungeom/primitives/plane/resolvers/base.py +229 -0
  170. fungeom/primitives/plane/resolvers/embed.py +35 -0
  171. fungeom/primitives/plane/resolvers/facing.py +35 -0
  172. fungeom/primitives/plane/resolvers/flipped.py +24 -0
  173. fungeom/primitives/plane/resolvers/frame.py +53 -0
  174. fungeom/primitives/plane/resolvers/intersect.py +46 -0
  175. fungeom/primitives/plane/resolvers/normal.py +26 -0
  176. fungeom/primitives/plane/resolvers/offset.py +28 -0
  177. fungeom/primitives/plane/resolvers/origin.py +27 -0
  178. fungeom/primitives/plane/resolvers/project.py +30 -0
  179. fungeom/primitives/plane/resolvers/project_direction.py +40 -0
  180. fungeom/primitives/plane/resolvers/signed_distance.py +29 -0
  181. fungeom/primitives/plane/resolvers/spanned_by.py +38 -0
  182. fungeom/primitives/plane/resolvers/through.py +30 -0
  183. fungeom/primitives/plane/resolvers/through_points.py +32 -0
  184. fungeom/primitives/plane/resolvers/to_local.py +36 -0
  185. fungeom/primitives/plane/resolvers/winding_normal.py +50 -0
  186. fungeom/primitives/plane/value.py +98 -0
  187. fungeom/primitives/point2/__init__.py +6 -0
  188. fungeom/primitives/point2/decidability.py +15 -0
  189. fungeom/primitives/point2/resolvers/__init__.py +1 -0
  190. fungeom/primitives/point2/resolvers/affine.py +56 -0
  191. fungeom/primitives/point2/resolvers/base.py +132 -0
  192. fungeom/primitives/point2/resolvers/centroid.py +29 -0
  193. fungeom/primitives/point2/resolvers/displacement.py +28 -0
  194. fungeom/primitives/point2/resolvers/framed.py +31 -0
  195. fungeom/primitives/point2/resolvers/lerp.py +34 -0
  196. fungeom/primitives/point2/resolvers/located.py +22 -0
  197. fungeom/primitives/point2/resolvers/reflected.py +29 -0
  198. fungeom/primitives/point2/resolvers/transformed.py +30 -0
  199. fungeom/primitives/point2/resolvers/translated.py +30 -0
  200. fungeom/primitives/point2/value.py +70 -0
  201. fungeom/primitives/point3/__init__.py +4 -0
  202. fungeom/primitives/point3/decidability.py +15 -0
  203. fungeom/primitives/point3/resolvers/__init__.py +1 -0
  204. fungeom/primitives/point3/resolvers/affine.py +60 -0
  205. fungeom/primitives/point3/resolvers/base.py +137 -0
  206. fungeom/primitives/point3/resolvers/centroid.py +33 -0
  207. fungeom/primitives/point3/resolvers/displacement.py +37 -0
  208. fungeom/primitives/point3/resolvers/framed.py +37 -0
  209. fungeom/primitives/point3/resolvers/lerp.py +34 -0
  210. fungeom/primitives/point3/resolvers/located.py +25 -0
  211. fungeom/primitives/point3/resolvers/reflected.py +33 -0
  212. fungeom/primitives/point3/resolvers/transformed.py +34 -0
  213. fungeom/primitives/point3/resolvers/translated.py +30 -0
  214. fungeom/primitives/point3/value.py +70 -0
  215. fungeom/primitives/ray/__init__.py +6 -0
  216. fungeom/primitives/ray/decidability.py +15 -0
  217. fungeom/primitives/ray/resolvers/__init__.py +1 -0
  218. fungeom/primitives/ray/resolvers/base.py +100 -0
  219. fungeom/primitives/ray/resolvers/direction.py +26 -0
  220. fungeom/primitives/ray/resolvers/distance_to.py +29 -0
  221. fungeom/primitives/ray/resolvers/from_to.py +31 -0
  222. fungeom/primitives/ray/resolvers/intersect.py +45 -0
  223. fungeom/primitives/ray/resolvers/origin.py +27 -0
  224. fungeom/primitives/ray/resolvers/point_at.py +30 -0
  225. fungeom/primitives/ray/resolvers/project.py +30 -0
  226. fungeom/primitives/ray/resolvers/reversed.py +24 -0
  227. fungeom/primitives/ray/resolvers/through.py +30 -0
  228. fungeom/primitives/ray/value.py +74 -0
  229. fungeom/primitives/ray2/__init__.py +6 -0
  230. fungeom/primitives/ray2/decidability.py +15 -0
  231. fungeom/primitives/ray2/resolvers/__init__.py +1 -0
  232. fungeom/primitives/ray2/resolvers/base.py +91 -0
  233. fungeom/primitives/ray2/resolvers/direction.py +26 -0
  234. fungeom/primitives/ray2/resolvers/distance_to.py +29 -0
  235. fungeom/primitives/ray2/resolvers/from_to.py +31 -0
  236. fungeom/primitives/ray2/resolvers/intersect.py +45 -0
  237. fungeom/primitives/ray2/resolvers/origin.py +27 -0
  238. fungeom/primitives/ray2/resolvers/point_at.py +30 -0
  239. fungeom/primitives/ray2/resolvers/project.py +30 -0
  240. fungeom/primitives/ray2/resolvers/reversed.py +24 -0
  241. fungeom/primitives/ray2/resolvers/through.py +30 -0
  242. fungeom/primitives/ray2/value.py +72 -0
  243. fungeom/primitives/region2/__init__.py +10 -0
  244. fungeom/primitives/region2/decidability.py +15 -0
  245. fungeom/primitives/region2/resolvers/__init__.py +1 -0
  246. fungeom/primitives/region2/resolvers/area.py +25 -0
  247. fungeom/primitives/region2/resolvers/base.py +219 -0
  248. fungeom/primitives/region2/resolvers/boolean.py +73 -0
  249. fungeom/primitives/region2/resolvers/bounds.py +36 -0
  250. fungeom/primitives/region2/resolvers/centroid.py +29 -0
  251. fungeom/primitives/region2/resolvers/closest_point.py +41 -0
  252. fungeom/primitives/region2/resolvers/contains.py +29 -0
  253. fungeom/primitives/region2/resolvers/disc.py +35 -0
  254. fungeom/primitives/region2/resolvers/hull.py +58 -0
  255. fungeom/primitives/region2/resolvers/literal.py +20 -0
  256. fungeom/primitives/region2/resolvers/nearest_boundary.py +36 -0
  257. fungeom/primitives/region2/resolvers/offset.py +32 -0
  258. fungeom/primitives/region2/resolvers/perimeter.py +25 -0
  259. fungeom/primitives/region2/resolvers/polygon.py +43 -0
  260. fungeom/primitives/region2/resolvers/predicates.py +53 -0
  261. fungeom/primitives/region2/resolvers/rectangle.py +36 -0
  262. fungeom/primitives/region2/resolvers/sample.py +43 -0
  263. fungeom/primitives/region2/resolvers/signed_distance.py +36 -0
  264. fungeom/primitives/region2/resolvers/transformed.py +35 -0
  265. fungeom/primitives/region2/resolvers/vertices.py +33 -0
  266. fungeom/primitives/region2/shapely_bridge.py +55 -0
  267. fungeom/primitives/region2/value.py +232 -0
  268. fungeom/primitives/roster/__init__.py +10 -0
  269. fungeom/primitives/roster/decidability.py +15 -0
  270. fungeom/primitives/roster/resolvers/__init__.py +1 -0
  271. fungeom/primitives/roster/resolvers/base.py +78 -0
  272. fungeom/primitives/roster/resolvers/contains.py +32 -0
  273. fungeom/primitives/roster/resolvers/count.py +29 -0
  274. fungeom/primitives/roster/resolvers/difference.py +27 -0
  275. fungeom/primitives/roster/resolvers/intersection.py +27 -0
  276. fungeom/primitives/roster/resolvers/literal.py +25 -0
  277. fungeom/primitives/roster/resolvers/union.py +27 -0
  278. fungeom/primitives/roster/value.py +71 -0
  279. fungeom/primitives/rostermap/__init__.py +6 -0
  280. fungeom/primitives/rostermap/decidability.py +15 -0
  281. fungeom/primitives/rostermap/resolvers/__init__.py +1 -0
  282. fungeom/primitives/rostermap/resolvers/base.py +100 -0
  283. fungeom/primitives/rostermap/resolvers/composed.py +31 -0
  284. fungeom/primitives/rostermap/resolvers/identity.py +26 -0
  285. fungeom/primitives/rostermap/resolvers/inverse.py +30 -0
  286. fungeom/primitives/rostermap/resolvers/literal.py +25 -0
  287. fungeom/primitives/rostermap/resolvers/maps.py +27 -0
  288. fungeom/primitives/rostermap/resolvers/source.py +26 -0
  289. fungeom/primitives/rostermap/resolvers/target.py +26 -0
  290. fungeom/primitives/rostermap/value.py +71 -0
  291. fungeom/primitives/sampling/__init__.py +6 -0
  292. fungeom/primitives/sampling/decidability.py +15 -0
  293. fungeom/primitives/sampling/resolvers/__init__.py +1 -0
  294. fungeom/primitives/sampling/resolvers/base.py +66 -0
  295. fungeom/primitives/sampling/resolvers/count.py +25 -0
  296. fungeom/primitives/sampling/resolvers/explicit.py +28 -0
  297. fungeom/primitives/sampling/resolvers/rate.py +33 -0
  298. fungeom/primitives/sampling/resolvers/span.py +26 -0
  299. fungeom/primitives/sampling/resolvers/uniform.py +43 -0
  300. fungeom/primitives/sampling/value.py +65 -0
  301. fungeom/primitives/scalar/__init__.py +3 -0
  302. fungeom/primitives/scalar/decidability.py +14 -0
  303. fungeom/primitives/scalar/resolvers/__init__.py +1 -0
  304. fungeom/primitives/scalar/resolvers/absolute.py +22 -0
  305. fungeom/primitives/scalar/resolvers/base.py +181 -0
  306. fungeom/primitives/scalar/resolvers/ceil.py +23 -0
  307. fungeom/primitives/scalar/resolvers/clamp.py +31 -0
  308. fungeom/primitives/scalar/resolvers/floor.py +23 -0
  309. fungeom/primitives/scalar/resolvers/literal.py +34 -0
  310. fungeom/primitives/scalar/resolvers/maximum.py +27 -0
  311. fungeom/primitives/scalar/resolvers/minimum.py +27 -0
  312. fungeom/primitives/scalar/resolvers/modulo.py +33 -0
  313. fungeom/primitives/scalar/resolvers/power.py +37 -0
  314. fungeom/primitives/scalar/resolvers/product.py +27 -0
  315. fungeom/primitives/scalar/resolvers/quotient.py +34 -0
  316. fungeom/primitives/scalar/resolvers/round.py +22 -0
  317. fungeom/primitives/scalar/resolvers/sign.py +23 -0
  318. fungeom/primitives/scalar/resolvers/sqrt.py +25 -0
  319. fungeom/primitives/scalar/resolvers/sum.py +27 -0
  320. fungeom/primitives/scalar/value.py +15 -0
  321. fungeom/primitives/segment/__init__.py +6 -0
  322. fungeom/primitives/segment/decidability.py +15 -0
  323. fungeom/primitives/segment/resolvers/__init__.py +1 -0
  324. fungeom/primitives/segment/resolvers/at.py +30 -0
  325. fungeom/primitives/segment/resolvers/base.py +106 -0
  326. fungeom/primitives/segment/resolvers/between.py +29 -0
  327. fungeom/primitives/segment/resolvers/direction.py +28 -0
  328. fungeom/primitives/segment/resolvers/distance_to.py +29 -0
  329. fungeom/primitives/segment/resolvers/endpoints.py +42 -0
  330. fungeom/primitives/segment/resolvers/length.py +25 -0
  331. fungeom/primitives/segment/resolvers/midpoint.py +27 -0
  332. fungeom/primitives/segment/resolvers/parameter_of.py +29 -0
  333. fungeom/primitives/segment/resolvers/project.py +30 -0
  334. fungeom/primitives/segment/resolvers/reversed.py +25 -0
  335. fungeom/primitives/segment/value.py +80 -0
  336. fungeom/primitives/segment2/__init__.py +6 -0
  337. fungeom/primitives/segment2/decidability.py +15 -0
  338. fungeom/primitives/segment2/resolvers/__init__.py +1 -0
  339. fungeom/primitives/segment2/resolvers/at.py +30 -0
  340. fungeom/primitives/segment2/resolvers/base.py +98 -0
  341. fungeom/primitives/segment2/resolvers/between.py +29 -0
  342. fungeom/primitives/segment2/resolvers/direction.py +28 -0
  343. fungeom/primitives/segment2/resolvers/distance_to.py +29 -0
  344. fungeom/primitives/segment2/resolvers/endpoints.py +42 -0
  345. fungeom/primitives/segment2/resolvers/length.py +25 -0
  346. fungeom/primitives/segment2/resolvers/midpoint.py +27 -0
  347. fungeom/primitives/segment2/resolvers/parameter_of.py +29 -0
  348. fungeom/primitives/segment2/resolvers/project.py +30 -0
  349. fungeom/primitives/segment2/resolvers/reversed.py +25 -0
  350. fungeom/primitives/segment2/value.py +79 -0
  351. fungeom/primitives/signals/__init__.py +43 -0
  352. fungeom/primitives/signals/blend.py +35 -0
  353. fungeom/primitives/signals/boolean.py +320 -0
  354. fungeom/primitives/signals/boundary.py +66 -0
  355. fungeom/primitives/signals/bundle.py +955 -0
  356. fungeom/primitives/signals/direction3.py +268 -0
  357. fungeom/primitives/signals/interpolation.py +92 -0
  358. fungeom/primitives/signals/plane.py +243 -0
  359. fungeom/primitives/signals/point3.py +312 -0
  360. fungeom/primitives/signals/scalar.py +481 -0
  361. fungeom/primitives/signals/series.py +553 -0
  362. fungeom/primitives/signals/transform.py +266 -0
  363. fungeom/primitives/signals/vec3.py +300 -0
  364. fungeom/primitives/timeline/__init__.py +8 -0
  365. fungeom/primitives/timeline/decidability.py +15 -0
  366. fungeom/primitives/timeline/resolvers/__init__.py +1 -0
  367. fungeom/primitives/timeline/resolvers/base.py +93 -0
  368. fungeom/primitives/timeline/resolvers/derived.py +33 -0
  369. fungeom/primitives/timeline/resolvers/grounded.py +40 -0
  370. fungeom/primitives/timeline/resolvers/known.py +25 -0
  371. fungeom/primitives/timeline/resolvers/relative.py +42 -0
  372. fungeom/primitives/timeline/resolvers/to_master.py +35 -0
  373. fungeom/primitives/timeline/value.py +81 -0
  374. fungeom/primitives/timemap/__init__.py +6 -0
  375. fungeom/primitives/timemap/decidability.py +15 -0
  376. fungeom/primitives/timemap/resolvers/__init__.py +1 -0
  377. fungeom/primitives/timemap/resolvers/affine.py +30 -0
  378. fungeom/primitives/timemap/resolvers/aligning.py +35 -0
  379. fungeom/primitives/timemap/resolvers/base.py +123 -0
  380. fungeom/primitives/timemap/resolvers/composed.py +27 -0
  381. fungeom/primitives/timemap/resolvers/inverse.py +30 -0
  382. fungeom/primitives/timemap/resolvers/literal.py +25 -0
  383. fungeom/primitives/timemap/resolvers/through.py +45 -0
  384. fungeom/primitives/timemap/value.py +57 -0
  385. fungeom/primitives/timewarp/__init__.py +6 -0
  386. fungeom/primitives/timewarp/decidability.py +15 -0
  387. fungeom/primitives/timewarp/resolvers/__init__.py +1 -0
  388. fungeom/primitives/timewarp/resolvers/base.py +75 -0
  389. fungeom/primitives/timewarp/resolvers/domain.py +32 -0
  390. fungeom/primitives/timewarp/resolvers/inverse.py +28 -0
  391. fungeom/primitives/timewarp/resolvers/through.py +36 -0
  392. fungeom/primitives/timewarp/value.py +54 -0
  393. fungeom/primitives/transform/__init__.py +4 -0
  394. fungeom/primitives/transform/decidability.py +15 -0
  395. fungeom/primitives/transform/resolvers/__init__.py +1 -0
  396. fungeom/primitives/transform/resolvers/aligning.py +44 -0
  397. fungeom/primitives/transform/resolvers/applied_direction.py +32 -0
  398. fungeom/primitives/transform/resolvers/applied_vector.py +31 -0
  399. fungeom/primitives/transform/resolvers/axis_angle.py +41 -0
  400. fungeom/primitives/transform/resolvers/base.py +149 -0
  401. fungeom/primitives/transform/resolvers/composed.py +27 -0
  402. fungeom/primitives/transform/resolvers/from_axes.py +53 -0
  403. fungeom/primitives/transform/resolvers/inverse.py +22 -0
  404. fungeom/primitives/transform/resolvers/literal.py +27 -0
  405. fungeom/primitives/transform/resolvers/look_at.py +57 -0
  406. fungeom/primitives/transform/resolvers/rotation_part.py +27 -0
  407. fungeom/primitives/transform/resolvers/slerp.py +44 -0
  408. fungeom/primitives/transform/resolvers/translation.py +29 -0
  409. fungeom/primitives/transform/resolvers/translation_part.py +23 -0
  410. fungeom/primitives/transform/value.py +130 -0
  411. fungeom/primitives/transform2/__init__.py +6 -0
  412. fungeom/primitives/transform2/decidability.py +15 -0
  413. fungeom/primitives/transform2/resolvers/__init__.py +1 -0
  414. fungeom/primitives/transform2/resolvers/angle.py +25 -0
  415. fungeom/primitives/transform2/resolvers/applied_direction.py +29 -0
  416. fungeom/primitives/transform2/resolvers/applied_vector.py +28 -0
  417. fungeom/primitives/transform2/resolvers/base.py +113 -0
  418. fungeom/primitives/transform2/resolvers/composed.py +27 -0
  419. fungeom/primitives/transform2/resolvers/inverse.py +24 -0
  420. fungeom/primitives/transform2/resolvers/literal.py +27 -0
  421. fungeom/primitives/transform2/resolvers/rotation.py +24 -0
  422. fungeom/primitives/transform2/resolvers/rotation_part.py +29 -0
  423. fungeom/primitives/transform2/resolvers/slerp.py +41 -0
  424. fungeom/primitives/transform2/resolvers/translation.py +24 -0
  425. fungeom/primitives/transform2/resolvers/translation_part.py +25 -0
  426. fungeom/primitives/transform2/value.py +129 -0
  427. fungeom/primitives/vec2/__init__.py +4 -0
  428. fungeom/primitives/vec2/decidability.py +15 -0
  429. fungeom/primitives/vec2/resolvers/__init__.py +1 -0
  430. fungeom/primitives/vec2/resolvers/angle.py +38 -0
  431. fungeom/primitives/vec2/resolvers/base.py +133 -0
  432. fungeom/primitives/vec2/resolvers/components.py +27 -0
  433. fungeom/primitives/vec2/resolvers/coordinate.py +24 -0
  434. fungeom/primitives/vec2/resolvers/dot.py +48 -0
  435. fungeom/primitives/vec2/resolvers/lerp.py +31 -0
  436. fungeom/primitives/vec2/resolvers/literal.py +31 -0
  437. fungeom/primitives/vec2/resolvers/norm.py +25 -0
  438. fungeom/primitives/vec2/resolvers/normalized.py +27 -0
  439. fungeom/primitives/vec2/resolvers/perpendicular.py +25 -0
  440. fungeom/primitives/vec2/resolvers/projected.py +59 -0
  441. fungeom/primitives/vec2/resolvers/resized.py +36 -0
  442. fungeom/primitives/vec2/resolvers/scaled.py +28 -0
  443. fungeom/primitives/vec2/resolvers/sum.py +27 -0
  444. fungeom/primitives/vec2/value.py +25 -0
  445. fungeom/primitives/vec3/__init__.py +4 -0
  446. fungeom/primitives/vec3/decidability.py +15 -0
  447. fungeom/primitives/vec3/resolvers/__init__.py +1 -0
  448. fungeom/primitives/vec3/resolvers/angle.py +38 -0
  449. fungeom/primitives/vec3/resolvers/base.py +143 -0
  450. fungeom/primitives/vec3/resolvers/components.py +33 -0
  451. fungeom/primitives/vec3/resolvers/coordinate.py +24 -0
  452. fungeom/primitives/vec3/resolvers/cross.py +30 -0
  453. fungeom/primitives/vec3/resolvers/dot.py +30 -0
  454. fungeom/primitives/vec3/resolvers/lerp.py +31 -0
  455. fungeom/primitives/vec3/resolvers/literal.py +31 -0
  456. fungeom/primitives/vec3/resolvers/norm.py +30 -0
  457. fungeom/primitives/vec3/resolvers/normalized.py +27 -0
  458. fungeom/primitives/vec3/resolvers/projected.py +59 -0
  459. fungeom/primitives/vec3/resolvers/resized.py +36 -0
  460. fungeom/primitives/vec3/resolvers/scalar_triple.py +33 -0
  461. fungeom/primitives/vec3/resolvers/scaled.py +28 -0
  462. fungeom/primitives/vec3/resolvers/sum.py +27 -0
  463. fungeom/primitives/vec3/value.py +30 -0
  464. fungeom/py.typed +0 -0
  465. fungeom/values.py +87 -0
  466. fungeom/viz.py +51 -0
  467. fungeom-0.1.0.dist-info/METADATA +168 -0
  468. fungeom-0.1.0.dist-info/RECORD +470 -0
  469. fungeom-0.1.0.dist-info/WHEEL +4 -0
  470. fungeom-0.1.0.dist-info/licenses/LICENSE +201 -0
fungeom/__init__.py ADDED
@@ -0,0 +1,215 @@
1
+ """fungeom — a functional geometry API.
2
+
3
+ Geometry is described as an immutable, lazily-evaluated graph of resolvers. Each
4
+ primitive is one class — ``Scalar``, ``Vec2``, ``Vec3``, ``Direction3``,
5
+ ``Transform``, ``Frame``, ``Point3`` — that you both construct from (classmethods
6
+ like ``Vec3.of`` / ``Point3.at``) and compose with (fluent methods like
7
+ ``a.midpoint(b)``). Build a graph, ``decide()`` whether it can be resolved, then
8
+ ``resolve()`` to get a concrete value (reachable as ``<Primitive>.Value``).
9
+
10
+ The decidability core (``Resolver``, ``Resolvable``, ``Unresolvable``,
11
+ ``gather``) is public; the concrete resolvers behind each facade are not.
12
+ """
13
+
14
+ from fungeom.core import (
15
+ Resolvability,
16
+ Resolvable,
17
+ Resolver,
18
+ Unresolvable,
19
+ UnresolvableError,
20
+ gather,
21
+ )
22
+ from fungeom.primitives import (
23
+ MASTER_CLOCK,
24
+ WORLD_FRAME,
25
+ WORLD_FRAME2,
26
+ AffineTimeMap,
27
+ Bool,
28
+ BoolSeries,
29
+ BoolSignal,
30
+ Boundary,
31
+ Clock,
32
+ CoordinateFrame,
33
+ CoordinateFrame2,
34
+ Direction3Signal,
35
+ Coverage,
36
+ CoverageValue,
37
+ Direction2,
38
+ Direction2Value,
39
+ Direction3,
40
+ Duration,
41
+ Frame,
42
+ Frame2,
43
+ Instant,
44
+ Interpolation,
45
+ Interval,
46
+ IntervalValue,
47
+ Line,
48
+ Line2,
49
+ Line2Value,
50
+ LineValue,
51
+ Mat3,
52
+ Mat4,
53
+ Plane,
54
+ PlaneValue,
55
+ Point2,
56
+ Point2Value,
57
+ Point3,
58
+ PlaneSignal,
59
+ Point3Signal,
60
+ Ray,
61
+ Ray2,
62
+ Ray2Value,
63
+ RayValue,
64
+ Face,
65
+ FaceValue,
66
+ Region2,
67
+ Region2Value,
68
+ Roster,
69
+ RosterValue,
70
+ RosterMap,
71
+ KeyCorrespondence,
72
+ Mat2,
73
+ RigidTransform,
74
+ RigidTransform2,
75
+ Segment,
76
+ Segment2,
77
+ Segment2Value,
78
+ SegmentValue,
79
+ Transform2,
80
+ SampledSeries,
81
+ Sampling,
82
+ SamplingValue,
83
+ Scalar,
84
+ ScalarSignal,
85
+ BoolBundle,
86
+ Bundle,
87
+ BundleValue,
88
+ Direction3Bundle,
89
+ PiecewiseLinearWarp,
90
+ Point2Bundle,
91
+ Point3Bundle,
92
+ Point3BundleSignal,
93
+ ScalarBundleSignal,
94
+ ScalarBundle,
95
+ TransformBundle,
96
+ TransformBundleSignal,
97
+ Vec3Bundle,
98
+ TimeMap,
99
+ TimeWarp,
100
+ Timeline,
101
+ Transform,
102
+ TransformSignal,
103
+ Vec2,
104
+ Vec3,
105
+ Vec3Signal,
106
+ )
107
+ from importlib.metadata import PackageNotFoundError
108
+ from importlib.metadata import version as _package_version
109
+
110
+ from fungeom.viz import render_tree, resolver_tree
111
+
112
+ try:
113
+ __version__ = _package_version("fungeom")
114
+ except PackageNotFoundError: # pragma: no cover - only hit running from an uninstalled source tree
115
+ __version__ = "0.0.0+unknown"
116
+
117
+ __all__ = [
118
+ "__version__",
119
+ # primitives (facades)
120
+ "Bool",
121
+ "Scalar",
122
+ "Vec2",
123
+ "Vec3",
124
+ "Direction2",
125
+ "Direction3",
126
+ "Transform",
127
+ "Transform2",
128
+ "Frame",
129
+ "Frame2",
130
+ "Point2",
131
+ "Point3",
132
+ "Plane",
133
+ "Region2",
134
+ "Face",
135
+ "Line",
136
+ "Line2",
137
+ "Ray",
138
+ "Ray2",
139
+ "Segment",
140
+ "Segment2",
141
+ # temporal
142
+ "Duration",
143
+ "Instant",
144
+ "Interval",
145
+ "Coverage",
146
+ "TimeMap",
147
+ "TimeWarp",
148
+ "Timeline",
149
+ "Sampling",
150
+ "Bundle",
151
+ "ScalarBundle",
152
+ "Vec3Bundle",
153
+ "Direction3Bundle",
154
+ "BoolBundle",
155
+ "TransformBundle",
156
+ "Point2Bundle",
157
+ "Point3Bundle",
158
+ "PlaneSignal",
159
+ "Point3BundleSignal",
160
+ "ScalarBundleSignal",
161
+ "TransformBundleSignal",
162
+ "BoolSignal",
163
+ "Roster",
164
+ "RosterMap",
165
+ "Interpolation",
166
+ "Boundary",
167
+ "ScalarSignal",
168
+ "Vec3Signal",
169
+ "Direction3Signal",
170
+ "TransformSignal",
171
+ "Point3Signal",
172
+ # commonly-used value types
173
+ "RigidTransform",
174
+ "RigidTransform2",
175
+ "Mat2",
176
+ "Point2Value",
177
+ "Region2Value",
178
+ "FaceValue",
179
+ "PlaneValue",
180
+ "LineValue",
181
+ "Line2Value",
182
+ "RayValue",
183
+ "Ray2Value",
184
+ "SegmentValue",
185
+ "Segment2Value",
186
+ "Direction2Value",
187
+ "CoordinateFrame",
188
+ "WORLD_FRAME",
189
+ "CoordinateFrame2",
190
+ "WORLD_FRAME2",
191
+ "IntervalValue",
192
+ "CoverageValue",
193
+ "AffineTimeMap",
194
+ "PiecewiseLinearWarp",
195
+ "BundleValue",
196
+ "RosterValue",
197
+ "KeyCorrespondence",
198
+ "Clock",
199
+ "MASTER_CLOCK",
200
+ "SamplingValue",
201
+ "BoolSeries",
202
+ "SampledSeries",
203
+ "Mat3",
204
+ "Mat4",
205
+ # decidability core
206
+ "Resolver",
207
+ "Resolvability",
208
+ "Resolvable",
209
+ "Unresolvable",
210
+ "UnresolvableError",
211
+ "gather",
212
+ # visualization
213
+ "resolver_tree",
214
+ "render_tree",
215
+ ]
@@ -0,0 +1,22 @@
1
+ from .arrays import ArrayLike, freeze
2
+ from .resolvability import (
3
+ Resolvability,
4
+ Resolvable,
5
+ Unresolvable,
6
+ UnresolvableError,
7
+ gather,
8
+ )
9
+ from .resolver import Resolver
10
+
11
+ __all__ = [
12
+ # resolver / resolvability
13
+ "Resolver",
14
+ "Resolvability",
15
+ "Resolvable",
16
+ "Unresolvable",
17
+ "UnresolvableError",
18
+ "gather",
19
+ # arrays
20
+ "ArrayLike",
21
+ "freeze",
22
+ ]
fungeom/core/arrays.py ADDED
@@ -0,0 +1,25 @@
1
+ """Generic numpy helpers shared across primitives.
2
+
3
+ These have no geometric meaning of their own — they are the small,
4
+ primitive-agnostic array utilities that the value types lean on. Keeping them in
5
+ ``core`` lets every primitive (vectors, transforms, points) depend on them
6
+ without any of them depending on each other.
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ from typing import Any
12
+
13
+ import numpy.typing as npt
14
+
15
+ type ArrayLike = npt.ArrayLike
16
+ """Anything coercible into an array: a numpy array, a list, a tuple of numbers."""
17
+
18
+
19
+ def freeze(arr: npt.NDArray[Any]) -> None:
20
+ """Mark a numpy array read-only, in place.
21
+
22
+ Used by the frozen value dataclasses so that an immutable value object cannot
23
+ have its backing buffer mutated out from under it.
24
+ """
25
+ arr.setflags(write=False)
@@ -0,0 +1,74 @@
1
+ """Resolvability: evidence about whether a resolver can be resolved.
2
+
3
+ Deciding whether a :class:`~fungeom.core.resolver.Resolver` can produce a
4
+ value is itself a computation over its graph. Rather than collapse that into a
5
+ bare ``bool`` (which would throw away *why* something cannot be resolved), the
6
+ decision is reified as a small sum type:
7
+
8
+ * :class:`Resolvable` — proof that resolution succeeds, carrying the value it
9
+ computed along the way (so a later ``resolve()`` is free).
10
+ * :class:`Unresolvable` — proof that it does not, carrying a human-readable
11
+ reason.
12
+
13
+ ``Resolvability[T] = Resolvable[T] | Unresolvable`` is what ``Resolver.decide()``
14
+ returns. :class:`Unresolvable` is deliberately *not* generic: a failure carries
15
+ only a reason, so the same value can flow out of a ``Vec3`` decision and into a
16
+ ``Point3`` one without rewrapping. Because the decision is an ordinary value, you
17
+ can pass it around, ``match`` on it, or require :class:`Resolvable` in a function
18
+ signature to demand a *proven-resolvable* input at type-check time.
19
+ """
20
+
21
+ from __future__ import annotations
22
+
23
+ from collections.abc import Iterable
24
+ from dataclasses import dataclass
25
+ from typing import ClassVar, NoReturn
26
+
27
+
28
+ class UnresolvableError(Exception):
29
+ """Raised when something that cannot be resolved is asked to resolve."""
30
+
31
+
32
+ @dataclass(frozen=True)
33
+ class Resolvable[T]:
34
+ """Evidence that a resolver resolves, carrying the computed value."""
35
+
36
+ value: T
37
+
38
+ ok: ClassVar[bool] = True
39
+
40
+ def unwrap(self) -> T:
41
+ """Return the resolved value."""
42
+ return self.value
43
+
44
+
45
+ @dataclass(frozen=True)
46
+ class Unresolvable:
47
+ """Evidence that a resolver does not resolve, and why."""
48
+
49
+ reason: str
50
+
51
+ ok: ClassVar[bool] = False
52
+
53
+ def unwrap(self) -> NoReturn:
54
+ """Raise :class:`UnresolvableError` with the captured reason."""
55
+ raise UnresolvableError(self.reason)
56
+
57
+
58
+ type Resolvability[T] = Resolvable[T] | Unresolvable
59
+ """The result of :meth:`~fungeom.core.resolver.Resolver.decide`."""
60
+
61
+
62
+ def gather[T](decisions: Iterable[Resolvability[T]]) -> Resolvability[list[T]]:
63
+ """Collect many decisions into one.
64
+
65
+ Returns :class:`Resolvable` with every value once they all succeed, or the
66
+ first :class:`Unresolvable` encountered. This is the ``traverse`` that makes
67
+ N-ary combinators (a centroid, a polyline, ...) short and uniform.
68
+ """
69
+ values: list[T] = []
70
+ for decision in decisions:
71
+ if isinstance(decision, Unresolvable):
72
+ return decision
73
+ values.append(decision.value)
74
+ return Resolvable(values)
@@ -0,0 +1,85 @@
1
+ """The ``Resolver`` abstraction: the spine of the functional API.
2
+
3
+ A ``Resolver[T]`` is a *deferred* description of a value of type ``T``. Nothing
4
+ is computed when you build one; the value is produced only when you resolve it.
5
+ Because resolvers are immutable, every transformation (``translate``,
6
+ ``reframe``, ...) returns a *new* resolver rather than mutating the existing one.
7
+ Chains of resolvers therefore form a directed acyclic graph (a lazy expression
8
+ tree) that is evaluated on demand.
9
+
10
+ The single primitive every concrete resolver implements is :meth:`_decide`, which
11
+ *proves* whether the resolver can be resolved (returning the value on success or
12
+ a reason on failure). The public :meth:`decide` memoizes it; ``resolve()`` and
13
+ ``is_resolvable`` are derived from :meth:`decide`, so deciding and resolving can
14
+ never disagree, and a shared sub-graph is decided at most once.
15
+ """
16
+
17
+ from __future__ import annotations
18
+
19
+ from abc import ABC, abstractmethod
20
+ from typing import Any
21
+
22
+ from fungeom.core.resolvability import Resolvability
23
+
24
+
25
+ class Resolver[T](ABC):
26
+ """A generic object that can be resolved to a value of type ``T``.
27
+
28
+ Subclasses describe *how* to produce a ``T`` and implement :meth:`_decide`.
29
+ Resolvers are expected to be immutable value objects so that the expression
30
+ graph they form is safe to share and cache.
31
+ """
32
+
33
+ @abstractmethod
34
+ def _decide(self) -> Resolvability[T]:
35
+ """Compute this resolver's decision. Implemented by each concrete resolver.
36
+
37
+ Returns :class:`~fungeom.core.resolvability.Resolvable` carrying
38
+ the computed value, or
39
+ :class:`~fungeom.core.resolvability.Unresolvable` carrying the
40
+ reason it cannot be resolved. Call :meth:`decide` (which memoizes this).
41
+ """
42
+
43
+ def decide(self) -> Resolvability[T]:
44
+ """Prove whether this resolver can be resolved (memoized).
45
+
46
+ The result is cached on the (immutable) resolver, so deciding it again —
47
+ or deciding a graph that reuses it as a sub-expression — is free.
48
+ """
49
+ cached: Resolvability[T] | None = getattr(self, "_decision", None)
50
+ if cached is None:
51
+ cached = self._decide()
52
+ object.__setattr__(self, "_decision", cached)
53
+ return cached
54
+
55
+ def resolve(self) -> T:
56
+ """Resolve to a concrete value, or raise ``UnresolvableError``.
57
+
58
+ This is total only when you already hold proof of resolvability (e.g.
59
+ the value returned by :meth:`decide` matched as ``Resolvable``).
60
+ """
61
+ return self.decide().unwrap()
62
+
63
+ @property
64
+ def is_resolvable(self) -> bool:
65
+ """Whether :meth:`resolve` would succeed."""
66
+ return self.decide().ok
67
+
68
+ def children(self) -> list[Resolver[Any]]:
69
+ """The immediate sub-resolvers this one is built from.
70
+
71
+ Found by inspecting dataclass fields (including those holding a tuple or
72
+ list of resolvers), so combinators expose their structure for free —
73
+ enough to walk or visualize the lazy graph.
74
+ """
75
+ field_names: dict[str, Any] | None = getattr(self, "__dataclass_fields__", None)
76
+ if not field_names:
77
+ return []
78
+ found: list[Resolver[Any]] = []
79
+ for name in field_names:
80
+ value = getattr(self, name)
81
+ if isinstance(value, Resolver):
82
+ found.append(value)
83
+ elif isinstance(value, (tuple, list)):
84
+ found.extend(item for item in value if isinstance(item, Resolver))
85
+ return found
@@ -0,0 +1,164 @@
1
+ """Geometric primitives, each a submodule with the same shape.
2
+
3
+ Every primitive is one **facade class** (the resolver) with classmethod
4
+ constructors and fluent combinators; its resolved value is reachable as
5
+ ``<Primitive>.Value``. Concrete resolvers live behind the facade (one file each
6
+ under ``<primitive>/resolvers/``) and are not part of the public surface.
7
+
8
+ Submodules: ``boolean``, ``scalar``, ``vec2``, ``vec3``, ``direction3``, ``transform``,
9
+ ``frame``, ``point3``, plus the temporal ``duration`` / ``instant`` / ``interval``
10
+ / ``coverage`` / ``timemap`` / ``timeline`` / ``sampling`` and the ``signals``
11
+ package (scalar / vec3 / direction3 / transform / point3, over one generic core).
12
+ """
13
+
14
+ from fungeom.primitives.boolean import Bool
15
+ from fungeom.primitives.coverage import Coverage, CoverageValue
16
+ from fungeom.primitives.direction2 import Direction2, Direction2Value
17
+ from fungeom.primitives.direction3 import Direction3, Direction3Value
18
+ from fungeom.primitives.duration import Duration
19
+ from fungeom.primitives.frame import WORLD_FRAME, CoordinateFrame, Frame
20
+ from fungeom.primitives.frame2 import WORLD_FRAME2, CoordinateFrame2, Frame2
21
+ from fungeom.primitives.instant import Instant
22
+ from fungeom.primitives.interval import Interval, IntervalValue
23
+ from fungeom.primitives.line import Line, LineValue
24
+ from fungeom.primitives.line2 import Line2, Line2Value
25
+ from fungeom.primitives.plane import Plane, PlaneValue
26
+ from fungeom.primitives.point2 import Point2, Point2Value
27
+ from fungeom.primitives.point3 import Point3, Point3Value
28
+ from fungeom.primitives.ray import Ray, RayValue
29
+ from fungeom.primitives.ray2 import Ray2, Ray2Value
30
+ from fungeom.primitives.roster import Roster, RosterValue
31
+ from fungeom.primitives.rostermap import KeyCorrespondence, RosterMap
32
+ from fungeom.primitives.sampling import Sampling, SamplingValue
33
+ from fungeom.primitives.segment import Segment, SegmentValue
34
+ from fungeom.primitives.segment2 import Segment2, Segment2Value
35
+ from fungeom.primitives.scalar import Scalar
36
+ from fungeom.primitives.signals import (
37
+ BoolSignal,
38
+ Boundary,
39
+ Direction3Signal,
40
+ Interpolation,
41
+ PlaneSignal,
42
+ Point3BundleSignal,
43
+ ScalarBundleSignal,
44
+ Point3Signal,
45
+ BoolSeries,
46
+ SampledSeries,
47
+ ScalarSignal,
48
+ TransformBundleSignal,
49
+ TransformSignal,
50
+ Vec3Signal,
51
+ )
52
+ from fungeom.primitives.timeline import MASTER_CLOCK, Clock, Timeline
53
+ from fungeom.primitives.bundle import (
54
+ BoolBundle,
55
+ Bundle,
56
+ BundleValue,
57
+ Direction3Bundle,
58
+ Point2Bundle,
59
+ Point3Bundle,
60
+ ScalarBundle,
61
+ TransformBundle,
62
+ Vec3Bundle,
63
+ )
64
+ from fungeom.primitives.region2 import Region2, Region2Value
65
+ from fungeom.primitives.face import Face, FaceValue
66
+ from fungeom.primitives.timemap import AffineTimeMap, TimeMap
67
+ from fungeom.primitives.timewarp import PiecewiseLinearWarp, TimeWarp
68
+ from fungeom.primitives.transform import Mat3, Mat4, RigidTransform, Transform
69
+ from fungeom.primitives.transform2 import Mat2, RigidTransform2, Transform2
70
+ from fungeom.primitives.vec2 import Float2, Vec2
71
+ from fungeom.primitives.vec3 import Float3, Vec3
72
+
73
+ __all__ = [
74
+ # facades
75
+ "Bool",
76
+ "Scalar",
77
+ "Vec2",
78
+ "Vec3",
79
+ "Direction2",
80
+ "Direction3",
81
+ "Transform",
82
+ "Transform2",
83
+ "Frame",
84
+ "Frame2",
85
+ "Point2",
86
+ "Point3",
87
+ "Plane",
88
+ "Region2",
89
+ "Face",
90
+ "Line",
91
+ "Line2",
92
+ "Ray",
93
+ "Ray2",
94
+ "Segment",
95
+ "Segment2",
96
+ # temporal
97
+ "Duration",
98
+ "Instant",
99
+ "Interval",
100
+ "Coverage",
101
+ "TimeMap",
102
+ "TimeWarp",
103
+ "Timeline",
104
+ "Sampling",
105
+ "Bundle",
106
+ "BoolBundle",
107
+ "ScalarBundle",
108
+ "Vec3Bundle",
109
+ "Direction3Bundle",
110
+ "TransformBundle",
111
+ "Point2Bundle",
112
+ "Point3Bundle",
113
+ "PlaneSignal",
114
+ "Point3BundleSignal",
115
+ "ScalarBundleSignal",
116
+ "TransformBundleSignal",
117
+ "BoolSignal",
118
+ "Roster",
119
+ "RosterMap",
120
+ "Interpolation",
121
+ "Boundary",
122
+ "ScalarSignal",
123
+ "Vec3Signal",
124
+ "Direction3Signal",
125
+ "TransformSignal",
126
+ "Point3Signal",
127
+ # value types
128
+ "IntervalValue",
129
+ "CoverageValue",
130
+ "AffineTimeMap",
131
+ "PiecewiseLinearWarp",
132
+ "Clock",
133
+ "MASTER_CLOCK",
134
+ "SamplingValue",
135
+ "BoolSeries",
136
+ "SampledSeries",
137
+ "BundleValue",
138
+ "RosterValue",
139
+ "KeyCorrespondence",
140
+ "Float2",
141
+ "Float3",
142
+ "Mat2",
143
+ "Mat3",
144
+ "Mat4",
145
+ "RigidTransform",
146
+ "RigidTransform2",
147
+ "CoordinateFrame",
148
+ "WORLD_FRAME",
149
+ "CoordinateFrame2",
150
+ "WORLD_FRAME2",
151
+ "Point2Value",
152
+ "Region2Value",
153
+ "FaceValue",
154
+ "Point3Value",
155
+ "PlaneValue",
156
+ "LineValue",
157
+ "Line2Value",
158
+ "RayValue",
159
+ "Ray2Value",
160
+ "SegmentValue",
161
+ "Segment2Value",
162
+ "Direction2Value",
163
+ "Direction3Value",
164
+ ]
@@ -0,0 +1,8 @@
1
+ from fungeom.primitives.boolean.resolvers.base import Bool
2
+ from fungeom.primitives.boolean.resolvers.literal import LiteralBool
3
+
4
+ # The truth-value constants, as resolvers (see ``Bool.true`` / ``Bool.false``).
5
+ Bool.true = LiteralBool(value=True)
6
+ Bool.false = LiteralBool(value=False)
7
+
8
+ __all__ = ["Bool"]
@@ -0,0 +1,14 @@
1
+ """Resolvability aliases for booleans."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from fungeom.core.resolvability import Resolvability, Resolvable, Unresolvable
6
+
7
+ type BoolResolvable = Resolvable[bool]
8
+ """A boolean decision that succeeded — carries the truth value."""
9
+
10
+ type BoolUnresolvable = Unresolvable
11
+ """A boolean decision that failed — carries the reason (e.g. an unresolvable operand)."""
12
+
13
+ type BoolDecision = Resolvability[bool]
14
+ """The result of deciding a ``Bool``."""
File without changes